1.背景
1.1作用
意图识别是Query理解的关键环节,其作用是理解用户的搜索意图,进而指导后续的检索和排序。下图为搜索在线系统工作流程。具体到电商应用,意图识别就是预测用户输入Query时想要浏览的商品属于哪些类目以及意图强度。在兴盛优选小程序中,商品搜索是用户表达诉求最清晰的场景。意图识别的效果直接影响着用户对搜索、对小程序的体验。

1.2挑战
传统意图识别通过统计+规则的方式实现:离线对历史Query的加购类目进行统计,将符合一定条件的Query及其统计意图存入字典。在线Query以查字典的方式匹配历史Query,关联统计意图,实现预测。如:用户搜索“牛奶”时,加购商品类目分布为[l1:<奶制品:100%>,l2:<常温纯奶:50%,低温纯奶:20%,…>] 。这种方法能很好的反应历史Query的意图分布。然而,查字典的方式缺乏泛化性。字典中的历史Query数量有限,存在大量的线上Query无法匹配。如,在线搜索“纯牛奶”时,即使历史统计中存在“牛奶”也但无法匹配。
为了实现泛化,业界通常将意图识别看作一个多标签分类问题,使用类似ctr预估的模型方法预测类目。其中,训练数据来自用户点击/加购行为,<label: 商品类目,feature: Query>,模型使用多标签分类模型。由于意图识别处于在线搜索系统的上游,预测偏差会影响后续的召回和排序。因此,该场景对分类的准确率和召回率都有较高要求。这对多标签分类是一个挑战。具体到我们的商品搜索,挑战主要来自:
- 类目体系复杂
一方面,类目数量比较多。平台类目分为两级,二级类目数接近1000。另一方面,意图类目比较分散,如:搜索“零食”的用户所需求的商品可能属于多个一级类目:休闲零食、饼干糖果、烘焙、佐餐辅食。这都导致对于分类模型很难实现较高的准召。
- 类目体系更新
平台发展过程中,售卖商品的种类不断增加,商品类目不断扩充。对于新类目的商品,之前没有过用户行为。因此,基于用户行为的统计和模型大多会失效。此外,不同于传统电商,兴盛优选售卖商品具有明显的季节性,某些类目的商品可能在很长一段时间没有出现在平台上,没有用户行为。这样的商品出现在平台上时,存在意图(i.e. 类目)冷启动问题。
- 用户行为不规范
一方面,“不合理”的点击/加购。在早期没有搜索系统的智能化比较薄弱时,在搜索场景下有一定量的不合理用户行为。如:搜索“女装”,系统通过“装”的文本匹配,向用户展示了商品名中包含“装”的不合理商品,如,“伊利经典牛奶 盒装”。糟糕的是,存在一定量的用户加购/点击了类似的商品。
另一方面,搜索词有误。在纠错模块未发挥作用时,若能正确识别意图,也能返回用户需要的商品。如,query“百世”(“百事”),若能识别用户意图为饮料,也能通过百的匹配返回商品“百事可乐”。
2.技术方法
2.1框架结构
意图识别框架从下到上依次是数据层、算法层、策略层,如下图。

我们通过多模块方式实现对预测结果和置信的校验融合,得到最终结果。如下图所示,意图分类器模块具有较好的泛化性,能够对未统计的Query进行预测,能召回部分统计之外的正确意图。其主要缺点存在一定误召回。以较高的预测得分阈值过滤召回能够降低误召回,但会导致大量漏召回。近邻词索引模块通过语义关联和统计意图实现预测,较好的缓解了召回不足的问题。以上两个模块都依赖用户行为将Query和意图关联。历史商品索引模块摒弃对用户行为的依赖,直接建立Query和商品类目的关联。从另一个角度进一步弥补了召回不足。此外,通过意图监控模块对类目体系和特殊Query进行监控,进一步确保意图识别的健壮性。
2.2核心模块
- 意图分类器
我们基于神经网络分别对一级类目和二级类目构建文本分类器。为了尽可能提升多标签预测的准召,在常规神经网络基础上运用了两种技术。第一,针对类目数多的问题,基于霍夫曼二叉树构建层次化的预测路径。这样,在提升准确率的同时也提升了模型计算效率,预测计算量由C(i.e. 类别数目)减少为log C。第二,一级类目较少,预测准召较高;二级类目反之。据此,使用一级类目的预测结果约束二级类目。此举能显著提升二级类目预测的效果。分类器的预测输出包括类目和得分。在评测调试中发现,通过预测概率阈值过滤难以实现准召双高。我们选择先保证准确性。通过其他模块弥补被误杀的召回。

- 近邻搜索词索引
近邻搜索词索引使用语义匹配的方式将线上Query和历史统计Query关联,进而将线上Query与历史Query的统计意图关联,实现类目预测。如,线上query“伊利牛奶”,语义匹配到历史query——“纯牛奶”、“安慕希”、“经典”,对应的统计意图为 l1:[奶制品,文体办公], l2:[常温牛奶,低温牛奶, 常温乳饮,书籍类]。意图分布过低的类目(如“文体办公”)被滤除。

