文本匹配是自然语言处理中的一个核心问题,它不同于MT、MRC、QA 等end-to-end型任务,一般是以文本相似度计算的形式在应用系统中起核心支撑作用1。它可以应用于各种类型的自然语言处理任务中,例如信息检索、搜索引擎、问答系统、信息流推荐、复述问题、知识检索、机器翻译等。

1、背景

文本匹配是自然语言处理中的一个核心问题,它不同于MT、MRC、QA 等end-to-end型任务,一般是以文本相似度计算的形式在应用系统中起核心支撑作用。它可以应用于各种类型的自然语言处理任务中,例如信息检索、搜索引擎、问答系统、信息流推荐、复述问题、知识检索、机器翻译等。

之所以文本匹配的适用范围如此之广,是因为很多NLP任务本质上可以抽象为一个文本匹配问题,比如说复述问题可以归结为两个同义句的匹配,信息检索就是一个搜索词和文档资源的匹配过程,问答系统的核心问题是将用户输入的问题和最佳的候选答案匹配起来,对话系统可以归结为前一句对话和下一句回复的匹配。本文主要介绍DSSM文本匹配模型在苏宁商品语义召回上的应用。

使用文本匹配模型进行语义召回是在苏宁易购主搜系统对一些未知词或者语义不明甚至有错字少字的用户搜索词返回结果不好的情况下提出的。如下图所示,用户漏了挂烫机里的挂字,并且后面输入了有一定干扰作用的具体型号词,导致没有返回结果。scolib品牌的耳机没有在苏宁进行销售,因此scolib这个英文词属于未知词。

图一: 未知、错字少字等情况搜索效果展示

从以上两种召回效果较差的情况可以看出,以文本相似度为核心的召回策略虽然能在大部分情况下保证较高的精度,但是无法解决前文所提到的特殊情况。因此采用语义模型,获取与用户query的语义相近的商品是非常有必要的。

深度文本匹配可以总结为四种:1、单语义模型 2、多语义模型 3、匹配矩阵模型 4、深层次句子模型。其中单语义模型用全连接、CNN、 RNN或其他的特征提取器得到两个句子的深层语义向量,再计算两者的匹配度;多语义模型从多颗粒的角度解读句子,考虑到句子内部的局部结构;匹配矩阵模型直接捕捉匹配信号,将词间的匹配信号作为灰度图,再用深度网络提取特征,更精细的处理句子中的联系;深层次的句子间模型用更精细的结构去挖掘句子内和句子间不同单词之间的联系,得到更好的效果5。

近几年来文本匹配相关的论文层出不穷,对句子对结构的处理越来越精细,模型复杂度快速上升6。虽然论文里的实验SOTA效果不断刷新, 但是完整的训练步骤,甚至是单次预测所需时间也是非常长的。线上生产环境以保证用户体验为第一要务,需要快速可靠准确的文本匹配策略7。同时,苏宁有海量的每日更新的query-doc对文本语料,query是用户的搜索词,doc为系统返回的商品title。想要在有限的硬件资源下,能容忍的训练调试时间范围内实现对主站全商品类目亿级别语料进行训练,需要一个可调参数规模不大,待召回千万级商品集的语义向量可以离线提前算好,模型效果能随着语料规模增大而提高的模型。综上,我们选择LSTM-DSSM模型作为商品语义召回系统的核心。

2、LSTM-DSSM模型

2.1 模型输入

在商品语义召回业务里,待匹配的DOC是商品标题,而标题不可避免的会包含型号词如GTX2060这种。如果对输入按字处理,则会强制模型学习2、0、6、0四个数字是一种固定搭配,对于短文本还好,可一些电子产品的型号词数字加字母长达十几位,而真正的核心中文词也许只有短短几位,这就产生了非常严重的干扰效果。而且对于包含几十个字的长标题,就需要同等长度的LSTM进行特征提取,造成参数过多,增加了模型学习成本。综上,本模型放弃字token作为输入,而是使用词token。

我们参考了迁移学习的思想,不是简单的随机初始化词token的Embedding向量,而是以亿级别的苏宁商品Title为语料,先使用HanLP分词器进行分词处理。将分词所得的词token按顺序编码,生成后续模型需要的词典。并在spark平台上,用其提供的word2vec模型接口训练词token语料。这样就能得到每个词token的语义向量,并当作为模型的输入。

考虑到词典和各个词的语义向量的生成,是一劳永逸的工作,通常不需要再变动,所以使用了非常大规模的语料,spark环境设置300台机器,训练时间接近8个小时,最后的效果还是满意的。

2.2 模型架构

商品语义召回系统所用DSSM在如下图所示的基本模型基础上,增加了两处针对业务效果的改进。

图二: DSSM基础模型示意图

首先对于匹配商品召回这种具体的业务场景,商品的品牌和品类是非常重要的特征。如果能匹配到正确的品类、品牌,那最终效果肯定不会差。因此为了能直接利用这类特征,采取了非常直接的方法,如下图所示:

图三: 频偏、品类特征使用示意图

由上图可见,品牌、品类通过Embedding表示学习层、两层MLP直接映射成和LSTM提取的语义向量同一维度的向量,再将两者相加得到最终的语义向量表示。

