介绍
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.