如何构建一个好的电商搜索引擎?( 二 )


接下来 , 介绍一下总体的技术方案 。
如何构建一个好的电商搜索引擎?文章插图
技术架构图主要分为三大块 , 一块是数据 , 一块是模型 , 一块是搜索引擎本身 , 其中数据和模型是为搜索引擎服务的 , 会有数据接入的一些模块 , 把客户的数据接入到系统里面 , 放入数据中台上去计算物料画像、用户画像等等;接下来 , 需要用这些数据建一些模型 , 这些模型会在搜索引擎的各个环节中用到 , 比如意图、召回、粗排、精排中各个环节都会用到;再往下 , 就是一些基础的数据存储中间件 。 我们主要围绕着搜索引擎本身这个流程展开 , 最右侧就是搜索引擎的流程 , 接下来我们从上往下来介绍一下整个搜索是如何做的 。
1. Query预处理
如何构建一个好的电商搜索引擎?文章插图
当用户在一个电商app上输入搜索词的时候 , 会先对搜索词进行预处理 , 这种预处理就包括常见的去停止词、归一化、拼音转文字、同义词替换、分词、补全、改写和纠错等等一系列的处理 , 然后把用户搜索的不太规范或者不正确的query处理成规范形式和正确形式 , 并且做一些分词、转换的处理 。
2. 实体识别
如何构建一个好的电商搜索引擎?文章插图
做完预处理之后 , 得到了用户搜索词分词的结果 , 拿到这个分词结果 , 要把分词结果里面每一个词识别成一个实体 , 什么是实体呢?在电商里面的实体类型其实有很多 , 这里列出了三种 , 有商品实体类型 , 矿泉水就是一种实体 , 属于商品实体类型;农夫山泉是品牌这种实体类型;饮用水是一种分类或者叫类目 , 这些都是实体类型 , 实体类型下面有具体的实体 , 实体就是矿泉水 , 农夫山泉 , 所以需要知道输入的词到底是一个什么实体 , 比如说输入“奥利奥饼干” , 做完预处理之后 , 得到“奥利奥”和“饼干”两个词 , 这个时候就需要做实体识别 , 识别后可以知道“奥利奥”是一种品牌 , “饼干”是一种商品 , 这样就能做后续的处理 。
实体识别是序列标注的一种 , 有很多种方法 , 像CRF、BERT之类的 , 都可以用来做实体识别 , 在工程上处理的时候不一定是在线使用这些算法 , 因为这些算法在线计算成本比较高 , 通常会进行离线计算 , 把计算出的结果放到缓存中 , 这样在线只需要做一些简单的匹配 , 处理会快很多 , 另外有时候还需要经过一些人工纠正 , 这样才能得到比较准确的实体词 。 做实体识别有一些前提条件 , 怎么知道矿泉水是一种商品?农夫山泉是一种品牌呢?这些知识其实是需要外部输入才能知道 , 这就是领域知识 , 所以首先要积累一些领域知识 。
① 领域知识积累
如何构建一个好的电商搜索引擎?文章插图
领域知识其实是不太好分析出来的 , 举个例子 , 猪舌和口条其实是一回事 , 茭瓜和西葫芦是一回事 , 这些知识 , 当然可以去分析 , 那如何分析?其实有很多现成的知识可以抓取过来利用 , 把它作为领域知识积累下来 。 这个领域知识有很多形态 , 最简单就是词库 , 也可以构建知识图谱 , 构建知识图谱是构建领域知识最常用的方式 。
② 词库挖掘
如何构建一个好的电商搜索引擎?文章插图
词库如何构建 , 需要挖掘各种类型的词 , 比如最常用的同义词和上位词 , 同义词理解可以用前面举的例子 , 茭瓜和西葫芦是一回事 , 获取同义词有很多种方法 , 使用预训练的词向量方法去找共现关系可以大量的找到同义词 ( 也就是类似word2vec的方法 ) , 但是找出来之后可能不太准确 , 需要后期处理一下才能使用 。 从百度百科上可以爬取到很多同义词 , 以及业务运营数据库和企业现有词库积累都可以找到同义词 , 有各种各样的方法去构建同义词库 。
那么如何挖掘上位词 , 举例理解上位词 , 比如商品类目就是具体商品的上位词 , 矿泉水的上位词就是饮用水 。 词库的构建是做搜索必要的工作 , 但是在构建词库的过程中 , 不一定是手工的过程 , 完全可以用其他的自动化方法甚至模型去筛选词库 , 最后再做一些人工纠正 。
③ 商品知识图谱构建
如何构建一个好的电商搜索引擎?文章插图
如何构建商品知识图谱 , 我们可以构建很多种不同类型的知识图谱 , 本文是根据不同实体来构建知识图谱 , 比如按照三种实体类型来构建知识图谱 , 像上图最右侧的示意图 , 苹果有很多种型号 , 如果用户搜索苹果 , 用户有可能想买iPhone 11、iPhone X或者还是没出来的iPhone 12 , 可以通过先验知识 , 把知识图谱构建出来 , 最后排序时可以把这些知识融入进去 , 比如用户都更加倾向于去买iPhone X , 后面排序的时候iPhone X就会更靠前一些 。 对于类目来说 , 搜索苹果有可能是一个手机 , 也有可能是水果 , 那到底是想买手机还是想吃水果 , 是有一个概率的 , 不同用户有不同的倾向性 , 但是目前我们构建的图谱还不能做到特别个性化 , 它只是一个宏观的统计 , 搜苹果时有80%的用户其实是要买苹果手机的 , 有20%的用户要买水果 , 这样就给了我们一种排序的参考 。 知识图谱其实是做了一个非个性化全局的知识构建 , 通过商品库去分析静态概率 , 最后根据用户点击行为会做一些动态调整 , 调整完的知识图谱再用在后面的排序上 。