基于gensim训练的低资源词嵌入模型评价方法
gensim-evaluations的Python项目详细描述
gensim评估
此库提供了评估使用gensim
加载的单词嵌入模型的方法。目前,它实现了两种专门为评估低资源模型而设计的方法。该代码允许用户用Wikidata支持的581种语言自动创建自定义测试集,然后使用OddOneOut
和{
基本用法
安装
从PyPi安装
$ pip install gensim-evaluations
加载模型
这些方法是为评估通过Gensim加载的嵌入模型而设计的。 作为一个例子,我们首先从Mikolov et. al加载著名的预训练word2vec模型。在
^{pr2}$通过gensim可以找到一个完整的预先训练模型列表here。当然,您可以始终使用gensim
来训练和加载您自己的模型。在
生成特定于语言的自定义测试集
除了一个模型,OddOneOut
和Topk
还需要一个类别的自定义测试集。每个类别都包含属于它的单词列表。
我们可以通过从Wikidata中选择一些相关项来轻松生成自定义测试集。
例如,我们可以选择
- 藏传佛教寺院-Q54074585
- 通讯社-Q192283
- 算法-Q8366
- 定理-Q65943
- 数学概念-Q24034552
- 人类圣经人物-Q20643955
- 大写-Q5119
- 国家-Q6256
- 神话人物-Q4271324
- 情感-Q9415
- 消极情绪-Q60539481
如您所见,这些classes
中的每一个都在Wikidata知识库中有一个关联的代码。这些类通过某些properties
与知识库中的其他items
相关。其中最重要的一个是instance of
属性P31
,它将类的特定示例项链接到该类。在
For example,
Wikinews
is aninstance of Q192283
andChuzang
is aninstance of Q54074585
按照这个基本思想,我们可以生成由Wikidata中属于这些类别的所有单词组成的测试集,这些单词使用项目支持的任何语言。在
from gensim_evaluations import wikiqueries
categories = ['Q54074585','Q192283','Q8366','Q65943','Q24034552','Q20643955',
'Q5119','Q6256','Q4271324','Q9415','Q60539481']
langs = ['en','la']
wikiqueries.generate_test_set(items=categories,languages=langs,filename='test_set')
generate_test_set
函数只需要一个Wikidata项目列表和一个语言代码列表。测试集将作为.txt
文件保存在filename
参数指定的位置。相应的语言代码会自动附加到相应的filename
。在
这里有一些有用的链接,可以帮助确定可用的语言和类别。在
- Wikidata支持的语言列表-https://www.wikidata.org/wiki/Help:Wikimedia_language_codes/lists/all
- 用于Wikidata中包含
Instance of (P31)
属性-https://sqid.toolforge.org/#/browse?type=classes的所有项的SQID浏览器
还应注意的是,类别大小会有所不同。特别是像human (Q5)
这样的大类别包含8255736个实例,这些实例太大,无法作为单个类别使用。建议您使用SQID筛选出具有合理数量条目的类别,或者在Wikidata Query Service上测试查询以确保在将其用作类别之前运行。在
使用Topk和OddOneOut进行评估
我们现在可以使用Topk
和OddOneOut
在这些新生成的测试集上评估word2vec模型(我们之前加载的)
from gensim_evaluations import methods
topk_result = methods.Topk(cat_file='test_set_en.txt',model=model, k=3, allow_oov=True)
odd_out_result = methods.OddOneOut(cat_file='test_set_en.txt',model=model, k_in=3, allow_oov=True, sample_size=1000)
print('topk_result=', topk_result)
print('odd_out_result=', odd_out_result)
Topk
和OddOneOut
函数都返回一个5元组,其中包含:
- 总体精度
- 类别精度(每个类别的浮动精度)
- 跳过类别列表
- 总原始分数(正确比较的总数)
- 类别原始分数(每个类别的正确比较数)
联系人
请随时联系n8stringham@gmail.com
提出任何问题。在
- 项目
标签: