介绍

Facebook研究者使用 fastText 算法,对维基百科(44种语言)语料数据进行了训练,最终生成了 44 种语言的对齐词向量。


用途

wiki数据集有个优点,即由于众人分享、翻译,将不同语言的百科词条进行了翻译整理。所以facebook使用wiki训练对齐词向量有助于提升翻译准确性。与此同时,因为翻译者处于不同的语言和文化背景下,词条及词条内容必然蕴含着语言所特有的文化信息线索,有可能有助于我们挖掘跨语言的文化差异。例如中文词条护士和 英文词条nurse ,可以借助对齐词向量,比较护士这个群体在性别、种族等语义上的差异。

之前分享过的内容

不过fastText算法认为词语有不同的大小划分层次,从大到小分别是词语、词缀、字符等,使用 Joulin 等人 (2018) 中描述的 RCSLS 方法进行比对。

Code en-es es-en en-fr fr-en en-de de-en en-ru ru-en en-zh zh-en avg
Joulin et al. [1] 84.1 86.3 83.3 84.1 79.1 76.3 57.9 67.2 45.9 46.4 71.1
This implementation (10 epochs) 84.2 86.6 83.9 84.7 78.3 76.6 57.6 66.7 47.6 47.4 71.4
This implementation (unsup. model selection) 84.3 86.6 83.9 85.0 78.7 76.7 57.6 67.1 47.6 47.4 71.5

算法得出的词向量在西方,尤其是西欧语言之间进行语义对齐,效果可能更好。而中文、日语等汉字语言,是由偏旁部首组成,与西方字母语言还是存在一定差异。上表也可以看出中英语义对齐准确率47%, 而其他语言之间对齐准确率平均为71%。


模型资源

https://fasttext.cc/docs/en/aligned-vectors.html

对齐预训练向量模型下载链接

Afrikaans: text Arabic: text Bulgarian: text Bengali: text
Bosnian: text Catalan: text Czech: text Danish: text
German: text Greek: text English: text Spanish: text
Estonian: text Persian: text Finnish: text French: text
Hebrew: text Hindi: text Croatian: text Hungarian: text
Indonesian: text Italian: text Korean: text Lithuanian: text
Latvian: text Macedonian: text Malay: text Dutch: text
Norwegian: text Polish: text Portuguese: text Romanian: text
Russian: text Slovak: text Slovenian: text Albanian: text
Swedish: text Tamil: text Thai: text Tagalog: text
Turkish: text Ukrainian: text Vietnamese: text Chinese: text

格式

词向量默认使用的fastText格式

  • 第一行给了词向量的维数
  • 从第二行开始,每一行由词语及对应的词向量组成。
  • 数值之间使用空格间隔

代码

导入模型

使用gensim导入fastText方法训练出的 预训练语言模型

from gensim.models import KeyedVectors

#导入刚刚下载的预训练模型
#该词向量模型300维
zh_w2v_model = KeyedVectors.load_word2vec_format('wiki.zh.align.vec', binary=False)

#英文词向量模型5G,太大了。如果内存小于16G不要使用下面命令
#en_w2v_model = KeyedVectors.load_word2vec_format('wiki.en.align.vec', binary=False)

一旦导入成功,就可以进行向量计算。这里仅进行简单演示

#获取某词的词向量
zh_w2v_model.get_vector('护士')

Run

array([ 0.0733,  0.0782,  0.0188, -0.0027, -0.0052,...,  0.0586,  0.0166,
       -0.1401, -0.0545, -0.0125,  0.0373, -0.0681,  0.063 ],
      dtype=float32)

在中文中, 护士职业的主要从业者为女性,反应在词向量相似度上,如下

print(zh_w2v_model.similarity('护士', '女性'))
print(zh_w2v_model.similarity('护士', '男性'))

Run

0.4417011
0.378651

更多w2v_model用法可参考 豆瓣影评 | 探索词向量妙处


文献

如果使用了facebook的预训练词向量,请引用以下两篇文献。

  • Joulin, Armand, Piotr Bojanowski, Tomas Mikolov, Hervé Jégou, and Edouard Grave. “Loss in translation: Learning bilingual word mapping with a retrieval criterion.” arXiv preprint arXiv:1804.07745 (2018).
  • Bojanowski, Piotr, Edouard Grave, Armand Joulin, and Tomas Mikolov. “Enriching word vectors with subword information.” Transactions of the association for computational linguistics 5 (2017): 135-146.

广而告之