目录
背景
为什么只用ES相似度匹配不行
解决同一意图不同表达的问题
“粗筛”+“精选”的意图匹配方案
另外一种思路:
背景
在对话系统领域,检索式对话系统一直是工业界的偏爱。而如何“检索”,或者说如何对用户query(输入的问题)进行意图匹配,则是能否做好检索式对话系统的关键所在。
为什么只用ES相似度匹配不行
“深圳的市花是什么”&“鹏城的市花是啥” ,这两句话我们明显能看得出来 表达的是一个意图。但如果是仅用ES相似度识别实现的问答机器人 则是无法看出来的的。
解决同一意图不同表达的问题
简单点说就是,word2vec将每个词赋予了空间上的一个向量,我们通过word2vec就可以很好的计算出两个词之间的相似度。
“粗筛”+“精选”的意图匹配方案
基于上述的情况,笔者得到这样一个意图匹配方案—— “粗筛”+“精选”(详见下面流程图)。
先经过一个“粗筛”的模块,这个模块一般将用户当前轮的query与语料库里query进行快速匹配,得到几十上百个候选意图,完成第一轮的匹配。ES信息检索模型BM25 便是一个不错做“粗筛”模块的选择。
接下来便是使用深度学习模型,在得到的候选意图中进行精选。将选择结果对应的答案,返回给用户。
另外一种思路:
笔者采用上述 “粗筛”+“精选”的意图匹配方案,除了上述的分析,有一部分原因是不太想对 已运行的项目代码一次性做太大的改动。
其实还存在这样一种思路:去掉“粗筛”,直接“精选”——直接将word2vec存入elasticsearch,然后在召回的时候便可以根据word embedding来计算相似度召回(有机会再详细验证下基于这个思路做的方案,先写到这了)。
工程化方案:
上面讲述的都是一些核心处理逻辑,实际上我们在做工程化方案落地的时候。还得结合“推理引擎线程池”、“向量缓存”、“分布式计算”等技术,才能实现高性能 高并发 高可用。以上技术都是笔者团队在实现在线人脸识别能力(基于百万级人脸库)时的必要技术,有机会再写个文章细讲。