计算跨语言短语相似度(使用例如 MUSE 和 Gensim)

Calculate Cross-Lingual Phrase Similarity (using e.g., MUSE and Gensim)

我是 NLP 和 Word Embeddings 的新手,仍然需要学习这些主题中的许多概念,所以任何指点都将不胜感激。这个问题与 and , and I think there may have been developments since these questions had been asked. Facebook MUSE provides aligned, supervised word embeddings for 30 languages, and it can be used to calculate word similarity across different languages. As far as I understand, The embeddings provided by MUSE satisfy the requirement of . It seems that it is possible to load these embeddings into libraries such as Gensim有关,但我想知道:

  1. 是否可以加载多语言词嵌入 进入 Gensim(或其他库),如果是:
  2. 什么类型的相似性度量 可能适合这个用例?
  3. 如何使用这些加载的词嵌入 计算短语的跨语言相似度得分*而不是 单词?

*例如,德语中的“ÖPNV”与英语术语“[=17=”在意大利语中的“Trasporto pubblico locale” ]Public运输”。

我对任何实现持开放态度 (libraries/languages/embeddings),但我可能需要一些时间来学习这个主题。提前谢谢你。

对多个词嵌入进行平均以获得短语或句子表示是很常见的。毕竟,这正是 FastText 在用于句子分类时默认所做的。

当然,您可以在 Gensim 中加载尽可能多的词嵌入集,但您需要自己实现跨语言比较。您可以只使用方括号符号来表示向量:

model = gensim.models.fasttext.load_facebook_model('your_path')
vector = model['computer']

只需使用余弦相似度来比较向量。如果不想自己写,就用scipy

将文本的所有单词平均在一起,以获得文本的单个摘要向量,然后将该摘要向量与其他文本向量进行比较是一种快速而简单的方法,如@Jindřich 的回答中所述。

如果 Facebook 确保这些向量是 "in the same coordinate space",那么可以使用典型的余弦相似度来比较单个单词或单词运行的平均值 (phrases/sentences/etc)——甚至跨语言。

但是,当您从词向量开始时​​,还有其他更复杂的方法来比较单词运行,这可能会提供比普通平均比较更细粒度的度量。例如,"Word Mover's Distance" 使用每个文本的词向量集的完整集合,而不是单个摘要向量作为输入。

然而,计算起来要贵得多,尤其是在较长的文本上——因为它本质上是在搜索一个文本中 "move" "piles of meaning" 的最小转换集(由它的单词在向量中的位置-space) 以匹配其他文本。

它在 gensim 中作为函数 wmdistance 在任何一组 KeyedVector 风格的词向量上可用,但它假定您的文本都从同一组中绘制它们的向量-向量。您必须调整代码以从两个不同的矢量集中绘制,或者以某种方式将两种语言的矢量合并为一个 KeyedVectors.