文本相似度计算:Jaccard系数,余弦相似度等

本文介绍文本相似度计算的两种常见方法:Jaccard系数和余弦相似度,通过实验对比分析了这两种方法在衡量文本相似度上的性能差异。

基础知识

文本相似度计算是把文本投影到向量空间,文本的相似度是把文本投影到向量空间,用向量相似度来表示语义相似度,通过比较计算向量的空间距离来比较文本的相似度。

Jaccard系数

Jaccard系数是计算两个集合重合度的常用方法:两个集合A和B交集元素的个数在A、B并集中所占的比例,称为这两个集合的Jaccard系数,用符号 J(A,B) 表示。Jaccard系数是衡量两个集合相似度的一种指标,公式如下:
在这里插入图片描述
其中,A,B集合中的元素为是文本中的全部词项,且集合中相同词项只保留一个。

余弦相似度

余弦相似度,是通过计算两个向量的夹角余弦值来评估向量间的相似度。将向量根据坐标映射到向量空间。求得他们的夹角,并得出夹角对应的余弦值,余弦值就可以用来表示这两个向量的相似性。
夹角越小,余弦值越接近于1,它们的方向更加吻合,则越相似。两个向量A,B之间的余弦相似度计算公式如下:
在这里插入图片描述

计算文本之间的余弦相似度时,首先要对文本分词、去除停用词,构建所有文本的词袋,然后计算文本词项的tf-idf值,接着利用词袋模型将每个文本都映射到统一的向量空间中,向量的坐标值就是对应的特征词项的tf-idf值。

实验内容

  • 选定3个文本:doc1,doc2,doc3,其中doc1和doc2是两篇关于“机器学习”的介绍,doc3是1篇人大会议报道。
  • 计算上述3个文档之间的Jaccard系数矩阵(行列为文档,元素值为两个文档之间的系数值)。
  • 利用向量空间模型计算词项-文档关联矩阵,并计算3个文档之间余弦相似度矩阵(行列为文档,元素值为两个文档之间的相似度值)。
  • 对比分析Jaccard系数和余弦相似度的性能。

步骤

  1. 获取停用词表,文本分词
    在这里插入图片描述
    这一步是自然语言处理的基本操作,代码略。
  2. 获取去停用词后的词典
    在这里插入图片描述
def get_dic(text_list, stop_words_list):
    dic = {
   
   }
    for myword in text_list:
        if not (myword.strip() in stop_words_list):
            dic.setdefault(myword, 0)
            dic[myword] += 1
    return dic

dic为该文本去除停用词之后的词典,键是文本中的词,值是这个词出现的频数

  1. 计算余弦相似度
    首先,调用步骤1中的函数,清洗文本,获取全部词项
def get_cos
### Jaccard相似系数概念 Jaccard相似系数是一种用于衡量两个集合之间相似性的统计量。该指标定义为两个集合交集大小除以这两个集合并集的大小[^1]。 ### 计算方法 对于给定的两个集合AB,Jaccard相似系数\( J(A, B) \)通过下面的公式来计算: \[ J(A,B)=\frac{|A∩B|}{|A∪B|}=\frac{|A∩B|}{|A|+|B|-|A∩B|}\] 其中 \( |A ∩ B| \) 表示集合A与集合B交集中元素的数量;而 \( |A ∪ B| \) 则表示两者的并集中元素数量总。当两个集合完全相同的时候,其Jaccard指数等于1;如果两者没有任何共同之处,则此值会趋近于0。 为了更直观理解如何应用上述公式,在Python中实现简单的函数如下所示: ```python def jaccard_similarity(set_a, set_b): intersection = len(set_a.intersection(set_b)) union = len(set_a.union(set_b)) if union == 0: return "Undefined due to division by zero" similarity = intersection / float(union) return similarity ``` 这段代码接收两个参数`set_a` `set_b`, 它们都是Python中的集合类型数据结构。它先求得输入集合间的交集长度以及并集长度,再按照之前提到过的公式完成运算返回最终的结果。 ### 应用场景解释 Jaccard相似系数广泛应用于多个领域内评估不同实体间的关系紧密度,具体包括但不限于以下几个方面: - **文本分析**:比较文档或字符串片段之间的重叠情况,帮助识别抄袭行为或是推荐系统里找到最匹配的文章摘要等。 - **生物信息学**:研究基因序列特征模式的一致性差异性,辅助科学家探索物种进化关系等问题。 - **社交网络分析**:考察用户兴趣爱好标签上的共通点,从而构建更加精准的好友建议列表或者广告投放策略。 - **图像处理**:检测图片轮廓形状是否相像,支持计算机视觉任务下的目标分类工作。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值