1. 传统的文本匹配
最近在了解文本匹配相关一些实现和算法。在信息检索系统里面,如何厘清文本的相关性,是一个非常关键的问题。所谓的相关性,主要包括两个方面, 一个方面是文本相关性,还有一个语义的相关性。在经典的模型里面,比较常见的做法是向量空间模型(vector space model)。
向量空间模型, 原理则是将query和doc的文本映射成同一个数字向量空间,然后通过consine或者Jaccard, 实现相似度距离的计算。步骤如下:
- 将query分词, 然后每个词项设置对应的权重,得到词向量:(q1-w1, q2-w2, q3-w2)。这里权重的设置不妨设,每个词项的权重都是1。
- 然后将doc分词, 然后计算每个doc词项的term的bm25, 然后以这个bm25作为这个词的向量,如果该词在query的向量空间中没有出现,则设置为0。最终将向量空间转化成和query的向量空间维度保持一致。
- 然后通过cosine和jaccard,获取两个向量的距离,作为得分。
这种做法简单明了,实操空间也比较大, 上述的做法相当于每个词都是孤立的存在。可以在此基础之上添加一些规则,包括词的连续降权,词的位置降权,还有就是完全匹配提权、部分匹配提权的规则。
在垂直搜索领域,有sug词的提示,而query词经过了nlp的意图识别和实体识别,已经完成了大部分query词的纠错。不过呢,nlp也是预测失败的时候, 无法完全覆盖所有的case。
2. 深度文本匹配
上面的传统经典的模型,是基于向量空间模型的,方法单纯粗暴,加上规则方法,可以实现一个baseline的方案。为了挖掘更深层次的文本匹配,目前很多搜索引擎都引入了深度学习的模型,来解决问题和提升效果。
这里简单介绍一个网站,可以看到大牛的paper及其code的实现,可谓是集原理和实践于一体。https://paperswithcode.com
搜索对应的课题,例如information retrieval, 就可以看到很多信息检索的最新的论文和论文的实现方法。同时也可以实操一把,复现论文的场景和效果。
这里要介绍的一个项目是
MatchZoo: A Toolkit for Deep Text Matching
这个工具, 主要致力于解决包括:问答系统、信息检索、意图识别等等常见的工业问题。