搜索引擎主要是帮助用户找到想要的信息或者服务,所以这里面涉及到三件事情,理解用户搜索意图,理解资源,匹配用户意图和资源。在一开始的时候搜索引擎主要通过对文本的统计分析,如TF-IDF,BM25等,来满足二者之间的匹配。后来发现除了文本统计之外还可以通过对页面质量的分析,外链的分析,如PageRank,来提升对资源的理解改善搜索效果。再到后来发现通过分析用户在搜索时的行为可以更好的了解用户意图并以此来提升搜索结果的相关度。为什么呢?用户选择搜索结果的过程是一次人类智慧的体现,通过观察多个用户的这种行为并从中找出规律可以提升搜索结果的相关度,毕竟人还是要比机器更加有智慧,这也是典型的利用集体智慧的例子。

用户行为有哪些

用户在使用搜索引擎的过程中会有浏览,点击结果,翻页,变换query,点击相关搜索等行为,这些行为便是我们要记录和分析的行为。

基础数据

通过对用户行为的记录我们会得到展现日志,点击日志,搜索日志等数据。例如我们得到点击日志格式如下:

1
2
3
4
5
6
时间 | 行为 | query | URL List
time | Search | 薛之谦 | ...
time | 点击第二条结果 | 薛之谦 | ...
time | 点击相关搜索第二条 | 火星情报局 | ...
time | 点击第一条结果 | 爱奇艺在线观看 | ...
...

将日志按照userID和时间戳排序就可以看到每个用户的一系列搜索行为。

用户行为理解

有了用户行为之后我们对用户行为进行一个简单的分析可以得出:

  1. 顺序浏览模式,大多数用户倾向于从前到后顺序浏览。
  2. 点击行为代表对结果投票,用户通过标题、摘要、飘红等信息对结果进行预判,感觉有兴趣可能会满足需求才会点击。
  3. 点击不一定能满足,通过点击进入落地页之后发现内容不满足需求,可能会重新搜索。
  4. 重视最后一次点击,在同一次搜索的多次点击中,最后一次点击对应的结果往往最好,其次是第一次点击的结果。
  5. 搜索行为的关联性,用户的后一次搜索(query变换,点击相关搜索等)往往是对之前搜索需求的细化或者拓展。

用户行为分析

考虑如下case:对于一个query,有两个结果A和B,A排在B前面,理论上说A会得到的点击数量比B要多,如果B比A的点击数多,那么说明B比A的相关性要好,需要调换二者的顺序。但是简单的通过点击数来衡量会存在如下的问题:

  1. 点击质量,对于不同结果的点击权重应该不同。
  2. 位置偏见,排在前面的结果本身倾向于受到更多的点击,对后面的结果不公平。
    所以,对每一个query-url对,根据点击结果在结果列表的位置和点击动作在点击序列中的位置给不同的打分:
  3. 搜索结果排序越靠后,对应的被点击的分值越高。
  4. 在点击序列中,越前面的点击分值越高,但最后一次点击的分值最高
  5. 如果本次搜索没有满足用户的需求,后续出现了点击相关搜素,变换query等情况,则对本次的打分做相应的惩罚。

思考:这样的打分标准是不是就完美了?

通过对用户点击行为的分析,根据结果的整体点击率,前三条结果点击率,相关搜索点击等信息来对query整体满意度进行打分。对于在一个session中共现的query pair A和B,如果A的满意度低于B,可以选择B的结果列表中较好的结果插入到A的搜索结果列表中。同时也会引入新的问题,如果“范爷”和“大黑牛”经常同现,但搜索“范爷”的用户并不想看到跟大黑牛相关的新闻,如果将“大黑牛”的结果插入到“范爷”的结果列表中,反而使得搜索的满意度下降。所以在进行结果插入前可以先判断Query A与Query B文本相似度。

调优结果排序

有了点击打分之后如何来改善结果的排序呢(点击调权)?
例如可以建立一个神经网络模型,简单一点建立一个三层的神经网络,
第一层为输入层,每个节点为一个term
第二次为隐藏层,每个节点与一组term相连
第三层为输出层,每个节点代表一个URL,与隐藏层节点相连
每个URL的目标值是计算得到的点击分值,通过反向传播算法来训练更新神经网络中各个边的权重。对于之后的query可以通过该神经网络模型来计算结果的点击排序。

冷门 VS 热门

对于热门query和URL可以很容易获得大量的数据支撑,但如果一个query-URL很冷门则获取到的点击数据也很少,则很难对其相关性做出有效的判断,并且如果一个query很冷门即使我们做的效果很好,但是这个query很少出现,投入产出比上也不划算。

总结

通过对用户行为的分析可以更好的理解用户行为意图并利用用户的智慧来改善结果排序,此外,用户点击可以作为LTR的一个feature,提升LTR的准确度。