基于维基百科的用户意图分类

关于“用户查询意图分类(识别)”,在很久以前就开始关注了,最近开始阅读一些文章。前期得文章中,多半在特征抽取中,提到的都是用其他得资源比如查询日志比较多。今天偶然读了一篇文章,以一种很特别的方法来解决这个问题,特地简单记录下来。

查询意图分类,其实在最开始Booder建立的分类体系,都是非常巨大的,比如典型的“导航类”,“资源类”和“事务类”。每个类别都非常的巨大,而且在识别过程中,多半得方法除了查询本身的一些特征需要利用之外,还需要大量的额外的资源来进行辅助,比如最多的就是查询日志。我个人觉得,分类得完备性和独立性都不是最主要的问题,最主要的还是在于你该怎么用这个分类。我是一个典型的实用主义者,不想如一个学者一样的研究这些所谓的理论。其实就目前的互联网发展来看,全文检索得技术已经遇到了瓶颈,更多的注意力已经转移到了垂直搜索中。这就是所谓的最开始是一个很野蛮的生长,占领了市场之后,真正考验你能否存活下去的是你是否能够在独立的领域在精细化。这个很关键,比如你要查询职位信息,你会首先选择百度么;或者你要查询的是电子商务的信息,你会首先选择百度么?这些问题都很好的反映了目前的趋势,就是垂直搜索会让人更加放心的去使用。但是一般的用户已经习惯于在全文检索中输入,期望得到的是一个很专业的回答。但是搜索引擎很大一个特点就是假设查询词的独立性,基于关键字来进行检索,甚至还会加入一些价格的因素来重排序答案。如果搜索引擎在提交的前端,就能够识别初这个查询属于的领域,那么再提交给一个垂直搜索引擎,那岂不是很美好。当然,正如我刚才所说的,没有必要将这些查询全都很准确的分类到某一个类别中,针对特定的垂直搜索引擎的特长领域,然后再在这个领域中进行诸如特征抽取之类的工作。

言归正传,一片论文是Understanding User’s Query Intent with Wikipedia,作者是微软亚洲研究院的Jian Hu, Gang Wang, Fred Lochovsky, JianTao Sun和Zheng Chen。这篇文章写得应该是非常的易懂吧,但是本人英文不是很犀利,所以还是读了好几遍才读懂大概。下面是一些简单的翻译或者是自己的理解吧。

 

摘要

查询意图分类问题目前面临的三个挑战:(1)意图表示:定义一个语义表示,使之能够精确的明白和区分用户意图;(2)领域覆盖率:对于一个领域,怎样才能保证能够将查询 覆盖尽量得多,也就是怎样让一个查询能够准确的识别到该领域。;(3)语义解释:怎样正确的理解查询的语义信息。目前的方法大多集中在了机器学习上面,它的缺点就是需要大量的人力和数据资源。在本文中,引入了维基百科来发现大量的意图概念。这里需要注意的是维基百科中的文章就是一个概念,而且同一个概念只有一篇文章,论文中称之为概念。用维基百科的概念来解决了第一个问题,也就是意图表示空间的问题。那么每一个意图类别可以用一个维基百科中的概念或者目录集合来表示。那么对于查询,将其映射到这个表示空间中来进行分类。这个方法对比于以前的方法,一个很好的特性就是能够解决一些数据稀疏的问题。在机器学习中,难免需要一些语料来进行支撑,但是根据zipf定律,总会存在一些样例不能覆盖的查询。如果只是用机器学习,那么对于这些没有在样例中出现的查询,泛化能力将会非常的差。但是基于百科知识的方法,对于一个类别来说,只需要很小的一部分样例查询,就能够通过百科的网络结构找到更多的这个类别的概念或者目录集合。对于没有出现过得查询,这样的扩展能力是重要的。论文中举例的三个类别是“人名”,“工作”和“旅行”,最后的试验也是基于此。

为了理解整个论文,需要记住的是:

  1. 用维基百科概念来作为意图表示工具,每一个意图类别用一个概念集合来表示。一个很简单的例子就是,比如你要找到“旅行”这个类别的概念集合,那么首先需要少量的标注的查询,比如“travel",那么接下来从这个概念进行浏览,得到一些相邻的概念或者一些子概念,这些结合起来就能够得到一个概念集合了。
  2. 维基百科是一个本题,由层次的目录结构组成。然后利用马尔科夫随机浏览算法来迭代来从种子概念中的产生一些新的概念,而且将为这些概念进行打分。所以最终得到的是一个概念集合,而且每个概念的分值代变得就是它和这个意图领域的相关程度。
  3. 将不是用bag-of-words模型来作为特征表示。而是将一个查询映射到一个维基表示中。如果输入查询能够和维基概念匹配,那么根据他的分值,我们能够定位到一个意图分类。如果不匹配,那么将会使用一种”显示语义分析“的方法来得到最相关的维基概念,然后在这个概念中进行意图分类。

 

