使用 word2vec 进行双语文本相似性的最佳方法是什么?

数据挖掘 nlp 文本挖掘 word2vec
2022-03-13 02:41:56

我面临一个问题,我需要计算双语(英语和法语)文本的相似性。“数据库”如下所示:

+-+-+-+
| |F|E|
+-+-+-+
|1|X|X|
+-+-+-+
|2| |X|
+-+-+-+
|3|X| |
+-+-+-+
|4|X| |
+-+-+-+
|5| |X|
+-+-+-+
|6|X|X|
+-+-+-+
|7|X| |
+-+-+-+

这意味着我对每个“项目”都有英语和法语文本(可变的长单句),或者在两个版本中(在这种情况下,版本是彼此松散的翻译),或者只有一种语言。

任务是为任何传入的新句子找到最接近的项目 ID,而不管“数据库”中的句子或传入句子的实际语言(即,“数据库”中的匹配句子不一定是与传入的句子使用相同的语言,只要含义最接近)。我希望这个目标解释清楚。

最初我计划从头开始为两种语言构建一个 word2vec(词汇表非常具体,所以我更喜欢我自己的 word2vec),并且只为每个新句子的相应语言找到相似之处,但这会省略项目中的所有候选者缺少相应的语言句子。

所以我想知道为组合语料库生成一个通用的 word2vec 编码是否可行(word2vec 方法本身与语言无关),但我不知道这样的解决方案是否更好。

此外,句子的数量不是很大(大约 10.000 个),从头开始生成 word2vec 可能不是最好的主意,但另一方面,语料库中确实有特定的术语。

2个回答

亚马逊的这篇论文解释了如何使用对齐的双语词嵌入来生成不同语言的两个句子之间的相似度分数。使用四种语言对(英语到德语、法语、葡萄牙语和西班牙语)的电影字幕来展示他们系统的效率。

“使用词嵌入的字幕机器翻译的无参考语料库的无监督质量估计”

您可以使用多种语言的预训练嵌入器,然后检查编码之间的距离。pypiFacebook 的LASER有非官方端口它与语言无关,并且在en和上都经过预训练fr

from laserembeddings import Laser

laser = Laser()

sentence_en = 'My name is Hendrik'
sentence_fr = 'Je suis Hendrik'

en_embedding = laser.embed_sentences([sentence_en], lang='en')[0]
fr_embedding = laser.embed_sentences([sentence_fr], lang='fr')[0]

嵌入是 1024 个元素的 NumPy 数组。您可以计算嵌入之间的一些度量,即欧几里得。

import numpy as np

distance = np.linalg.norm(en_embedding - fr_embedding)

好消息是您已经在数据库中定义了相似性,因此您可以了解距离度量的阈值并准确检查它的效果。