01
—
搜索基本过程
对于网页搜索,传统的过程可以理解为:用户提交POST,搜索引擎返回RESPONSE。最开始的搜索过程,用户基本上是提供关键词,然后搜索引擎进行字符串匹配,给出一些含有这些关键词的候选集网页candidates,然后采用rank模型进行排序,将得分最高的网页靠前显示给用户(当然,某些给了钱做广告的网页就是例外了)。
然而,现在的用户搜索越来越口语化和知识化,搜索引擎慢慢也向QA(问答系统)进行转变,不再仅仅是字符串匹配的过程了。例如用户搜索“刘德华”的妻子这个问题,搜索引擎如何给出答案呢?(这个问题参加过百度校招的童鞋肯定很熟悉,基本上都会问一下的,有很多中方法例如倒排等)。所以单纯地做关键词匹配,基本难以给出实际的答案。这里需要建立知识图谱进行解决。
不过,对于搜索而言,搜索引擎给出答案的过程,基本包括检索、匹配、排序三个过程。在检索过程,如果是中文文本,需要完成包括中文分词等工作,分词完成之后进行实体(具体的人、物、地点等)检测,如果包含具体的实体,可以利用知识图谱给出答案;如果不包含实体就要对检索得到的候选集进行匹配(match),这里的匹配就是文本相似度的计算,也就是本文的重点介绍部分。匹配后得到分数,然后进行排序即可返回给用户了。
02
—
常见搜索方法
上一部分简单介绍了搜索的基本过程,这里主要讲讲搜索的具体方法。主要介绍字符串匹配、知识库、文本相似度三种方法。
03
—
文本相似度方法
文本相似度的计算方法有很多中,例如传统的TFIDF方法,还有预训练的word2vec方法,还有就是目前学术界流行的深度学习的方法,具体过程如下图所示,思想就是把用户POST用一个向量表示,把文本用向量表示。
一般来说使用BiRNN(双向RNN)分别得到用户POST的表达和文本的表达,然后计算两个向量的余弦距离,再排序给出最接近POST的文本候选集。
04
—
其他方法
除了上述描述的句子相似度方法外,还有一些传统的机器学习方法,例如主题模型LDA,将文本映射到不同的主题空间,给出相同主题的文本返回给用户。具体可以参见百度开源的Familia工业级文本相似度计算工具。