垂直电商搜索纠错-垂直搜索引擎包括什么

导读:在电商领域,搜索是用户购买路径中非常重要的途径,用户通过文本输入表达意图,搜索引擎通过理解文本含义,返回用户想要找的商品。整个过程中包括非常多的技术点,其中对用户文本输入异常进行纠正,还原用户的原始意图,不但可以提升用户的搜索体验,更会缩短用户搜索路径,促进成交。

下面将介绍NLP团队在电商文本纠错问题上的技术探索,以及在业务场景中的落地,主要内容包括:

电商文本纠错问题介绍纠错相关工作介绍我们的工作未来的方向

电商文本纠错介绍

电商搜索

参考各类电商搜索APP,用户通过输入框输入想要购买的商品关键描述词,例如”夏季连衣裙碎花百褶”,搜索引擎通过NLU模块、召回模块、排序模块,将最终排序好的商品展示给用户。其中,在NLU模块中,文本纠错可以增强对query的理解,扩展文本的召回。

我们主要负责对用户搜索文本进行异常检测,并纠正搜索文本。电商搜索常见错误发音错误 连衣群-》连衣裙形近错误 过漆长裙-》过膝长裙绕审错误 徽信-》微信 威信-》微信

电商领域搜索文本与传统长文本存在较大区别:

电商搜索下用户文本较短,一般为产品词(1~2个)+多个形容词的组合;电商搜索下文本短,上下文语义破坏粒度较大,若存在多个错别字,则可能无法纠正,故一般错误多为1个;商品搜索语义明确,多字少字情况较少,纠错往往集中在一对一对齐纠错上;用户搜索的文本较为局限,通常为产品词或形容词,影响语义的关键是产品词错误,估计纠错集中在产品词和形容词检测纠正上词粒度较短,一般产品词、形容词、品牌词多在4个字左右

针对以上理解,我们首先确认纠错范围:

纠错以文本对齐方式,对于少字、多字不予考虑词粒度最大长度限制在4.一般仅考虑一个query中最多存在两处非连续异常点

纠错相关技术介绍

这里收集不同平台在纠错领域的探索

1. [小米基于 BERT 的 ASR 纠错](基于BERT的ASR纠错-InfoQ)

2. [策略算法工程师之路-Query纠错算法](洪九:策略算法工程师之路-Query纠错算法)

3. [NLP上层应用的关键一环——中文纠错技术简述](最AI的小PAI:NLP上层应用的关键一环——中文纠错技术简述)

上述资料已经对纠错的方法进行了较为全面的介绍,故就不再赘述。

纠错搭建

垂直电商搜索纠错-垂直搜索引擎包括什么

上图是纠错的大体结构,主要分为三大块

异常检测;候选召回;召回排序;

之所以选择该结构主要有几个原因

对于用户输入的文本中可以出现的异常,我们没有足够的先验知识。 相对于seq2seq的直接纠错,这种架构不需要人工构建正确-错误的标注样本,并且该标注样本构建难度和覆盖范围较难保证。异常检测模型可以利用大量垂直领域无监督样本,进行自监督学习训练召回和排序的可控和解释能力更强,上线异常处理较为方便

整体流程:用户搜索输入文本,异常检测模型对文本逐位判断是否存在异常;若存在异常,则根据异常位置,生成召回种子词,以种子词召回待排序候选词;对候选词进行排序,生成top1最可能的句子,若满足阈值则允许透出,否则无纠正结果返回。

异常检测判别器

垂直电商搜索纠错-垂直搜索引擎包括什么

如图所示,这是我们迭代的最终版本,模型采用中文预训练bert模型,在垂直领域下游任务进行fine-tuning。下游任务训练语料数据来源于正常情况下用户搜索文本和商品title处理后生成的query,例如:夏季连衣群,雷丝打底裤,过漆长筒靴等。针对用户的搜索习惯,我们采用不同策略生成可能的异常文本,尽量靠近真实。生成错误文本和正确样本后,下游任务分别接任务1和任务2进行训练,两个任务的loss加和进行fine tuning,模型输出每个位置异常概率和最可能的字。

任务1:预测每个字为异常的概率。以“夏季连衣群”作为输入,模型输出00001的分类概率,sigmoid产生分类0或1.

任务2:预测出每个位置最可能的字。以“夏季连衣群”作为输入,模型softmax层后,产生对每个字的概率分布,选择异常分类位置最大的top3字。

模型训练:模型训练采用开源中文bert,在任务1和任务2上进行fine tuning,两个任务loss加和。

