M3推理
m3inference的Python项目详细描述
m3推断
这是m3的pytorch实现(多模式、多语言,以及多属性)系统,如WebConf(www)2019年论文中所述。
快速链接
关于
m3是一个用于人口推断的深度学习系统,它是在大量twitter数据集上训练的。它具有三个主要属性:
多模
- m3同时接受视觉和文本输入。特别地,输入可以包含概要图像、名称(例如,以自然语言的名字和姓氏的形式)、屏幕名称和简短的自我描述文本,例如twitter传记。
多语言
- M3在欧洲使用32种主要语言。它们是
['en'、'cs'、'fr'、'nl'、'ar'、'ro'、'bs'、'da'、'it'、'pt'、'no'、'es'、'hr'、'tr'、'de'、'fi'、'el'、'he'、'ru'、'bg'、'hu'、'sk'、'et'、'pl'、'lv'、'sl'、'lt'、'ga'、''un']
中的
- M3在欧洲使用32种主要语言。它们是
多属性
- 由于多任务学习,该模型可以同时预测三个人口统计属性(性别、年龄、人类与组织状态)。
安装
tl;dr
pip安装m3inference
- 如果安装
torch
时出错,您可以使用conda
安装它(请参见此处的)。或者,您可以创建conda环境-请参阅下面的说明。
手动安装
带PIP
必须准备好python>;=3.6
和pip
才能使用。然后您可以:
- 安装依赖项包:
pip install-r requirements.txt
- 安装软件包
python setup.py install
作为conda环境
- 只需运行conda env create-f env conda.yml,就应该有一个"m3env"环境,您可以使用
conda activate m3env
进入该环境。从里面运行其他所有内容。 - 安装软件包
python setup.py install
如何使用
使用m3
conda activate m3env
进入该环境。从里面运行其他所有内容。python setup.py install
m3接受包含json(dict)对象列表(或包含数据本身的python对象)的jsonljsonl
文件的输入,并输出三个属性的预测。
带测试的演示
目录:
克隆此软件包(
git clone https://github.com/zijwang/m3inference.git
)并按照手动安装安装软件包。对图像进行预处理,使其大小调整为正确的形状。要执行此操作,请在同一个(根)目录下运行
python scripts/preprocess.py --source_dir test/pic/ --output_dir test/pic_resized/ --jsonl_path test/data.jsonl --jsonl_outpath test/data_resized.jsonl --verbose
您还可以运行
python scripts/preprocess.py--help
查看详细的用法。此外,有关图像的详细信息,请参见faq。在python中,运行:
from m3inference import M3Inference
import pprint
m3 = M3Inference() # see docstring for details
pred = m3.infer('./test/data_resized.jsonl') # also see docstring for details
pprint.pprint(pred)
您应该看到如下结果:
OrderedDict([('720389270335135745',
{'age': {'19-29': 0.1546,
'30-39': 0.114,
'<=18': 0.0481,
'>=40': 0.6833},
'gender': {'female': 0.0066, 'male': 0.9934},
'org': {'is-org': 0.7508, 'non-org': 0.2492}}),
('21447363',
{'age': {'19-29': 0.0157,
'30-39': 0.9837,
'<=18': 0.0004,
'>=40': 0.0002},
'gender': {'female': 0.9866, 'male': 0.0134},
'org': {'is-org': 0.0002, 'non-org': 0.9998}}),
...
...
输入文件的每个条目(/test/data.jsonl
)都应具有以下键:id
,name
,screen\u name
,description
,lang
,img\u path> >
- 前四个键可以直接从twitter json条目中提取。
- 对于
lang
,即使官方的twitter json条目包含此字段,我们建议尝试使用我们的cld2包装方法(from m3inference import get\u lang
)从用户的传记/描述或用户的推文中获取语言。如果你从其他来源知道基本事实,你也可以硬编码这种语言。 - 图片应该以400x400像素的图片从twitter下载,并使用上面的预处理代码将大小调整为224x224像素。
输出文件是一个dict,其中id
s是键,预测是嵌套值。这些值表示该类别的概率([0,1]
)。
对于其他模型设置(例如输出格式、GPU设置、批处理大小等),请使用文件test/data.jsonl
作为示例输入文件,并查看docstrings fom3inference
初始化和推断方法以获得详细利用。
使用m3 twitter包装器
现有的json twitter数据
如果您有一个代表用户的twitter json对象,但没有准备好图像,那么可以使用我们的m3twitter
类来:
- 下载并调整图像大小
- 在传记文本上使用cld2添加检测到的语言
- 将json转换为m3所需的输入结构。
from m3inference import M3Twitter
import pprint
m3twitter=M3Twitter(cache_dir="twitter_cache") #Change the cache_dir parameter to control where profile images are downloaded
m3twitter.transform_jsonl(input_file="test/twitter_cache/example_tweets.jsonl",output_file="test/twitter_cache/m3_input.jsonl")
pprint.pprint(m3twitter.infer("test/twitter_cache/m3_input.jsonl")) #Same method as M3Inference.infer(...)
如果您已经在本地有图像,请包含image_path_key
参数,并将其设置为json对象中包含本地图像路径的键。类似地,如果检测到语言,则可以使用lang_键
参数。示例见test/test_transform_jsonl.py
只有一个屏幕名称或数字标识
您还可以直接为twitter屏幕名或数字id运行twitter包装器。
常见问题
如果我只有一个twitter用户名或id怎么办?
您可以使用m3twitter类从twitter网站获取所有需要的配置文件信息(和图像)。请注意,此函数只能用于少量的屏幕名称或数字标识。如果您有一个大的列表,请使用twitter api获取所需的信息(除了配置文件照片之外,可以使用上面描述的.transform\u jsonl(…)
方法单独下载这些信息)。
import pprint
from m3inference import M3Twitter
m3twitter=M3Twitter()
pprint.pprint(m3twitter.infer_id("2631881902"))
.infer\u screen\u name(…)
方法对twitter屏幕名的作用相同。所有结果都存储/缓存在"~/m3/cache/"中。可以在m3twitter构造函数中更改此目录,您可以通过在上设置
或skip_cache=true
跳过/更新单个请求的缓存。infer_id(…)。infer_screen_name(…)
方法。
您也可以直接从终端运行这些示例来进行尝试:
python scripts/m3twitter.py --screen-name=barackobama
我应该怎样得到图像?
如果没有屏幕名称或数字标识,则可以使用m3twitter.inferu screen\u name(…)
或m3twitter.inferu id(…)
方法。但是,请注意,这些方法直接访问twitter网站,而不是api,因此只适用于小列表。如果有大量的用户名/ID列表,请使用Twitter API获取用户信息。
一旦您有了twitter json,就可以使用m3twitter.transform\u jsonl(…)
下载图像、运行语言检测并将数据转换为m3输入格式。
如果我没有图像数据怎么办?
在这个包中,我们提供了独立的基于文本的模型。当初始化m3inference
对象(即m3=m3inference(使用
m3inference model=false)
时,可以设置use廑full廑u model=false
。那么你就不需要证明输入json文件中的ideimg_path
字段。
警告:当图像和文本输入都可用时,M3型号的性能最佳。使用基于文本的模型时,您可能会遇到性能降低的问题。我们建议尽可能使用图像数据来获得最准确的预测。
引文
如果您在项目中使用此软件包,请引用我们的www 2019论文。
@inproceedings{wang2019demographic,
title={Demographic Inference and Representative Population Estimates from Multilingual Social Media Data},
author={Wang, Zijian and Hale, Scott A. and Adelani, David and Grabowicz, Przemyslaw A. and Hartmann, Timo and Fl{\"o"}ck, Fabian and Jurgens, David},
booktitle={Proceedings of the 2019 World Wide Web Conference},
year={2019},
organization={ACM}
}
更多问题
我们使用这个github上的问题来回答所有问题或建议。如有任何疑问,请联系我们hello@euagents.org
。请注意,由于现有的服务条款,我们无法发布或提供此型号的培训数据。
许可证
此源代码是根据GNU Affero通用公共许可证授权的,该许可证允许非商业性地重新使用此软件。如有商业问题,请直接与我们联系。有关详细信息,请参阅此源目录树根目录中的许可证文件。