前言
文本相似是NLP工业化中的一个基本任务,很多应用需要计算两文本之间的相似程度,包括文本检索中相似文本的去重、问答系统中query与标准模板问题的匹配、句子对语义判断等。
根据不同的标准可以将该任务划分为不同的类别:如根据文本长度的不同,可分为短文本相似度(短语/句子级)和长文本相似度(段落/文章级);又如根据特征工程的构建方式不同,可分基于统计特征生成(TF/TF-IDF/Simhash)和基于语义的特征模型(word2vec、doc2vec)。同样相似度的计算方式也有多种,如最小编辑距离、欧氏距离、汉明距离、余弦距离等。本期文章以新闻类数据相似任务的实际开发过程为顺序展开介绍。
统计特征 + 汉明距离
《DetecTIng near-duplicates for web crawling》
Simhash是一种局部hash算法,在2002年被Charikar提出,谷歌在2007年将该算法用于识别相似内容网页数据上,证明了Simhash在该类问题上的实用性。Simhash的核心思想是,通过分词选用文中关键词来代表一篇文章,然后将这些关键词hash编码为固定长度的二进制序列,然后在通过设置好的权重对关键词的编码进行加权,简单合并后再次降维为二进制数据,最后通过汉明距离计算不同文章之间的相似性。至于Simhash的数学推导在各个博客中都有较为详细的介绍,这里便不再赘述。其中,有关关键词选取和权重设置上,目前常见的方式是计算文章中各个词的TF-IDF值,取topN的内容作为关键词,并以TF-IDF值做为权重。
上述以统计特征结合汉明距离的方式能够在一定程度上反应文章的相似性,但在实际尝试中仍旧存在部分问题。
TF-IDF算法是创建在这样一个假设之上的:对区别文档最有意义的词语应该是那些在文档中出现频率高,而在整个文档集合的其他文档中出现频率少的词语。如果特征空间坐标系取tf词频作为测度,就可以体现同类文本的特点。引入了逆文本频度idf的概念,以tf和idf的乘积作为特征空间坐标系的取值测度,并用它完成对权值tf的调整,调整权值的目的在于突出重要单词,抑制次要单词。
从理论上讲,Simhash最重要的一步在于如何选取有代表性的关键词。在分词时使用的TF-IDF算法,本质上idf是一种试图抑制噪声的加权,并且单纯地认为文本频率小的单词就越重要,文本频率大的单词就越无用,显然这并不是完全正确的。idf的简单结构并不能有效地反映单词的重要程度和特征词的分布情况,其无法很好地完成对权值调整的功能,所以TF-IDF法的精度并不是很高。
从实际测试结果上讲,在医药领域中,某些关键词语存在相近的含义、某些代表医药项目进度的词汇或者表示否定语义的词汇内容会很大程度上左右两篇文章的相似结果。这些因素在Simhash算法中都无法加以显式的考虑和控制。
语义特征 + 余弦距离
《Distributed RepresentaTIons of Sentences and Documents》
在最开始的尝试中,提及了基于IF-IDF的Simhash算法无法提供文章或者词汇中的语义信息。想要利用文章或词汇中的语义信息自然想到了word2vec。word2vec是基础的文本表示方式之一。如果对一篇文章进行embedding,那么词向量直接平均或采用tf-idf进行加权平均都能够得到一篇文章的向量表示。但考虑到上述在Simhash中对TF-IFDF加权能力的分析,还是希望能够得到一种更加细粒度的向量表示方法。
上述提及的这篇文章,作者受word2vec的启发,提出doc2vec。模型能够学习长文本的连续向量表示,并适用于句子、段落和文章等不同长度的文本数据。具体的做法便是,提出了一种称为 the Distributed Memory Model of Paragraph Vectors(PV-DM)的模块部分,该部分存储不同段落的特征向量,该向量与窗口内其他词向量拼接输入模型,进行梯度更新。
doc2vec的优势在于能够在大规模的语料上无监督训练、考虑到了词义信息并具备局部(窗口大小)的语序信息。缺点在于文本向量D'也是需要有反向传播的过程,若未进行随机化固定,每次产生的文本向量会不同,影响文本相似度的计算。此外,从实际的结果上看,doc2vec与word2vec一样有OOV问题,对于一些固定结构,词不同的文本来说,很容易产生相同的文本向量。
语义特征 + 主题信息 + 余弦距离
《P-SIF: Document Embeddings Using ParTITIon Averaging》
结合具体任务所设计的数据内容,我们发现与传统文本内容相比,新闻数据所表述的是一个主题明确的事件。如医药公司某产品研发进度、不同医药公司之间的合作事宜等等。因此,在向量表示中加入主题信息,也能够影响文章的相似性。
上述提及的该文章认为,使用词向量的加权平均传统方式对句子语义信息的表示具有较好的效果,但采用同样的方法对文章级别的语义表示效果不佳。主要原因在于文本中包含有表征不同主题的word,不同主题下的word向量其对应的权重因子不同。因此作者提出P-SIF,通过主题聚类的思想,产生不同主题下的权重因子,对每个主题下的词向量进行concat,作为该word的最终向量表示。
图中举例了5种文本主题下的主题权重分布,对应不同主题下,有不同的主题权重。单个主题对应的词向量采用w2v、tf-idf、主题权重因子的乘积表示,最终文本表征表示为各个词向量的加权求和即可。其中主题权重因子采用ksvd的方法分解得到,需要指定主题的数目。
在实际的测试过程中发现,加入了主题这个变量,可以更细粒度的表征文本,相比基于tf-idf的w2v表征文本是一种进步;缺点主要包括OOV、主题数不好确定,语义表征能力不足,特别是对各个词向量加权求和的文本表征不容易平衡单个词的关键作用。例如 对于两篇文章基本雷同,但涉及的某个关键词不同,得到的两篇文章的相似性会比较高,如果这个词在训练阶段没有收录到词典,则会出现相似度为1的情况。需要借助后续关键词识别的策略,进行文本间区分,补充其表征能力不足的问题。
语义特征 + 主题信息 + 余弦距离 + 实体信息
如果继续深挖新闻数据有什么特征,那么必定会考虑到新闻数据特点,即规范的新闻都会有五个基本的要素:时间、地点、事件、起因、人员(或组织)。因此,如果能够从新闻的导语或者标题内容中对上述关键因素进行抽取,那么就能较准确地判断两新闻之间的相似与否。故此,在实际开发的过程中,我们尝试在 「语义特征 + 主题信息 + 余弦距离」方案的基础上,增加对通用实体类型的抽取。
实体内容的抽取在本任务中起到是一个提供辅助信息的作用。因此暂时并没有讲该模块和文章的embedding表示有过于紧密的结合。对于NER的抽取任务,可参考过往我们在《中文NER碎碎念—聊聊词汇增强与实体嵌套》 的讨论,本文不再展开赘述。
预训练语言模型获取语义特征
对于语义相似的任务,在工业生产中很难获得大量的标注数据用于有监督的训练。为了提升模型语义表征能力,我们还可以把视线投向大规模预训练的语言模型上。这里也仅提供一个思路,尝试使用无监督语义相似度的BERT-flow或者BERT-whitening来获取语义特征。
《On the Sentence Embeddings from Pre-trained Language Models》
考虑到,在得到句子的向量表示后,常常使用余弦相似度来比较或者排序。但余弦相似度是在标准正交基中使用的。因此,如果想要使用BERT所得到的句向量来衡量句子之间的相似性,需要使得向量空间的基底在各个分量上是均匀的、独立的,表现出来一种“各向同性”的特质。flow模型实际上是一个向量变换模型,而作者主要的想法是要用flow模型来校正BERT得到的句向量的分布。
《Whitening Sentence Representations for Better Semantics and Faster Retrieval》
BERT-whitening则认为,flow模型中涉及到的逆变换和雅可比行列式计算实际需要满足变换简单、易计算的特点。因此每一层的非线性变换能力就“很弱”,为了保证充分的拟合能力,模型就必须堆得非常深。但实际上BERT-flow所使用的模型计算量并大。因此,作者提出可以使用一种简单的线性变换(相当于白化 *** 作)来浅层地对BERT的向量进行转换,能到达和BERT-flow接近甚至超越的效果。
总结
新闻长文本的表征可以用于相似度的计算、文本分类、文本聚合等方向,目前笔者做的方向是相似度去重,即从海量的新闻中发现相似的医药新闻,提升关键数据的采集和处理效率。相似新闻包括两个含义,一方面是字符级别的相似,可以直接采用基于字符的对比方法,如Simhash、编辑距离等,其难点在于部分新闻存在篇幅,部分关键词不同。另一方面是新闻涉及的事件相似,字符相似度不高,这种不仅需要有一定的语义理解,同时需要有关键实体的识别。基于大规模训练的语言模型对语义的理解天生要高于字符和基于w2v的方式,而预训练模型在长文本的复杂度和效果的突破将直接为长文本的下游处理带来新的方向。
审核编辑 :李倩
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)