第二,引入了注意力机制,目的是解决诸如洗衣机返回较多洗衣机配件的情况,提升核心词洗衣机的权重,这样能极大的改善召回效果,具体使用方式如下图所示:

图四: 注意力机制使用示意图

由以上两图可以看出,有两种参考了经典乘性注意力机制的方法,第一种是用query的最后一个LSTM单元输出的隐层向量作为context,分别与doc每个时间步骤的隐层向量作点积计算,计算结果作为权重。每个时间步骤的向量乘以权重再求和就可以作为最终的语义向量。第二种则是求得query每个时间步骤的权重,然后得到query最终语义向量,将其与doc最后单元输出并联或者相加,作为最终商品语义向量。

2.3 模型输出

模型的输出作为语义召回系统的输入,主要由两个方面组成。第一,是实时生成搜索词query语义向量的模块。具体做法要考虑到实际业务场景一次只输入一条query的情况,改造模型输入接口和具体处理方式,读取已经训练好的模型参数,重新保存为tf-serving服务框架所需要的pb格式模型。第二,离线生成待召回商品的语义向量集,由于使用了注意力机制,还需要query参与商品语义向量的生成。召回集是接近百万级的规模,因此可以方便的复用训练模型,一次生成batch_size个语义向量,并且全部Norm化成平方和为1的向量,保存在内存里,当下一个batch_size生成完毕,直接拼接在一起。在内存里存储完毕所有商品的语义向量,形式为numpy向量,最终存储到硬盘里的是npy文件,大小为500M左右,空间费用可以接受。

3、语义召回系统介绍

3.1 数据准备

利用苏宁完善的数据仓库环境,在每日的固定时间执行HIVE脚本,获取用户搜索词、对应的商品Title、编码、品牌品类,质量分等字段的信息。语料按搜索词搜索次数,商品质量排序,选取质量高的作为语料,并且从友商平台上抓取商品信息作为补充。同时,在spark平台上进行初始语料的处理,包括分词、去除无意义词、中英文分开处理等预处理步骤,最后要将处理完毕的语料转化成一个正DOC,四个负DOC, 即可以直接应用于模型训练的形式。另外还需要针对召回,对语料进行去重处理,避免召回同一件商品的情况出现。最后,给召回系统提供待召回的商品title集以及准确对应的商品ID和商品质量分集。

3.2 在线匹配

从上文可以看出,模型将准备好的待召回商品title集处理为npy文件,存在磁盘之中。另外输出了tf-serving服务框架所需要的pb格式模型,可以将用户搜索词实时转化为语义向量。接下来要做的事情就是计算query向量与所有商品语义向量之间的两两余弦距离,返回TopN, 找到对应的商品ID,提供给前台展示。

需要注意的是,这里找TopN的过程需要‘快准狠’,我们使用的Facebook开源的Faiss框架,为了保证准确度,没有使用任何自带的高级索引功能,只使用最简单的暴力计算两两之间的距离,这样肯定能找到正确结果。通过测试,在百万级数据的规模,维度为256,使用暴力检索,耗时也不到1ms,完全可以接受。另外出于业务目标考虑,提高高质量分物品的权重,这简单通过余弦距离乘以质量分来实现,人为提高高质量分物品与搜索词的余弦距离。

3.3 系统环境

整个语义召回系统的系统环境组成较为清晰,包括在Spark平台上的大规模数据处理,jupyter深度学习平台上的模型训练和语义向量生成,Linux主机上的Faiss匹配找出TopN的过程,tf-serving线上服务器的布置,以及方便结果调试的前端匹配结果展示,如下图所示:

图五: 召回系统前端展示

可以方便的传入各类参数,比如返回商品的个数,使用模型的版本,使用索引的种类等等,调试起来非常方便。

4、总结

本文介绍了DSSM文本匹配模型在苏宁商品语义召回上的应用,主要包含算法原理和工程实践两个方面。苏宁搜索团队在搜索匹配、个性化推荐、知识图谱、智能对话等自然语言处理领域有很多的尝试实践,限于篇幅本文不做介绍,欢迎读者关注后续的最新文章分享。

参考文献

  1. Huang P S, He X, Gao J, et al. Learning deep structured semantic models for web search using clickthrough data[C]// ACM International Conference on Conference on Information & Knowledge Management. ACM, 2013:2333-2338.
  2. Shen, Yelong, et al. “A latent semantic model with convolutional-pooling structure for information retrieval.” Proceedings of the 23rd ACM International Conference on Conference on Information and Knowledge Management. ACM, 2014.
  3. Palangi, Hamid, et al. “Semantic modelling with long-short-term memory for information retrieval.” arXiv preprint arXiv:1412.6629 (2014).
  4. http://ju.outofmemory.cn/entry/316660
  5. http://blog.csdn.net/u013074302/article/details/76422551
  6. 博客园 DSSM算法-计算文本相似度
  7. Gers, Felix A., Schmidhuber, Jrgen, and Cummins, Fred. Learning to forget: Continual prediction with lstm. Neural Computation, 12:2451–2471, 1999.
  8. Gers, Felix A., Schraudolph, Nicol N., and Schmidhuber, J¨urgen. Learning precise timing with lstm recurrent networks. J. Mach. Learn. Res., 3:115–143, March 2003.

