$ TermWeight单词权重算法

在用户的搜索查询中,有些词在用户的核心语义诉求中占据主导地位,需要在回忆和排序时重点关注,而有些词重要性较低,即使丢失也不会影响用户的核心语义表达。

$ TermWeight是一个自动计算用户查询中每个$ term的相对重要性的模块。通过区分不同$ term在查询中的重要性,并给出相应的分数,可以召回与用户意图最相关的结果,进而改善用户的搜索体验。

方法:以查询和文档的文档集作为$ term的词权重,计算tf-idf并归一化

优点:简单易实现。

缺点:每个$ term的单词权重是静态的,不能根据上下文变化,效果不好

基于点击词共现和基于偏序关系的$ term权重训练方法主要分为两类:(1)。

基于点击词共现方法,将$ term权重视为一个回归任务,用$ term召回率来表示查询中每个$ term的重要性关系。

单词共现:基于uclog的查询标题点击数据,构建训练集,即以$ term召回率为指标计算单词权重。

$ term召回率的计算公式如下:

如果冷启动阶段或词共现阶段的$ term召回率较低,可以通过分层回归得分进行人工数据标注。例子如下:

注意:层级和分数的数量可以根据具体的业务场景进行调整。

基于偏序关系的方法将$ term权重视为一个排序任务,在标记数据时使用偏序关系来表示查询中每个$ term的重要关系,例如:

这种方法适合于那些查询比较短的用户,在doc上的大多数点击都会包含查询中的所有$ term,从而使得单词共现方法无效。

不同的应用场景会对应不同的选型方案:

(1) DeepCT/DeepRT

基于深层上下文语义的词权重。(a)通过深度模型生成上层和下层文化的单词嵌入;(二)线性回归预测单词权重。

优点:使用上下文语义,效果不错。

缺点:模型略复杂,需要控制模型的复杂度以满足实时推理。

(2)特征+ML

基于特征设计和机器学习回归模型的词权值预测。

优点:高效计算,实时推理。

缺点:需要手动细化设计特征。

下面详细介绍两种类型的选型。

DeepCT/DeepRT的整体框架是:(a)通过深度模型生成上下层文化的单词嵌入;(b)线性回归以预测单词权重。

如果数据集是基于词共现的分值,可以直接使用MSE等损失函数,如果训练集是基于偏序关系,可以使用成对铰链损失。

本文中提取上下文语义用的是BERT,我自己实践中用的是BiLSTM+Attention。无论哪种方法,其核心本质都是通过结合NMT和上下文语义来动态判断$ term在当前上下文中的重要性。

国际惯例,一张图盖一下。

如果系统的RT要求很高,建议使用BiLSTM。如果追求效果,预训练语言模型更有优势,那么就要结合自己的业务场景进行选择。

Feature+ML的整体思路是人工设计有效的特征,然后利用机器学习中的GBDT/LR等模型进行回归预测或排名。常用的型号有Xgboost,LightGBM等。

显然,这种方式的效果取决于功能设计的好坏,不同业务场景的具体功能会有所不同。以下是一些常见的特征。

$ term的静态特征:idf值,词频,$ term长度,$ term词性,词的位置,是否是停用词,是否是语气词,是否是专有名词(人名/地名)等等。

$ term交互的特征:$ term长度与查询长度的比值,文本排名值,$ term在查询中的相对位置,$ term对查询的贡献等等。

Ngram特征:包括$ term的统计特征,以$ term开头的ngram的统计特征,以$ term结尾的ngram的统计特征,等等(通常使用二元模型和三元模型)。

经过特征设计后,可以用ML模型进行回归预测或排序,相对简单,此处不再赘述。