导读

本文主要从三个方面来介绍下本人2021年的上半年的工作,优化跨境电商的搜索相关性中的一块工作:搜索query实体理解,因为只有做好query实体理解这第一步,才能继续做很多后面相关性的事情。比如词改写,替换,扩展等。

  • 训练数据获取
  • 模型架构设计和优化
  • 线上工程化
  • 迭代和优化

一. 训练数据获取

我们都知道要训练一个模型,是少不了训练数据的。目前还没有一个很标准的英文电商实体的数据集,所以这个数据集只能靠自己建立了。基于我们对自己业务的理解,并参考国内电商业界的定义,我们定义了总共15类实体,品类,修饰,人群,品类修饰词,品牌,型号,IP, 颜色,材质,年龄,尺寸规格,款式元素,风格,功能功效,场景。

品类:名词,在句子中代表某一种或者某一类商品

人群:代表某一类人群(man woman baby lady )

品牌:代表品牌

品类修饰词:该词本身表示某一品类,但是在句子中表示修饰作用,比如car perfume iphone case 里的car  iphone

型号:比如 iPhone 12 Samsung note 9中的12 和note 9

IP:影视,动漫,娱乐,音乐等的组合 人名 角色等,如black pink

颜色:就是颜色

材质:服装类的布料材质,饰品的 金银等,家具的木材材质

年龄:年龄,把英文中表示整个年龄的字符都标出来比如 10 years old,  age of 10,  1-10 years old 等

尺寸规格:服装 鞋子家具的物品大小

款式元素:表示物品的部分形状特征和组成元素,如 短袖 长袖

风格:表示物品整体的特征,性感 可爱  修身 大码等

功能功效:物品的某项功效,祛痘 美白 消毒 清洁,主要美妆类,家居类

场景:物品的使用场合和地方,如厨房 户外 室内 聚会

修饰:一般形容词,但是不包含以上类别形容词

有了实体定义之后,我们就应该想想从哪里获取标注数据。我们从日常用户搜索的query中随机抽取,当然要做一些筛选,比如去掉特别长尾的,像一个月就搜过一次的;去掉query特别长或者特别短的等。最终取了50000个待标注样本。有了标注数据,就要想如何省时省力完成数据的标注工作。最终我们采取内部提供工具,给外包标注的形式进行了整个数据的标注工作。

我们自己基于开源的标注工具doccano,搭建了一个内部的标注网站提供给外包公司,参考链接一站式文本标注工具doccano(你值得拥有) - 知乎。新的版本有更新,可以使用最新版本。我们建好标注工程,给到标注公司,规定大概某个时间点完成 。当然这里面还有校验工作,每天我们会安排公司内部业务同学对外包的新增标注进行抽检,如果准确率达不到标准,会要求他们重标或者重新培训。

五万条数据经历了差不多一个月时间全部标注完成。最终标注好后转换完成的数据格式:jordan 11 shoe;B_type E_type S_category,当然可以根据模型输入需要更改。

模型架构设计和优化

基于bert的强大理解能力,第一想法就是直接用bert来做实体识别,当然也有试过其他的,最后却是bert效果最好。代码参考:GitHub - dutyhong/spanbert。但由于通用的预训练的bert模型是基于比较正规的英文文本进行训练的,而搜索query中其实是有很多缩写,不规范英文单词的。这个时候需要把这些词加入词汇表中进行微调训练。我们最后根据这些词的搜索频率进行了筛选加入千级别个数的词生成新的词汇表。

解释上图的左边模型结构,模型结构在一般模型结构的基础上进行了一点优化。我们先用一个全连接网络来预测每个标注样本的所有实体词的开始token,然后将这个全连接的输出logits进行softmax和bert的输出进行合并输入下一个全连接来预测实体的结尾。为什么要这么设计呢,可以理解为有了整个query的信息和每个实体词的开始token信息,这样来预测每个实体词的结尾更加准确。而且这样可以避免一般模型结构中预测每个token的实体信息要更好。比如当实体比较长的时候,如steam coffee machine,只需开始steam和结尾machine准确就可以了。

有人问为什么选择模型改成这样呢。因为效果好啊,这个模型结构不管是找回还是准确都比一般的模型结构结果好3-4个点。最终模型准确率能达到88+%,在模型识别的基础上在加上一些规则,最终准确率是91%+。规则还是个好东西啊。

线上工程化

模型训练完成,接下来想的就是如何满足线上要求的情况下上线使用。为了和线上系统兼容并不增加其他系统的情况,本文采用了java调用onnx模型的方式进行线上调用。离线测试每个query的耗时为30-50ms之间,线上可以接受。代码参考:GitHub - dutyhong/onnxpredict。注意调用的时候一些内存泄漏问题。

迭代和优化

每个模型都有后续的迭代和优化的过程,为了每次优化badcase更加方便快捷,基于streamlit做了个前端页面可以让每个人都能来优化模型。

1. 标注待优化的样本,通过标注完上传待优化样本

2. 将待优化的样本和旧的样本组合成新的样本重新训练模型

