查看原文
其他

前沿重器[13] | 知乎query改写思路启示

机智的叉烧 CS的陋室 2022-08-24
 

【前沿重器】


栏目主要给大家分享各种大厂、顶会的论文和分享,从中抽取关键精华的部分和大家分享,和大家一起把握前沿技术。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有


往期回顾

最近在看datafun的一些分享材料,正好看到了一篇知乎搜索对query理解、召回等方案的分享,觉得改写这块非常有收获,特此总结一下。

query改写的背景和现状

搜索中之所以要进行改写,是因为在下游的检索模块,需要这对特定的文本,搜索效果才会足够好,传统的文本匹配需要比较明确的文本词汇信息,而语义召回则需要明确的语义信息,这个角度看没有足够好的改写,很可能就无法召回需要的内容,所以这个时候,query的改写就显得非常重要了。

由于用户输入的多样性,改写本身也应该是一个多样性的策略方案组合,因此改写出来的可能是多个query,这些query都要进行搜索,性能压力不说,和大一部分内容其实是重复的,意义不大,虽然有检索语法树的支持,但是不见得就能解决所有问题。

机器翻译处理query改写

知乎的思路很简单,用简单粗暴的机器翻译的思路来将query正式化,使query更加标准,例如:苹果手机价格多少->苹果手机售价,于是这个问题就变得比较规范了,机器翻译问题,不外乎就是样本的构造和模型训练。

在工业界相比模型本身,样本应该才是更为关键的问题,尤其还是可靠的标注样本,但其实搜索的好处在于有很多用户行为可以挖掘,这里给出几种常见的平行样本挖掘的手段:

  • query-用户点击title。
  • 同一个点击title的不同query。
  • 用户在一个session下的检索query。

这些都是用户视角认为比较相似的内容了,这些都是非常有利于进行训练的材料。当然,仅靠这些也是不够的,还需要清洗和筛选:

  • 改写是希望长尾回答能映射到高频的,而高频的通常是我们比较容易处理好的。
  • 噪音的问题可以通过语义相似度等方式直接过滤。
  • 需要注意未登录词的处理,甚至是一些错别字导致的未登录词。

强化学习处理query改写

机器翻译虽然能直接对query进行改写,但并不代表改写出来的东西一定有利于召回,这两者之间存在gap,为了让这个翻译更加明确地向有利于召回的的方向走,知乎提出一种gap的处理方式——强化学习,简单地说就是把检索结果作为reward反馈给机器翻译模型,整个强化学习体系是这样的:

组件内容
statequery
agent机器翻译模型
action改写
environmet搜索系统
rewardtopk召回率

在训练的流程里,改写前后的query都会进行召回和排序,我们希望改写后的query能召回更多好的结果,于是这个topk召回率就可以成为reward。另外有意思的是,有了强化学习,机器翻译模型就可以通过这种方式训练,对平行样本的依赖就没那么强了,或者说,强化学习可以是机器翻译模型的fine tuning。

然而在实践的时候发现,机器翻译改写query召回的内容topk召回率会很低,导致训练缓慢,这时候知乎借鉴了alphago中策略网络、价值网络、蒙托卡罗树搜索的结构,策略网络是机器翻译模型,价值网络用改写后的reward评估,这块的收益非常高,有兴趣可以结合alphago的结构详细了解一下。

title更进一步

召回的本质是希望通过query能更容易找到对应的title,除了通过query改写到queey来贴近,还可以通过title改写到query来贴近。

这种思路经过知乎的实验,可以解决点击query存在偏置的问题(那些搜了但是没有点击的query很多时候才是我们需要解决的query),思路是这样的,未召回的query可能和有点击的query相似但和目标title不接近,此时title能映射到query,就有利于未召回query后续的召回,这个逻辑其实就有点像给title做泛化,问答系统里面叫拓展问。

值得注意的是,从泛化的角度来看,这个泛化是定向的,往解决现在的召回逻辑无法召回目标query方向。

小结

有关query的改写,我还停留在比较初步的水平,这次的文章阅读,打开了思路不少的思路,感觉还可以继续品读,用在更多的地方,




您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存