计算文档对之间的相似性

Posted

技术标签:

【中文标题】计算文档对之间的相似性【英文标题】:Calculating Similarity Between Pairs of Documents [closed] 【发布时间】:2022-01-08 08:30:33 【问题描述】:

我希望计算成对文档之间的相似度。具体来说,我有电影续集及其原片的情节,想看看续集的情节与原片有多么相似。我的数据由一个数据框中的 600 部电影续集组成,电影 ID、电影名称、特许经营 ID、续集编号、原版情节和续集情节在三个不同的列中。本质上,我想比较最后两列的文本并获得分数。

大家有什么建议吗?

【问题讨论】:

似乎过于宽泛且相当模糊。你如何表示情节?两个情节相似是什么意思?看起来更像是一个人工智能问题,而不是你可以获得现成数字分数的问题。无论如何,博文Using cosine similarity to build a movie recommendation system 可能会给你一些想法。 绘图为文本形式。我只是想将续集的文字与原片的对应文字进行比较。 【参考方案1】:

作为基线,我将使用bag of words 方法,首先未加权,然后使用tf-idf 加权。一旦你有了你的向量,计算余弦相似度。这是取自 this answer 的 sklearn 实现。

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.feature_extraction.text import CountVectorizer
from scipy import spatial
import pandas as pd
clf = CountVectorizer(ngram_range=(1,1))
clf.fit(pd.concat([df.originalplot, df.sequelplot]))
originalplot = clf.transform(df.originalplot).todense()
sequelplot= clf.transform(df.sequelplot).todense()
similarities = [1- spatial.distance.cosine(originalplot[x], sequelplot[x]) for x in range(len(sequelplot))]
similarities
# use 'clf = TfidfVectorizer(ngram_range=(1, 1))' at the top for a tf-idf wieghted score. 

作为一种更高级的技术,您可以使用word embeddings 尝试捕获不仅是 1-1 词汇匹配,而且还可以捕获语义相似的单词。在一些大型语料库上训练了脱离自我的词嵌入。或者,您可以在您的语料库上专门对其进行训练。 spaCy 中现成的实现示例,再次测量向量的余弦相似度:

import spacy 
nlp = spacy.load("en_core_web_md")
df["original_spacy"] = df.originalplot.apply(nlp)
df["sequel_spacy"] = df.sequelplot.apply(nlp)
df["similarity"] = df.apply(lambda row: row.sequelplot.similarity(row.original_spacy), axis=1)

请注意,以上所有代码都是一个起点(如果您关心速度,可以对其进行优化)。在处理数据时,您可能希望对其进行改进并添加或减去转换(停用词删除、词干提取、词形还原)。查看Paul Minogue blog post 以更深入地解释这两种方法。如果你想使用 R,text2vec 应该有上述所有概念的实现。

【讨论】:

这绝对有帮助。但是,我在将预处理的标记化单词应用到您提供的代码中时遇到了一些问题。在对两列文本进行清理和标记后,我有一个数据框,其中包含以下列:“data['stem_plot']”和“data['stem_prev']”以标记形式。如何将这些向量化以将其应用于余弦相似度代码中的代码?

以上是关于计算文档对之间的相似性的主要内容,如果未能解决你的问题,请参考以下文章

使用 sklearn 如何计算文档和查询之间的 tf-idf 余弦相似度?

如何计算两个文档的相似度

计算两个配置文件之间的相似性以获得共同特征的数量

计算机如何理解事物的相关性-文档的相似度判断

Python中两个文本文档之间的相似性

基于TF-IDF编码进行文本聚类分析:文档成对相似性计算层次聚类(链接矩阵树形图dendrogram绘制聚类标签)