AI内参_40_038_查询关键字理解三部曲之解析
你好,我是洪亮杰。
今天我和你分享的主题是查询关键字,理解三部曲之解析。
这周我分享的核心内容是查询关键字理解。
周一介绍了查询关键字分类的基本概念和思想。
今天我来讲一个更加精细的查询关键字理解模块。
查询关键字解析。
如果说查询关键字分类是对查询关键字的宏观把握,那么对查询关键字的解析就是微观分析。
其实查询关键字解析是一类技术的统称。
我今天就来聊几个比较热的话题,我先说说查询关键字分割。
首先让我们设想这么一个场景,在英文的搜索引擎中,那果一个用户输入的是white house opening这个查询关键字。
那么一个用户的意图是什么呢?要想理解用户的意图,我们就得知道用户输入的单词的含义。
那么在上面这个查询关键字里,我们到底是分别理解每一个单词,white house和opening呢,还是white house和opening呢?或者white house opening,有可能就是一个整体里。
这个说的其实就是查询关键字分割这个概念。
在刚才的例子中,如何把white house opening进行分割,直接关系到搜索结果的质量。
试想,在一个比较标准的现代搜索引擎里,一般来说都会有一个模块,根据查询关键字来提取倒排索引中的文档。
这个阶段的提取数目一般是几百到几千,这个过程常常被称为检索流程。
当有了这些文档以后,现代搜索引擎会利用比较复杂的排序算法。
通常就是我们之前提到过的基于机器学习的排序学习模型来对文档进行重新排序。
你可以看到,在这样两个阶段的流程里,如果好的文档没有在第一阶段被提取出来,不管第二个阶段的功能有多强大,搜索的整体结果都不可能很好。
而对于检索流程而言,在倒排缩引中进行查询的关键就是使用什么单词或者词组进行查找。
用刚才的例子来说,就是看文档究竟是符合white house,还是white或house,还是white house opening.很明显,这三种情况得到的文档集合是不尽相同的。
如果用户的真实意图是搜索美国总统府白宫的开放时间,那么把这个搜索关键字给分割成white或house,很明显就会影响提取的文档集合。
那究竟该怎样做查询关键字分割呢?这里我介绍一篇论文,重新审视查询关键字分割。
在这篇论文里,作者们集中介绍一些主流的查询关键字分割技术,文章,非常值得精读。
下面我为你归纳一下要读第一种技术,就是尝试从查询关键字里面产生n元语法。
所谓n元语法,其实就是从一组词语中产生连续的子词语。
比如刚才的white house opening的例子,我们就可以做这个词组里面产生white house和house, opening两个二元语法。
而第一种基于于n关键法的方法,就是通过这些n元语法在一个大语料中出现的词频,来判断这个分割是否有意义。
当然,直接采用词频可能会比较偏好短的单词。
所以在论文中,作者们分别介绍了两种矫正词频的方法,一种是基于词频本身的矫正,一种是基于维基百科作为一个外部资源的矫正方式,两种方法的目的都是为了让长短语的打分,有机会高于短的单词。
文章中所需要的词频采用了谷歌二零零五年发布的n元语法语料。
也就是说,所有的单词出现的频率都是直接在这个语料中获得的。
第二种技术是基于短语互信息的方法。
互信息计算了两个随机事件的相关程度,在这里就是计算查询关键字中每两个相邻短语的互信息。
当这个互信息的取值大于某一个预设阈值的方法,我们就认为相邻的两个单词组成了短语。
互信息的计算需要知道某个单词出现的概率,这些概率是从微软发布的一个恩元语法语料获得的。
第三种技术则是基于条件随机场,条件随机场是机器学习。
著名学者乔治拉菲迪安德鲁麦卡伦和费尔南多佩雷拉在二零零一年发表的序列学习模型当中提出的条件。
随机场的基本思想是对输出的复杂标签进行建模,尝试从特征空间建立到复杂标签的一个对应关系。
在查询关键字分割的场景下,我们其实可以把复杂标签看作是从一个查询关键字到多个短语的多个二元决策问题。
这里的二元决策是指某一个备选短语是否可以作为分割的短语条件,随机场可以比较直观的对这类问题进行建模,而传统的二分分类器则很难对序列信息进行建模,我在这里就不详细展开条件。
随机场的介绍了,有兴趣的话可以翻看相关的论文。
刚才我聊了查询关键字理解最基本的分割问题,可以说分割问题是查询关键字理解的第一步,那么下一步则是更细致的分析查询关键字。
那我就来聊一聊查询关键字标注回到刚才的例子。
White house opening.我们其实不仅是想知道这个查询关键字可以分割为white house和opening,而且希望知道white house是一个建筑物的名字,或者一个地理位置的名字。
而opening则可能是一个名词,按指开门时间。
也就是说,我们希望为查询关键字的词组进行标注来获取其属性信息。
希望为查询关键字中分隔出来的词组进行标注的组件,就叫做查询关键字标注。
那么标注信息又是怎样帮助搜索结果的呢?试想一下,苹果价格这个查询关键字,这取决于用户搜索的场景。
如果苹果代表水果这个属性,那么这个查询的结果是希望找到水果的价格,可能还需要搜索引擎返回附近超市的一些信息。
但如果苹果其实代表的是手机,那这个查询的结果也许最好是返回苹果公司的官方销售网站。
你看,苹果所代表的属性不同,最优的返回结果可能会有非常大的差别。
对查询关键字进行标注的方法也有很多,我这里再推荐一篇经典的论文,使用伪相关反馈,针对搜索查询关键字进行结构化标注。
这篇论文利用一个叫做PRF的方法进行标注。
这里面的一个技术难点是查询关键字的信息,实在是太少,需要利用大量的辅助信息来进行标注。
因此,PRF作为一个技术在这里得到了应用。
另外一个主流的查询关键字,标注的方法依然是利用条件随机场。
我们前面讲了条件随机场是很好的序列建模工具。
那么在这里以苹果价格为例,条件随机场是需要预测标签是否是手机名词,还是水果名词这样的组合输出结果。
而传统的二分或者多类分类器,很难捕捉到这里的序列信息条件,随机场就是解决这方面的利器。
于是我们需要做的就是为查询关键字构建特征。
然后直接放入条件,随机场中有一点需要注意条件,随机场的应用成功与否,与数据的多少有很大的关系。
因此,构建一个有标注信息的数据集,就变成了查询关键字标注的一个核心挑战。
今天我为你讲了现代搜索技术中的一个重要环节,那就是查询关键字理解中的查询关键字解析问题。
你可以看到查询关键字解析,从大类上分为查询关键字分割和查询关键字标注两个比较重要的模块,一起来回顾一下要点。
第一,简要介绍了查询关键字分割的场景和三种主要技术,分别是n元语法、互信息和条件随机场。
第二,详细介绍了查询关键字标注的场景和主要技术,包括利用PRF和利用条件随机场两种主流的标注方法。
最后给你留一个思考题,我举了英语的查询关键字的解析问题。
那么对于中文而言,又有哪些特殊的挑战呢?欢迎你给我留言,和我一起讨论。