3. 训练完成评估测试集结果,是否有较大差异(为了保证优化后的模型与之前模型不能有较大差异)

4. 查看优化样本的结果,为了分析模型优化之后对于待优化的case是否都已优化完成

5. 确认优化完成,同步模型到线上

基于BERT的英文query实体识别模型相关推荐

  1. 【项目调研+论文阅读】基于BERT的中文命名实体识别方法[J] | day6

    <基于BERT的中文命名实体识别方法>王子牛 2019-<计算机科学> 文章目录 一.相关工作 二.具体步骤 1.Bi-LSTM 2.CRF结构 三.相关实验 1.数据集 2. ...

  2. 实体识别(4) -基于Bert进行商品标题实体识别[很详细]

    基于Bert进行实体识别任务微调 致Great,ChallengeHub公众号,微信:1185918903,备注NLP技术交流 和鲸主页:https://www.heywhale.com/home/u ...

  3. 第15课:基于 CRF 的中文命名实体识别模型实现

    命名实体识别在越来越多的场景下被应用,如自动问答.知识图谱等.非结构化的文本内容有很多丰富的信息,但找到相关的知识始终是一个具有挑战性的任务,命名实体识别也不例外. 前面我们用隐马尔可夫模型(HMM) ...

  4. 知识图谱 基于CRF的命名实体识别模型

    基于CRF的命名实体识别模型 条件随机场 CRF ​ 条件随机场 CRF 是在已知一组输入随机变量条件的情况下,输出另一组随机变量的条件概率分布模型:其前提是假设输出随机变量构成马尔可夫随机场:条件随 ...

  5. 基于深度学习的命名实体识别研究综述——论文研读

    基于深度学习的命名实体识别研究综述 摘要: 0引言 1基于深度学习的命名实体识别方法 1.1基于卷积神经网络的命名实体识别方法 1.2基于循环神经网络的命名实体识别方法 1.3基于Transforme ...

  6. 基于spaCy的领域命名实体识别

    基于spaCy的命名实体识别 ----以"大屠杀"领域命名实体识别研究为例 作者: Dr. W.J.B. Mattingly Postdoctoral Fellow at the ...

  7. A Transformer-based System for English Named Entity Recognition 基于Transformer的英语命名实体识别系统

    (1)  目的和背景 ① 研究任务: 复杂的复合命名实体可能是复杂的名词短语.动名词.不定式.甚至是完整的句子.这种歧义使很难根据他们的上下文认识它们.为了解决复杂命名实体识别,提出了一个基于 Tra ...

  8. 一文详解中文实体识别模型 Lattice LSTM

    每天给你送来NLP技术干货! 来自:AI算法小喵 写在前面 今天要跟大家分享的是西湖大学张岳老师2018年发表在顶会ACL上的一篇中文实体识别论文 Lattice LSTM. 论文名称:<Chi ...

  9. python爬取电子病历_一种基于中文电子病历的实体识别方法技术

    本发明专利技术提供了一种基于中文电子病历的实体识别方法,涉及医疗实体识别技术领域.针对目前国内缺少公开中文电子病历标注语料库的缺陷,本发明专利技术通过构建整理医学词典,提出了一种半自动语料库标注方法, ...

最新文章

  1. 78. Subsets
  2. 前端一HTML:十一:其他选择器
  3. 五、Elasticsearch中的API的简单使用(Python版本)
  4. charles基本使用文档
  5. android中的 listview,Android中ListView的初步认识(一)
  6. 服务器关掉后django项目停止,Django项目关闭debug模式后,静态文件无法加载的解决办法...
  7. Spring源码分析之BeanPostProcessor接口和BeanFactoryPostProcessor接口方法不执行原因分析
  8. excel 单元格文本链接方法
  9. codeforces 615B. Longtail Hedgehog
  10. 一键关闭 openwrt路由器的led灯
  11. 进阶实验5-3.2 新浪微博热门话题 (30 分)
  12. 对组件、模块、子系统、系统、框架、架构 定义浅析
  13. linux网络编程常用头文件总结
  14. codewars练习(javascript)-2021/3/21
  15. 判断数字的正则表达式
  16. 赵鹏计算机专业,赵鹏 - 安徽大学 - 计算机科学与技术学院
  17. 在Unity中使用ComputeShader
  18. 熊猫头唱unravel——如何使图片人物表情动起来
  19. 前端开发的流程与规范
  20. 华为服务器查询IPMI地址

热门文章

  1. 百度编辑器umeditor字体字号设置无效的解决办法
  2. ProxmoxVE-5.4.1安装
  3. 2016年高考分数线哪个省最最最高最最最低-竟然是它???
  4. 基于JSP的超市收银系统
  5. Windows下编译Chromium
  6. 一级计算机视频教学百度网盘,2019年一级造价工程师教学视频百度云网盘分享...
  7. 饿了么运维基础设施进化史
  8. 黄一老师:关于信用卡逾期你了解多少呢?
  9. OpenStack 网络总结之:理解GRE隧道的工作流程
  10. php分类程序,PHP无限级分类实现程序