这里保证预测效果的关键是语义(模型)的准确性。基于搜索词以短文本为主和工程效率的考虑,我们选择Word2Vec作为语言模型,构造两种语料序列的训练数据:1)以搜索会话为粒度拼接搜索词构成序列;2)同一商品名关联的点击/加购搜索词序列,序列中添加商品名。
语义质量测评中发现,模型很好的学到了用户搜索词和平台商品名称的语义(不受文本相似度影响)。例如:sim (猪肉,里脊)>sim(猪肉,猪肉脯),sim:相关度函数(i.e. 向量内积)。
语义匹配的原则是宁缺毋滥。以较高相关度阈值进行top-k语义匹配,只要能匹配到,历史Query与在线Query必然语义相似度很高。此外,由于训练数据中存在同时包含了错误Query与正确Query的序列,如:“百世”和“百事”,该模块还能一定程度的实现对有误Query意图识别。
- 历史商品索引
历史商品索引建立了一种不依赖于用户行为的商品和搜索词关联。首先,使用历史售卖过的全量商品构建索引。预测时,使用文本子序列匹配的检索策略,将在线Query检索到的商品的类目进行聚合统计,实现类目预测。示例如下图所示。这种检索策略对长文本匹配较为严格而对短文本匹配较宽松,因此,对于长Query的预测较准;而短Query的预测中存在较多误召回。因此,我们约束Query字数超过2才使用历史商品索引进行预测。
历史商品索引不同于前两个模块,其预测完全不依赖用户行为。因此,一定程度缓解了类目冷启动问题。此外,从另一个角度建立Query与意图的关联,起到了弥补召回作用。

- 过滤与融合
在模块测评和融合测试中,我们对比多种策略。根据各模块特点,确定了过滤与融合的总原则:多模块融合互补保证召回率;各模块内严格筛选保证准确率。
在多标签分类预测结果中,每个输出神经元都有预测概率(i.e. 预测分),且概率之和为1。当只有一个标签是真时,相应输出神经元的预测分会很高(i.e. 接近1)。当有多个标签为真时,通常每个标签的预测概率不会很高,但所有真标签的预测分之和会很高。根据这个特点,我们设置两种阈值,分别是单标签最低阈值和多标签加和阈值,能满足两种阈值的结果才能保留。
语义模型的准确性保证了只要能找到语义相似度大于一个阈值,搜索词和统计词100%密切相关。因此,我们主要基于语义相似度来取舍预测。此外,滤除统计意图分布值过小的类目。最终的输出的预测必定与统计意图相符。
子序列匹配的要求较为严格。通过离线评测,发现占比超过一定阈值的类目必定为Query的意图类目。因此,我们通过类目占比来决定预测是否可信。
三个模块经过阈值过滤后,以并集方式融合预测类目。意图分布即为各模块预测的均值。
- 意图监控
意图监控模块主要功能有二。第一,监控商品类目。商品类目是意图识别的基础设施,稳定规范的类目体系是较好意图识别的前提。然而,平台发展过程中,商品类目难免变动,如新类目出现,类目名称改变等。变动会影响意图识别的效果。因此需要监控发现变动。当发现一二级类目名称或归属关系发生变动时,首先要向运营部门确认,之后通过新老映射的方式兼容变动。第二,搜索词发现,发现有意图价值的搜索词。极少出现的用户行为会被统计和模型忽略。然而,极少行为可能发生在新类目的商品上。捕获这类行为能够发现一些与新类目关联的Query,从而缓解意图冷启动问题。例如,Query“勺子”的(一级类目)统计意图是“厨房用品”,相关的商品也确实都属于该类目。在出现新商品——**婴儿勺子**(所属类目是“母婴用品”)后,有极少用户搜索“勺子”时加购了该商品。由此,Query“勺子”的意图应当补充“母婴用品”。在数据层中,加购Query份额占比统计能够体现某个类目的加购Query占比。我们通过周期扫描高占比的query,能够发现部分补充意图。
3.效果评测
意图识别上线以来,不断迭代优化,对商品搜索提升起到重要作用。下图列出商品搜索的首次上线提升和累积提升。累积提升的贡献当然也来自搜索系统的其他环节的优化。

4.总结展望
搜索中有句行话,你永远不知道用户会搜什么。意图识别的迭代优化是通过不断的case分析驱动的。我们综合运用各种技术——数据统计、分类预测、语义检索、历史匹配等,解决产品运行中发现的问题,具有较强针对性和较好适用性。
下一步,我们将实现意图识别的在线化预测。目前,意图识别的实现方式是:离线对近N天的历史query进行预测,并将结果缓存。一方面,仍有约1%的线上Query不能命中;另一方面,大量缓存实际未曾命中过,对空间造成了浪费。在线化预测是更合理的方式。在线化预测将对索引模型的高效推理和版本管理都提出更高的要求。
此外,商品搜索是一盘棋,各个环节模块会迭代提升互相影响。意图识别会根据其他环节的优化而进一步优化。例如,若能有“Query扩展”和“词权重”的支持,就能获取Query近义词和带权重的分词特征,增加这些特征也会提升意图分类模型的准召。