你在互联网使用搜索的时候,关键词推荐可能是你经常使用到的一个辅助工具。如各种搜索引擎搜索框的下拉提示;google 结果页会有“XXX”的“相关搜索”;百度结果页也有提示一组相关搜索词。关键词推荐在文献上一般称为query suggestiong,query expansion,query rewrite,query recommendation。
而这些常见的关键词推荐是怎么得到的呢?我总结了一下,有以下几种方式。
第一:只考虑用户输入的关键词。
这是指,推荐词只是用户输入词的字串的组合,不添加新的字符串。那么我们考虑的就是如何丢弃不重要的字或者词,或者对输入关键词做拼写纠错。
对于如何丢弃词,考虑怎么计算字或者词的重要性。考虑词的重要性可以通过TF-IDF,信息增益等方法来完成。还有一种方法是:通过crf的方法,通过序列标注的方法,标准两类词,第一类是重要的词,第二类是次要的词。标记出来之后,我们扔掉不次要的词,留下来的也就是重要词。
第二:只考虑用户输入序列的关键词。
这种方法可以把每个用户在一个时间段输入的n个词看成是一次“购物篮”数据,我们统计两周甚至几个月的用户输入,那么我们就可以得到非常多的购物篮数据。通过关联规则挖掘,我们就可以挖掘出相关词。但是这种方法明显的缺点就是没有考虑购物篮中的物品的顺序。当一个关键词和另外一个关键词很相似的时候,无法当成统一为一个对象。
例如“nokia 正品”和“正品 nokia”是两个不同的词,甚至字母大小写也会当成不同的购物篮中的对象。我们需要对这些对象做一下归一化。例如:query分词后按照ascii排序;通通转换为小写字母;把英文品牌通通转换为中文品牌等。
关联规则是一个比较简单方法。更加复杂一点,我们可以把所有的query当成node,当输入联系查询了query1和query2,那么这两个结点之间就有一条边。这些边上面的权重都可以用概率来表示,最终再用最短路径之类的方法来求解。
或者使用互信息的方法来计算两个query之间的相关性。sim(x,y)=P(x,y)/(p(x)*p(y)).
第三:考虑query-click log
把query-click item作为一个矩阵。query是矩阵的行,click iterm或者page(URL)作为列,矩阵中的元素是query(i)点击URL(j)的次数。通过这样的一个矩阵,我们就可以使用k-means聚类,或者对query两两之间通过url 的向量来计算相关性。
第四种:考虑一些规则
对应一些词难以推荐相关词,则通过不同的规则来完成不同的推荐。如地点替换/放大/缩小。属性的替换,如款式的替换等等。