如何来做用户意图识别

什么是用户意图识别?就是让搜索引擎能够识别出与用户输入的查询最相关的信息,例如用户输入查询“仙剑奇侠传”时,我们知道“仙剑奇侠传”既有游戏又有电视剧还有新闻、图片等等,如果我们通过用户意图识别发现该用户是想看“仙剑奇侠传”电视剧的,那我们直接把电视剧作为结果返回给用户,就会节省用户的搜索点击次数,缩短搜索时间,大大提升使用体验。

通用搜索和垂直搜索
通用搜索是抓取互联网上的页面,以索引和关键字匹配的形式,把网页的标题、摘要、URL等信息展示出来 1 。垂直搜索则针对某一特定领域,搜索结果也只限定在该领域内,例如商品搜索、招聘搜索等,一个例子见图1:


如何来做用户意图识别_第1张图片

因为垂直搜索已经将用户的意图限定在以特定领域了,因此搜索结果的准确率也很高。那如何在通用领域也能做到了解用户的搜索需求即意图呢?那就需要用到意图识别的技术了。

意图分类
Andrei Broder通过调查统计把用户查询的需求分为了三大类:
(1)导航型
用户的目的就是进入查询对应的网页,例如搜索“清华大学”进入到清华大学官网。
(2)信息型
用户的目的就是来获得网络信息的,例如搜索“科比的现状如何?”查询与科比最近现状有关的网页信息。
(3)事务型
用户的目的是为了进行一系列事务操作的,例如搜索“天猫”进入天猫购物。

当然在具体使用时,也不用局限与这三大类,完全可以自己定义类别,例如可以分为地图、新闻、问答、体育、游戏、影视作品等等。所以在给定用户意图分类情况下,用户意图识别也就变成了分类问题,即利用查询串及相关信息得到查询意图类别,然后在具体的意图类别下做进一步的查询。

意图识别
如何来做意图识别呢?
1、数据集
意图识别离不开数据,搜索领域的意图识别用到的数据通常就是用户的搜索日志了。一般一条搜索日志记录会包括时间-查询串-点击URL记录-在结果中的位置等信息。
2、数据清洗
拿到日志数据,一般是不能直接用的,里面会包含很多的噪声数据,无用信息,我们都需要把它给清洗掉。
3、查询扩展
上面提到,意图识别可以看成是文本分类的问题,但是只依赖查询串是肯定不行的,提供的信息太少太少,所以常做的就是考虑利用先前的搜索日志信息,例如历史查询串对应的标题、时间、近义词等信息。有的场景下还会加入地点信息,例如地图搜索。
一些可以用来扩展的信息有:
(1)点击标题。通常在搜索日志中,会以一个session为单位,一个session中保存的是一个时间段内的相关搜索信息,我们可以用的信息字段是查询串-点击标题-点击次数-时间等,在不同session的同一查询可能对应的点击记录不一样,我们可以把它们合并起来,将标题放到查询文档中;
(2)相似查询串。同样,同一点击记录的不同查询我们也可以拿来用的;
(3)此外,同义词词林、利用word2vec得到的近义词集合都可以扩展进来。
这样我们就可以得到一个信息比较丰富的查询文档了。值得注意的是,同一session下的不同查询,如果有递增关系,说明用户在根据搜索结果进行修正查询,那么新增的词应该对意图分类作用很大,例如图1 3


如何来做用户意图识别_第2张图片
图1

4、特征工程
把上面扩展得到的查询文档利用tfidf向量化,就可以得到一个特征向量,一般情况下,这个特征向量维度会非常高,我们可以利用词频、卡方、互信息等方法进行特征选择,保留更有用的特征信息。

我们还可以加入一些数字特征在里面,例如:

(1)Query的长度
(2)Query的频次
(3)Title的长度
(4)Title的频次
(5)BM-25
(6)Query的首字、尾字等

一些统计特征也可以考虑,例如论文 2 提到的不同页面点击数DPCN(Different Page Click Number)、异源页面点击数PCNS(Page Click Number without Subpage)等,其中:
(1)不同页面点击数DPCN,表示用户对查询串的返回结果的点击情况统计,因为作者统计发现对于导航类查询,用户目标很明确,通常只点击一两个网页就完成查询了,而对应信息事务型则点击的不同页面数目比较多,例如作者统计显示当不同页面点击数不大于7时,查询串中导航意图的占66.7%,大于7时,信息事务意图的占83%。
(2)异源页面点击数PCNS,表示查询串的返回结果中,以点击频次最高的网页为基准,不同页面点击数与其子页面数量的差值。例如对于某个查询串w,不同页面点击数DPCN为17,而点击频次最高的网页子网页出现了15次,那么异源页面点击数就为17-15 = 2,这样做的目的是为了消除将同一网页的子页面算成不同页面的情况。
5、分类器训练
在完成特征任务后,接下来就是选择合适的分类器进行训练了,因为意图识别可以看作是一个多分类任务,所以通常可以选择SVM、决策树等来训练分类器。

参考
1. 查询的意图识别. 张帆.
2. 查询日志中查询意图的自动识别. 李煜.
3. CIKM Competition数据挖掘竞赛夺冠算法陈运文
4. 基于查询日志的用户查询意图检测. 董国盛.

你可能感兴趣的:(自然语言处理)