文本分类或文本匹配是解决基于常见问题和解答(FAQ)问答的2个途径.单独使用分类方法不能有效利用标准问题本身的信息,而单独使用匹配方法时,负样本的选择很困难,为此,提出一类将文本分类和文本匹配方法相结合的模型,不仅能选择真正需要区分的负例,并且能够有效利用标准问题的信息.实验结果表明,提出的模型在多个FAQ问答数据上能达到最好性能.
Text classification and text matching are two ways to solve the frequently asked questions (FAQ)-based question answering. However, using the text classification method alone cannot effectively utilize the information of the standard question itself. When the text matching method is used alone, the selection of the negative sample is a very difficult problem. A series of models that combine text classification and text matching methods are proposed, which not only can select negative examples that really need to be distinguished, but also can effectively use the information of standard questions. Experiments show that the proposed models achieve the best performance on multiple FAQ-based question answering data.
基于常见问题和解答(FAQ, frequently asked questions)的问答在信息服务中广泛存在.这种问答的一种典型情况是:服务提供者维护着大规模标准问题—标准答案对, 当用户提出一个问题后, 服务提供者将此问题映射到一个标准问题, 并返回给用户对应的标准答案.随着服务的持续, 会积累一定规模的历史用户问题, 每个用户问题都已经对应到一个标准问题上.在这种情况下, 当用户提出一个新问题时, 同时利用标准问题—标准答案对信息以及历史用户问题有可能比单纯利用前者的信息获得更好的性能.实际上, 类似的情况在社区问答中也存在.在社区问答中, 每个答案对应多个用户问题, 当新的用户问题出现时, 可以利用这些多问题—单答案对为新用户问题指派答案.
已有的针对该问题的研究方法可以分为基于分类的方法和基于匹配的方法.基于分类的方法把标准问题作为标签, 利用历史用户问题构建分类器, 对新的用户问题进行分类.此类方法没有利用标准问题本身的信息以及标准问题和用户历史信息间已存在的对应关系, 这些信息对于问答性能具有重要影响.而基于匹配的方法力图利用标准问题的信息, 通过计算用户问题和标准问题之间的语义距离获得最佳答案.当标准问题规模较大时, 无论在负例选择还是计算复杂性上, 基于匹配的方法都存在重大困难.可以看出, 基于分类和匹配的方法具有互补性.基于分类的方法无需构建负例, 而其分类结果可以为基于匹配的方法提供高质量的负例.而基于匹配的方法能够有效地利用标准问题的信息.为此, 提出一类联合分类和匹配的FAQ问答新模型.该模型在利用分类器获取最相近候选标准问题的同时, 度量这些标准问题与用户问题的语义相似度, 分类器可以构造匹配方法所需要的负样例, 标准问题的信息可以在匹配中得到有效利用.据作者所知, 这是目前首个联合利用分类和匹配方法的FAQ问答模型.在中英文数据集上的实验结果表明, 相结合模型的分类和匹配性能都比多个已有重要模型具有更好的性能.
1 相关工作基于FAQ的问答一般分为2种方法:文本分类和文本匹配.文本分类的方法是把标准问题作为标签, 使用历史用户问题来构建分类器.而文本匹配的方法是对用户问题和标准问题进行度量计算来选取答案.
1.1 文本分类构建分类器的经典方法是利用Kim等提出的使用卷积神经网络(CNN, convolutional neural network)来构建分类器.对相邻的词进行一维卷积来学习短语的特征, 再进行最大池化选取重要的信息, 最后进行全连接归一化选择最大值的位置作为归属的类别. Zhang等[1]提出使用字符级的CNN来构建分类器, 能够更好地捕捉到局部信息(N-gram特征).由于CNN进行卷积的窗口大小难以选择, 且不能很好地处理文本的时序关系, Lai等[2]提出循环卷积网络(RCNN, recurrent convolutional neural networks)模型来进行文本分类.模型通过分别对每个词的上下文进行前后向长短期记忆网络(LSTM, long short term memory networks)编码来获得每个词的时序信息, 从而对每个位置的词语进行信息补充.每个位置信息补充完毕后进行全连接、最大池化来提取关键信息.由于之前的深度模型在数据量不足时容易过拟合, 且训练速度过慢. Joulin提出fastText[3]对所有词向量取平均后来构建线性分类器在许多文本分类数据上取得了不错的效果, 并且由于模型复杂度较低, 能够很好地处理标记质量较差等带来的噪声问题.在图像识别任务上, 成百上千层深度网络被越来越多地使用以提取不同级别的特征, 如边角特征、局部特征、轮廓特征等. Conneau等[4]提出使用29层卷积层来一步步提取不同阶段的特征, 而后对这些特征通过动态最大池化等方法进行融合, 最后进行分类.以上这些文本分类方法虽然可以从用户问题学到很好的表示, 但是没有利用标准问题标签本身所含有的重要信息以及用户问题和标准问题之间关系的信息.这些信息对基于FAQ的问答至关重要, 而基于匹配的方法能够很好地利用这类信息.
1.2 文本匹配文本匹配的经典方法是Mueller等提出的孪生LSTM模型.通过明确的曼哈顿距离指导, 使得对2个句子使用相同权重的LSTM能够建模复杂的语义.考虑到使用字模型能够更好地处理未登录词问题, 并且双向LSTM能够更好地获取语义时序信息, Neculoiu等[5]提出基于字模型的孪生双向LSTM模型.该模型对不同时刻的输出取平均, 以获取更为全面的信息.这些模型都是通过曼哈顿距离、余弦相似度等作为度量方式来学习句子的表示, 但是这些度量方式不一定是最优的. Qiu等[6]提出卷积神经张量网络(CNTN, convolutional neural tensor network)模型, 将句子表示和语义匹配进行联合建模, 使用神经网络张量进行2个句子表示的度量计算.
考虑到以往的匹配模型都是先进行句子表示再进行度量计算, 会遗漏部分匹配信息. Pang等[7]提出MatchPyramid模型, 先对2个句子中的任意2个词进行简单的度量计算(点乘、余弦相似度等), 获取匹配矩阵.文本匹配任务就转换成图像识别任务, 随后对矩阵进行二维卷积来提取特征. Kim等[8]提出基于递归联合注意力(DRCN, densely-connected recurrent and co-attentive neural network)模型, 该模型在斯坦福自然语言接口数据集上取得了当前最好的效果.模型通过对2个句子进行LSTM编码后, 使用交互注意力机制以及残差连接, 使得2个句子能够充分地学习交互信息.以上这些文本匹配方法能够很好地进行2个句子之间的匹配, 但是当待匹配项数以百计的时候, 负例的选择成为一个很难解决的问题.难以选择到真正要区分的负例, 并且当负例过多时, 计算的复杂性也变得很高.而文本分类方法恰好能够提供需要的负例.
文本分类方法和文本匹配方法各自有优缺点, 二者的结合不仅能够很好地获得负例, 而且可以有效利用到标准问题的信息以及标准问题和用户问题的匹配信息.
2 模型结构下面详细描述JCMMC(joint of classification and matching model with co-attentive)和JCMM(joint of classification and matching model)结构. JCMMC模型结构如图 1所示. JCMM与JCMMC相比, 除了少了注意力机制, 其他都一样, 因此不做重复的说明.模型结构主要包括以下3个部分:1)词表示部分; 2)交互层以及度量计算部分; 3)预测层.先把标准问题作为标签, 用历史用户问题构建分类器.对历史用户问题从分类器中选出最相近的标准问题作为待匹配项.把历史用户问题表示为UQ(history user question), 标准问题表示为SQ(standard question), 把标准问题作为分类标签表示为C(classification label).在经过分类器后, 用户问题最相近的标准问题可以表示为SQ1, SQ2, …, SQn.而对应的匹配标签M(matching label)是一个n维的one-hot向量, Mk为1表示UQ和SQk(1≤k≤n)匹配; 否则不匹配.此时问题转化为根据UQ、SQ(SQ1, SQ2, …, SQn)、C、M来选择标准问题, 可以根据分类标签或者匹配标签来选择最佳答案.
对于历史用户问题和标准问题字符串, 可以进行分词或不分词, 之后把长度固定填充到m, 则问题可以表示为{w1, w2, …, wm}, 经过词嵌入层, 每个词转化为词向量表示为{e1, e2, …, em}, 其中每个词向量的维度为L1.在实验中, 历史用户问题和标准问题的词向量表示层是共享的, 并且没有经过预训练.对于中文数据, 由于问题长度较短, 分词会造成误差并且丢失重要信息, 所以不进行分词.而对于英文数据, 不需要进行分词且长度不是特别短, 因此使用原生的词.
2.2 交互层以及度量计算部分经过词向量表示层后, 历史用户问题UQ表示为U(e), 而标准问题SQk(1≤k≤n)可表示为Sk(e).其中U(e)与Sk(e)均为m×L1的矩阵.
注意力信息
$ {\rm{dis}}\left( {i,j} \right) = {\rm{dot}}\left( {\mathit{\boldsymbol{\alpha }}_{U_i^{\left( e \right)}}^k,\mathit{\boldsymbol{S}}_{{k_j}}^{\left( e \right)}} \right) $ | (1) |
$ \alpha \left( {i,j} \right) = \frac{{\exp \left( {{\rm{dis}}\left( {i,j} \right)} \right)}}{{\sum\limits_l^m {\exp \left( {{\rm{dis}}\left( {i,l} \right)} \right)} }} $ | (2) |
$ \mathit{\boldsymbol{\alpha }}_{U_i^{\left( e \right)}}^k = \sum\limits_{j = 1}^m {\alpha \left( {i,j} \right)\mathit{\boldsymbol{S}}_{{k_j}}^{\left( e \right)}} $ | (3) |
其中:dot表示内积运算, 即2个向量的对位点乘求和; dis(i, j)(1≤i≤m, 1≤j≤m)表示UQ第i个单词对标准问题SQk第j个单词的注意力信息.
受Decomposable Attention的启发, 将关注度信息与嵌入层的输出进行交叉拼接, 如
$ \mathit{\boldsymbol{U}}_k^{\left( {h1} \right)} = \left[ {{\mathit{\boldsymbol{\alpha }}_{S_k^{\left( e \right)}}};{\mathit{\boldsymbol{U}}^{\left( e \right)}}} \right] $ | (4) |
$ \mathit{\boldsymbol{S}}_k^{\left( {h1} \right)} = \left[ {\mathit{\boldsymbol{\alpha }}_{{U^{\left( e \right)}}}^k;\mathit{\boldsymbol{S}}_k^{\left( e \right)}} \right] $ | (5) |
其中:αU(e)k表示历史用户问题对第k个标准问题的关注度信息; αSk(e)表示第k个标准问题对历史用户问题的关注度信息; Uk(h1)、Sk(h1)分别表示历史用户问题与第k个标准问题交互后历史用户问题的隐层表示、第k个标准问题的隐层表示.之后, 使用池化层来提取重要特征:
$ \mathit{\boldsymbol{U}}_k^{\left( {h2} \right)} = \frac{{\sum\limits_{i = 1}^m {\mathit{\boldsymbol{U}}_k^{\left( {h1} \right)}\left( i \right)} }}{m} $ | (6) |
其中:Uk(h1)(i)表示交互后历史用户问题第i个单词的隐层表示. Sk(h2)和Uk(h2)的计算方式相同.
把历史用户问题与第k个标准问题的距离表示为R(Uk, Sk), 通过差值计算以及神经网络进行度量:
$ R\left( {{U_k},{S_k}} \right) = {\rm{sigmoid}}\left( {\left| {\mathit{\boldsymbol{U}}_k^{\left( {h2} \right)} - \mathit{\boldsymbol{S}}_k^{\left( {h2} \right)}} \right|\mathit{\boldsymbol{W}}_1^{\rm{T}} + {b_1}} \right) $ | (7) |
其中:Uk(h2)、Sk(h2)为L2维向量, W1T为L2维向量的转置, b1为偏置值.
2.3 预测部分历史用户问题通过类似式(6)进行池化来作为句子表示, 然后通过一层全连接, 输出的维度为分类的维度(假设为p维).
$ {\mathit{\boldsymbol{U}}^{\left( {h3} \right)}} = \frac{{\sum\limits_{i = 1}^m {\mathit{\boldsymbol{U}}_i^{\left( e \right)}} }}{m} $ | (8) |
$ {\mathit{\boldsymbol{U}}^{\left( {h4} \right)}} = {\mathit{\boldsymbol{W}}_2}{\mathit{\boldsymbol{U}}^{\left( {h3} \right)}} $ | (9) |
其中:U(h3)为L1维的向量, 而W2为p×L1的矩阵.之后, 对U(h4)进行softmax, 从而获得历史用户问题分类为每个标准问题的概率.
$ \hat C = \frac{{{{\rm{e}}^{\mathit{\boldsymbol{U}}_i^{\left( {h4} \right)}}}}}{{\sum\limits_{i = 1}^p {{{\rm{e}}^{\mathit{\boldsymbol{U}}_i^{\left( {h4} \right)}}}} }} $ | (10) |
而历史用户问题和待匹配的n个标准问题匹配概率为
$ {{\hat M}_k} = \frac{{{{\rm{e}}^{R\left( {{U_k}{S_k}} \right)}}}}{{\sum\limits_{k = 1}^n {{{\rm{e}}^{R\left( {{U_k}{S_k}} \right)}}} }} $ | (11) |
分类和匹配的损失分别为
$ {L_c} = - \frac{1}{N}\sum\limits_{i = 1}^N {\sum\limits_{j = 1}^p {C_j^i} } \log \left( {\hat C_j^i} \right) $ | (12) |
$ {L_M} = - \frac{1}{N}\sum\limits_{i = 1}^N {\sum\limits_{j = 1}^m {M_j^i} } \log \left( {\hat M_j^i} \right) $ | (13) |
其中:N表示样本数量, 则总的损失为
$ L = {L_c}\beta + {L_M}\left( {1 - \beta } \right) $ | (14) |
其中β表示JCMMC模型中分类损失所占的权重.
JCMM模型与JCMMC唯一的区别是JCMM模型在交互层以及度量计算部分中去掉了Attention层(没有使用注意力信息), 而在JCMMC模型中考虑加入注意力信息以使2个句子进行较早的交互.
3 实验 3.1 数据集中文:从某企业近3年的客服历史数据中抽取标准问题在FAQ库中的用户问题—标准问题对.从FAQ选出613个标准问题以及对应的历史用户问题作为实验数据.
英文:数据来源于kaggle比赛上关于quora社区问答的数据.由于原始数据是一对一的, 对数据进行整理可以得到相似的句子簇, 选取簇里面句子个数不低于10的数据, 随机选取一个作为标准问题, 其他作为历史用户问题.选取514个标准问题和8 513个历史用户问题, 数据见表 1.
实验选取80%的数据作为训练集, 20%的数据作为测试集.由于英文数据数量较少, 实验中对英文数据采取5折交叉验证取平均的策略来防止随机性.
3.2 比较试验如表 2所示, 左边第2列和第3列表示的是根据分类得分选出标准问题的准确率, 最右的两列表示根据匹配得分选出标准问题的准确率. fast text使用简单词向量取平均的方式取得了单独分类中最好的效果. RCNN加入前后的时序特征, 并使用池化层来提取关键信息, 取得了比较理想的效果, VDCNN使用了多层卷积, 对数据产生了过拟合的影响. Match Pyramid过早地对句子进行交互, 然后使用卷积提取特征的方法在单独匹配模型上取得了最好的效果, 较为复杂的模型DRCN与孪生模型Siamese-LSTM取得了相近的效果.提出的联合模型有JCMM和JCMMC, 其中JCMM取得了分类最好的效果, 而JCMMC取得了匹配最好的效果.对提出的联合模型给出的2个得分进行加权选取最优效果, 发现基本没有提升.
在提出的2个模型中, 负样本的数量选取与分类损失所占权重至关重要, 负样本的数量选取太大会造成正负样本数量差距太大, 为模型学习带来偏差, 选取太小则会造成负例学习不全.而分类损失决定了分类、匹配在模型中的作用.下面对2个超参数n和β进行讨论. β为0表示只做匹配, 而β为1表示只做分类.以JCMM为例, 先选取n, 观察β对分类与匹配的影响.
从图 2可以看出, 分类得分和匹配得分都是先增后减的趋势, β取0.4时在分类和匹配2个分值都超越了单独分类和匹配的效果.
而在中文数据集上也会呈现先增后减的趋势(没有在英文数据集上明显), n取2、β取0.3和n取3、β取0.2时, 在分类和匹配2个分值都超越了单独分类和匹配的效果.
2个数据上的实验都证明了分类和匹配相结合是可以相互帮助的.另外从图 2中可以看出, 分类总体得分都会比匹配得分高5个百分点左右.这说明问题在能转换为单独分类和单独匹配任务时, 单独分类对类别能够获取很好的表示, 能取得更优的效果.
3.4 实验分析 3.4.1 JCMMC对匹配的影响由于JCMMC加入了交互attention, 使得匹配更加全面.在2个数据集上, JCMMC在匹配得分上均超过了JCMM, 并且不同于JCMM先增后降的趋势. JCMMC的趋势是逐渐降低, 说明由于JCMMC交互attention的加入使得匹配很全面, 加入分类的损失反而使得匹配的得分降低.
3.4.2 分类和匹配相结合的影响如表 3所示, SC和SM表示使用单独分类(β取1)和单独匹配(β取0)对应的得分, 而S′C和S′M表示的是使用联合模型对应的得分.
对于第1个用户问题“G9200支持截图吗”, 由于第3个标准问题中有很多“G9200支持”这样的问题, 导致误分类.而联合模型会利用“截图”和“截屏”匹配这个重要的信息, 得到正确的答案.这2个例子证明了匹配对分类的帮助是至关重要的.
另一方面, 匹配对分类也有很大帮助, 对于第2个用户问题“What does it mean when many people look at my questions, but no one answers most of them?”, 通过对比发现, 由于这3个标准问题字面上都包含“questions”“answers”等信息, 很难辨清, 而匹配得分也几乎一样.但是通过对历史用户问题信息的挖掘可以发现, 第2个标准问题的历史用户问题包含很多类似“no one answering my question”这样的字眼, 使得分类取得很高的得分, 从而选择出了正确的答案.
4 结束语针对基于FAQ的问答提出联合文本分类与文本匹配的模型.联合模型解决了单独分类和单独匹配固有的问题, 使得二者之间能够相互弥补.在中英文数据集上, 联合模型在分类和匹配都超过了现有模型, 并且从具体数据上证明了分类和匹配能够相互帮助.
[1] |
Zhang X, Zhao J, LeCun Y. Character-level convolutional networks for text classification[C]//2015 Neural Information Processing Systems(NIPS2015). Montreal: [s. n.], 2015: 649-657.
|
[2] |
Lai S, Xu L, Liu K, et al. Recurrent convolutional neural networks for text classification[C]//2017 Association for the Advancement of Artificial Intelligence (AAAI 2017). Austin Texas: AAAI Press, 2017: 2267-2273.
|
[3] |
Joulin A, Grave E, Bojanowski P, et al. Bag of tricks for efficient text classification[C]//2017 European Chapter of the Association for Computational Linguistics(EACL2017). Valencia: ACL Press, 2017: 427-431.
|
[4] |
Conneau A, Schwenk H, Barrault L, et al. Very deep convolutional networks for text classification[C]//2017 European Chapter of the Association for Computational Linguistics(EACL2017). Valencia: ACL Press, 2017: 1107-1116.
|
[5] |
Neculoiu P, Versteegh M, Rotaru M, et al. Learning text similarity with Siamese recurrent networks[C]//2016 Representation Learning for NLP(RLNLP). Berlin: ACL Press, 2016: 148-157.
|
[6] |
Qiu X, Huang X. Convolutional beural tensor network architecture for community-based question answering[C]//2015 International Joint Conference on Artificial Intelligence(IJCAI 2015). Buenos Aires: AAAI Press, 2015: 1305-1311.
|
[7] |
Pang L, Lan Y, Guo J, et al. Text matching as image recognition[C]//2016 Association for the Advancement of Artificial Intelligence(AAAI2016). Phoenix Arizona: AAAI Press, 2016: 2793-2799.
|
[8] |
Kim S, Hong J H, Kang I, et al. Semantic sentence matching with densely-connected recurrent and co-attentive information[EB/OL]. (2018-05-15)[2019-05-06]. https://arxiv.org/abs/1805.11360.
|