维基百科

相信这个大家都很了解了,全人类的百科全书。每篇文章描述了一个单独得话题,而且标题是就是他的主题。每篇文章或者目录之间的超链接表示得是上下或者同意的关系。文章中又超链接,多对多的关系,这样形成了一个有向图。值得注意的是目录之间也有链接,但并非是一个树状的结构,而是一个图结构。一个文章可以链接多个目录,每个目录可以看作是这个文章的一个语义标签。还有两个很有特色的就是重定向页面和歧异页面。重定向页面表示的是多词一意,因为一个概念只有一个编辑页面,那么其他比如说别称之类的词语就需要重定向到那么个编辑页面。还有一个是有歧异页面,比如说“apple”,那么它是一词多义,需要再进行点击才能得到一个链接。

 

方法论

总体

当训练一个类别的意图识别器时,首先需要选择一些能够根据常识就能知道表示这个领域的一些查询,也就是种子查询,然后将这些查询影射到维基百科概念集合上。基于这些概念集合,在进行浏览,并且在浏览过程中记录下一些邻居概念和它链接的概念,从而很容易的得到很大一部分的概念集合。一个概念链接的概念通常都是相似的,但是种子集合数量非常少,所以需要扩展来处理一些没有遇到过的查询。首先建立维基的链接图,然后采用随机漫步算法,将得到一个意图标签的向量,并且得到这个向量中每个元素的一个得分。

对于一个用户的查询,如果已经被维基的概念所覆盖,那么显然可以直接根据启发式就能够进行分类。但是如果没有被覆盖,那么需要一种显示语义分析的方法来将这个没有出现过的查询影射到一个它最相关的维基概念集合中,然后再在此基础上进行意图识别。

 

维基链接图的结构

在第一步中,需要建立这个链接图。需要注意的一点是并非所有的从一个文章到另一个文章的链接都是有效地,很多都是无用的,所以规定只有互相链接的两个文章之间才有一个边。假设文章数目为n,概念数目为m,那么可以得到一个(n+m)*(n+m)的一个矩阵,元素的值就是两个节点之间的连接数。因为上面的规定,那么这个矩阵将是一个对称矩阵。

 

随机漫步

随机漫步的意图就是进行扩展。比如说先标注的一些关于“旅行”的查询是“travel", "hotel", "category: trabel", 和"Airline ticket"。根据假设,直接邻接节点的概念应该是相似的,那么我们就可以迭代的从这些种子节点进行漫步,由此将一些权值来进行扩散,最终迭代结束时假整个网络达到了一个很稳定的状态,而且每个节点将得到一个特殊的分值,这个分值代表的就是它对于这个分类的相关程度。当然漫步的时候,并非是随便的,还是需要用概率来进行指导。至于如何通过迭代来计算这个图的权值,可以参见论文。

 

查询意图预测

得到了一个图关于一个类别的权值信息,那么接下来的就是意图的预测了。其实在预测中,最难的还是要处理没有遇到过的查询。一个方法就是利用将这些查询影射到一些最相关的维基概念,方法类似于显示语义分析,这个后面要提到。

 

显式语义分析

我不知道是否这么翻译的,英文时"Explicit Semantic Analysis"。ESA的意图:给定一个文档片段,ESA将产生一个语义解释器,它能够将这个片段影射到一些相关的维基概念中,并且根据相关度进行排序。这个听起来怎么这熟悉呢,哈哈,学过信息抽取的人也许会知道,就是一个检索过程。首先用倒排找到相关的概念集合,然后用TF*IDF配合余弦相似度来进行相关都排序,从而得到一些最相关的概念集合。

 

意图预测

对于没有被维基包含的查询,首先需要用搜索引擎来进行扩展。将查询放入搜索引擎,得到最好的K个结果,利用他们的标题和文档摘要。然后将这些信息看成是一些句子,然后利用ESA算法,将映射到一个维基概念集合,然后基于它来进行意图预测。

 

实验

然后就是一些实验了,和Baseline方法比起来,提高了50来个百分点,这个很强大。三个意图类别是:旅游、人名和工作。在训练集合中,由上面的介绍可知,需要一个种子集合,通过查询日志的分析,需要按照常识来将一些查询映射到一个维基的概念集合。比如说人名,那么你可以先标注一个“Bush”的查询为人名,然后通过随机漫步的算法,找到他的父节点“Living People”,然后通过这个目录,再能够找到足够多的人名了。对于测试集,需要随机的抽取出一些查询,然后让几个人来进行人工的标注。只有那些标注很准确的才进入测试集。最后通过PRF的测试标准来进行测试,效果非常的显著。

 

 

 


版权声明:本文为killtayoto原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。