Fork me on GitHub

阿里健康医药电商搜索相关性实践

**导读:**在整个健康搜索链路里,相关性处于中间环节,它需要解决扩召回带来的准确率的问题,为下游的精排和重排提供更精确的候选集,不管是精排还是重排,都要注重对相关性的保护,也不能突破相关性的档位。

本次分享题目为交互式 BERT 在医药电商搜索相关性中的探索,主要介绍:

  • 健康搜索业务和技术简介
  • 交互式 BERT 算法探索
  • 模型应用实践

分享嘉宾|杨蕾(琼羽) 阿里健康 算法工程师
编辑整理|董进宝 浙江大学
出品社区|DataFun


01 健康搜索业务和技术简介

1. 健康电商搜索简介

图片

首先简单介绍下阿里健康的电商搜索,健康电商主要的流量入口是在淘宝。包括三个主要的业务场景,其中最大的成交渠道是在淘宝首页搜索健康的相关商品,包括药品、医疗器械和滋补保健等。除了淘宝首页和天猫好药这种平台形式的搜索渠道,健康还有自营的阿里健康大药房,在店铺内进行搜索。

相比于其他行业,电商搜索的相关性关系到用药的专业性和准确性。因为用户的搜索词通常会包含很多的领域专业知识,需要实现精准搜索,其中一个重要的维度就是相关性。相关性衡量的是用户的搜索意图和最终展示商品的匹配程度,需要结合领域知识对用户的搜索意图进行专业化的理解。在健康领域,必须保证专业且准确的相关性。

2. 健康电商搜索的主要技术

图片

在整个健康搜索链路里,相关性处于中间环节,它需要解决扩召回带来的准确率的问题,为下游的精排和重排提供更精确的候选集,不管是精排还是重排,都要注重对相关性的保护,也不能突破相关性的档位 。今天介绍的重点是深度语义模型。

02 交互式 BERT 算法探索

1. 语义模型设计背景

图片

线上为什么需要深度语义模型? 在过去,为了保证高准确率,线上一直是通过文本相关性和实体相关性去严格匹配搜索词和商品,但会有一些不足:首先,文本实体相关性强依赖相关性的知识,人工审核的规则只能覆盖头部的词,中长尾的问题很难解决;其次,用户的搜索词和商品的文本描述存在天然的语义鸿沟,简单的文本匹配难以理解。所以线上需要一个泛化模型,充分利用已有的用户行为日志和相关性知识,减少错误匹配。

在模型的设计过程中,发现了三个问题:第一 ,垂直化搜索对相关性的要求比较高,领域专业性较强,通用的模型很难捕捉到领域关键属性。 第二 ,缺少高质量的标注样本,有效的高质量样本数量非常少,无法支持大模型训练,而大批量标注的成本又十分昂贵。 第三 ,模型最终要实现在线预测,线上需要同时对千级商品进行打分,RT要求会非常高。所以模型不仅要有较强的表征能力,还要上线简单。

根据这三个问题,总结出 相关性模型的三个优化方向1.如何增强关键属性理解;2如何构造高质量样本;3如何强化双塔模型的语义表征能力 。后续将主要围绕这三个环节进行展开。

2. 交互式 BERT 模型

① 文本特征提取

图片

文本特征提取,主要是为了得到精确化的 query 理解和商品理解,也是整个相关性优化的基础。

  • query 特征提取

query 特征提取需要分类目细化,根据不同类目的商品特点,圈定重点实体类型。比如药品由通用名+品牌+规格完全决定,药品通用名又可以拆分出主要成分和剂型,规格可以衍生出包装,这些属性决定了药品的具体内涵。然后,通过文本分类模型挖掘实体词典,结合对比模型挖掘同义词和归一化词典,人工审核得到实体资源库。第二步,结合建立的词典和最大前向匹配,得到 query 多重分词打标。比如 query=阿莫西林胶囊白云山,可以理解出药品通用名是阿莫西林胶囊,主要成分是阿莫西林,剂型是胶囊,品牌是白云山。

  • 商品特征提取

商品特征提取依赖于淘系已有的商品数据。商品端的难点在于商家属性乱填以及标题堆砌,很难保证商品信息真实性。因此需要结合商品标题、商品详情页、国家药监局等各路来源的数据进行对比,配合人工审核严格保证商品属性的准确率,得到商品属性库。右图是一个商品部分属性的简单举例。

② 领域特异性样本生成

图片