采用开源中文bert因为其泛化效果优于直接采用站内数据训练的模型,原因主要是站内用户数据文本偏置较为严重,在不同商品类目下,搜索文本和商品title分布马太严重,导致模型泛化效果不理想。采用fine tuning的方式,无需太多的样本即可达到泛化效果。

两个任务中任务1是主,任务2是辅。任务1在线预测每个位置是否异常,下游任务根据异常位置构建异常种子词。之所以增加任务2,是因为任务2可以提升任务1的效果,多任务联合训练更有助于embedding表达,并且任务2也与纠错任务match,对位置预测最可能的字本身就是纠错,只因为任务2还无法达到比较理想的效果,故线上以下游任务完成后续纠错。线下评估集合中联合训练方式较单任务1训练,任务1的评估指标F1值提升1%左右。

模型loss计算上需要对不同位置进行mask。因线上真实纠错场景下,用户输入中不存在显示MASK标识,并且采用mask标识预测每个位置,严重增大预测rt,因为需要递归每个位置MASK,然后预测,预测次数为length(输入文本长度)。故fine tuning时,80%样本采用随机位置字替换生成,20%保持不变。另外,考虑到文本中异常的出现会打破上下文语义关系,例如“过漆长筒靴”,其中过和漆在这里都不合适,预测可能为11000,但样本构造时替换位置是漆字,故对替换位置上下范围1进行mask处理,label=-11-100,loss不计算。

这一点要多说一句,因为采用MASK掩盖每个字进行预测,一开始我们也是这么做的,这也符合BERT一开始的预训练方法。但就如electra文章中所写,MASK标识本身在自然语境中不存在,再者是如果下游并非time step predict任务,可以将语义表达转成一个向量进行预测,例如多分类和二分类。对于time step的纠错来说,每个位置都有可能存在异常,下游fine tuning不采用MASK标识,直接以原始文本作为输入更贴近真实场景,同时减少MASK标识后,无需进行递归step预测,大大降低了预测rt。

此外,模型任务2训练softmax目标范围可以根据下游任务进行调整,无需直接采用bert自带字范围。原因很简单,因为【1】其中存在大量对当前任务无效字,基本就是噪声;【2】多大的字范围将对预测概率不利;【3】降低softmax的耗时,加速模型训练和预测时间。

记得点赞哦!!!☺☺☺

样本构造

考虑到样本标注的成本太高,且无法覆盖用户异常情况,故希望采用模拟生成的方式构建异常样本。

通过对用户异常的观察和分析,异常情况包括

同音不同形,包括同声调和异声调,群和裙,雷和蕾近形词,主要是边旁部首不同,漆和膝,呢和妮前后鼻音,拼音相近,编辑距离为一,森和身手写异常,寸(cun)衫和衬(chen)衫绕审异常,主要在风控领域,威信(v信)和微信,围脖和围脖编辑距离为一的拼音

确定上述几种常见的问题后,针对每种问题在样本构造时进行人工干预和样本比例设置,可以较大限度地还原可能出现的异常问题。为此,小组构建多个领域集合:

同音字集合。将电商领域常见同音字构建,{pinyin:(word:num)},pinyin代表字的拼音,word是中文字,num代表在样本中出现次数。少量人工构建困惑集合,例如漆和膝。下面会介绍构建方式编辑距离为一的字字级别2gram集合

常见错误困惑集合构建

垂直电商搜索纠错-垂直搜索引擎包括什么

在每个垂直领域,存在大量的专有名词和术语,这些词出现频率和出错频率相较其他词更高,针对这些词构建困惑集合,将其用于训练样本构建,对于纠错roi很高。

对线上真实搜索query进行分词判断分词后是否存在单个字,若存在,认为单字为异常点以异常字为节点,向前或向后组词,词长度最大为4将组合词语同音候选集合对比,同音替换后生成结果集合结果集合经过语言模型ppl计算,判断替换是否满足阈值将满足阈值的替换形成异常->替换对,完成困惑集合构建

—————————————————————————————

上述已经完成必要的集合,训练集合采用类似bert mask的方式,20%保持原文本,80%用其他字替换原字,此处没有MASK标识。其他字的来源可以从多个来源来增强:(1)同音字;(2)困惑集合;(3)2gram判断生成;(4)编辑距离为1;(5)随机选择字 5中增强的权重可以人工配置,以调整样本的方向。

这种方法有点类似ELECTRA 模型的训练方式,只是我们根据经验构建可能存在偏执,模型对抗学习方式更为可靠。小组工作开展时并未了解到electra,所以并未采取该模型。

召回与排序

召回阶段

