一、概述
原文:同义变换在百度搜索广告中的应用,https://mp.weixin.qq.com/s/ybkbU8p_3jgKuCGdNWeG8w
二、 关键词匹配问题定义
2.1 定义
- 输入:query、匹配模式、关键词库
- 输出:满足匹配的全部关键词
- 限制:匹配模式
2.2 例子:
- ○ query:双眼皮手术多少钱?
- ○ Match type:精确匹配
- ○ 一些典型的目标召回关键词:
- ■ 双眼皮手术的价格?
- ■ 双眼皮手术多少钱?
- ■ 割一个双眼皮花多少钱?
三、 问题挑战
Semantic Gap:用户和广告主表达不一样?
3.1 对于医疗:同一个tab可能能代表多个意思。
- 例如:实体:糖尿病: tab:治疗
a. 1. 糖尿病的治疗方法
b. 2. 得了糖尿病该如何治疗?
c. 3. 糖尿病有哪些治疗方法?
d. 4. 患者得了糖尿病一般有哪些治疗方法?:https://wap.sogou.com/web/searchList.jsp?from=index&pid=sogou-waps-7880d7226e872b77&t=1639982337252&s_t=1639982338943&s_from=index&pg=webSearchList&inter_index=&keyword=%E6%82%A3%E8%80%85%E5%BE%97%E4%BA%86%E7%B3%96%E5%B0%BF%E7%97%85%E4%B8%80%E8%88%AC%E6%9C%89%E5%93%AA%E4%BA%9B%E6%B2%BB%E7%96%97%E6%96%B9%E6%B3%95&suguuid=c9f2b141-8d02-40c7-b628-508733d9a961&sugsuv=AAEdW%2FhZOgAAAAqgMiUbAwEAAAA&sugtime=1639982338943
e. 5. 患者得了2型糖尿病一般有哪些治疗方法? https://wap.sogou.com/web/searchList.jsp?dp=1&pid=sogou-waps-7880d7226e872b77&t=1639982385377&s_t=1639982391067&s_from=result_up&n_s_from=up_input&htprequery=%E6%82%A3%E8%80%85%E5%BE%97%E4%BA%86%E4%B8%80%E5%9E%8B%E7%B3%96%E5%B0%BF%E7%97%85%E4%B8%80%E8%88%AC%E6%9C%89%E5%93%AA%E4%BA%9B%E6%B2%BB%E7%96%97%E6%96%B9%E6%B3%95&keyword=%E6%82%A3%E8%80%85%E5%BE%97%E4%BA%862%E5%9E%8B%E7%B3%96%E5%B0%BF%E7%97%85%E4%B8%80%E8%88%AC%E6%9C%89%E5%93%AA%E4%BA%9B%E6%B2%BB%E7%96%97%E6%96%B9%E6%B3%95&pg=webSearchList&rcer=QNz_aJ4iY4Gcw-M3&s=%E6%90%9C%E7%B4%A2&suguuid=367c32b0-5190-4684-9540-d263b28ecc2e&sugsuv=AAEdW%2FhZOgAAAAqgMiUbAwEAAAA&sugtime=1639982391066
f. 6. 小孩子患者得了2型糖尿病一般有哪些治疗方法?https://wap.sogou.com/web/searchList.jsp?dp=1&pid=sogou-waps-7880d7226e872b77&t=1639982450524&s_t=1639982453334&s_from=result_up&n_s_from=up_input&htprequery=%E5%AE%9D%E5%AE%9D%E6%82%A3%E8%80%85%E5%BE%97%E4%BA%862%E5%9E%8B%E7%B3%96%E5%B0%BF%E7%97%85%E4%B8%80%E8%88%AC%E6%9C%89%E5%93%AA%E4%BA%9B%E6%B2%BB%E7%96%97%E6%96%B9%E6%B3%95&keyword=%E5%B0%8F%E5%AD%A9%E5%AD%90%E6%82%A3%E8%80%85%E5%BE%97%E4%BA%862%E5%9E%8B%E7%B3%96%E5%B0%BF%E7%97%85%E4%B8%80%E8%88%AC%E6%9C%89%E5%93%AA%E4%BA%9B%E6%B2%BB%E7%96%97%E6%96%B9%E6%B3%95&pg=webSearchList&rcer=QNz_aJ4iY4Gcw-M3&s=%E6%90%9C%E7%B4%A2&suguuid=3d4343e5-703f-431e-b1ff-a5dd61e70a52&sugsuv=AAEdW%2FhZOgAAAAqgMiUbAwEAAAA&sugtime=1639982453334
g. 7. 患者眼睛得了白内障该如何治疗? https://wap.sogou.com/web/searchList.jsp?dp=1&pid=sogou-waps-7880d7226e872b77&t=1639982454129&s_t=1639982494605&s_from=result_up&n_s_from=up_input&htprequery=%E5%B0%8F%E5%AD%A9%E5%AD%90%E6%82%A3%E8%80%85%E5%BE%97%E4%BA%862%E5%9E%8B%E7%B3%96%E5%B0%BF%E7%97%85%E4%B8%80%E8%88%AC%E6%9C%89%E5%93%AA%E4%BA%9B%E6%B2%BB%E7%96%97%E6%96%B9%E6%B3%95&keyword=%E6%82%A3%E8%80%85%E7%9C%BC%E7%9D%9B%E5%BE%97%E4%BA%86%E7%99%BD%E5%86%85%E9%9A%9C%E8%AF%A5%E5%A6%82%E4%BD%95%E6%B2%BB%E7%96%97&pg=webSearchList&rcer=QNz_aJ4iY4Gcw-M3&s=%E6%90%9C%E7%B4%A2&suguuid=a4732cac-a3f1-4a63-ad21-07172bac6202&sugsuv=AAEdW%2FhZOgAAAAqgMiUbAwEAAAA&sugtime=1639982494605
h. 8. 患者鼻子得了白内障该如何治疗? https://wap.sogou.com/web/searchList.jsp?dp=1&pid=sogou-waps-7880d7226e872b77&t=1639982495345&s_t=1639982630036&s_from=result_up&n_s_from=up_input&htprequery=%E6%82%A3%E8%80%85%E7%9C%BC%E7%9D%9B%E5%BE%97%E4%BA%86%E7%99%BD%E5%86%85%E9%9A%9C%E8%AF%A5%E5%A6%82%E4%BD%95%E6%B2%BB%E7%96%97&keyword=%E6%82%A3%E8%80%85%E9%BC%BB%E5%AD%90%E5%BE%97%E4%BA%86%E7%99%BD%E5%86%85%E9%9A%9C%E8%AF%A5%E5%A6%82%E4%BD%95%E6%B2%BB%E7%96%97&pg=webSearchList&rcer=QNz_aJ4iY4Gcw-M3&s=%E6%90%9C%E7%B4%A2&suguuid=3ac2cab6-d0e9-4062-9b2c-d3069ff0c641&sugsuv=AAEdW%2FhZOgAAAAqgMiUbAwEAAAA&sugtime=1639982630036
总结:一个tab下的内容比较泛,并且句子和句子间存在gap
3.2. 工程性能:关键词量级比较大,无论在线还是离线,计算资源都非常有限。
- 队列压缩:在keyword端,关键词匹配中,一个query通常会触发得到大量的候选关键词,基于同一关系,压缩关键词,减少计算量。
- 基于代表元来触发:原始keyword词库->压缩->代表元库->触发线上query
四、方案
- 从规则触发,短语粒度同义词替换,句子级别同义pair挖掘
- 数据驱动的模型泛化,数据,模型,泛化
4.1 数据源:
- ● 系统外部
- ○ 搜索点击日志 query-title
- ○ Session日志,query-query,共点query
- ○ 协同过滤
- ■ query-query相似度计算,基于用户点击url
- ■ keyword-keyword相似度计算
- ○ 规则替换
- ● 系统内部
- ○ 商业点击日志query-keyword
4.2 模型:
● 三种模型思路:seq2seq生成模型,双塔模型(语义的度量模型),或者图模型
4.2.1 基于seq2seq模型来泛化召回
Q1原来有3个召回结果A、B、C,基于模型,定向再关键词库中做召回,有可能把A1,B1也召回出来。
- ● 优点:
- ○ end2end建模
- ○ 语料ok的情况下,质量很好
- ○ 简单,正例驱动
- ● 缺点:
- ○ 效率低
- ■ decode阶段比较慢
- ■ 冗余翻译
- ○ 定向翻译
- ■ 不能保证decode出来的结果都是keyword
- ○ 训练和预测不一致,训练是一对一,目标是一对多
- ○ 效率低
4.2.2 效率问题改进一之规范化
- 翻译->冗余度高->在query和keyword端,都先进行归一化,然后再规范化的空间中来做匹配。
规范化步骤:冗余词去除,副词,标点符号处理
统一模型来校验
4.2.2 泛化能力提高之基于概念来泛化
- ● 数据驱动的硬伤
- ○ 没有数据就驱动不了
- ○ 往往只学到了数据上的共线,缺乏概念抽象推理功能
- ■ 样本:眼睛得了白内障该如何治疗 = 白内障治疗方法
- ● https://wap.sogou.com/web/searchList.jsp?dp=1&pid=sogou-waps-7880d7226e872b77&t=1639985538116&s_t=1639985556479&s_from=result_up&n_s_from=up_input&htprequery=%E5%98%B4%E5%B7%B4%E5%BE%97%E4%BA%86%E5%8F%A3%E8%85%94%E6%BA%83%E7%96%A1%E8%AF%A5%E5%A6%82%E4%BD%95%E6%B2%BB%E7%96%97%EF%BC%9F&keyword=%E7%9C%BC%E7%9D%9B%E5%BE%97%E4%BA%86%E7%99%BD%E5%86%85%E9%9A%9C%E8%AF%A5%E5%A6%82%E4%BD%95%E6%B2%BB%E7%96%97&pg=webSearchList&rcer=hNz_aRIBWIwCGa7H&s=%E6%90%9C%E7%B4%A2&suguuid=53352eda-e172-4537-b305-7249783b9fd5&sugsuv=AAEdW%2FhZOgAAAAqgMiUbAwEAAAA&sugtime=1639985556479
- ■ 概念推理?:嘴巴得了口腔溃疡该如何治疗?口腔溃疡治疗方法
- ● https://wap.sogou.com/web/searchList.jsp?dp=1&pid=sogou-waps-7880d7226e872b77&t=1639983300865&s_t=1639985537209&s_from=result_up&n_s_from=up_input&htprequery=%E9%BC%BB%E7%82%8E%E4%BC%9A%E5%BC%95%E8%B5%B7%E5%A4%B4%E7%97%9B%E5%90%97&keyword=%E5%98%B4%E5%B7%B4%E5%BE%97%E4%BA%86%E5%8F%A3%E8%85%94%E6%BA%83%E7%96%A1%E8%AF%A5%E5%A6%82%E4%BD%95%E6%B2%BB%E7%96%97%EF%BC%9F&pg=webSearchList&rcer=hNz_aRIBWIwCGa7H&s=%E6%90%9C%E7%B4%A2&suguuid=a26ea590-2863-4d2d-bd24-c6669f22a461&sugsuv=AAEdW%2FhZOgAAAAqgMiUbAwEAAAA&sugtime=1639985537209
- ■ 样本:眼睛得了白内障该如何治疗 = 白内障治疗方法
- ● 解决办法
- ○ UNK问题:copyNet,pointerNet
- ○ 概念实体识别
- ■ 眼睛得了白内障该如何治疗
- ■ 【body】【disease】治疗方法 -> disease治疗方法
- ■ 嘴巴得了口腔溃疡该如何治疗?=> 口腔溃疡治疗方法
4.2.3 基于语义度量来做同义泛化
翻译模型改成:=>语义向量模型,在语义向量空间寻找k近邻
- ● 思路:
- ○ 投影到共同的语义度量空间中
- ○ 同义的query-keyword在度量空间中近邻
- ● 分两步
- ○ 投影
- ○ 寻找k近邻
获得投影算子
- ● 投影算子
- ○ BOW/CNN/RNN/Transformer
- ● 度量
- ○ Euclidean distance / cosine
- ● 数据
- ○ 整理:base data
- ○ 负例:Random negative,other match type data
基于度量空间=>层次kmeans构建树形索引=>log(n)时间定为到分桶
4.2.4 基于图模型来做同义泛化
- ● 思路:
- ○ query和keyword都看成node
- ○ 是否同义看成是边
- ○ 优点:
- ■ 引入更多图的数据,融入异构数据
- ● session日志
- ● 用户点击日志
- ■ 引入更多图的数据,融入异构数据
- ● 通过预测query-keyword是否存在边来做吗?
步骤
- 构造图
- 计算每个节点的低纬表达
- 为每个节点寻找k近邻
4.2.5 总结
● 基于高质量的种子数据=>抽象出模型=>泛化得到delta数据
4.3 badcase修复方法
4.3.1 定义:定义成一个同义判定的问题
- ● F(query, keyword) = 0 or 1
4.3.2 方法1. Feature-driven: 人工特征+少量标记数据+浅层模型
- ○ 词粒度的匹配度计算
- ■ 最大匹配长度,miss/match,bm25
- ■ 命名实体的相似度、句法依存、文档分类
- ■ 语义相似性
- ● DSSm搜索点击数据
- ■ 搜索检索结果的相似度
- ■ 数据
- ● 少量人工标记数据
- ■ 模型
- ● 浅层DNN,GBDT
4.3.3 方法2. Data-driven:transformer+弱监督预训练+domain finetuning
- ○ 多阶段预训练+finetuning
- ■ ERNIE Large -> 弱监督数据 -> 人工标记数据
- ○ 数据
- ■ 海量弱监督数据
- ● 用户侧query-query,商业侧keyword-keyword,query-keyword,负反馈数据
- ■ 少量人工标记数据
- ● 主动学习、概念增强
- ■ 训练
- ● 多阶段预训练 + finetuning + 对抗训练
- ■ 效果
- ● 远超特征驱动的模型
- ○ 大模型容量+海量的数据预训练=>更多同义知识
- ○ Transformer中多头注意力起到了软对齐的作用
- ● 远超特征驱动的模型
- ■ 海量弱监督数据
4.3.4 数据增强,为标记样本做最充分的数据增强
- ○ 人工标记样本太少
- ○ 基于同义变换来增强
- ○ 基于概念标注来增强
3.3.5. 开放性问题,盲区数据补充 - ○ 其他盲区 => 弱监督数据起到了盲区补充的作用