语义模型的第二个难点在于如何构造符合相关性标准的样本。考虑到用户的点击和购买一定程度上能够反映相关性,所以将用户行为日志和领域知识相结合,以人工标注为指导进行构造。

首先从淘系日志中筛选健康类目的行为日志,考虑到用户在不同场景对药搜相关性的需求没有太大区别,所以充分利用大自营店内搜、天猫好药以及淘系的搜索日志。由于用户的点击行为会受曝光位置影响,排序靠前的商品天然会得到更多点击,因此预估出每个位置的点击偏差作为权重,计算缓解位置偏差之后的点击率作为用户的行为反馈数据。

  • 业务逻辑启发

业务逻辑中也富含相关性知识。从点击行为出发,以高点击率的 query 跟商品对作为正样本,曝光未点击作为负样本,特别是点击或者购买类目下的曝光未点击。由于叶子类目划分一般都比较细致,同类目商品具有相近功效,有一定的语义相关,但因为某种原因又没有被点击,可以作为很好的负样本。此外,可以适当补充些未正常曝光的日志作为负样本,如点击类目下未曝光的头部商品。这类样本满足类目和权威性的要求,从来没有曝光说明在历史的召回或相关性环节被卡掉,是相对简单的负样本。

  • 领域知识样本

最后,为了增强模型对关键属性的区分能力,融合前面构造的实体资源库构造了一批领域知识样本,包括实体样本和关系样本。实体样本主要是为了解决模型难以学习到关键属性冲突的问题,提高准确率。关系样本则是利用词典资源和三元组知识,重点在于提高召回率,加强模型泛化语义和个性化理解。

如此,便得到了六路样本,融合可得到超过二十亿样本,涵盖健康搜索的各个类目。

③ 交互式模型结构

图片

为加强模型的语义理解,在完全交互式 BERT 模型上进行了优化。并且,为了更显性地加强模型对关键属性的理解,对 BERT 模型进行了改造。

模型的输入包括搜索词、商品标题,以及 query 和商品端的文本提取特征。在输入embedding 后,除了通用的三个 embedding,还会根据最大前向匹配得到 keyword embedding,用于记录每个 token 是否为关键特征。然后,在 11 层网络的基础上,额外增加特征匹配网络,具体是将 11 层网络的输出参数乘上前面产出的 keyword embedding,再传入 transformer 网络。最终,将网络产出的向量与原本 12 层的向量拼接进入全连接层。通过优化样本和网络结构,模型在人工测试集上的 AUC 达到了 0.919,相比于双塔模型提升还是比较明显的。

之后,考虑到电商搜索场景的特殊性,用户的搜索词以及商品标题都是关键词的简单堆砌,没有很强的语序和上下文逻辑关系。为强化模型在电商搜索场景中的语义理解能力,还结合领域样本进行继续训练。此外,考虑到直接面向下游是相关性问题,与用户点击行为密切相关,因此对预训练方式做出改进,增加一个预测任务,用于判别用户是否为点击,得到更适合医药电商搜索的预训练模型,将大模型的 AUC 提升到 0.927。

03 模型应用实践

虽然交互式大模型准确率比较高,但参数量非常庞大,线上难以直接部署。常见的做法是进行知识蒸馏,这里采用领域样本进行任务导向的知识蒸馏。

1. 双塔模型蒸馏

图片

蒸馏模型被设计成多粒度双塔模型,模型输入是单字加双字的组合 。具体来说,对于搜索词和标题,首先以最小粒度的单字或单词作为单字,再提取相邻的单字组成双字。在输入 embedding 后,通过最大池化和平均池化得到文本向量表达。在交互层,对两个向量分别做加法、减法以及最大池化,然后再将交互层结果输入 MLP 结构中。

蒸馏样本 用到的是 20 亿的领域样本 ,使用 teacher 模型对样本日志进行预测,构造了一个大规模的既带有真实 label,又有 teacher 模型预测标签的测试集。蒸馏的损失函数由 hard loss 和 soft loss 两部分组成,都是交叉熵损失函数,分别用来拟合真实标签和 teacher 模型的输出分布,最后进行加权求和。

蒸馏之后的模型相比交互式模型参数量大大降低,但 AUC 只损失 0.6 个点,相比单纯的双塔模型提升非常明显。

2. 双塔模型效果分析

图片

