查找和排序两组短语之间的最佳语义匹配

数据挖掘 机器学习 nlp 推荐系统
2022-02-16 05:17:56

我正在寻找一个合适的定义来确定这是什么类型的问题,所以我可以自己进一步研究它——当然,我会感谢任何关于什么是行业标准的解决方法的具体建议。虽然我对 NLP 或推荐系统相当缺乏经验,但我之前已经完成了相当多的经典 ML,以防万一。

问题 - 给定一个带有输入列表和预期输出列表的“搜索”查询,为每个输入检索并排列最多 N 个最佳语义匹配。约束:

  1. 所有输入和输出都介于单词和句子之间。
  2. 输出数 >= 输入数。
  3. 所有输入和输出本身都是唯一的,但可以有与输入相同的输出。
  4. 每个输入都保证至少有一个“足够好”的输出存在。
  5. 每个输出都保证是最多一个输入的最佳匹配。
  6. 标记数据可用,即人工标记的查询。输入是稀疏的,即针对相同或非常相似的输出集的查询的输入可能非常不同。
  7. 数据是英文的,我用 Python 工作——如果这对你的建议很重要的话。

一个例子:

输入

(1) Truck
(2) Assortment of lemons, limes, and oranges.
(3) Apples, pears, and oranges.
(4) A tool with broad blade, used for digging.

输出

(a) Citrus fruits
(b) Portable telephone that can make and receive calls over a radio frequency.
(c) Fruits traditionally grown in Germany.
(d) Vehicles used for cargo transportation.
(e) Shovel
(f) Motor vehicle used for transportation.

期望的结果(数字是任意的,用于说明目的)

1 - d (100%), f (75%)
2 - a (95%), c (60%)
3 - c (87%), a (45%)
4 - e (100%)

Stack Exchange 提供的类似问题建议并没有回答我的问题,而在其他地方搜索答案只会让我陷入关于 IDMB 或 Twitter 数据集情绪分析的无穷无尽的文章中。

1个回答

我主要在推荐系统方面有经验,但我在 NLP 方面做了足够多的工作,对如何解决这个问题有了一些想法。

我不知道您提出的问题的任何正式名称,但我确实知道,即使您有密集的标签,也很难训练模型从这些数据中学习。问题中嵌入了太多未说明的人类背景,无法从头开始训练模型。

就像您的示例一样,Fruits traditionally grown in Germany.您必须找到一些知识图或嵌入来了解水果之间的关系以及它们在地理上的生长位置。有一些有限的东西可以做到这一点。

因此,您需要做的是将另一种模型或语言嵌入应用到数据中,并尝试从中设计解决方案。

我首先想到的是任何大规模预训练的 skip-gram 或 CBOW 嵌入(这些嵌入通常称为“词向量”或“思想向量”)。这里的基础知识资源

这里的想法是使用一些预训练的语言模型并为您的输入和输出计算嵌入。然后你只需在每个输入和输出的嵌入之间做余弦相似度,看看你是否能得到好的匹配。

因为您使用的是句子,所以您要么必须使用嵌入句子或文档的模型(doc2vec 就是一个例子),要么必须找到某种方法来聚合标记嵌入。如果您尝试这种方法,我会选择前者。

但在此基础上,一旦你有了这些预训练的嵌入,你也可以在这些嵌入之上训练你自己的神经网络来分类匹配。我会阅读神经网络问答任务以获得灵感,因为我想您可能会从中获得一些想法,以了解如何关联神经网络的查询和匹配(谷歌“QANet”以获得一些线索) .

另一种方法(取决于您正在使用的数据)是知识图谱。这个解决方案会更复杂,但基本上你会将文档分解成不同的部分(POS/NER 标记),然后在知识图中搜索语义等价物。可以在此处找到一些示例幼儿园。

谷歌的另一件事是“本体”领域。与知识图非常相关,但可能会为您提供一些可能被证明有用的利基结果。

关于您要解决的确切问题或您正在使用的数据集类型的更多上下文可能有助于阐明其他解决方案。希望我给你的一些条款能把你推向正确的方向。祝你好运!