【问题标题】:Compute similarity between document and specific keywords计算文档和特定关键字之间的相似度
【发布时间】:2020-07-20 17:55:41
【问题描述】:

我收集了有关某种疾病的报纸文章(未标记,只是原始文章)。我还有三组手动选择的与疾病相关的关键字,例如:phase-1phase-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 计算一组关键字和新闻文章之间的相似度?

【问题讨论】:

  • 从谷歌搜索“余弦相似度 python”,顶部结果是sklearns cosine_similarity() function。也许这是一个很好的探索起点?
  • 是的,我现在正在尝试修改它以满足我的需要。

标签: python nlp cosine-similarity sentence-similarity


【解决方案1】:

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

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

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

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

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

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

您可能可以在您的新闻文章上训练您的 word2vec 模型。我建议使用 gensim 来训练模型,然后评估单词 mover 的距离。

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

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

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

【讨论】:

  • 感谢您的第一个想法!我在那儿的回答中有点错过了 Max 的观点。不管怎样,它工作得很好。在第二个的情况下,我实际上一开始就尝试这样做......但结果并不是很令人满意。而且我的数据没有标记,也没有任何好的孟加拉语预训练模型:(
【解决方案2】:

在命名列表时,我不建议使用破折号或其他顶部字符。我希望这会有所帮助:

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

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

# Performing the calculations
res = len(set(phase_1) & set(phase_2))
res2 = res / float(len(set(phase_1) | set(phase_2))) * 100

# Showing the results
msg = "The percentage of smilarity between the 2 lists is:"
print(msg, res2)

【讨论】:

  • 哦,我只是在写这里的时候匆忙使用了这个命名。我会解决的。
  • 不管怎样,我不需要这些列表之间的相似性。我需要计算新闻文章与这些列表的相似度。 like: -> article-1 与 phase_1 有 55% 的相似度
  • 那么你必须提供某种API才能打开这篇文章。除非您可以手动将文章名称添加到新列表中。
猜你喜欢
  • 2011-03-27
  • 1970-01-01
  • 2021-03-27
  • 2022-01-08
  • 2012-02-12
  • 2018-11-27
  • 2020-01-25
  • 2012-12-08
  • 2023-03-24
相关资源
最近更新 更多