背景简介

随着阿里云业务的增长,售后工程师们需要解决的问题数量逐步增大,在解决复杂的技术问题的同时,还是有不小一部分的同质化的业务咨询问题需要解决。所以,这时候云博士的出现就是为了解决那些可以通过机器回答的问题,让售后工程师们能聚焦在更加紧急复杂的问题上。
随着数据的沉淀,我们积累了大量的用户历史问题,对应解决的知识点的数据,算法如何使用这些数据,然后解决用户问题,我们会在下面的篇幅中逐步介绍。

如何找到相似问法?

当算法知道“机器无法打开”对应的是知识点K,那么用户遇到了一个问题:“电脑不能启动”的时候,我们希望算法能直接将这个这个问题等同于已经知道的“机器无法打开”,然后推送给用户知识点K。而这里头的关键就是,“电脑不能启动” = “机器无法打开”。从传统的角度来看,如果我们用关键字匹配,不难发现上面的两个问题是正交的,即两个问题中并没有共同出现过任何一个一样的词。因此如果仅从字符串硬匹配的角度来看,是没有办法得到我们心仪的知识点K的。
所以我们需要一种机制或者说数据形态来表示这两个问题,同时能让机器能明白其中一定的语义信息,同时也有一定的机制来衡量两个句子的相似度。

句向量

句向量,从定义来看,就是一串的固定维度的数字向量(机器对于数字的处理更好),存在一个模型,任意描述的句子,都会被转化为一个句向量。那有了这个向量,我们有没有一个数学手段来衡量句跟句之间的相似度呢?好办,用两个词向量之间的距离来表示词之间的相似度。
到此为止,业务问题已经被一定程度上定义为了一个基础的算法问题,之后我们要做的就是寻找合适的数学框架和算法模型来把这个问题填充进去,用算法模型来实现这个业务问题。
经过一些调研,我们不难发现DSSM就是一个非常符合我们需求的数学算法模型,同时也有成熟的技术方案。
在接下来的篇幅中我们来介绍一下这个模型:
DSSM的全称为Deep Structured Semantic Model,如名字所述,是现在红遍大江南北的深度学习模型中的一员,在信息检索系统中大放异彩。原始结构如下图所示:

1 从问题到答案,阿里云问答算法句义理解 AI应用

模型的输入层是一个query以及与之相关的文档,输入的时候以one-hot的形式输入,之后进行了三层的全连接神经网络处理,得到一个语义特征y。训练的过程中,模型会根据query以及每个文档的相似性去优化这两个y之间的cosine夹角距离,使得相似的query和文档的距离更近,不相似的距离更远。这里头的核心思想和LDA(Linear Discriminant Analysis) 有异曲同工之妙。
还记得我们在文章开始说的那些优质且大量的历史问题,对应解决知识点的数据,经过重新组织,如果两个历史问题的知识点对应的是一样的,那么就整合为(历史问题1,历史问题2,1),其中1表示两个问题相似,之后再随机抽取一些负例样本,即两个问题对应的知识点不相似,组织为(历史问题3,历史问题4,0)。这样一组优质的数据集就已经整合完毕了,之后就可以进行训练了。
在数据量足够大的情况下,这个模型能够忽略掉很多不重要的信息,只关注那些有价值的信息,与此同时,也能明白“电脑”等同于“主机”,“无法”等同于“不能”这样的同义词。
基于这个模型,当一个新问题进来的时候,模型能快速的找到最接近的历史问题,并且推送对应的知识点。这样一个最基本的问答流程就已经搭起来了。

结语

DSSM本身虽然功能强大,但是还是有很多不可避免的缺陷,比如训练时间过长,对于词表以外的词不支持,语义向量也没有保存下词序的信息。但是科技总是不停进步的,随着时间的发展,涌现了不少基于DSSM模型的变更版本,比如CDSSM,LSTM-DSSM,MVDSSM等,也是的这个语义模型本身变得愈发强大。