繁体   English   中英

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

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

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

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

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

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

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

到目前为止,我一直在尝试熟悉MUSE框架,但是我遇到了faiss安装的问题

因此,我的问题是:

  • 我的词嵌入想法值得尝试吗?
  • 有没有更好的方法?
  • 如果词嵌入的想法没问题,我应该使用哪些?

注意:我有 Windows 10(以防某些库不能在 Windows 上运行),我需要该库来处理乌克兰语和俄语。

提前感谢您的帮助! 任何建议将不胜感激!

您可以尝试采用FaissMilvus来搜索相似向量。 在 windows 操作系统中安装 docker 很容易。

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

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

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

但是,如果两种语言与一对一的映射词足够相似,您可能会相信您的想法。

总而言之,如果没有翻译,您的想法不再适用于两种通用语言。

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

这里是如何。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM