APP下载

基于神经网络的汽车说明书问答系统

2019-02-16齐乐张宇马文涛崔一鸣王士进刘挺

关键词:编码器排序文档

齐乐,张宇*,马文涛,崔一鸣,王士进,刘挺

(1.哈尔滨工业大学 社会计算与信息检索研究中心,黑龙江 哈尔滨 150001;2.哈工大讯飞联合实验室,讯飞研究院,北京 100094)

0 引言

问答是自然语言处理中的一个重要任务,并获得了广泛的关注。现今有着许多问答系统的应用,比如Siri,Cortana,Waston等等。假设现在有如下场景:当你买了一台新车,坐在驾驶位上时,遇到了一些问题,你需要怎么做?传统的做法是找到并打开汽车说明书,然后在说明书中检索问题的答案。为了简化这一复杂并烦琐的过程,本文设计了一个新的问答系统,针对用户的提问快速检索并返回说明书中相关的文档作为答案。

在国内外均有大量研究人员进行问答相关的研究。根据答案类型,问答系统可以被分为3类。第1类是在大规模文档集中返回相关文档作为答案,等价于文档检索(Document Retrieval)任务。文档检索的方法可以分为2种:1)无监督的基于特征的方法。研究者根据不同的特征改进文档排序的算法。Robertson[1]等人使用BM25作为加权函数,利用词项排序的方式检索文档。Ponte[2]等人以及Laffert[3]等人利用语言模型进行文档检索。2)有监督的方法。一些研究者将文档检索看作二分类任务,Nallapati[4]利用SVM和最大熵来解决该问题。另一些则将其看作排序任务,Gao[5]等人使用线性判别函数对相关文档进行排序。Burges[6]等人则使用相对熵以及梯度下降的算法训练用于文档检索的神经网络模型。

第2类是在一篇文档或多个候选答案句中选取包含答案的句子,即答案句选择(Answer Sentence Selection)任务[7]。通常,研究者将该任务转化为计算问题和候选答案句间的相似度计算任务。Bordes[8]等人设计了Siamese网络去计算问题和候选答案句间的相似度,将问题和候选答案句映射到联合空间上。Yu[9]等人考虑了问题和答案句间的语义表示,提出了一种二元CNN网络进行匹配。Yin[10]等人使用注意力机制建模问题和候选答案句间的交互关系,将两者的信息进行融合,而非对两者进行独立的建模,提出了基于注意力的CNN模型(ABCNN)。与其思想相似,Wang[11]等人提出了基于内部注意力机制的RNN模型(IARNN)。与传统的具有注意力机制的RNN模型不同,其在RNN的输入端使用注意力机制而非在输出端使用。

第3类是在一篇文档中找到精准的答案片段,其中答案片段通常由一个或两个词组成。这类任务也可称为阅读理解(Reading Comprehension,RC)任务[12]。大多数阅读理解模型都使用相似的框架:编码层、交互层和答案层。编码层将问题和文档转化为向量表示;交互层抽取问题和文档之间的交互信息,输出问题和文档的联合表示;答案层则基于联合表示预测答案。Wang[13]等人结合Match-LSTM模型和边界模型,将预测答案的过程简化为预测答案的开始和结束位置。另外,R-Net[14]模型使用双层交互架构,第1个交互层用来捕捉文档和问题简单交互信息,第2个交互层用来捕获文档中单词之间的交互信息。而Adams[15]等人则结合CNN和Transformer,抛弃了LSTM结构,其可以并行进行训练,可以使用更为庞大的语料,而耗时也更少,同时可以达到更好的结果。

本文的任务是问答系统的一个实际应用,与文档检索相类似,也借鉴了答案句抽取和阅读理解中的相关方法。以奇瑞汽车的说明书作为文档集,共包含181篇文档,每篇文档包括三个部分:标题、摘要和内容。表1给出了一个例子,当用户提出问题“制动报警信号灯在哪里?”时,通过计算问题和每篇文档之间的相关程度,对文档进行排序,排名最高的文档“制动报警信号灯”将作为答案返回给用户。