召回阶段主要是针对异常判别器的检测位置从候选集合中选择可能的替换词或字,此外判别器任务2产生的预测字,只能是存在一定概率是替换字,并不能完全保证,为保证召回的速度,候选集合采用HashMap的方式存储。

目前构建的候选召回集合包括同音词集合、编辑距离为1的近音词集合、困惑集合、近形集合4中候选集,集合数据为检索方便存放在引擎中。

异常检测到可能存在错别字后,需要构建错误片段,以错误片段作为query,并行多路召回可能的候选集合。错误片段的构建小组尝试两种方式:

采用困惑集构建的分词方法。分词后,找到异常位置所在位置,以该位置为节点,向前向后组词,词长度最大为4长度组词,以异常位置为节点,向前向后组词,词长度最大为4

排序阶段

对于纠错而言,纠正的结果是从所有召回结果中找到最合适的一个,故将所有的召回结果通过排序,根据多项特征组合,得到排序score,取符合条件阈值的候选结果。

百度中文纠错技术-InfoQwww.infoq.cn/article/25fsqE_h9ltDkfLJlcti垂直电商搜索纠错-垂直搜索引擎包括什么

这里有看到百度中文纠错在排序阶段采用了较为复杂的模型,对候选词在特征挖掘方面也非常的细致,wide+deep 或 xgboost等,但小组并未在此进行如此深的迭代,这也与本身场景区别较大和业务需求不同有关。

为此,小组主要尝试纠错前后词频特征、文本编辑距离特征、拼音编辑距离特征、语言模型ppl值特征、替换字是否在任务2 topK范围内等,采用LR模型进行得分预测。

模型上线

纠错到此整体也就差不多,剩下的就是上线命中用户搜索了。但是上述实验全部都是在离线完成,真实场景并非与离线场景一致,离线场景太过完美,线上场景约束较多。

采用何种方式与用户交互。用户纠错模型无法保证纠正一定是没问题的,可能存在过纠情况,将正确词纠正错了,如何保证用户预期。线上整体流程需要有rt保证。文本纠正在整个搜索链路的前段部分,可以允许的响应时长有限,大概在10ms,如何保证整个流程的rt。线上badcase处理。没有银弹,模型无万无一失,出现异常是否可以紧急修正。

先说一下在问题1和问题3,在用户交互方面需要保证用户的搜索意图不被篡改,搜索A,改写为B,则用户体验较差;第二,意图改写,不可完全无感知,即需要告知用户搜索文本被改写了,用户有权不被改写;最后就是,一旦某个高频badcase命中,需要有白名单或黑名单机制。

垂直电商搜索纠错-垂直搜索引擎包括什么

如图所示,给出用户提示,用户有权调整搜索文本。

问题2主要是bert模型太大,线上部署处理rt较长,无法达到线上rt要求,这个问题在所有采用bert模型进行问题处理中都会遇到,真是痛并快乐着。快乐是上bert问题处理简单粗暴效果好,真香!痛是因为bert大量的参数和超大的计算量,线上部署成为问题(公司有钱,GPU随便部署的可以略过,主要面向cpu部署场景)。

好在目前业内也关注到这个情况,各种大佬对bert进行瘦身,瘦身后的bert效果下降小甚至不下降,运算速度快,完美适应常规场景的部署,瘦身参考资料放在文章末尾。

下面说说小组在bert模型压缩方面的尝试经验和一些结论,对压缩不了解,强烈建议参考资料

模型剪枝;尝试剪枝,将多余或不重要的计算降低,从而减少计算量的同时尽量不降低精度。相对于剪枝,小组直接采用裁层的方式,更加来的简单粗暴,直接从12层降低到6层,再从6层逐渐降低到4层、3层。模型量化;未尝试模型蒸馏;在自蒸馏的第一阶段采用蒸馏方法模型自蒸馏;尝试论文bert-of-theseus方法模型替换;中文领域有其他开源的预训练模型,将bert替换成其他模型,尝试效果。

尝试效果

模型剪枝。小组尝试直接将bert减少为6层,12层和6层对相同的下游任务进行fine tuning,模型效果几乎无损。这个从侧面说明,bert的参数量和计算量相较于当前任务而言,过于充分了,即使将层数降低一半,6层的bert也可以学习到充分的表达。既然,裁剪层可以有效降低计算量,同时模型效果变化不大,是否可以继续裁剪呢?答案是否定的。小组将层数进一步的降低,减少到4层或3层,模型的效果开始显著下降,故裁剪到6层是极限。模型替换。采用albert 模型替换bert模型,同时albert tiny github中开源了不同层数的预训练模型,这正符合我们减少层数的要求。小组分别尝试了4层和12层的albert_tiny,其中4层结构计算量和rt下降明显,可以达到上线要求,但是模型各项评估指标下降同样明显。12层结构可以达到bert模型的效果,但是rt不满足要求。
https://github.com/brightmart/albert_zhgithub.com/brightmart/albert_zh