laravel 分词搜索匹配度_DSSM文本匹配模型在苏宁商品语义召回上的应用相关推荐

  1. laravel 分词搜索匹配度_【地名地址】面向智慧城市的高精度地名地址匹配方法...

    点击上方蓝字关注我们↑↑↑↑    原 文 摘 要 针对智慧城市建设中各种业务数据对地名地址匹配准确度和效率不高的问题,本文提出一种面向智慧城市的高精度地名地址匹配方法.该方法在基于中文分词的地名地址 ...

  2. 文本相似度、文本匹配、文本聚类

    1 1在Keras的Embedding层中使用预训练的word2vec词向量:https://blog.csdn.net/u012052268/article/details/90238282 imp ...

  3. python词组语义相似度_文本匹配,语义相似度,匹配相似短语/单词python语义wordNet模糊匹配...

    通过使用wordnet文本匹配,我意识到wordnet只能将一个单词与一个单词进行匹配.它不能将一个单词与一个短语相匹配.在 如你所见,我有两个清单.在list1=['fruit', 'world'] ...

  4. laravel 分词搜索匹配度_SEO除了“中文分词”还有“文本分析”- 搜狗蜘蛛池博客...

    原出处:蜘蛛池博客 原文链接:SEO除了"中文分词"还有"文本分析" - 蜘蛛池博客 对于刚入职的SEO人员,日常工作中,我们很少谈论"中文分词&qu ...

  5. laravel 分词搜索匹配度_搜索引擎工作原理

    抓取网页.每个独立的搜索引擎都有自己的网页抓取程序爬虫(Spider).爬虫顺着网页中的超链接,从这个网站爬到另一个网站,通过超链接分析连续访问抓取更多网页.被抓取的网页被称之为网页快照.由于互联网中 ...

  6. laravel 分词搜索匹配度_elasticsearch基础笔记9-elasticsearch 词项全文搜索

    es的核心功能就是搜索和分析.那么我们看看搜索相关内容 1.搜索机制 在进入搜索之前,会对查询体根据情况进行分析和处理. 2.有哪些常用搜索类型 全文查询 词项查询 复合查询 嵌套查询 位置查询 特殊 ...

  7. 【NLP】深度文本匹配综述

    目  录 1.研究背景与意义  2.深度学习在自然语言处理的应用  3.深度文本匹配与传统文本匹配  4.深度文本匹配国内外研究现状  4.1基于单语义表达的文本匹配 4.2基于多语义表达的文本匹配 ...

  8. 深度文本匹配在智能客服中的应用

    参加2018 AI开发者大会,请点击↑↑↑ 作者 | 云知声 目录 一. 深度文本匹配的简介 1. 文本匹配的价值 2. 深度文本匹配的优势 3. 深度文本匹配的发展路线 二. 智能客服的简介 1.  ...

  9. 基于表征(Representation)的文本匹配、信息检索、向量召回的方法总结

    作者 | 夜小白 整理 | NewBeeNLP 最近系统性的看了一些有关于信息检索.文本匹配方向的论文,先贴下三篇主角论文: 「(ColBERT)」 Khattab, O., & Zahari ...

最新文章

  1. 几个定制 iTerm2 的 tip
  2. 测试MVC3时关于Model Builder语句的更改
  3. python获取IP位置信息
  4. 1.0 mysql的连接
  5. CentOs7安装apache以及遇到的问题
  6. 函数最值题目及答案_呆哥数学每日一题 ——多元函数求最值
  7. linux 设置服务自启动
  8. 【数学】Hunter’s Apprentice
  9. Machine Learning学习计划
  10. php中padding,css中padding填充详解
  11. 接口规范 5. 点播流相关接口
  12. ERDAS遥感图像配准、及其它一些基本处理
  13. python-redis连接管理
  14. Win10升级到最新版本
  15. MPC控制笔记(一)
  16. 企业信息化规划与设计
  17. 3.5 Python 实例4-文本进度条
  18. 如何破解linux密码
  19. 计算计算机系统包括哪些内容,什么是MIPS计算机系统的运算器
  20. 人生就像四季,繁华过后终归平淡,不可能一直繁华似锦,不可能一路花香四溢。...

热门文章

  1. java中队列的类是什么意思_java中LinkedList集合类实现栈和队列要注意什么?
  2. centos7python命令_详解Linux Centos7下安装Python的方法
  3. python字典的常见操作_Python 字典(Dictionary) 基本操作
  4. python打开文件_喜大普奔 | 如何在Win10下利用Python打开grib文件
  5. centos 6.3 mysql python 模块_CentOS安装python2.6以及MySQL-python
  6. 《大型网站技术架构》5、6、7章阅读笔记
  7. 任意长度的高精度大整数加法
  8. SAP HANA中的SLT简介
  9. Jmeter之Bean shell使用(四)——跨线程组之间的全局参数传递
  10. 课时5:闲聊之Python的数据类型