该任务主要有3个难点:1)如何充分利用文档信息对文档进行建模。标题是文档的主题,包括文档最核心的信息。但标题信息太过精炼,不能完全涵盖文档的全部信息。同时,部分文档的标题非常相似,但文档内容却千差万别。因此不能只根据标题判断一篇文档是否为正确答案。摘要是文档内容的高度概括,同时包含的信息要多于标题信息,摘要信息可以帮助区分文档间的不同。文档内容则包含了文档的全部信息,但文档内容相对较长,包含许多噪声,较难建模。这三者相辅相成,因此要充分利用这三类信息对文档进行建模。

2)汽车说明书中包含大量领域词。这些特殊词汇会对问题、文档的建模造成很大的困扰。在分词过程中,这些领域词可能会被识别为短语,被分割为多个词汇的组合,而不是独立的词汇。更为关键的是,在不同的句子中,由于分词错误或分词规则原因,同一领域词可能会被分为不同的词汇组合。在使用词向量对其建模时,同一领域词可能会被建模为多个完全不同含义的短语向量。同时,同一含义的领域词可能会有多种不同的表示,即一个领域词可能会有很多复述存在。因此需要正确地识别这些复述,将它们聚类在一起。另外部分领域词或其复述不存在于词向量的词表中,属于未登录词,这也极大地影响了模型的效果。

表1 汽车说明书数据样例

3)针对某一问题,文档集中只有一篇文档是正确答案,其他文档均为错误答案。当将该任务转化为计算问题和候选文档间的相关度的任务时,正例数量远远小于负例数量,正负样本的比例极不均衡。这会导致模型在预测时倾向于将所有候选文档标记为负例,给所有候选文档相对较低的分数,从而导致模型的效果不佳。

为了解决这些问题,本文提出了一个新的问答系统,先计算问题和每个候选文档间的相关度作为每篇候选文档的得分,然后根据得分对候选文档进行排序,选择得分最高的文档作为答案予以返回。为了能更好地利用候选文档的信息,分别对候选文档的标题、摘要和内容进行建模,并分别计算这3部分与问题的相关度,然后根据3个得分综合判断候选文档是否为问题的答案。同时,为了更好地将领域词及其复述聚类在一起,手工构建了领域词的复述词典。而为了避免领域词的分词问题,放弃了分词,并将文本转化为字符级别的向量表示,而非词级别的向量表示。最后,为了改善数据集正负样本不均衡的问题,设计了两种训练策略。第1种是将分类模型转换为基于Pairwise思想[16]的排序模型,即将一对正例和负例同时输入到模型中进行训练。排序模型的训练目标是使正负例间的得分差距变大,使正例的得分相对更高,负例的相对更低。第2种是直接复制正例,增大正例的数量。数据集中共有181篇文档,为此针对1个问题复制180个正例,使正负例比例变为1∶1。实验结果显示两种训练策略均是有效的,在测试集上达到了93.07%的准确率,可以实际应用到真实场景中。

1 系统介绍

系统包括2个部分:复述替换和相关度计算。在复述替换中,手工构建了一份领域词的复述词典,再根据复述词典对问题和文档进行复述替换。之后,用神经网络模型对问题和文档进行建模,计算问题和文档间的相关度作为文档得分,并根据得分对文档进行排序。

1.1 复述替换

众所周知,许多词和短语有着相同或相近的含义。对于同一含义的词,可能有着很多不同的表达形式。尤其是针对特殊领域的词汇,由于大规模训练语料的缺失,很难训练具有针对性的词向量。而使用在通用语料上预训练的词向量则很难将多个具有相同含义的领域词聚类在一起。同时,许多领域词可能根本不会出现在预训练的词向量中,属于未登录词。因此针对同一领域词的不同表达形式会对模型的建模造成很大的负面影响。为了减少这些负面影响,从数据集中收集具有相同或相近含义的领域词对,手工构造了领域词的复述词典。复述词典的规模较小,只有97条。表2展示了词典中的一些样例。

表2 复述样例

1.2 相关度计算

根据复述词典对问题和文档中的句子进行复述替换。以“ABS是什么?”一句为例,如表2所示“ABS”是“防抱死制动系统”的复述,因此将其进行替换,得到新的问句“防抱死制动系统是什么?”。使用一个神经网络模型去计算问题和每篇文档间的相关程度。模型由3部分组成,如图1所示。先将问题和文档的标题、摘要、内容转化为独立的向量表示,接着用不同的编码器将它们分别编码为不同的特征向量,最后利用这些特征向量计算问题和文档间的相关程度。

