NLP之文本匹配及语义匹配应用介绍

1、什么是文本匹配?

文本匹配是自然语言处理中一个重要的基础问题,可以应用于大量的NLP任务中,如信息检索、问答系统、复述问题、对话系统、机器翻译等,这些NLP任务在很大程度上可以抽象为文本匹配问题。

例如网页搜索可抽象为网页同用户搜索Query的一个相关性匹配问题,自动问答可抽象为候选答案与问题的满足度匹配问题,文本去重可以抽象为文本与文本的相似度匹配问题。

2、文本匹配方法概述

2-1 传统文本匹配方法

传统的文本匹配技术有BoW、VSM、TF-IDF、 BM25、Jaccord、SimHash等算法,如BM25算法通过网络字段对查询字段的覆盖程度来计算两者间的匹配得分,得分越高的网页与查询的匹配度更好。主要解决词汇层面的匹配问题,或者说词汇层面的相似度问题。而实际上,基于词汇重合度的匹配算法有很大的局限性,原因包括:

  • 词义局限:“的士”和“出租车”虽然字面上不相似,但实际为同一种交通工具;“苹果”在不同的语境下表示不同的东西,或为水果或为公司
  • 结构局限:“机器学习”和“学习机器”虽然词汇完全重合,但表达的意思不同。
  • 知识局限:“秦始皇打Dota”,这句话虽从词法和句法上看均没问题,但结合知识看这句话是不对的。

这表明,对于文本匹配任务,不能只停留在字面匹配层面,更需要语义层面的匹配。而语义层面的匹配,首先面临语义如何表示,如何计算的问题。

2-2 主题模型

属于无监督技术

上世纪90年代逐渐流行起来语义分析技术Latent Sementic Analysis, LSA),开辟了一个新思路。将语句映射到等长的低维连续空间,可在此隐式的潜在语义空间上进行相似度计算。

此后,又有PLSA(Probabilistic Latent Semantic Analysis)、LDA(Latent Dirichlet Allocation)等更高级的概率模型被设计出来,逐渐形成非常火热的 主题模型 技术方向。

这些技术对文本的语义表示形式简洁、运算方便,较好地弥补了传统词汇匹配方法的不足。不过从效果上来看,这些技术都无法替代字面匹配技术,只能作为字面匹配的有效补充。

2-3 深度语义匹配模型

随着深度学习在计算机视觉、语音识别和推荐系统领域中的成功运用,近年来有很多研究致力于将深度神经网络模型应用于自然语言处理任务,以降低特征工程的成本。

基于神经网络训练出的Word Embedding来进行文本匹配计算,训练方式简洁,所得的词语向量表示的语义可计算性进一步加强。但是只利用无标注数据训练得到的Word Embedding在匹配度计算的实用效果上和主题模型技术相差不大。他们本质都是基于共现信息的训练。另外,Word Embedding本身没有解决短语、句子的语义表示问题,也没有解决匹配的非对称性问题。

一般来说,深度文本匹配模型分为两种类型: 表示型和交互型

表示型

表示型模型更侧重对表示层的构建,会在表示层将文本转换成唯一的一个整体表示向量。
在这里插入图片描述

  • representation-based类模型,思路是基于 Siamese 网络,提取文本整体语义再进行匹配
  • 典型的Siamese结构,双塔共享参数,将两文本映射到统一空间,才具有匹配意义
  • 表整层进行编码,使用MLP, CNN, RNN, Self-attention, Transformer encoder, BERT均可
  • 匹配层进行交互计算,采用点积、余弦、高斯距离、MLP、相似度矩阵均可
  • 经典模型有:DSSM, CDSSM, MV-LSTM, ARC-I, CNTN, CA-RNN, MultiGranCNN
  • 优点:可以对文本预处理,构建索引,大幅度降低在线计算耗时
  • 缺点:失去语义焦点,易语义漂移,难以衡量词的上下文重要性。

相关算法

  • DSSM: 2013年由微软Redmond研究院发表,全称DSSM(Deep Structured Semantic Models)
  • CDSSM:2014年由微软提出,弥补了DSSM会丢失上下文的问题,全称Convolutional latent semantic model(又称CLSM)
    • 主要将DNN替换成了CNN
  • MV-DSSM:2016年由微软发表,MV为Multi-View,一般可以理解为多视角的DSSM
  • ARC-I:2014年由华为若亚方舟实验室提出
