是时候给你的产品配一个AI问答助手了! (4)

img

3.2 数据获取及构造 3.2.1 数据获取

​ 对于有大量问答记录的场景例如智能客服,这些记录里面有很多高频的知识点(知识点包括问题和答案)。这些高频的知识点对应的问法通常并不唯一。即知识库的结构为一个问题集合对应同一个答案。针对FAQ数据有以下三种数据类型:

标准问q:FAQ中问题的标准用户query

答案A: FAQ中标准问对应的的标准回答

相似问q1,q2...: 跟标准问语义相似可用同一答案回答的query

img

其中,标准问q、对应答案A以及该标准问q对应的所有相似问q1,q2,...,一起组成一个知识点。一个知识点的样例见下图:

3.2.2 数据构造

数据构造包含了两个方面:

(1)训练集测试集构造

测试集:将相似问中的第一条相似问q1作为query,从FAQ知识库的所有知识点中通过Lucene召回30个知识点作为候选集

训练集:包含两部分,一部分是正例的构造,另一部分是负例的构造,这两部分数据的构造方式将直接影响到最终的效果。在正例的构造中,因为每个知识点的第一个相似问是作为测试集中出现的,所以在构造训练集的时候排除掉所有知识点中的第一条相似问q1。这样的话,有多于2个相似问的知识点还有多于的其他相似问可以用来构造训练集。将这些识点中的标准问和从相似问的第二条开始(即[q2,q3,...,qn])可以按照不同方式构造出正例和负例。

训练集正例的构造:去除所有知识点中的第一条相似问q1,其他相似问及标准问两两组合成正例pair对;对于相似问多的知识点进行剪切。

训练集负例的构造的方式包括:

按Jaccard距离召回;

按Lucene召回;

从其他知识点中随机选择;

按照正例中各问题出现的比例从其他知识点中采样选择;

每个句子和句子中的名词/动词构成pair对;

针对知识点分布不均衡的问题,对相似问很多的知识点进行相似问剪切。

(2)数据增强策略

由于深度学习需要较多的数据,为了增强数据,我们采用了以下策略:

交换两个句子之间的顺序;

对句子进行分词,重新组合生成新的句子;

打乱句子的顺序,随机抽取句子。

3.3 模型建立 3.3.1 模型框架

​ 基本框架一般都是将待匹配的两个句子分别使用两个encoder来获取对应context信息,然后将二者的context信息进行匹配,得到匹配后的特征信息。也可以在匹配之后的特征后面加上一些其他的传统文本特征,将所有这些特征进行concat。最后接上softmax层,做最终的分类。模型的框架如下图所示:

img

3.3.2 模型建立及迭代优化

Embedding层:使用word2vec和fasttext训练词向量和字符向量。

Encoder层:卷积具有局部特征提取的功能, 所以可用 CNN 来提取句子中类似 n-gram 的关键信息,考虑文本的上下文信息。于是我们采用textCNN[19]来对句子进行编码表示,encoder过程见下图:

img

Matching层:在得到两个句子的表示后,要针对两个句子的表示进行matching操作。可以根据需要构造出很多种类型的matching方式如下图[20],我们采用相对比较简单的element-wise相加和相乘的方式来进行matching。

join层:在matching层之后得到的两个句子的共同表示之后,进一步引入额外的传统特征进行join操作,类似于下图[21]。

img

引入interaction:上述步骤对两个句子encoder时没有考虑两个句子之间的关联。于是进一步引入更细致更局部的句子交互信息,从而能捕捉到两个句子之间的交互特征,根据交互得到的矩阵获取两个句子新的表示。如图:

img

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zypyzp.html