我的NVIDIA开发者之旅-使用NeMo快速构建智能问答系统学习笔记
"我的NVIDIA开发者之旅 | 征文活动正在进行中…
智能问答系统是自然语言处理领域的重要任务之一, 有序科学地整理无序语料信息,建立基于知识的分类模型; 这些模型可以指导新添加的分类语料库和服务信息,节约人力资源,提高信息处理的自动化程度。 它广泛应用于智能语音交互、在线客、个性化情感聊天等应用广泛。
NeMo构建新型最先进的对话AI模型工具箱, NeMo自动语音识别采用独立集合(ASR)、自然语言处理(NLP)从文本到语音(TTS)模型。
一、智能问答系统简介
1.1.定义智能问答系统
智能问答系统(Question Answering System, QA)它是自然语言处理领域的子任务之一,也是信息检索系统的先进形式 。它能用准确简洁的自然语言回答用户用自然语言提出的问题。 问答系统是人工智能和自然语言处理领域的倍相关系 具有广阔发展前景的研究方向。它广泛应用于智能语音交互、在线客、个性化情感聊天等应用广泛。
1.2.智能问答系统分类
1.2.1.基于结构化数据的问答系统
基于结构化数据的问答系统的主要思想是分析问题, 将问题转化为查询(query), 然后在 查询结构化数据库, 返回的查询结果是问题 答案。体现强人工智能的成分不多。
1.2.2、基于知识图谱的问答系统
知识图谱:由一些相互连接的实体及其属性组成,实体的每一个属性和关系都是一个三元组。
目前,基于知识问答系统主要有三种方法,即基于模板匹配的方法;基于语义分析和基于向量建模的方法。
1.2.3.基于自由文本阅读理解的问答系统
是指模型根据对非结构化的文本进行阅读理解,从而从中抽取出答案。阅读理解能够让计算机帮助人类在大量文本中快速找到准确答案,从而减轻人们对信息的获取的成本。具体来讲,机器阅读理解和问答任务(QA)训练是指给出一个问题和一个或多个文本QA系统可以根据文本找到问题的答案。
二、智能问答系统的工作流程和原理
2.1.智能问答系统的工作流程
2.1.1、流程概述
(1)首先有两部分输入,包括原文和基于提出的问题。
(2)在编码层将文本数字化,转化为向量表达。
(3)将结果输入到神经网络的编码程序中,对文本的特殊向量进行编码,把编码后的结果输入到交互层。
(4)通过交互层模型建立文章与问题之间的语义联系,模型考虑原文与问题的语义。
(5)模型通过输出层找出最大概率答案的开始和结束位置,输出答案。
2.1.2、流程图
2.2.智能问答系统经典模型
2.2.1、BiDAF
BiDAF分别有6层Character Embedding Layer、Word Embedding Layer、Contextual Embedding Layer、Attention Flow Layer、Modeling Layer和Output Layer。前三层是上下文不同粒度的表征编码器。第四层是双向注意流层,是原文的核心层。第五层是编码层,感知编码第四层输出问题的上下文表征。第六层是预测答案的范围。
(1)字符嵌入层:字符级CNNs将每个字映射到向量空间。 (2)字嵌入层:用预训练的字嵌入模型,将每个字映射到向量空间。 (3)上下文嵌入层:利用周围单词的上下文线索细化单词的嵌入。前三层同时用于问句和原文。 (4)注意力流层:将问句向量与原文向量耦合,为原文中的每个单词生成与问句相关的特征向量集合。 (5)建模层:使用RNN扫描整个原文。 (6)输出层:输出问题对应的答案。
2.2.2、QANet
QANet介绍模型网络结构
(1)输入的数据有Context和Question两部分组成。
(2)通过Embedding层转化为Embedding向量,分为word embedding和char embedding。Highway network包含在embedding层中。
(3)通过Encoder Block层,Encoder Block是QANet如右图所示。Encoder Block层分四部分,Position Encoding、 Conv卷积层、Self attention和Feedword层。开始做每个部分layernorm处理,结尾连接残差。
(4)Context和Question的encoder向量,通过Context Query Attention计算相关性。
(5)然后通过三层Encoder Block第一层和第二层输出连接后,通过一层全链接层作为起始位置的概率。
(6)第一层与第三层输出连接后,以一层全链接层为起始位置的概率。
2.2.3、BERT
BERT的全称为Bidirectional Encoder Representation from Transformers,它是一种预训练的语言表征模型。它强调,它不再使用传统的单向语言模型或两个单向语言模型进行浅层拼接,而是使用新的,以致能生成语言表征。
该模型具有以下主要优点:
1)采用MLM对双向的Transformers为了产生深层的双向语言表征,进行预训练。
2)预训练后,只需要添加一个额外的输出层进行fine-tune,可以在各种下游任务中获得state-of-the-art性能。在这个过程中不需要BERT修改任务的特定结构。
BERT的输入
BERT的输入为每一个token对应的表征*(图中的粉红色块是token,黄色块就是token对应的表征)*,而且采用了单词字典WordPiece构建算法。除了完成具体的分类任务,除了单词token此外,作者还在输入的每个序列的开头插入特定的序列,该分类token最后一个对应Transformer层输出被用来收集整个序列来表征信息。
由于BERT它是一种必须适应各种自然语言任务的预训练模型,因此模型输入的序列必须能够包含一个句子*(文本情感分类,序列标注任务)或两句以上(摘要,自然语言推断,问答任务)*。那么如何让模型有能力区分哪个范围属于句子呢?A,哪个范围是属于句子B呢?BERT有两种方法可以解决:
1)在序列tokens中把**分割token([SEP])**插入每个句子后,将不同的句子分开tokens。
2)为每一个token所有表征都添加了可学习的分割embedding指示它属于句子A还是句子B。
BERT的输出
为分类token([CLS])对应最后一个Transformer的输出, 则代表其他token对应最后一个Transformer输出。对一些token级别的任务*(如序列标记和问答任务),就把 输入到额外的输出层进行预测。对于一些句子级别的任务(如自然语言推断和情感分类任务)*,就把输入到额外的输出层,这里解释了为什么在每个输出层token在插入特定的分类序列之前token。
三、构建NeMo中文问答数据集
3.1、SQuAD
SQuAD是Stanford Question Answering Dataset 首字母缩写。这是一个阅读理解数据集,由众包工作者在一组维基百科全书上提出的问题组成。每个问题的答案都是相应文章中的一段文本,有些问题可能无法回答.
Squad官网: https://rajpurkar.github.io/SQuAD-explorer/
3.1.1、SQuAD1.0
SQuAD 1.1 包含针对500 文章的10万 问答对。
论文地址:https://arxiv.org/pdf/1606.05250
下载地址:https://data.deepai.org/squad1.1.zip
3.1.2、SQuAD2.0
SQuAD2.0组合了SQuAD1.1中的10万个问题,并增加了超过5万个无法回答的问题,这些问题由众包工作者以对抗(adversarially)的方式设计,看起来与可回答的问题相似。 为了在SQuAD2.0数据集上表现出色。系统不仅必须在可能的情况下回答问题,还必须确定篇章数据何时不支持回答,并避免回答。 论文地址:https://arxiv.org/abs/1806.03822
数据集地址: https://rajpurkar.github.io/SQuAD-explorer/dataset/train-v2.0.json
3.1.2.1、Squad2.0英文数据集格式:
{
"data": [
{
"title": "Super_Bowl_50",
"paragraphs": [
{
"context": " numerals 50.",
"qas": [
{
"answers": [
{
"answer_start": 177,
"text": "Denver Broncos"
},
{
"answer_start": 177,
"text": "Denver Broncos"
},
{
"answer_start": 177,
"text": "Denver Broncos"
}
],
"question": "Which NFL team represented the AFC at Super Bowl 50?",
"id": "56be4db0acb8001400a502ec"
}
]
}
]
}
],
"version": "1.1"
}
3.1.2.2、Squad2.0中文数据集格式:
四、在NeMo中训练中文问答系统模型基本步骤
点击观看课程视频:
4.1、导入NeMo工具库及相关工具类
4.1、创建目录存放数据集
4.3、定义相关超参数
4.4、加载模型配置文件
4.5、通过OmegaConf工具库创建Config对象
4.6、通过config对模型配置文件进行修改
4.7、设置模型的训练器
4.8、初始化模型
4.9、开始训练模型
4.10、模型进行推理
4.11、模型的保存
五、使用模型进行推理完成中文智能问答的任务
课程视频链接: https://www.bilibili.com/video/BV1744y167Ag
"我的NVIDIA开发者之旅” | 征文活动进行中…