基于NLP的智能问答系统核心技术
作者:互联网
- 自然语言处理涉及的几个层次?,答案( )
- 形态学(morphology):形态学(又称“词汇形态学”或“词法”)是语言学的一个分支,研究词的内部结构,包括屈折变化和构词法两个部分。由于词具有语音特征、句法特征和语义特征,形态学处于音位学、句法学和语义学的结合部位,所以形态学是每个语言学家都要关注的一门学科。
- 语法学(syntax):研究句子结构成分之间的相互关系和组成句子序列的规则。其关注的中心是:为什么一句话可以这么说,也可以那么说?
- 语义学(semantics):语义学的研究对象是语言的各级单位(词素、词、词组、句子、句子群、整段整篇的话语和文章,乃至整个著作)的意义,以及语义与语音、语法、修辞、文字、语境、哲学思想、社会环境、个人修养的关系,等等。其重点在探明符号与符号所指的对象之间的关系,从而指导人们的言语活动。它所关注的重点是:这个语言单位到底说了什么?
- 语用学(pragmatics):是现代语言学用来指从使用者的角度研究语言,特别是使用者所作的选择、他们在社会互动中所受的制约、他们的语言使用对信递活动中其他参与者的影响。目前还缺乏一种连贯的语用学理论,主要是因为它必须说明的问题是多方面的,包括直指、会话隐含、预设、言语行为、话语结构等。部分原因是由于这一学科的范围太宽泛,因此出现多种不一致的定义。从狭隘的语言学观点看,语用学处理的是语言结构中有形式体现的那些语境。相反,语用学最宽泛的定义是研究语义学未能涵盖的那些意义。因此,语用学可以是集中在句子层次上的语用研究,也可以是超出句子,对语言的实际使用情况的调查研究,甚至与会话分析、语篇分析相结合,研究在不同上下文中的语句应用,以及上下文对语句理解所产生的影响。
- nlp任务流程,答案( )
- 文本语料:根据任务类型,去选择语料类型。例如问答的就找问答语料,翻译的就找翻译语料
- 文本预处理:根据任务需求,去做相应的预处理。如 文本数据清洗,分词,词性标注
- 文本表示:转为数字除了让计算机读懂,更要关注的是使用怎样的数字能表示字、字词、句子的意思
- 搭建神经网络:根据任务类型,去选择合适的网络搭建。例如生成模型还是判别模型(分别对应例如句子生成和文本分类)
- BERT适用场景,答案( )
- 如果NLP任务偏向在语言本身中就包含答案,如典型的任务比如QA和阅读理解,正确答案更偏向对语言的理解程度,理解能力越强。
- Bert特别适合解决句子或者段落的匹配类任务。就是说,Bert特别适合用来解决判断句子关系类问题,这是相对单文本分类任务和序列标注等其它典型NLP任务来说的,很多实验结果表明了这一点。
- BERT适合解决句子匹配类任务的原因,答案( )
- 一是:很可能是因为Bert在预训练阶段增加了Next Sentence Prediction任务,所以能够在预训练阶段学会一些句间关系的知识,而如果下游任务正好涉及到句间关系判断,就特别吻合Bert本身的长处,于是效果就特别明显。
- 二是:因为Self Attention机制自带句子A中单词和句子B中任意单词的Attention效果,而这种细粒度的匹配对于句子匹配类的任务尤其重要,所以Transformer的本质特性也决定了它特别适合解决这类任务。
- BERT已经发布的框架包括,答案( )
- BERT-pytorch
另一个Pytorch版本实现:Google AI 2018 BERT pytorch implementation - BERT-tensorflow
Tensorflow版本:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding - BERT-NER
BERT实战,命名实体识别: Use google BERT to do CoNLL-2003 NER ! - BERT-keras
Keras版: Keras implementation of BERT with pre-trained weights
- BERT的主要贡献:答案( )
- 引入了Masked LM,使用双向LM做模型预训练。
- 为预训练引入了新目标NSP,它可以学习句子与句子间的关系。
- 进一步验证了更大的模型效果更好: 12 --> 24 层。
- 为下游任务引入了很通用的求解框架,不再为任务做模型定制。
- 刷新了多项NLP任务的记录,引爆了NLP无监督预训练技术。
- Transrofmer模型讲解,答案( )
- 不同于以往主流机器翻译使用基于RNN的seq2seq模型框架,该论文用attention机制代替了RNN搭建了整个模型框架。
- 提出了多头注意力(Multi-headed attention)机制方法,在编码器和解码器中大量的使用了多头自注意力机制(Multi-headed self-attention)。
- 训练速度比主流模型更快,抛弃了以往深度学习任务里面使用到的 CNN 和 RNN ,Bert就是基于Transformer构建的。
- 这个模型广泛应用于NLP领域,例如机器翻译,问答系统,文本摘要和语音识别等等方向。
- 注意力机制,sequence-to-sequence模型的主要瓶颈是需要将源序列的全部内容压缩为一个固定大小的向量。注意力机制通过允许解码器回头查看源序列隐藏状态来缓解这一问题,然后将其加权平均作为额外输入提供给解码器,attention时主要分为三步,答案( )
- 第一步是将query和每个key进行相似度计算得到权重,常用的相似度函数有点积,拼接,感知机等;
- 第二步一般是使用一个softmax函数对这些权重进行归一化;
- 最后将权重和相应的键值value进行加权求和得到最后的attention。
- BERT的输入词向量是三个向量之和:
- Token Embedding:WordPiece tokenization subword词向量。
- Segment Embedding:表明这个词属于哪个句子(NSP需要两个句子)。
- Position Embedding:学习出来的embedding向量。这与Transformer不同,Transformer中是预先设定好的值。
- 实验的代码流程如下:,答案( )
- 预处理模型的构建,引入bert的网络架构和权重
- 准备数据集,包括训练集和测试集
- 导入命名实体和模型训练和预测的包
- 设置模型路径和参数后,调用NER Processor类加载API
- 输入字符转换位向量Features,保存为tf_record格式
- 构建模型,并保存
- 预测任务
- 模型调优和部署
- 过拟合的解决方案,答案( )
- 从原始数据出发,目的是为了增加训练数据:①可以从获取源中再次获得新的数据②可以进行数据增强③根据数据的生成方式,再次生成一些训练数据
- 从模型结构出发:单模型:①减少模型参数,简化模型的结构②使用正则化,对模型的参数进行限制③提前结束,可以防止过拟合
- 多模型:①drop out ②boosting ③bagging④交叉验证
- 监督学习和非监督学习,答案( )
- 监督学习:通过已有的一部分输入数据与输出数据之间的对应关系,生成一个函数,将输入映射到合适的输出,例如:分类;
- 非监督学习:直接对输入数据集进行建模,例如聚类。
- 半监督学习:综合利用有类标的数据和没有类标的数据,来生成合适的分类函数。
- 常用的分类器有哪些,答案( )
- 线性分类器:Logistic归回 y=sigmoid(wx+b)
- SVM、选项定特征、SVM算法输出一个最优化的分隔超平面(分类面)。
- BPNN,全连接网络,计算量巨大
- CNN,卷积神经网络
- LR和SVM的联系与区别是什么?,答案( )
- 如果不考虑核函数,LR和SVM都是线性分类算法,也就是说他们的分类决策面都是线性的。
- LR和SVM都是监督学习算法
- LR和SVM的损失函数不同
- SVM只考虑局部的边界线附近的点 ,LR考虑全局,远离的点对边界线的确定也起作用。
- CNN最成功的应用是在CV,那为什么NLP和Speech的很多问题也可以用CNN解出来?为什么AlphaGo里也用了CNN?这几个不相关的问题的相似性在哪里?CNN通过什么手段抓住了这个共性?
- CNN抓住共性的手段有四个:局部连接、权值共享、池化操作、多层次结构
- 局部连接:使网络可以提取数据的局部特征;
- 权值共享:大大降低了网络的训练难度,一个filter只提取一个特征,在整个图片(或者语音、文本)中进行卷积;
- 池化操作:与多层次结构一起,实现了数据的降维,将低层次的局部特征组合为较高层次的特征,从而对整个图片进行表示
问答
- 什么是卷积?
答:对图像(不同的数据窗口数据)和滤波矩阵(一组固定的权重:因为每个神经元的多个权重固定,所以又可以看做一个恒定的滤波器filter)做内积(逐个元素相乘再求和)的操作就是所谓的『卷积』操作,也是卷积神经网络的名字来源。
- 请介绍下tensorflow的计算图
答:Tensorflow是一个通过计算图的形式来表述计算的编程系统,计算图也叫数据流图,可以把计算图看做是一种有向图,Tensorflow中的每一个节点都是计算图上的一个Tensor, 也就是张量,而节点之间的边描述了计算之间的依赖关系(定义时)和数学操作(运算时)。如下两图表示:
- a=x*y; b=a+z; c=tf.reduce_sum(b);
- relu为何好过sigmoid和tanh?
- 第一,采用sigmoid等函数,算激活函数时(指数运算),计算量大,反向传播求误差梯度时,求导涉及除法和指数运算,计算量相对大,而采用Relu激活函数,整个过程的计算量节省很多。
- 第二,对于深层网络,sigmoid函数反向传播时,很容易就会出现梯度消失的情况(在sigmoid接近饱和区时,变换太缓慢,导数趋于0,这种情况会造成信息丢失),这种现象称为饱和,从而无法完成深层网络的训练。而ReLU就不会有饱和倾向,不会有特别小的梯度出现。
- 第三,Relu会使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生(以及一些人的生物解释balabala)。当然现在也有一些对relu的改进,比如prelu,random relu等,在不同的数据集上会有一些训练速度上或者准确率上的改进。
- 什么样的资料集不适合深度学习?
- 数据集太小,数据样本不足时,深度学习相对其它机器学习算法,没有明显优势。
- 数据集没有局部相关特性,目前深度学习表现比较好的领域主要是图像/语音/自然语言处理等领域,这些领域的一个共性是局部相关性。图像中像素组成物体,语音信号中音位组合成单词,文本数据中单词组合成句子,这些特征元素的组合一旦被打乱,表示的含义同时也被改变。对于没有这样的局部相关性的数据集,不适于使用深度学习算法进行处理。举个例子:预测一个人的健康状况,相关的参数会有年龄、职业、收入、家庭状况等各种元素,将这些元素打乱,并不会影响相关的结果。
- 如何解决梯度消失和梯度爆炸?
- 梯度消失: 根据链式法则,如果每一层神经元对上一层的输出的偏导乘上权重结果都小于1的话,那么即使这个结果是0.99,在经过足够多层传播之后,误差对输入层的偏导会趋于0 可以采用ReLU激活函数有效的解决梯度消失的情况,也可以用Batch Normalization解决这个问题。关于深度学习中 Batch Normalization为什么效果好?
- 梯度膨胀 :根据链式法则,如果每一层神经元对上一层的输出的偏导乘上权重结果都大于1的话,在经过足够多层传播之后,误差对输入层的偏导会趋于无穷大 可以通过RELU激活函数来解决,或用Batch Normalization解决这个问题。
- NLP应用场景分析?
自然语言处理 (Natural Language Processing) 是人工智能(AI)的一个子领域。自然语言处理是研究在人与人交互中以及在人与计算机交互中的语言问题的一门学科。为了建设和完善语言模型,自然语言处理建立计算框架,提出相应的方法来不断的完善设计各种实用系统,并探讨这些实用系统的评测方法。
- 信息抽取:从给定文本中抽取重要的信息,比如时间、地点、人物、事件、原因、结果、数字、日期、货币、专有名词等等。通俗说来,就是要了解谁在什么时候、什么原因、对谁、做了什么事、有什么结果。
- 文本生成:机器像人一样使用自然语言进行表达和写作。依据输入的不同,文本生成技术主要包括数据到文本生成和文本到文本生成。数据到文本生成是指将包含键值对的数据转化为自然语言文本;文本到文本生成对输入文本进行转化和处理从而产生新的文本。
- 问答系统:对一个自然语言表达的问题,由问答系统给出一个精准的答案。需要对自然语言查询语句进行某种程度的语义分析,包括实体链接、关系识别,形成逻辑表达式,然后到知识库中查找可能的候选答案并通过一个排序机制找出最佳的答案。
- 对话系统:系统通过一系列的对话,跟用户进行聊天、回答、完成某一项任务。涉及到用户意图理解、通用聊天引擎、问答引擎、对话管理等技术。此外,为了体现上下文相关,要具备多轮对话能力。
- 文本挖掘:包括文本聚类、分类、情感分析以及对挖掘的信息和知识的可视化、交互式的表达界面。目前主流的技术都是基于统计机器学习的。
- 语音识别和生成:语音识别是将输入计算机的语音符号识别转换成书面语表示。语音生成又称文语转换、语音合成,它是指将书面文本自动转换成对应的语音表征。
- 信息过滤:通过计算机系统自动识别和过滤符合特定条件的文档信息。通常指网络有害信息的自动识别和过滤,主要用于信息安全和防护,网络内容管理等。
- 舆情分析:是指收集和处理海量信息,自动化地对网络舆情进行分析,以实现及时应对网络舆情的目的。
- 信息检索:对大规模的文档进行索引。可简单对文档中的词汇,赋之以不同的权重来建立索引,也可建立更加深层的索引。在查询的时候,对输入的查询表达式比如一个检索词或者一个句子进行分析,然后在索引里面查找匹配的候选文档,再根据一个排序机制把候选文档排序,最后输出排序得分最高的文档。
- 机器翻译:把输入的源语言文本通过自动翻译获得另外一种语言的文本。机器翻译从最早的基于规则的方法到二十年前的基于统计的方法,再到今天的基于神经网络(编码-解码)的方法,逐渐形成了一套比较严谨的方法体系。
- CNN卷积核是单层的还是多层的?
答:一般而言,深度卷积网络是一层又一层的。层的本质是特征图, 存贮输入数据或其中间表示值。一组卷积核则是联系前后两层的网络参数表达体,训练的目标就是每个卷积核的权重参数组。描述网络模型中某层的厚度,通常用名词通道channel数或者特征图feature map数。不过人们更习惯把作为数据输入的前层的厚度称之为通道数,(比如RGB三色图层称为输入通道数为3),把作为卷积输出的后层的厚度称之为特征图数。卷积核(filter)一般是3D多层的,除了面积参数, 比如3x3之外, 还有厚度参数H(2D的视为厚度1). 还有一个属性是卷积核的个数N。卷积核的厚度H, 一般等于前层厚度M(输入通道数或featuremap数). 特殊情况M > H。卷积核的个数N, 一般等于后层厚度(后层featuremaps数,因为相等所以也用N表示)。卷积核通常从属于后层,为后层提供了各种查看前层特征的视角,这个视角是自动形成的。卷积核厚度等于1时为2D卷积,对应平面点相乘然后把结果加起来,相当于点积运算;卷积核厚度大于1时为3D卷积,每片分别平面点求卷积,然后把每片结果加起来,作为3D卷积结果;1x1卷积属于3D卷积的一个特例,有厚度无面积,直接把每片单个点乘以权重再相加。归纳之,卷积的意思就是把一个区域,不管是一维线段,二维方阵,还是三维长方块,全部按照卷积核的维度形状,对应逐点相乘再求和,浓缩成一。
- BERT的基本原理
答:BERT是Bidirectional Encoder Representation from Transformers的缩写,整体上是一个自编码语言模型,是由transformer基本结构搭建而成,Pre-train时设计了两个任务进行优化
Masked Language Model,随机将一句话中的某些词进行Mask,并基于上下文预测被Mask的词
Next Sentence,预测输入的两个句子是否连续,引入这个的目的是为了让模型更好地学到文本片段之间的关系
BERT相对于原来的RNN、LSTM结构可以做到并行执行,同时提取在句子中的关系特征,并且能在多个不同层次提取关系特征,进而反映句子语义,相对于word2Vec,BERT能根据句子上下文获取词义,解决多义词问题,BERT由于模型参数大,也存在容易过拟合的问题。
- attention有什么优点和缺点
答:优点:参数少,模型复杂度相对于CNN、RNN比,复杂度更小,参数也更少
速度快,Attention机制每一步计算不依赖于上一时间步的计算结果,相对于RNN可以很容易的做到并行
效果好,Attention是挑重点,可以同时捕获局部和全局的信息,当输入一段长文字时,可以抓住其中的重点,不丢失信息。
缺点:没法捕捉位置信息,即没法学习序列中的顺序关系。这点可以通过加入位置信息,如通过位置向量来改善,具体可以参考最近大火的BERT模型。Attention中的Q,K,V
- 其中Query决定,Attention的输出维度,Query向量dim即是输出维度。Key、Value向量是需要融合的向量,在上面做向量融合
多头注意力本质上是多个attention的计算,然后做一个集成作用
和CNN使用多个通道卷积效果类似
论文中说到这样的好处是可以允许模型在不同的表示子空间里学习到相关的信息,后面还会根据attention可视化来验证。
当你浏览网页的时候,你可能在颜色方面更加关注深色的文字,而在字体方面会去注意大的、粗体的文字。这里的颜色和字体就是两个不同的表示子空间。
标签:NLP,BERT,卷积,模型,系统核心,文本,问答,句子,输入 来源: https://blog.csdn.net/Peter_Changyb/article/details/117259386