Fig.1 Model architecture图1 模型架构

1.2.1 词向量表示

由于领域词和领域短语在不同的句子中可能会产生不同的分词结果,而在向量的维度上,不同的分词结果的向量组合可能会产生完全不同的语义。以“手刹指示灯亮”为例,如表3所示,其在不同的句子中可能会被分多种不同的组合。这些组合在向量维度上的语义不完全相同,有的甚至有着很大的差别。

同时,某些领域词不存在于词向量中,如表3中的“手刹指示灯”,属于未登录词,无法使用词向量对未登录词的语义进行建模。为了避免分词和未登录词对模型带来的影响,放弃了分词以及词级别的向量表示,转而使用字符级别的向量表示。本文使用基于word2vec[17]算法在百度百科上预训练得到的字符向量表示问题和文档,对模型进行初始化。同时,在模型的训练过程中持续更新字符级的向量,以保证其包含语义的有效性。

表3 同一领域短语的不同分词结果

1.2.2 编码器

任务中存在2种长度的文本:短文本和长文本。短文本一般在30个字以内,而长文本则通常多于50个字。将问题、文档标题以及文档摘要视为短文本,将文档内容视为长文本,并针对长短文本设计了两种不同的编码器。针对短文本,设计了一种基于CNN的编码器,短文本中包含的信息一般都是关键信息,比如标题和问题中可能都包含相同的领域词。CNN编码器和传统的n-gram模型相类似,可以很好地建模局部信息并对文本进行匹配。但由于CNN没有遗忘机制,在对长文本建模时会抽取并存储大量不重要的信息,这些信息会干扰模型的判断。而针对长文本,希望通过在全局的视角下对文本建模,因此设计了一种基于Bi-LSTM的编码器。由于遗忘机制的存在,Bi-LSTM可以很好地对长文本建模,并保留相对重要的信息,对长文本的核心语义进行建模。

如图2所示,令xi为文本中第i个字符的向量表示,则一段长度为n的文本可以表示为x(1:n)=x1⨁x2⨁…⨁xn,其中⨁表示连接操作。

Fig.2 Architectures of the two encoders图2两种编码器的架构

CNN编码器结构如图2(a)所示,包括卷积层、池化层和隐含层。在卷积层中,设计了k组过滤器{w1,w2,…,wk},每个过滤器的窗口大小为{d×h},其中d为字符向量的维度。过滤器wi每次从h个字符中抽取特征ci,j,其过程为:

ci,j=f(wix(j:j+h-1)+b),

(1)

其中b是偏移项,f是非线性函数。

通过卷积操作,过滤器wi生成一组特征向量ci=(ci,0,ci,1,…,ci,n),k组过滤器共生成k组特征向量c=(c0,c1,…,ck)。接着,将k组特征向量输入到最大池化层,抽取每组特征中的最大值,得到文本的特征向量:

(2)

最后将文本的特征向量输入到全连接层中,得到文本最终的向量表示。

Bi-LSTM编码器的结构如图2(b)所示。其隐含层状态可以表示为:

(3)

1.2.3 相关度计算

经过编码器,得到了问题和文档标题、摘要、内容的向量表示(vq,vt,va,vc)。分别计算问题和其他3项间的余弦相似度:

st=cosine(vq,vt),

sa=cosine(vq,va),

sc=cosine(vq,vc).

(4)

基于这些余弦相似度计算问题和文档间的相关度作为文档的得分:

s=sigmoid(wtst+wasa+wcsc+b),

(5)

其中wt,wa和wc是相应的权重,b是偏移项。

2 训练策略

在数据集中,每一个问题都有180个错误答案和1个正确答案。正负样本的比例为180∶1。由于正负样本数量的不均衡,模型无法很好地学习问题和正确答案之间的关系,倾向于将所有候选文档标记为负例。为此,设计了2种训练策略来改善这一问题。第1种是将模型转化为基于Pairwise思想的排序模型。这种策略可以帮助模型更好地区分正例和负例,学习到问题和正例之间的关系。第2种是扩展正例,增大正例的数量使正例和负例的比例变为1∶1,这种方法可以间接地让模型学习到问题和正例之间的联系,从而改善正负例样本不均衡的问题。

