首页 > 解决方案 > 计算文档和特定关键字之间的相似度

问题描述

我收集了有关某种疾病的报纸文章(未标记,只是原始文章)。我还有三组与疾病相关的手动选择的关键字,例如:phase-1等,phase-2如下所示。

phase_1 = ["symptoms","signs","fever","ache","vomit","blood","headache","fatigue","breath"]

phase_2 = ["pathogen","flavivirus","swamp","virus","contagious","mosquito bite","virus","agent","host"]

无论如何,使用 PYTHON 计算一组关键字和新闻文章之间的相似性吗?

标签: pythonnlpcosine-similaritysentence-similarity

解决方案


您可以为此类任务定义各种相似度指标。然后你可以去看看哪一个效果最好。这里有一些想法:

1.)正如 Max 在帖子中指出的那样,您可以计算文档和两个列表中的每一个之间的 Jaccard 索引。Jaccard 索引定义为交集除以两项的并集:

set1 = set(news_article.split())
set2 = set(phase_1)

jcc = len(set1.intersection(set2)) / len(set1.union(set2))

Jaccard 指数越高,文本与列表越相似。但是,只有当您的新闻文章完全包含您在列表中定义的词时,Jaccard 索引才会起作用。包含语义相似但与列表中的单词不同的单词的文本仍具有 0 的 jaccard 索引,即使其中包含相似的单词。

2.) 我建议也尝试基于 Word Mover 的距离 (WMD) 的稍微更高级的方法。为此,您需要在某个向量空间中表示您的单词(例如,通过 word2vec 模型获得)。然后,您可以将一篇新闻文章和一个列表表示为该空间中的向量集合。该指标衡量两种表示的差异程度(您必须移动一种表示以匹配另一种表示)。距离越小,两个表示越相似。

您可能可以在您的新闻文章上训练您的 word2vec 模型。我建议使用 gensim 来训练模型并稍后评估单词移动器的距离。

https://radimrehurek.com/gensim/auto_examples/tutorials/run_wmd.html

它不能保证有效,但我会试一试。根据我的经验,WMD 通常比余弦距离效果更好,但这当然取决于应用程序。

这两种方法还取决于您事先进行的文本处理。在评估指标/训练 word2vec 模型之前,请确保您的新闻文章采用您期望的格式。


推荐阅读