交互型

交互性模型摒弃后匹配的思路,假设全局的匹配度依赖于局部的匹配度,在输入层就进行词语间的先匹配,并将匹配的结果作为灰度图进行后续的建模。
在这里插入图片描述

  • interaction-based类模型,思路是捕捉直接的匹配信号(模式),将词间的匹配信号作为灰度图,再进行后续建模抽象
  • 交互层,由两文本词与词构成交互矩阵,交互运算类似于 attention,加性乘性都可以
  • 表征层,负责对交互矩阵进行抽象表征,CNN、S-RNN均可
  • 经典模型有:ARC-II、MatchPyramid、Match-SRNN、K-NRM、DRMM、DeepRank、DUET、IR-Transformer、DeepMatch、ESIM、ABCNN、BIMPM
  • 优点:更好地把握了语义焦点,能对上下文重要性进行更好的建模
  • 缺点:忽视了句法、句间对照等全局性信息,无法由局部匹配信息刻画全局匹配信息

相关算法

  • ARC-II:2014年由华为诺亚方舟实验室提出
  • MatchPyramid:2016年由中科院提出
  • ABCNN:2016年由IBM提出
  • ESIM:2017年由朱晓丹提出

3、语义匹配应用介绍

工业界的很多应用都有在语义上衡量文本相似度的需求,我们将这类需求统称为“语义匹配”。
根据文本长度的不同,语义匹配可以细分为三类:

  • 短文本-短文本语义匹配
  • 短文本-长文本语义匹配
  • 长文本-长文本语义匹配

基于主题模型的语义匹配通常作为经典文本匹配技术的补充,而不是取代传统的文本匹配技术(上文有提到)。

3-1 短文本-短文本语义匹配

该类型在工业界的应用场景很广泛。如,
网页搜索中,需要度量用户查询(Query)和网页标题(web page title)的语义相关性;
Query查询中,需要度量 Query和其他 Query之间的相似度。

由于主题模型在短文本上的效果不太理想,在短文本-短文本匹配任务中 词向量的应用 比主题模型更为普遍。简单的任务可以使用Word2Vec这种浅层的神经网络模型训练出来的词向量。

如,计算两个Query的相似度, q1 = "推荐好看的电影"与 q2 = “2016年好看的电影”。

  1. 通过词向量按位累加的方式,计算这两个Query的向量表示
  2. 利用余弦相似度(Cosine Similarity)计算两个向量的相似度。

对于较难的短文本-短文本匹配任务,考虑引入有监督信号并利用“DSSM”“CLSM”这些更复杂的神经网络进行语义相关性的计算。

总结

  • 使用词向量按位累加方式获取句向量,使用距离度量获取相似度
  • 利用DSSM等方法进行匹配度计算

3-2 短文本-长文本语义匹配

短文本-长文本语义匹配的应用场景在工业界非常普遍。例如,
在搜索引擎中,需要计算用户 Query 和一个网页正文(content)的语义相关度。由于 Query 通常较短,因此 Query content 的匹配与上文提到的短文本-短文本不同,通常需要使用短文本-长文本语义匹配,以得到更好的匹配效果。

在计算相似度的时候,我们规避对短文本直接进行主题映射,而是根据长文本的 主题分布,计算该分布生成短文本的概率,作为他们之间的相似度。
公式
其中,q表示Query,c表示content, w表示q中的词, z k z_k zk表示第k个主题

案例1-用户查询-广告页面相似度

在线广告场景中,需要计算用户查询和广告页面的语义相似度。这时可应用sentence LDA,将广告页面中各个域的文本视为句子,如下图所示,红框内为句子。

  1. 通过主题模型学习得到广告的主题分布
  2. 使用上面的公式计算查询和广告页面的语义相似度

该相似度可作为一维特征,应用在更复杂的排序模型中。
在这里插入图片描述
在下图图4中,对 query=“婚庆拍摄”,我们对比了不同特征组合的结果。其中作图为 Baseline, 右图则是引入Sentence LDA相似度(基于Sentence LDA计算query与广告页面的相似度)后得到的结果。可以看出,相比于Baseline,引入新特征后召回的结果更符合 query语义,能更好的满足用户需求。
在这里插入图片描述

