计算文本相似度
相似度计算方法
-
相似度计算方法
-
1. 文本距离
- 1.1 编辑距离(Edit Distance)
- 1.2 最长公共子串、最长公共子序列(Long Common Subsequence,LCS)
- 1.3 句向量表示(Word Averaging Model,WAM)
- 1.4 WMD
- 1.5 BM25
-
2. 统计指标
- 2.1 Cosine Similarity
- 2.2 Jaccard Similarity
- 2.3 Pearson Correlation
- 2.4 Euclidean Distance
- 3. 深度匹配
- 参考
-
1. 文本距离
1. 文本距离
1.1 编辑距离(Edit Distance)
编辑距离,英文叫做 Edit Distance,又称 Levenshtein 距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。如果两个字符串的编辑距离越大,说明它们越是不同。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。
1.2 最长公共子串、最长公共子序列(Long Common Subsequence,LCS)
最长公共子序列问题:给定两个字符串,\(S\)(长度\(n\))和\(T\)(长度\(m\)),求解它们的最长公共子序列。其中公共子序列是指:按从左到右顺序在\(S\)、\(T\)中均出现的字符序列,子序列中字符在\(S\)、\(T\)中无需连续。
例:\(S\) = ABAZDC
、\(T\) = BACBAD
,\(S\)和\(T\)的最长公共子序列为:ABAD
。
最长公共子串问题:给定两个字符串,\(S\)(长度\(n\))和\(T\)(长度\(m\)),求解它们的最长公共子串。其中公共子串是指:按从左到右顺序在\(S\)、\(T\)中均出现的字符串,子串中字符在\(S\)、\(T\)中需要连续。
例:\(S\) = ABAZDC
、\(T\) = BACBAD
,\(S\)和\(T\)的最长公共子串为:BA
。
1.3 句向量表示(Word Averaging Model,WAM)
获取 Sentence Vector :我们首先对句子进行分词,然后对分好的每一个词获取其对应的 Vector,然后将所有 Vector 相加并求平均,这样就可得到 Sentence Vector。
1.4 WMD
WMD(Word Mover's Distance)中文称作词移距离。通过寻找两个文本之间所有词之间最小距离之和的配对来度量文本的语义相似度。是EMD(Earth Mover's Distance)在NLP领域的延伸。
两个文本中每一个词都需要进行一一对应,计算一下相似度,并且是有侧重地计算相似度。
\(c(i,j)\)表示单词\(i, j\)之间的相似度计算,而\(T_{ij}\)表示对于这种相似度的权重。由于两个文本之间的单词两两之间都要进行相似度计算,可知T是一个矩阵。 \(d_i\)是归一化词频(normalized BOW),单词的重要程度与词的出现频率相关(并且归一化)。如果一个词\(i\)在文本中出现的次数为\(c_i\),它的归一化词频为:\(d_i=\frac{c_i}{\sum_{j=1}^{n}c_j}\).
计算两个文档之间的WMD就要求解一个大型的线性规划问题。
1.5 BM25
BM25 是一种用来评价搜索词和文档之间相关性的算法,它是一种基于概率检索模型提出的算法:有一个\(query\)和一批文档Ds,现在要计算\(query\)和每篇文档D之间的相关性,先对\(query\)进行切分,得到单词\(q_i\),然后单词的分数由3部分组成:
- 每个单词的权重\(W_i\),可以由IDF表示,\(IDF(q_i)=log(\frac{N-n(q_i)+0.5}{n(q_i)+0.5})\)
- 相关性分数R:单词和D之间的相关性,单词和query之间的相关性
- \(dl\)是文档\(d\)的长度,\(avgdl\)是整个文档集中文档的平均长度;
- \(f_i\)是单词\(q_i\)在文档\(d\)中的词频,\(qf_i\)是单词\(q_i\)在\(query\)中的词频;
- \(k_1, b\)是参数(通常\(k_1=1.2, b=0.75\));
- 简化情况下,\(query\)比较短,查询词\(q_i\)在\(query\)中只会出现一次,即\(qf_i=1\),因此可以简化\(R(q_i,d)\)中\(\frac{qf_i\cdot (k_2+1)}{qf_i+k_2}=1\).
综上,BM25算法的相关性得分公式可总结为:
TF/IDF 和 BM25 同样使用逆向文档频率来区分普通词(不重要)和非普通词(重要),同样认为文档里的某个词出现次数越频繁,文档与这个词就越相关。实际上一个普通词在同一个文档中大量出现的作用会由于该词在 所有 文档中的大量出现而被抵消掉。
BM25 有一个上限,文档里出现 5 到 10 次的词会比那些只出现一两次的对相关度有着显著影响。但是如图 TF/IDF 与 BM25 的词频饱和度 所见,文档中出现 20 次的词几乎与那些出现上千次的词有着相同的影响。
2. 统计指标
2.1 Cosine Similarity
余弦距离,也称为余弦相似度,是用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小的度量。Cosine Similarity的绝对值越大,两向量越相似,值为负,两向量负相关。
余弦相似度更多的是从方向上区分差异,而对绝对的数值不敏感,因此没法衡量每个维度上数值的差异,会导致这样一种情况:
用户对内容评分,按5分制,X和Y两个用户对两个内容的评分分别为(1,2)和(4,5),使用余弦相似度得到的结果是0.98,两者极为相似。但从评分上看X似乎不喜欢2这个 内容,而Y则比较喜欢,余弦相似度对数值的不敏感导致了结果的误差,需要修正这种不合理性就出现了调整余弦相似度,即所有维度上的数值都减去一个均值,比如X和Y的评分均值都是3,那么调整后为(-2,-1)和(1,2),再用余弦相似度计算,得到-0.8,相似度为负值并且差异不小,但显然更加符合现实。
调整余弦相似度(Adjusted Cosine Similarity):
2.2 Jaccard Similarity
杰卡德系数,英文叫做 Jaccard index, 又称为 Jaccard similarity,用于比较有限样本集之间的相似性与差异性。
Jaccard 系数值越大,样本相似度越高。
计算方法:两个样本的交集除以并集得到的数值,当两个样本完全一致时,结果为 1,当两个样本完全不同时,结果为 0。
计算结果范围:\([0,1]\)。
与杰卡德相似系数相反的概念是杰卡德距离(Jaccard Distance),可以用如下公式来表示:
杰卡德距离用两个两个集合中不同元素占所有元素的比例来衡量两个集合的区分度。
2.3 Pearson Correlation
皮尔逊相关系数(Pearson Correlation)定义为两个变量之间的协方差和标准差的商。实际上也是一种余弦相似度,不过先对向量做了中心化,两向量各自减去均值后,再计算余弦相似度。当两个向量均值都为0时,皮尔逊相对系数等于余弦相似性。
计算结果范围:\([-1,1]\),-1 表示负相关,1 比表示正相关。
计算方法:
2.4 Euclidean Distance
明氏距离(Minkowski Distance)的推广:\(p=1\)为曼哈顿距离,\(p=2\)为欧氏距离,切比雪夫距离是明氏距离取极限的形式。
如果两个点特征值不在一个数量级时,大的特征值会覆盖掉小的。如Y1(10000,1),Y2(20000,2)。
标准欧氏距离的思路:将各个维度的数据进行标准化:标准化后的值 = ( 标准化前的值 - 分量的均值 ) /分量的标准差,然后计算欧式距离。
3. 深度匹配
基于BERT等深度学习模型来计算句对之间的相似度。
参考
常见的距离算法和相似度(相关系数)计算方法
深度学习解决NLP问题:语义相似度计算
相似度计算方法
可插拔的相似度算法
上一篇: 高效管理 IoTDB 集群:一键启动/停止功能介绍
下一篇: 多标签问题的不同度量评估指标比较
推荐阅读
-
求递归式 f(n) = 2f(n/2) + n 的时间复杂度算法计算(一)
-
百度网盘提供图像处理与计算机视觉算法及应用pdf的下载
-
实战分享:百度、飞桨和蜜度在文本智能比较大赛中的经验和心得(第17期)
-
理解DSSM算法:文本相似度的计算方法
-
深入理解DSSM算法:如何计算文本之间的相似度?
-
团队阶梯L2-005:集合相似度任务(25分)
-
简易百度翻译爬虫实践 - 编码 UTF-8 - 模拟浏览器访问网页,创建文件夹并存储文本文件,命名文件为单词形式
-
【摩尔线程+Colossal-AI强强联手】MusaBert登上CLUE榜单TOP10:技术细节揭秘 - 技术实力:摩尔线程凭借"软硬兼备"的技术底蕴,让MusaBert得以从底层优化到顶层。其内置多功能GPU配备AI加速和并行计算模块,提供了全面的AI与科学计算支持,为AI推理和低资源条件下的大模型训练等场景带来了高效、经济且环保的算力。 - 算法层面亮点:依托Colossal-AI AI大模型开发系统,MusaBert在训练过程中展现出了卓越的并行性能与易用性,特别在预处理阶段对DataLoader进行了优化,适应低资源环境高效处理海量数据。同时,通过精细的建模优化、领域内数据增强以及Adan优化器等手段,挖掘和展示了预训练语言模型出色的语义理解潜力。基于MusaBert,摩尔线程自主研发的MusaSim通过对比学习方法微调,结合百万对标注数据,MusaSim在多个任务如语义相似度、意图识别和情绪分析中均表现出色。 - 数据资源丰富:MusaBert除了自家高质量语义相似数据外,还融合了悟道开源200GB数据、CLUE社区80GB数据,以及浪潮公司提供的1TB高质量数据,保证模型即便在较小规模下仍具备良好性能。 当前,MusaBert已成功应用于摩尔线程的智能客服与数字人项目,并广泛服务于语义相似度、情绪识别、阅读理解与声韵识别等领域。为了降低大模型开发和应用难度,MusaBert及其相关高质量模型代码已在Colossal-AI仓库开源,可快速训练优质中文BERT模型。同时,通过摩尔线程与潞晨科技的深度合作,仅需一张多功能GPU单卡便能高效训练MusaBert或更大规模的GPT2模型,显著降低预训练成本,进一步推动双方在低资源大模型训练领域的共享目标。 MusaBert荣登CLUE榜单TOP10,象征着摩尔线程与潞晨科技联合研发团队在中文预训练研究领域的领先地位。展望未来,双方将携手探索更大规模的自然语言模型研究,充分运用上游数据资源,产出更为强大的模型并开源。持续强化在摩尔线程多功能GPU上的大模型训练能力,特别是在消费级显卡等低资源环境下,致力于降低使用大模型训练的门槛与成本,推动人工智能更加普惠。而潞晨科技作为重要合作伙伴,将继续发挥关键作用。
-
实操演示:Java中Cosine相似度计算类的运用示例
-
理解工作流:自动化业务流程管理与Activiti实践" **简述** 工作流(Workflow)是一种利用电脑技术自动化管理业务流程的方式,让不同参与者按既定路径执行任务,确保文档、信息或任务在预设规则下顺利传递,最终达成期望的业务目标。 **核心概念** - **工作流自动化**: 计算机驱动业务流程处理与执行,如在参与者间自动传递文档和任务。 - **目标与应用**: 管理工作流程确保按时、由合适的人执行,同时允许人工介入以增强灵活性。 - **工作流框架示例**: Activiti、JBPM、OSWorkflow 和 Workflow,它们背后通常依赖数据库支持。 - **关键组件**: ProcessEngine 在 Activiti 中扮演核心角色,负责流程实例创建、数据管理和流程监控。 **相关领域** - **业务流程管理 (BPM)**: 一种系统性方法论,聚焦于构建并优化端到端卓越业务流程以提升企业业绩,在EMBA、MBA等商业课程中得到关注。 - **业务流程建模与标记语言 (BPMN)**: 用于绘制业务流程图的工具,探讨其在不同场景下的应用精确度、标准化价值以及未来发展愿景。 **辅助术语** - 流对象 (Flow Objects): BPMN 中用于描述流程中活动、决策、序列和其他元素的具体实现单元。