如何测量单词或非常短的文本之间的相似性



我致力于在文档列表中查找最近的文档。每份文件都是一个单词或一个很短的句子(例如"牛仔裤"、"机床"或"生物番茄"(。我所说的最接近是指在语义上接近。

我试着使用word2vec嵌入(来自Mikolov的文章(,但最接近的单词或上下文链接比语义链接更紧密的单词("牛仔裤"与"鞋子"链接,而不是预期的"裤子"(。

我已尝试使用Bert编码(https://mccormickml.com/2019/05/14/BERT-word-embeddings-tutorial/#32-理解输出(,但它面临着同样的问题。

我尝试过弹性搜索,但找不到语义上的相似之处。(这项任务需要用法语解决,但用英语解决可能是很好的第一步(

请注意,不同的单词向量集在捕捉所需"语义"相似性方面可能有所不同。(特别是,使用较短的window进行训练可能会强调单词之间的相似性,而不是像较大的window值可能强调的那样只在相似的域中使用。有关更多详细信息,请参阅此答案。(

你可能还想看看"单词移动者的距离",以此来比较包含各种相似单词混合的短文本。(它相当昂贵,但在短文本上应该很实用。它在Pythongensim库中作为wmdistance()KeyedVectors实例中可用。(

如果你有使用特定多词短语的训练数据,在许多类似自然语言的微妙变化的上下文中,你可以考虑将所有感兴趣的短语组合成单个标记(如machine_toolbiological_tomatoes(,并训练你自己的领域特定词向量。

要计算包含2或3个单词的短文本之间的相似性,可以使用word2vec来获得句子的平均向量。例如,如果你有一个文本(机床(,想用word2vec在一个向量中表示它,那么你必须得到"machine"的向量和"tool"的矢量,然后通过得到平均矢量将它们组合在一个矢量中,即将两个矢量相加,除以2(字数(。这将为一个不止一个单词的句子提供一个向量表示。你也可以使用类似doc2vec的东西,它是在word2vec的顶部设计的,它的目的是为句子或段落获取向量。

您可以尝试在word2vec 之上构建文档嵌入

然而,请注意,单词和文档嵌入并不总是捕捉到"期望的相似性",它们只是在语料库上学习语言模型,它们深受文本大小和单词频率的影响。

你的语料库有多大?如果你只需要它来执行一些分类,那么最好在谷歌新闻语料库等大型数据集上训练你的向量。

相关内容

最新更新