初识检索

信息检索技术诞生于人们对自身所缺乏的信息的需求。当人们碰到问题时,首先会从自己已掌握的知识库中搜寻解决方案,如果找不到,便有了从外部供应源搜寻信息的需求。从前,供应源的典型代表为图书馆,而今则是互联网。信息检索就是基于这一供需关系而诞生的学科。

搜索行为的本质解析

日常使用的搜索引擎(如Google、百度、Bing)可抽象为一个基础模型:基于用户输入的文本(查询语句),从结构化文档集合中筛选出相关性最高的内容。但想要将这个自然语言描述的模型进行数学建模,并转化为计算机可执行的算法代码,其复杂度相当之高。

归根结底,构建一个足够强大的信息检索系统的困难在于:

针对异构数据,难以找到一种通用的表示与算法。

搜索引擎不具备世界知识,难以理解用户的检索需求。

用户可能并不能提供准确的搜索意图,供需端存在沟通障碍。

通用搜索引擎往往都难以避开上述难点,因而传统搜索引擎往往存在一定的使用门槛,从互联网浩如烟海的信息中找到自己需要的那一份是件十分困难的事情。

好消息是,我们能够总结出一个针对上述难点的通用解法,也就是找到一个通用的知识表示与推理的框架,用于数据库的构建与查询的编码。事实上,这一解法近年来已经有了个颇有希望的答案,亦是本书的一大重点,即利用预训练模型计算语义向量。

文本向量化实际上是21世纪才诞生的思想,或者说直到2017年Transformer模型诞生,它才逐渐成为主流。向量在数学意义上有着众多良好的性质,并且是数值计算的宠儿。如今信息检索中的知识表示即在文本与向量间建立一个映射关系,而推理则自然地转变为向量之间相似度的计算,故而最重要的问题就变为如何建模这一文本到向量的映射。深度学习作为工具,让自动挖掘文本深层语义特征成为可能,完美满足了检索模型的需求,称得上天作之合。

检索框架的数学表述

我们用稍微数学一点的语言来描述信息检索的整体流程。上节已经提到,检索的本质就是将查询语句与文档都编码为向量后计算相似度,而向量的计算依赖于参数化的深度学习模型。我们将这一参数模型记为 f(⋅;θ):string→RN。

Hint

在代码的实际实现中,我们一般并不会直接把字符串传入模型,而是会经过名为tokenization的过程。但在这里为了简化问题,我们暂且将其视为直接传入字符串。

信息检索系统的核心可建模为排序函数:

r:(q,d)↦sim(f(q;θ),f(d;θ))∈R[0,1]

其中:

q:查询语句(字符串)

d:文档对象(数据结构依场景而定)

s:标准化相似度

该函数需满足:当文档内容与查询意图越相关,输出值越趋近于1。例如搜索“神经网络应用“时,深度学习教程的得分应高于普通编程手册。

Hint

这里我们描述的是信息检索中的双塔模型,将查询语句与文档分别独立编码。事实上还有着单塔模型,相比双塔模型增加了上下文信息,但要理解单塔模型需要一定的生成模型知识,在此我们不多加叙述。

结语

在本章中希望传递给读者的一个核心思想是,现代信息检索最为核心的一个问题就是如何为文本建立一个足够好的数学表示,使文本间能够进行可靠的相似度计算。在人工智能视域下,这一问题也可以表述为如何训练出一个足够好的词嵌入模型,能够挖掘出文本的深层语义信息,并将其用于下游应用中。

具体的技术细节我们会在后续的章节中进行讨论。