数据挖掘:文本相似性模型
Posted Python数据科学
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据挖掘:文本相似性模型相关的知识,希望对你有一定的参考价值。
文本相似度是指衡量两个文本的相似程度,相似程度的评价有很多角度:单纯的字面相似度(例如:我和他 v.s. 我和她),语义的相似度(例如:爸爸 v.s. 父亲)和风格的相似度(例如:我喜欢你 v.s. 我好喜欢你耶)等等。
南京市长江大桥
为例,N-gram 的表示如下:中的字词 的 TF-IDF 重要程度可以表示为:表示字词 在文档 中出现的频率,为包含字词 的文档数量,为语料中文档的总数量。以 14万歌词预料为例,通过 TF-IDF 计算周杰伦的《简单爱》中最重要的 3 个词为 [\'睡着\', \'放开\', \'棒球\']
。
BM25 BM25 算法的全称为 Okapi BM25,是一种搜索引擎用于评估查询和文档之间相关程度的排序算法,其中 BM 是 Best Match 的缩写。
对于一个给定的查询 的 BM25 值定义为:
表示 在文档 中的词频,表示文档 中的词数,表示语料中所有文档的平均长度。和 为自由参数,通常取值为 。表示词 的逆文档频率,通常计算方式如下:为语料中文档的总数量,表示包含 的文档数量。BM25 算法是对 TF-IDF 算法的优化,在词频的计算上,BM25 限制了文档 中关键词 的词频对评分的影响。为了防止词频过大,BM25 将这个值的上限设置为 对 TF 分值的影响如下图所示:
TextRank TextRank 是基于 PageRank 算法的一种关键词提取算法。PageRank 最早是用于 Google 的网页排名,因此以公司创始人拉里·佩奇(Larry Page)的姓氏来命名。PageRank 的计算公式如下:
表示任意一个网页,表示链接到网页 的网页,表示网页 的 PageRank 值,表示网页 所有的入链集合,表示网页 所有的出链集合,表示集合的大小,为阻尼系数,是为了确保每个网页的 PageRank 值都大于 0。TextRank 由 PageRank 改进而来,计算公式如下:
中大小为 的滑动窗口中的词定义为共现关系,构建关键词图 个词作为关键词。
潜在语义分析(LSA, Latent Semantic Analysis) 的核心思想是将文本的高维词空间映射到一个低维的向量空间,我们称之为隐含语义空间。降维可以通过奇异值分解(SVD)实现,令 表示语料矩阵,元素 表示词 和文档 的共现情况(例如:词频):
个奇异值,则可以得到原始矩阵的近似矩阵:相比于 LSA 增加了概率模型,每个变量以及相应的概率分布和条件概率分布都有明确的物理解释。PLSA 认为一篇文档可以由多个主题混合而成,而每个主题都是词上的概率分布,文章中的每个词都是由一个固定的主题生成的,如下图所示:
篇文档 中的每个词的生成概率为:
在 PLSA 的基础上增加了参数的先验分布。在 PLSA 中,对于一个新文档,是无法获取 的,因此这个概率模型是不完备的。LDA 对于 和 都增加了多项式分布的共轭分布狄利克雷分布作为先验,整个 LDA 模型如下图所示:通过过程的构造可以自动训练出主题的个数,更多实现细节请参考论文。
LSA,PLSA,LDA 和 HDP 之间的演化关系如下图所示:
并不是一个合适的距离度量,因为其并不满足距离函数的三角不等式。
Levenshtein 距离是 编辑距离 (Editor Distance) 的一种,指两个字串之间,由一个转成另一个所需的最少编辑操作次数。允许的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。例如将 kitten 转成 sitting,转换过程如下:
和 为字符串 的长度,为匹配的字符的个数,换位数目的一半。如果字符串 和 相差不超过 和 TRACE,仅 R, A, E 三个字符是匹配的,因此 均出现在两个字符串中,但是他们的距离超过了 1 (即,为字符串 和 的 Jaro 相似度,为共同前缀的长度 (规定不超过 为调整系数 (规定不超过 与 10之间的汉明距离是 2,“与 “之间的汉明距离是 3。表示任意一个依存关系,然后通过统计计算两个文本的依存图的三元组集合之间的相似度来评价句法层的相似度。此外,也可以从树结构的角度直接评价依存句法的相似度,更多细节可参考相关论文 。语义语义层用于研究文本所蕴含的意义。例如“父亲”和“爸爸”在词法层完全不同,但在语义层却具有相同的含义。针对语义相似度的两种深度学习范式如下:
第一种范式首先通过神经网络获取文本的向量表示,再通过向量之间的相似度来衡量文本的语义相似度。这种范式在提取特征时不考虑另一个文本的信息,更适合做大规模的语义相似召回,例如:DSSM ,ARC-I ,CNTN ,LSTM-RNN 等。
第二种范式首先通过深度模型提取两个文本的交叉特征,得到匹配信号张量,再聚合为匹配分数。这种范式同时考虑两个文本的输入信息,更适合做小规模的语义相似精排,例如:ARC-II ,MatchPyramid ,Match-SRNN ,Duet 等。
文本长度角度从文本长度角度出发,我们可以粗略的将文本分类为短文本和长文本。短文本包括“字词”,“短语”,“句子”等相对比较短的文本形式,长文本包括“段落”,“篇章”等相对比较长的文本形式。
短文本 v.s. 短文本短文本同短文本的常见比较形式有:关键词(字词)同文本标题(句子)的匹配,相似查询(句子)的匹配等。如果单纯的希望获取字符层面的差异,可以通过距离度量进行相似度比较。如果需要从语义的角度获取相似度,则可以利用表示学习对需要比对的文本进行表示,在通过语义向量之间的相似程度来衡量原始文本之间的相似度,详情可参见上文。
短文本 v.s. 长文本短文本同长文本的比较多见于文档的搜索,即给定相关的查询(字词),给出最相关的文档(段落和篇章)。对于这类问题常见的解决方式是对长文本利用 TF-IDF,BM25等方法或进行主题建模后,再同查询的关键词进行匹配计算相似度度。
长文本 v.s. 长文本长文本同长文本的比较多见于文档的匹配和去重,对于这类问题常见的解决方式是利用关键词提取获取长文本的特征向量,然后利用特征向量之间的相似度衡量对应文本的相似程度。在针对海量文本的去重,还以应用SimHash等技术对文本生成一个指纹,从而实现快速去重。
推荐阅读 1. pandas100个骚操作 2. 机器学习原创系列 3. 数据科学干货下载 过年刷千言数据集:文本相似度比赛
过年刷千言数据集:文本相似度数据集
1.比赛信息
“千言数据集:文本相似度” 是网易易智在 CCF 和百度联合举办的行业测评任务,这个榜单在2021年出提出。刚好过年有时间刷一下这个任务,由于时间有限,且已经有相当多的提交,最后在假期结束取得15/2000的成绩。
代码地址:https://github.com/xxyliuyang/qianyan_similarity
依赖: allennlp2.0.1、transfomers4.1.0、torch==1.7.1
2. 数据集介绍
具体数据来源查看官网数据介绍,这里介绍三个数据比较大的问题:千言数据集:文本相似度述
- 问题一:领域数据:BQ Corpus是金融领域相关的数据。
- 问题二:文本质量: PAWS-X的输入文本质量不高,存在很多中英混合句子,英文大部分是英文实体词汇。
- 问题三:label质量:观察部分数据,标签存在标注错误的情况。
3. 模型细节
3.1 数据增强:
交换句子度,将训练数据翻倍。
3.2 模型:
bert构建句子对模型,使用[CLS]的输出的向量做二分类。
3.3 训练:
使用R-drop正则方法,其训练逻辑类似于对抗训练。
3.4 模型融合:
使用robert,albet,macbert分别训练,然后将输出的概率求平均。
其他:可以提高的点 或者 没有用尝试。
还有很多方法没有尝试,读者可以自行尝试,进入前十还是不难。
1.领域数据进一步预训练。
条件是可以获取或者爬取相关领域的文本。
2.半监督训练(self-training的思想):
条件是获取相关数据。
3. simCSE的训练:
尝试simCSE的训练,但是没有收益,猜测是因为simCSE提高句子embedding的方法,然而这个任务是句子对的任务,两个任务的出发点有区别。如果有更好的解释,欢迎评论。
4.stacking模型融合:
更好的融合模型可以提高效果
以上是关于数据挖掘:文本相似性模型的主要内容,如果未能解决你的问题,请参考以下文章
R语言构建文本分类模型并使用LIME进行模型解释实战:文本数据预处理构建词袋模型构建xgboost文本分类模型基于文本训练数据以及模型构建LIME解释器解释一个测试语料的预测结果并可视化
R语言构建文本分类模型并使用LIME进行模型解释实战:文本数据预处理构建词袋模型构建xgboost文本分类模型基于文本训练数据以及模型构建LIME解释器解释多个测试语料的预测结果并可视化