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']中的
  • 多属性

    • 由于多任务学习,该模型可以同时预测三个人口统计属性(性别、年龄、人类与组织状态)。

安装

tl;dr

pip安装m3inference

手动安装

带PIP

必须准备好python>;=3.6pip才能使用。然后您可以:

  1. 安装依赖项包:pip install-r requirements.txt
  2. 安装软件包python setup.py install

作为conda环境
  1. 只需运行conda env create-f env conda.yml,就应该有一个"m3env"环境,您可以使用conda activate m3env进入该环境。从里面运行其他所有内容。
  2. 安装软件包python setup.py install

如何使用

使用m3

m3接受包含json(dict)对象列表(或包含数据本身的python对象)的jsonljsonl文件的输入,并输出三个属性的预测。

测试的演示目录:

  1. 克隆此软件包(git clone https://github.com/zijwang/m3inference.git)并按照手动安装安装软件包。

  2. 对图像进行预处理,使其大小调整为正确的形状。要执行此操作,请在同一个(根)目录下运行

    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。

  3. 在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)都应具有以下键:idnamescreen\u namedescriptionlangimg\u path >

  • 前四个键可以直接从twitter json条目中提取。
  • 对于lang,即使官方的twitter json条目包含此字段,我们建议尝试使用我们的cld2包装方法(from m3inference import get\u lang)从用户的传记/描述或用户的推文中获取语言。如果你从其他来源知道基本事实,你也可以硬编码这种语言。
  • 图片应该以400x400像素的图片从twitter下载,并使用上面的预处理代码将大小调整为224x224像素。

输出文件是一个dict,其中ids是键,预测是嵌套值。这些值表示该类别的概率([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通用公共许可证授权的,该许可证允许非商业性地重新使用此软件。如有商业问题,请直接与我们联系。有关详细信息,请参阅此源目录树根目录中的许可证文件。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何在部署在Tomcat7上的jbpmconsole中添加新用户?   JavaStruts2:我分配了一个参数的值,但在jsp文件中得到了一个空指针错误   检查类是否在同一个包或子包中访问的java ArchUnit规则?   java当您使用spring forward重定向到其他控制器时,如何从ModelAndView返回响应对象?   java jsp/servlet,显示管理员、用户和未登录用户的不同链接   java Eclipse警告消息   java加载多纹理openGL   java有没有一种方法可以通过Hibernate传递一个对象(genaric)并填充任何字段,然后让它返回一个包含所有字段的对象列表?   java如何将git存储url连接到本地存储库,以便每次都获得更新的代码?   java无限循环在程序中无法正常工作   java File writer正在写入没有“换行”的字符串   java为什么Spring或C3p0没有清理C3p0线程?   java通过JDBC从PostgreSQL检索几何数组