案例2:文档关键词抽取

在分析文档时,往往会抽取一些文档的关键词做标签(tag),这些tag在用户画像和推荐任务中扮演着重要角色。从文档中抽取关键词,常用方法是TFIDF信息。此外,还可利用主题模型,估计一个文档产生单词的概率作为该单词的重要度指标:
p ( w ∣ d ) = ∑ k = 1 K p ( w ∣ z k ) p ( z k ∣ d ) ( 2 ) p(w|d)=\sum^{K}_{k=1}{p(w|z_k)p(z_k|d)} \qquad (2) p(wd)=k=1Kp(wzk)p(zkd)(2)
其中, d d d表示文档内容, w w w表示词, z k z_k zk表示第k个主题。但由于 p ( w ∣ z k ) p(w|z_k) p(wzk)常被高频词主导,导致一些语义上重要的低频词难以被选为关键词。为了解决上述问题,我们利用TWE训练得到主题和单词的向量表示,再使用公式(3)计算每个词与文档主题的相似度作为衡量语义重要度的指标。
S i m i l a r i t y ( w , d ) = ∑ k = 1 K c o s ( v m ⃗ , z k ⃗ ) p ( z k ∣ d ) ( 3 ) Similarity(w, d) = \sum^{K}_{k=1}cos(\vec{v_m},\vec{z_k})p(z_k|d) \qquad (3) Similarity(w,d)=k=1Kcos(vm ,zk )p(zkd)(3)
其中, v m ⃗ \vec{v_m} vm 表示 w w w对应的词向量, z k ⃗ \vec{z_k} zk 表示主题 z k z_k zk对应的主题向量,并且词向量与主题向量处于同一个向量空间中。

下面一段文字是我们随机从网上取的一个新闻片段,对其进行分词处理以及应用主题模型LDA 或 TWE后,然后分别选取公式(2)或公式(3)计算每个词的重要度。在表5中,我们列出了 LDATWE模型计算得到的 Top-10 关键词集合 (已去除停用词)。从表中可以看出,采用 TWE 得到的 Top-10 关键词 能更好地体现出新闻的重要信息。

台湾《自由时报》4 月 13 日综合外媒报道称,全美发起拒搭联航运动,并在社群网站上 发酵。居住在美国纽约的网友许柏祥表示,本身是联合航空会员,在得知联航将乘客拖下飞 机后,就向航空公司取消下个月的预订班机,并称“我不想被人打!”许柏祥说,他完全不能 接受航空公司的处理方式,而且是对待一名 69 岁的老人。报道称,联航会员“剪卡”风潮也 席卷社群网路,许多网友将自己的联航会员卡剪掉抵制。网友萨赫哈(Aninda Sadhukhan)表 示,身为联航多年的乘客,在看到影片后,让他决定不再搭联航,并将会员卡放入碎卡机内。 另一名会员布朗(Phyllis Brown)表示,呼吁民众剪掉联航会员卡,并改搭其他航空公司班机,以此抗议联航暴力对待乘客。

在这里插入图片描述
总结

  • 利用主题模型或者其他方法如TF-IDF方法获取长本文的主题分布/提取关键词
  • 计算Querry与文档主题/提取关键词之间的相似度

3-3 长文本-长文本语义匹配

通过使用主题模型,我们可以得到两个长文本的主题分布,再通过计算两个多项式分布的距离来衡量它们之间的相似度。衡量多项式的距离 可以利用Hellinger DistanceJensen-Shannon Divergence(JSD)

案例3:新闻个性化推荐

长文本-长文本的语义匹配可用于个性化推荐的任务中。在互联网应用中,当我们积累了用户大量的行为信息后,这些行为信息对应的文本内容可以组合成一篇抽象的“文档”,对该“文档”进行主题映射 后获得的 主题分布 作为用户画像