2.1 排序模型

相关度计算模型可以看作是一个二分类模型。它的输入是问题Q和文档P的表示,输出是问题和文档间的相关程度。这里使用二元交叉熵函数作为损失函数,若事件X表示文档P是问题Q的答案,Pr(X=T)=p,则Pr(X=F)=1-p,则X的交叉熵为:

H(X)=Hb(p)=-(plog2(p)+(1-p)log2(1-p)).

(6)

这种方法计算了问题和文档间的相关度,可以学习到问题和文档间的内在联系,但无法很好地利用正例和负例之间的联系和区别。为此尝试将其转化为基于Pairwise的排序模型,其训练目标是使正确文档的得分高于错误文档,在学习到问题和文档间内在联系的同时,还扩大了正例和负例之间的区别,利用了正负例之间的关联信息。

Fig.3 Ranking model图3 排序模型

图3展示了排序模型的结构。其输入是由问题Q、正确文档R以及错误文档W构成的三元组。将问题-文档对(Q,R)(Q,R)和(Q,W)分别输入到相关度计算模型中,得到Q和R、Q和W之间的相关度sR和sW。最后使用Hinge Loss替代二元交叉熵函数:

hingeloss=max(0,m-sR+sW),

(7)

其中m是自定义的超参数。

2.2 正例扩展

当发现正负例不均衡这一问题时,直觉就是调整它们的比例。同时,当分析排序模型时,发现其输入由问题-文档对变成了问题-正确文档-错误文档的三元组。模型每次训练均对正确文档进行了1次训练,对于同一个问题训练了其正例180遍,其每个负例各1遍,也就相当于对于每个负例都复制了其对应的正例。因此,设计了正例扩展的训练策略。该策略将仍然使用相关度计算模型,只需要对于每个问题都复制180份正例,使语料的正负例比例变为1∶1。由于更多的正例参与到了模型的训练过程中,模型可以更好地学习到问题和文档之间的联系,不再倾向于将所有文档标记为负例。

3 实验结果

将奇瑞汽车的说明书作为文档集进行实验。实验数据来源于真实用户提问,并由多名相关专业人士进行标注,数据集共包含181篇文档,用人工标注了3 000条问题作为训练集,800条问题作为测试集。给定1个问题,从181篇文档中找出最相关的文档作为正例,其余的作为负例,目标是使正确答案得分最高,因此根据文档的得分对所有文档进行排序,并将准确率作为任务的评价指标,即只有排名第1的文档是正确答案时模型的预测是正确的,其他情况均视为错误。

3.1 实验设置

对于相关度计算模型和转换得到的排序模型均使用相同的参数设置。在百度百科语料上使用word2vec算法训练词向量,向量的维度为50。字向量是词向量的一部分。对于CNN编码器,设置了500个过滤器,过滤器的大小为{2,50},全连接层的维度是200。对于Bi-LSTM编码器,设置其每一时间节点的输出维度为100。除此之外,在排序模型中将hinge loss中的参数m设置为0.5。最后,使用Adam[18]算法作为优化算法。

3.2 实验结果及分析

首先,用实验证明领域词的复述替换和字符级向量的有效性。公平起见,词向量和字向量在模型训练时都会被更新。使用CNN作为短文本编码器,Bi-LSTM作为长文本编码器,使用正例扩展策略训练模型。

表4 复述替换和向量表示的对比实验

如表4所示,可以发现字向量的表现要优于词向量的表现。正如上文所说,不同的短语在不同的句子中有着不同的分词结果,不同的分词结果导致其词向量的组合也不一致,这无疑会导致一定的语义偏差。以短语“指示灯亮”为例,其可能被分割为“指示”和“灯亮”,也可能被分割为“指示灯”和“亮”。很明显这两组分割有着不同的语义。因此使用词向量,同一短语会有着不同的语义组合,导致模型判断出错。字向量的缺点在于一个字在不同的词中会有不同的语义,使用字向量无法解决语义的歧义性问题。但由于语料是特定领域的语料,包含的词的规模有限,因此该问题造成的影响相对较小,与其带来的效果提升相比可以暂时忽略。