最后将模型发布上线,由于模型结构简单,query 和商品端都是在线产出向量并交互,因此对于线上所有的 query 都能覆盖。平均RT小于 10 毫秒,完全符合线上的性能要求。根据线上 AB 来看,模型上线之后,阿里健康大药房人工测评 good 率提升了 2.6 个点,成交订单和金额提升了超过 3 个点,天猫好药平台也有非常明显的提升。右图给出了模型上线前后的对比结果,语义模型上线前,线上文本实体误杀比较多,比如搜索测压器只能返回 3 个品,语义模型上线后商品扩大到了 19 个,也放出了更多语义相关的商品,这也是符合预期的。

以上就是模型的主要内容,谢谢大家。

04 问答环节

Q1:语义模型对于长尾商品、无点击交互类的商品是如何解决的?

A1:我们拉长时间周期,用到了整个淘宝过去一年的搜索日志,对于搜索词基本上都是可以覆盖的期。

Q2:相关性的标准是如何确定的,在用户视角和专业视角是如何平衡的?和转化的关系是怎样的?例如感冒颗粒、感冒灵颗粒、感冒清热颗粒的相关性如何?

A2:相关性分类目制定,对药品这种比较专业的类目会从药品本身出发,结合商品特点和用户历史行为数据,还会和医学专业同学的进行沟通。对于有精确搜索意图的词,会有比较严格的相关性要求,品牌或者规格不符合都会认为是不相关。对于多意图搜索词如银杏叶片,用户的搜索意图既可能是银杏叶片的处方药也有可能是银杏叶的提取物如保健品,这类搜索词会适当修改标准。

Q3:用淘系的点击数据做领域预训练,样本分布会不会差异很大?结构化数据与健康是一致的吗?

A3:对淘系样本日志做了健康类目的筛选,因此整个样本是一致的。

Q4:曝光未点击作为负样本,在相关性问题里是不是不合适的?

A4: 首先,一个商品在某个搜索词下过去一年都未点击,很大可能是不相关。其次,这里有个处理的小细节,日志会结合文本分和实体分进行过滤,当文本分或者实体分高于一定阈值时会从样本里剔除。所以最后筛选出来的样本,不仅在过去一年里曝光未点击,而且文本实体分打分又比较低,这种情况下认为它不相关是合理的。

Q5:蒸馏模型使用的样本和训交互式 BERT模型是同样的样本吗?

A5:不一样,因为交互式 BERT 参数量大,对资源要求比较高,所以筛选了大约千万的数据,正负样本的比例是 1:1。在蒸馏环节,是一个双塔的小模型,对资源要求没有那么高,所以使用了 20 亿的训练样本,正负样本比例大概为 1:3,数据量差的比较多。

Q6:点击样本的准确率是多少?正负样本比例是多少?离线评估指标用 AUC 是有什么特定的考虑吗?PR 和 DCG 指标会看吗?

A6:线上根据文本分和实体分对点击样本进行截断,所以不仅高点击,并且文本分和实体分也是比较高的,precision 相对较高。

正负样本的比例在不同场景不一样,teacher 模型训练时正负样本比例是 1:1,蒸馏模型正样本比较少,正负样本比例 1:3.

离线评估单独看模型主要看AUC,在模型与文本分实体分最后融合时会结合precision和recall和其他指标。

Q7:Unigram 和 Bigram 融合的好处?

A7:单字缺少语义和上下文的理解,连续的两个字或多个字拼接在一起有更强的语义粒度理解。这里也做了消融实验,对单字、单字+双字,单字+双字+三字都进行了实验,最后发现在单字+双字组合下 AUC 是达到最优,前面的 PPT 也给出了消融实验的结果。

Q8:药品模型非药品是同一个模型吗?

A8:目前是同一个模型。

Q9:优化不同相关性权重的依据是什么,目标、点击率还是 NDCG 还是体感相关性呢?

A9:都要看,既要看人工测评数据集上的 AUC,也要看成交样本集上的召回率。在成交样本集上的召回率高,说明对于线上的成交样本覆盖比较多,一般是人工去平衡。

Q10:Bigram 是如何得到 embedding 的?是构建词表吗?

A10:通过 hash embedding,不需要提前构建词表。

Q11:负样本是怎么构造的,有哪些方式?

A11:样本构造都列这张图里,蓝色的框是负样本,红色的框是正样本。

杨蕾(琼羽)

阿里健康 算法工程师

上海财经大学硕士,就职于阿里健康搜索算法团队,主要负责电商搜索相关性。


本文地址:https://www.6aiq.com/article/1673422940015
本文版权归作者和AIQ共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出