例如,在新闻个性化推荐中,我们可以将用户近期阅读的新闻(或新闻标题)合并成一篇长“文档”,并将该“文档”的主题分布作为表达用户阅读兴趣的用户画像。如图5所示,通过计算每篇实时新闻的主题分布与用户画像之间的Hellinger Distance,可作为向用户推送新闻的选择依据,达到新闻个性化推荐的效果。
在这里插入图片描述
总结

  • 分别计算长文本的主题分布
  • 计算两个多项式分布之间的距离作为相似度度量

知识点

Hellinger Distance(海林格距离):又称Bhattacharyya distance,因为作者的姓氏叫Anil Kumar Bhattacharya。在概率和统计学中,海林格距离被用来衡量两个概率分布之间的相似性,属于f-divergence的一种。而f-divergence又是什么呢?,一个f-divergence是一个函数 D f ( P ∣ ∣ Q ) D_f(P||Q) Df(PQ)用来衡量两个概率分布 P P P Q Q Q之间的不同。

额,还是不太懂,就是度量多项式的距离

参考资料:
百度NLP | 神经网络语义匹配技术
云知声:深度文本匹配在智能客服中的应用 | 机器之心
文本匹配(语义相似度/行为相关性)技术综述
语义匹配应用介绍 · baidu/Familia Wiki
科普:浅谈 Hellinger Distance

  • 37
    点赞
  • 232
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: Python 中有许多第三方库可用来计算文本相似度。常用的有: - `fuzzywuzzy`,它使用 Levenshtein 距离算法计算字符串之间的相似度。 - `spaCy`,它使用 Cosine Similarity 算法计算文本之间的相似度。 - `gensim` 中的 `doc2vec` 或 `word2vec`,它使用神经网络算法计算文本之间的相似度。 需要注意的是,文本相似度并不是唯一的评估方法,具体使用哪个库和算法还要根据你的场景来决定。 ### 回答2: Python语言有很多用于匹配文本相似度的库和工具。其中最常用的包括difflib、fuzzywuzzy、nltk和gensim。 difflib库提供了一些类和方法用于比较和匹配文本字符串的差异程度,比如SeqMatcher类可以用来计算两个序列之间的相似度,get_close_matches函数可以用来查找最接近的匹配项等。 fuzzywuzzy库是基于Levenshtein距离算法的文本匹配工具,可以衡量两个字符串之间的编辑距离,提供了一些模糊匹配的函数,如ratio函数用于计算两个字符串的相似程度,返回一个相似度百分比。 nltk库是一个自然语言处理工具包,其中包含了丰富的文本处理和匹配功能。它提供了一些用于标记文本、计算词频、提取关键词、词干化和词向量化的函数和类。 gensim库是一个用于语义建模和相似度计算的库,它提供了一些算法和模型,如word2vec和doc2vec,可以用来将文本转换为向量表示,并计算向量之间的相似度。 这些库与工具可以根据不同的文本相似度计算需求进行选择和使用。可以根据具体情况,选择合适的算法和模型,对文本进行预处理和特征提取,然后使用相应的函数和类进行相似度计算。 ### 回答3: Python中有多种方法来进行文本相似度的匹配,常用的方法包括以下几种: 1. 余弦相似度(Cosine Similarity):计算两个向量的夹角余弦值,值域在[-1, 1]之间。可以使用Python中的scipy库中的cosine函数来计算。 2. 编辑距离(Edit Distance):通过计算将一个字符串转换为另一个字符串所需的最少编辑操作次数来衡量文本之间的相似度。可以使用Python中的Levenshtein库来计算编辑距离。 3. Jaccard相似度(Jaccard Similarity):计算两个集合的交集大小除以并集大小得到的相似度指标。可以使用Python中的set数据结构来计算。 4. 文本向量化(Text Vectorization):将文本转换为向量表示,常用的方法有词袋模型(Bag-of-Words)和TF-IDF。可以使用Python中的sklearn库中的CountVectorizer和TfidfVectorizer来实现。 除了这些常用的方法外,还有其他更复杂和高级的算法可以实现文本相似度匹配,如基于深度学习的模型(如BERT、Word2Vec等)和基于语义的模型(如WordNet、GloVe等),这些方法需要更复杂的模型和技术来实现。 总结起来,Python提供了多种库和工具来实现文本相似度匹配,可以根据具体需求选择合适的方法和算法来进行实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值