python 中衡量多种语言文本之间相似性的最佳方法是什么?

What is the best approach to measure a similarity between texts in multiple languages in python?

所以,我有一个任务需要测量两个文本之间的相似度。这些文本是杂货店产品的简短描述。它们总是包含产品名称(例如,牛奶),并且可能包含生产商 and/or 尺寸,以及产品的一些其他特征。

我有一整套这样的文本,然后,当一个新的文本到来时,我需要确定我的数据库中是否有类似的产品并衡量它们的相似程度(从 0 到 100% ).

问题是:文本可能使用两种不同的语言:乌克兰语和俄语。还有,如果有国外牌子的(比如,Coca Cola),会写成英文的。

我解决这个任务的最初想法是获得多语言词嵌入(不同语言的相似词位于附近)并找出这些文本之间的距离。但是,我不确定这样做的效率如何,如果可以的话,从什么开始。

因为我的每个文本只是一组产品特征,一些基于上下文的词嵌入可能不起作用(我不确定这个说法,这只是我的假设)。

到目前为止,我已经尝试通过 faiss 安装来熟悉 MUSE framework, but I encountered an issue

因此,我的问题是:

注意: 我有 Windows 10(以防某些库无法在 Windows 上运行),我需要该库才能使用乌克兰语和俄语。

在此先感谢您的帮助!任何建议将不胜感激!

词嵌入在语言内部是有意义的,但不能转移到其他语言。对这个陈述的一个观察是:如果两个词在很多句子中同时出现,它们的嵌入可以彼此接近。因此,由于两种通用语言之间没有一对一的映射,因此无法比较词嵌入。

不过,如果两种语言足够相似,可以一对一映射的话,你可以指望你的想法。

总之,如果不翻译,你的想法就不再适用于两种通用语言了。

数据是否包含大量数字信息(例如营养成分)?如果是,这可以在某种程度上用于比较产品。我的建议是不要将其视为语言问题,而是模式匹配问题,因为这些文本可能是使用翻译记忆库使用半自动方法生成的。因此,跨语言的相似文本可能具有相似的形式,如果是这样,则应将其用于比较。

多语言文本比较不是一项微不足道的任务,我认为对此没有任何相当好的开箱即用的解决方案。是的,存在多语言嵌入,但必须对其进行微调才能处理特定的下游任务。

假设您的任务是关于细粒度的实体识别。我认为你有一个明确定义的实体:品牌、尺寸等…… 因此,这些定义产品的每个特征都可以是一个向量,这意味着您的产品可以用矩阵表示。 您可以潜在地用嵌入表示每个特征。 或嵌入向量和单热向量的混合。

方法如下。

  1. 定义产品功能列表: 产品名称、品牌名称、尺寸、重量。
  2. 对于每个产品功能,您需要一个文本识别模型: 例如。通过品牌识别,您可以找到文本的哪一部分是它的品牌名称。
  3. 如果可以对所有子文本进行统一的语言表示,则使用机器翻译。例如。 Coca Colaru Кока-Кола, en Coca Cola.
  4. 使用上下文嵌入(即 huggingface 多语言 BERT 或更好的东西)将提示文本转换为一个向量。
  5. 为了比较两个产品,比较它们的特征向量:两个特征数组之间的平均相似度是多少。您还可以决定每个特征的权重。
  6. 尝试其他矢量化方法。也许您不想混用仿冒品:“可口可乐”类似于“酷可乐”。所以,也许嵌入对品牌名称、尺寸和重量不利,但对产品名称就足够了。如果你想要精确匹配,你需要一个哈希函数来处理他们的文本。在他们的多语言提示工程文本上。
  7. 您还可以扩展每个特征向量,连接多个嵌入或源语言的一个热向量等等。

这里没有确定的答案,需要你自己去试验和测试,看看什么是最好的解决方案。您可以创建一个测试集并为您的解决方案制定基准。

你可以尝试Milvus采用Faiss来搜索相似的向量。在windowsOS.

中用docker很容易安装