另外,无论使用词向量或是字向量,领域词的复述替换均有效提升了模型的准确率。无论在字符级还是词级别,领域词和其复述均有着不同的向量表示。虽然模型在训练的过程中会将这些不同表示聚类在一起,但仍有可能出错。所以使用复述词典将领域词所有不同的表示转化为单一的表示,使模型可以更简单地判断出两段文本是否相关。

表5 针对复述对“停车”和“关闭发动机”模型是否使用复述替换的对比样例

表5展示了1个样例。“关闭发动机”和“停车”在语料中往往代表着几乎相同的含义。在模型对“怎样停车?”这一问题进行预测时,如果使用复述替换,则可以找到正确的文档“关闭发动机”;而不使用复述替换时,则找到了错误的文档“ISS启停系统”。

接着,为了说明2种训练策略是有效的,设计了另一组实验。同样使用CNN作为短文本编码器,Bi-LSTM作为长文本编码器。基础训练策略是只使用原始数据作为模型的输入,既不扩展正例,也不将模型转化为排序模型。实验结果如表6所示。

从表6中可以看出,提出的两种训练策略均可以提升系统的准确率。而正例扩展策略的实验结果要更优于排序模型。通过分析实验结果和模型结构发现,与原始模型相比排序模型训练相对困难,不易找到最优参数,无法得到最优解。而另一种策略则更加直接简单,同时由于训练样例数量的增多,尤其是正例样本的数量增多,模型可以学到更多关于正例的信息,训练也更加充分,并更容易学习到正例和负例之间的区别,获取更优的分类效果。因此最终选择了正例扩展策略作为最终的训练策略。

表6 不同训练策略的对比实验

最后对不同的编码器作用于不同长度文本所产生的效果进行对比,结果见表7。对于所有的模型,均使用字向量、复述替换和正例扩展策略。

表7 编码器对比实验

如表7所示,在短文本上,CNN的效果要优于Bi-LSTM。正如上文所说,问题、标题、摘要的语义信息比较精炼,在文本上则通常包含了最关键的词汇,一旦关键词得到了匹配,就可以判定文档和问题是否相关。而CNN则擅于捕获关键信息,因此在短文本上CNN的效果要更好。而在长文本上,实验结果也验证了本文方法的有效性。由于文档内容过长,需要从全局的角度计算其与问题的相关度。而Bi-LSTM则可以将长文本的语义信息熔炼到单一向量中,并忽略文本中不重要的信息,因此其效果要更好。

通过一系列实验,系统最终选择CNN作为短文本编码器,Bi-LSTM作为长文本编码器,使用复述替换和字向量作为补充,并使用正例扩展作为训练策略。

最后,将模型同传统的基于特征抽取的算法进行对比,使用了2-gram相似度、词共现以及词向量间的余弦相似度作为特征,对候选文档进行排序。

表8 模型对比实验

实验结果如表8所示,可以看出,本文算法要明显优于基于传统的特征抽取的检索算法。

4 结论

为了更好地帮助用户使用汽车说明书,本文在汽车说明书领域设计了一个新的问答系统。为了解决该任务中的文档表示问题设计了CNN和Bi-LSTM相结合的神经网络模型,而为了解决领域词相关问题,结合了领域词的复述词典,并用字向量替代词向量。同时为了解决数据不均衡问题,设计了2种训练策略,并选择其中的正例扩展策略来解决数据不均衡的问题。实验结果也验证了本文模型的有效性。但系统还有一定的不足,首先人工构建的复述词典规模较小,无法覆盖所有复述词;其次系统无法很好地回答过于细节和需要常识进行推理的问题。在未来的工作中,将尝试自动构建领域词的复述词典,并尝试新的深度学习模型来捕获更为细节的问题,并引入外部知识解决需要推理的问题。

猜你喜欢

编码器排序文档
融合CNN和Transformer编码器的变声语音鉴别与还原
浅谈Matlab与Word文档的应用接口
有人一声不吭向你扔了个文档
作者简介
恐怖排序
节日排序
基于双增量码道的绝对式编码器设计
Word文档 高效分合有高招
Persistence of the reproductive toxicity of chlorpiryphos-ethyl in male Wistar rat
基于数字信号处理的脉冲编码器