当前信息环境下, 日常工作领域所需的各类专业领域信息也变得多种多样. 如何针对信息服务用户需求, 为用户提供快速高效的领域内信息获取方式也成了当前信息服务亟待解决的问题. 领域知识问答[1]方面的相关研究是解决上述问题的有效方法, 其能够通过对用户问题进行语义层面的解析并在领域文档库中匹配符合用户需求的信息并提供给用户. 问答系统(Question Answering system, QA)是一种基于深度学习的文本处理模型, 它基于用户提出的问题在语义层面对用户需求进行分析, 并智能、简洁的回答用户提出的问题. 可以满足领域信息服务保障任务从海量信息中快速、准确、有针对性地获取信息的需求.
早在19世纪60年代, 就出现了基于问答模板、人工规则生成答案的问答系统. 70年代还有一些基于文档库的问答系统研究. 90年代左右, 随着搜索引擎技术的出现与发展, 基于检索的问答系统取得了一定发展. 2010年之后, 随着自然语言处理技术的不断发展, 问答系统出现了3大主流方法: 语义解析、信息抽取、向量建模. 2015年开始, 由于深度学习在自然语言建模方面取得的重大进展[2], 出现了大量使用深度学习的问答系统. 2016年, 斯坦福大学推出了高质量机器阅读理解数据集Stanford Question Answering Dataset(SQuAD)[3], 它是基于自然问题的抽取式阅读理解数据集. 2017年, Wang等[4]提出了基于Match-LSTM的端到端神经网络模型. 2018年, Yu等[5]提出了QANet模型仅使用CNN和self-attention使得模型的训练和预测的速度大大加快, 并且可以并行处理输入的单词. 2017年, Facebook的Chen等[6]提出了机器阅读理解模型问答系统DrQA, 利用机器阅读理解技术在非结构化文本库上构建QA系统.
与现有常见的开放领域问答系统相比, 限定领域问答具有显著的特点[1]:
(1) 问题的多样性较少, 即同一个问题存在多种问法的情况较少;
(2) 知识来源比较少, 数据收集存在不少困难, 也缺乏开放的知识源;
(3) 问题的理解和回答需要深入利用专业知识, 通过深度的推理准确理解问题和生成答案.
这些特点给领域信息服务问答系统的研发带来了难题. 新体制下信息服务保障需要新技术、新手段挖掘信息服务用户信息需求. 本文使用了领域内文档库作为知识来源, 构建了能够为用户提供领域内信息服务保障的信息服务问答系统.
1 信息服务问答系统 1.1 基本架构本文中采用了端到端的闭合域问答模型来构建信息服务问答系统, 其架构基于两个主要部分: 检索器(retriever)和解答器(reader). 模型的总体架构如图1所示.
首先利用海量的专业领域文档构建一个文档库, 当信息服务用户提出问题并输入信息服务问答系统时, 信息检索器从领域文档库中检索出N个语义与问题最相关, 即最可能包含答案的文档. 选择了可能性最大N个文档之后, 系统把N个文档和问题发送至解答器. 当解答器输入一个文档-问题对时, 会输出在该文档中找到的最可能的答案, 同时给出该答案是正确答案可能性评分. 最后, 将答案按照评分排序, 选择评分最高的作为最终答案.
1.2 信息检索器
本系统的信息检索器基于TF-IDF (Term Frequency-Inverse Document Frequency)特征计算了问题语句和文档库中的每个文档的余弦相似性, 相似性越大的文档越有可能包含问题的答案.
1.2.1 TF-IDF算法TF-IDF[7]是一种统计方法, 可以用来评估一个词语对于整个文档库中每一篇文档的重要程度. 其核心思想是, 在某一个文档中出现频率高且在整个文档库中出现在其他文档中的频率少的词对该文档更重要. 因此取词频TF (词语在文档中出现的次数)和逆向文件频率IDF (总文件数目除以包含该词语的文件的数目取对数)的乘积TF-IDF构成了文档库的特征矩阵. 其计算公式如式(1)–式(3)所示.
$t{f_{i,j}} = \frac{{{n_{i,j}}}}{{\displaystyle\sum\nolimits_k {{n_{k,j}}} }}$ | (1) |
$id{f_i} = \ln \frac{{|D|}}{{|\{ j:{w_i} \in {d_j}\} |}}$ | (2) |
$tfid{f_{i,j}} = t{f_{i,j}} \times id{f_i}$ | (3) |
式(1)中,
当把文档库中的文档及用户提出的问题完全转换为包含TF-IDF特征矩阵后, 就可以对通过计算问题TF-IDF向量与每个文档TF-IDF的相似度, 来计算文档与用户问题之间的相似度了. 对于问题来说, 与其相似度越大的文档越有可能包含问题的答案. 本文中相似度的计算采用了余弦相似度算法[9], 其计算公式如下:
$\cos \theta = \frac{{a \cdot b}}{{||a|| \times ||b||}} = \frac{{\displaystyle\sum\nolimits_{i = 1}^n {({x_i} \times {y_i})} }}{{\sqrt {\displaystyle\sum\nolimits_{i = 1}^n {{{({x_i})}^2}} } \times \sqrt {\displaystyle\sum\nolimits_{i = 1}^n {{{({y_i})}^2}} } }}$ |
当接收到用户提交的问题之后, 模型通过TF-IDF模型将问题序列转化为TF-IDF表征向量, 然后计算该向量与文档库的TF-IDF矩阵中所有向量的余弦相似度, 与问题的相似度越大的文档与问题越相关. 本文取与问题向量余弦相似性最大的N个文档, 即与问题相似度最大的N个文档作为检索的结果, 并传递给解答器.
1.3 解答器解答器可以对信息检索器搜索的结果进行进一步处理, 对检索出的N个文档分别计算问题答案, 进行比较后选出最佳的答案. 解答器的核心算法就是对文档和问题对进行阅读理解, 从而分析、推理、定位问题的答案. 经典的神经网络阅读理解模型基本框架[10]主要包括词嵌入层、语义编码层、文档-交互层、问答作答层.
本系统采用了BiDAF阅读理解模型[11]作为解答器, 其具体结构如图2所示.
1.3.1 词嵌入层模型使用了词嵌入层将词语映射为维度固定的词向量, 获取词嵌入的方法是在训练的过程中自动从数据中学习词嵌入向量, 学习方式与神经网络中的权重相同. 词嵌入向量蕴含了词语的语义信息, 词嵌入向量之间的几何关系可以表示词之间的语义关系.
1.3.2 语义嵌入层语义嵌入层对词嵌入层得到的文档向量和问题向量分别进一步编码. 采用了可以让每个词语的特征向量与上下文进行了交互的双向长短时记忆网络(Bi-LSTM), 从而捕捉到了文档中词语的语境信息, 使特征向量更好的编码了词语在当前语境下的含义. Bi-LSTM模型是由正序的LSTM模型与倒序的LSTM模型组合而成, 分别可以获取词语对上文和下文的依赖. 从而将文档和问题原始文本整合成了包含篇章、句子级语义信息的特征表示.
1.3.3 注意流层
获取了文档和问题各自的语义特征向量之后, 为了完成问题的解答, 需要进一步探索文档与问题之间的相关关系. 对于用户问题来说文档中的每个词语对其的重要性是不同的, 即答案部分对于问题来说比其他部分应该更重要. 反之, 对于文档来说问题中与文档相关性更大的词语对于问题解答更加重要, 因此本文采用了双向注意流模型. 包括了文档-问题和问题-文档两个方向的注意流, 前者用于获取文档更关注哪些词语, 后者用于获取对于问题来说哪个单词更重要. 最后, 双向注意流拼接起来得到输出矩阵G, G中每个列向量都可视为对应词语的查询感知表征.
1.3.4 模型构建层模型构建层的输入为注意流层的输出G, 经过一个Bi-LSTM层得到
问答答案输出层的功能是生成答案起始位置p1和结束位置p2, 最终根据p1和p2从文档中截取预测的答案.
2 评价指标 2.1 检索器评价指标检索器的评估指标使用正确率来衡量, 已知每个问题对应一篇文章, 检索器的作用就是根据问题从文档库里找到其答案所在的文章. 当给定一个问题时, 检索器从文档库中选出与问题最相似的N篇文档作为返回结果. 如果其答案所在的文档包含在检索结果中可以认为找到了所需的文章, 即检索成功, 结果正确. 如果问题所对应的文档没有包含在检索结果中, 说明检索失败, 结果错误. 本文使用检索的正确率来检验检索器的效果. 公式如下:
${R_{\rm{right}}} = \frac{{{N_{\rm{right}}}}}{{{N_{\rm{all}}}}}$ |
其中,
阅读理解的评价一般以预测的答案与实际答案的匹配度进行衡量, 本文中同时计算了ROUGE-L和BLEU两个指标, 其中, ROUGE-L作为第一参考指标, BLEU作为第二参考指标.
(1) ROUGE-L
ROUGE评价方法[12]一般是用于摘要的评价, 其基于摘要中n元词(n-gram)的共现信息来评价摘要, 是一种面向n元词召回率的评价方法. 其通过统计人工摘要与自动摘要共现的基本单元(n元语法、词序列和词对)的数目, 来评价摘要的质量. ROUGE准则由一系列的评价方法组成, 其中, ROUGE-L使用了最长公共子序列作为基本单元, 字母L即是最长公共子序列(Longest Common Subsequence, LCS)的首字母. ROUGE-L计算方式如下:
$\begin{gathered} {R_{LCS}} = \frac{{LCS(X,Y)}}{m} \\ {P_{LCS}} = \frac{{LCS(X,Y)}}{n} \\ {F_{LCS}} = \frac{{(1 + {\beta ^2}){R_{LCS}}{P_{LCS}}}}{{{R_{LCS}} + {\beta ^2}{P_{LCS}}}} \\ \end{gathered} $ |
其中,
(2) BLEU
BLEU方法[13]计算两段文本之间的相似度, 不考虑词语的顺序, 将待评价文本和参考文本的n-gram单元进行匹配, 并计算匹配单元的个数. 匹配单元数越多, 则待评价文本与参考文本越相似, 即质量越好. 算法中N的值可以变化, BLEU-4即N值为4. 公式为:
$BLEU{\text{-}}N = BP \cdot \exp \left( {\sum\nolimits_{n = 1}^N {{w_n}\ln {p_n}} } \right)$ |
其中, BP为惩罚因子,
本次实验使用莱斯杯阅读理解初赛数据集对检索器和解答器进行了训练和评估, 该数据集包括新闻类、防务快讯类2万余篇的文档, 每个文档对应5个左右的问题以及人工标注的问题答案, 约10个万问题答案对.
数据集为JSON文件格式, 包含多个文章以及每篇文章的问题-答案对, 其中每个文章的答案为单行的JSON数据.
3.2 实验环境本文选用了百度的飞桨(PaddlePaddle)作为深度学习模型的基础框架, 其目前国内自主研发、开源开放、功能完备的产业级深度学习平台, 集深度学习核心框架、基础模型库、端到端开发套件、工具组件和服务平台于一体. 采用基于编程逻辑的组网范式, 支持声明式和命令式编程, 兼具开发的灵活性和高性能. 采用了在计算科学领域的领先地位、具有生态完整性和接口易用性的Python作为编程语言. 具体环境配置如表1所示.
3.3 评估 3.3.1 检索器评估实验中, 首先构建检索器评估数据集. 将数据集转换为问题-文档对. 使用原始数据集构建了90 000多条问题-文档对, 使用sklearn的TfidfVectorizer将其转化为TF-IDF矩阵作为检索数据库. 并从问题-文档对中选取了1000条数据作为测试集. 依次设定N为3–19, 测试检索器的正确率. 具体结果如图3所示.
由图3可见, N值越大, 检索器的正确率越高, 但是当N大于12之后, 其正确率增长变缓. 由于N值越大, 其结果包含的文档数越多, 不利于解答器进一步从检索结果中查找最终答案, 同时会大大增加解答器的计算量.
3.3.2 解答器评估(1)数据预处理
首先对问题和文档进行分词, 然后在对于文档中定位答案范围, 这里使用了一个简单的策略, 将真实答案与每段文章进行匹配, 搜索与真实答案F1分数最高的字符串, 并使用这个字符串的范围作为候选答案范围. 本文为每个问题寻找了一个范围作为候选项, 使用其在文档中的位置索引表示[start_idx, end_idx], 其中, start_idx是答案的起始端, end_idx为答案的终止端.
(2)模型训练
训练时将文档与问题作为输入, 模型的输出与正确的答案范围进行比较计算误差后对模型权重进行更新.解答器重要超参数设置如表2所示.
表2中, batch_size为训练时每批次数据数量; cuda为布尔型变量, 为True时使用GPU进行训练, 为False时使用CPU进行训练; embed_size为字嵌入层词向量的维度; hidden_size为模型隐藏层单元维度; init_lr表示初始学习率, 表示模型学习的快慢; max_answer_len表示答案保留的最长长度; max_article_len表示文档保留的最长长度; max_question_len表示问题保留的最长长度.
本文在训练时初始学习率设置为0.001, 训练过程中每个epoch完成后, 模型在测试集上的损失Loss及评估指标ROUGE-L、BLEU-4变化如图4所示.
由图4可知, 随着训练的进行, 模型在测试集上的损失逐渐降低, 说明模型正在不断优化, 在第5个epoch之后, 损失又会变大说明从此时开始模型开始过拟合. 与之对应ROUGE-L、BLEU-4指标, 一开始随着Loss的减少而增加. 当发生过拟合时, 随着Loss的增加有所下降, 因此, 本文选用第4个epoch的训练结果作为解答器.
3.3.3 问答系统评估最终将检索器和解答器整合起来构建的完整的问答系统, 首先对问题进行分词. 然后, 将分词后的问题输入检索器, 检索器会检索出与问题最相关的N个文档. 将问题与以上10个文档分别输入解答器, 得到N个答案以及其对应的概率分值, 概率越大则答案越有可能是正确答案, 因此选择概率分值最大的答案作为最终答案. 本文选取了9000多个问题对设置了不同N的系统效果进行了评估, 结果如图5所示.
可见N为3时, 综合ROUGE-L、BLEU-4来看系统效果最佳, 说明尽管随着N的增加检索器的结果包含正确答案的概率变高了, 但是其结果也包含了更多错误答案, 引入了噪声. 因此最终设置N为3, 此时系统, ROUGE-L指标为, BLEU-4指标为. 对比解答器的测试结果有所下降, 这由两个原因导致, 一是检索器不一定找到正确答案所在的文档并提供给解答器; 二是检索器找到正确的文档且解答器找到正确答案的情况下, 存在正确答案的概率值小于错误答案概率值的情况.
3.3.4 问答预测
问答系统建立完成之后, 就可以使用其获取信息了. 使用时, 系统输入为用户问题, 输出为系统从文档库中检索并截取的问题答案. 解答时, 系统根据用户提的问题先从文档中检索出可能包含答案的候选文章, 然后使用解答器从候选文章中截取答案, 并选取概率值最大的答案作为系统输出. 随机选取了几个问题及其参考、预测答案作为样例, 如图6所示.
由图6可知, 对于大部分问题模型预测的答案与实际答案基本一致, 也存在有些问题答案不合理的情况. 总之, 本模型可以从文档中截取比较合理的问题答案, 可以有效减少用户获取信息时所需要的时间, 不过模型的精度还有待提高.
3.3.5 系统效果展示由于本系统对于模型答案的预测还存在一定的误差, 在最终问答界面选取了概率最大的前5个答案作为系统最终的输出, 用户可以从中选取所需答案. 系统效果如图7所示.
本系统最终输出了排名靠前的答案、分值以及答案所在的文章, 对答案做了标注, 用户可以直观的获取答案, 也可以对答案的上下文进行进一步的了解.
4 结论本文对信息服务问答系统进行了研究, 模型基于领域阅读理解数据集构建了基于文档库的面向问题的检索、解读系统. 当用户提出问题时, 可以依次通过信息检索器找到答案所在文档, 并通过解答器找到答案在文档中的位置, 从而直接得到问题对应的答案. 本文的研究对于解决当前海量信息环境下如何快速有效的获取用户所需的信息, 提升综合信息服务用户获取信息的效率具有重要意义.
[1] |
王东升, 王卫民, 王石, 等. 面向限定领域问答系统的自然语言理解方法综述. 计算机科学, 2017, 44(8): 1-8, 41. DOI:10.11896/j.issn.1002-137X.2017.08.001 |
[2] |
Dong L, Wei FR, Zhou M, et al. Question answering over freebase with multi-column convolutional neural networks. Proceedings of the 53rd Annual Meeting of the Association for Computational Linguistics and the 7th International Joint Conference on Natural Language Processing. Beijing: Association for Computational Linguistics, 2015. 260–269.
|
[3] |
Rajpurkar P, Zhang J, Lopyrev K, et al. SQuAD: 100, 000+ questions for machine comprehension of text. Proceedings of 2016 Conference on Empirical Methods in Natural Language Processing. Austin: Association for Computational Linguistics, 2016. 2383–2392.
|
[4] |
Wang SH, Jiang J. Machine comprehension using Match-LSTM and answer pointer. Proceedings of the 5th International Conference on Learning Representations. arXiv: 1608.07905v2, 2016.
|
[5] |
Yu AW, Dohan D, Luong MT, et al. Qanet: Combining local convolution with global self-attention for reading comprehension. Proceedings of the 6th International Conference on Learning Representations. arXiv: 1804.09541v1, 2018.
|
[6] |
Chen DQ, Fisch A, Weston J, et al. Reading wikipedia to answer open-domain questions. Proceedings of the 55th Annual Meeting of the Association for Computational Linguistics. Vancouver: Association for Computational Linguistics, 2017. 1870–1879.
|
[7] |
Salton G, Yu CT. On the construction of effective vocabularies for information retrieval. ACM Sigplan Notices, 1975, 10(1): 48-60. DOI:10.1145/951787.951766 |
[8] |
Pedregosa F, Varoquaux G, Gramfort A, et al. Scikit-learn: Machine learning in Python. The Journal of Machine Learning Research, 2011, 12: 2825-2830. |
[9] |
张振亚, 王进, 程红梅, 等. 基于余弦相似度的文本空间索引方法研究. 计算机科学, 2005, 32(9): 160-163. DOI:10.3969/j.issn.1002-137X.2005.09.041 |
[10] |
Weissenborn D, Wiese G, Seiffe L. FasTQA: A simple and efficient neural architecture for question answering. arXiv: 1703.04816, 2017.
|
[11] |
Seo M, Kembhavi A, Farhadi A, et al. Bidirectional attention flow for machine comprehension. Proceedings of the 5th International Conference on Learning Representations. arXiv: 1611.01603v6, 2018.
|
[12] |
Lin CY. Rouge: A package for automatic evaluation of summaries. Barcelona: Association for Computational Linguistics, 2004. 74–81.
|
[13] |
Papineni K, Roukos S, Ward T, et al. BLEU: A method for automatic evaluation of machine translation. Proceedings of the 40th Annual Meeting of the Association for Computational Linguistics. Philadelphia: Association for Computational Linguistics, 2002. 311–318.
|