微信公众号:NLP从入门到放弃
本文涉及到的代码:https://github.com/DA-southampton/NLP_ability/blob/master/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86/%E6%96%87%E6%9C%AC%E5%8C%B9%E9%85%8D_%E6%96%87%E6%9C%AC%E7%9B%B8%E4%BC%BC%E5%BA%A6/src/models.py
如果想要获取本文PDF版本,查看这个文章获取对应文章PDF:https://mp.weixin.qq.com/s?__biz=MzIyNTY1MDUwNQ==&mid=2247484174&idx=1&sn=da89d66cb09b39297144dd50cfe10820&chksm=e87d3128df0ab83eeaa5fa1c3bcf6ffb1bb3b46d1471f26e3cfb92c2a0b1e686876cc2f809ff&token=1539851539&lang=zh_CN#rd
1. 前言-为什么需要文本匹配/文本相似度判定使用场景
先问一个核心问题,为啥需要文本相似度/文本匹配?换句话说,文本匹配的应用场景有哪些?
举个例子,比如说海量文本去重。
在一些社交媒体,某个话题之下,存在大量的营销号的文本,这些文本存在一个特点,内容大同小异,都在说同一个事情。
我在对这些文本进行处理的时候,本质上只需要处理其中的一条就可以,这样可以极大提高我的处理速度。
那么问题来了,我如何判定句子a和句子b/c/d/e等等是在说同一个事情?
再举个例子,老生常谈,搜索场景,你在某度搜索“深度学习如何入门?”,某度如何返回和你这个问题最接近的问题/文章/博客等等内容网页?
这些本质上都是在做文本相似度的判定或者说文本匹配,只是在不同场景下,有着不同办法不同的特色。
文本匹配,并不是简简单单的词汇层次的匹配:比如“深度学习如何入门”和“如何入门深度学习”。
还会有语义方面的匹配考虑,比如说“我想撒尿去哪里啊?”和“我想去卫生间”。这两句话在问答系统中,匹配到标准问题都是“卫生间在哪里”这个问题。
对文本匹配方法来说,我们一般可以使用两种:无监督和有监督。
2.无监督文本匹配
首先我们来谈一下无监督的方法。
对于无监督的文本匹配,我们需要实时把握两个重点:文本表征和相似函数的度量。
文本表征指的是我们将文本表示为计算机可以处理的形式,更准确了来说是数字化文本。而这个数字化文本,必须能够表征文本信息,这样才说的通。
相似函数的度量就是你选择何种函数对文本相似度进行一个判定,比如欧氏距离,余弦距离,Jacard相似度,海明距离等等
我大概梳理了一下无监督的几种比较典型的方法,