3. 模型自蒸馏

BERT-of-Theseus: Compressing BERT by Progressive Module Replacing

垂直电商搜索纠错-垂直搜索引擎包括什么

先说一下采用自蒸馏与蒸馏方法的区别(仅个人理解),蒸馏方法的bert压缩,通过teacher和student模型,设计loss使student模型尽可能的达到teacher的效果,两者的loss尽量相近。在对bert蒸馏时,往往从预训练任务开始,将大模型蒸馏成小模型,例如distill bert, tinybert等。自蒸馏方式相对于蒸馏并非直接从预训练开始,而是作用在fine tuning阶段,原始预训练不变。

成本代价;自蒸馏对成本考虑较多的公司更友好,无需从头训练,在下游任务需要调整时,自蒸馏一个上线模型即可。可操作性更强;蒸馏方式从头训练,loss设计较为复杂,调整模型效果需要精细化的工作,而自蒸馏仅需要在fine tuning阶段,下游任务的bert训练不变,自蒸馏作为一个独立阶段仅在需要压缩模型时使用,工程实现更加友好,独立性好,方便插件化。

所以论文中提出一种BERT-of-theseus的自蒸馏方法,论文基本思想不断将模型的组成部分替换,当替换掉最后一个组件时,原来的模型还是以前的模型吗,还是已经是一个新模型了呢?

作者认为KD方法采用的指标过多,除了特定任务指标还有各种蒸馏loss指标,不同指标之间调节权重较为困难,如果只采用一个指标,则训练难度将大幅降低,故采用model replace方法,定义针对下游任务fine tuning模型为原始模型predecessor,目标压缩模型为successor。

首先指定successor模型中模块对应predecessor模型中的部分组件。例如,要将12层bert压缩为6层,则successor中每个transformer要对应predecessor中两个transformer原12层bert模型在下游任务上进行fine tuning,完成训练将successor和predecessor一同训练,其中successor参数参与训练,fix原来12层bert模型predecessor参数,采用概率p来选择采用predecessor或successor。模型训练收敛后,将successor模型连接embedding层和predictor层,再次训练至收敛。

上述四步完成后,得到的successor模型就是压缩后的模型,小组尝试该方法将6层模型压缩到3层,模型各项离线指标下降在1%以内,在可接受范围内,模型预测rt也达到预期。

未来的工作

当前的检测、召回和排序阶段都尚有较大优化空间。

检测部分可以将拼音作为重要特征加入到模型中,候选词和异常词在拼音上具有较大的相似之处,拼音可以辅助模型进行预测,用以预测是否存在异常和可能的候选词。除此之外,候选词的预测可以采用限定的softmax,无需将概率分布设置为全集文字,因为每个字的拼音和字形都提供了先验知识,可以将候选集合确定在较小范围内,对该范围进行softmax概率分布更置信。最后,是否可以引入模型对抗学习的方式来训练,类似electra模型,提高模型在未知异常场景下的泛化能力。

召回部分和排序部分所做的工作较少,召回集合的扩展需要增加在语言认知方面的知识。排序目前用到的特征较少,有待进一步挖掘

bert压缩参考资料

模型压缩实践系列之——layer dropout所有你要知道的 BERT 模型压缩方法,都在这里!模型压缩实践系列之——bert-of-theseus,一个非常亲民的bert压缩方法结构剪枝:要个4层的BERT有多难?美团BERT的探索和实践降低预测过程计算成本,这些NLP模型压缩方法要知道ACL2020 | FastBERT:放飞BERT的推理速度双DNN排序模型:在线知识蒸馏在爱奇艺推荐的实践知识蒸馏在推荐系统中的应用Compressing BERT for faster predictionPruning BERT to accelerate inference

免责声明:文章内容来自互联网,本站仅提供信息存储空间服务,真实性请自行鉴别,本站不承担任何责任,如有侵权等情况,请与本站联系删除。
转载请注明出处:垂直电商搜索纠错-垂直搜索引擎包括什么 https://www.bxbdf.com/a/112697.shtml

上一篇 2023-06-21 05:01:33
下一篇 2023-06-21 05:11:48

猜你喜欢

联系我们

在线咨询: QQ交谈

邮件:362039258#qq.com(把#换成@)

工作时间:周一至周五,10:30-16:30,节假日休息。