通用的天然语言处理(natural language processing, nlp)过程以下:网络
因为模型以张量为输入,所以面对nlp数据集,第一个任务就是将文本转为向量,是本文谈论的重点。其中大概有如下几种方法:框架
利用传统特征如词频、tf-idf等对文本进行编码,而后扔到LinearSVC
中,若是是二分类任务,效果基本还行,并且比较简单。这些特征的缺点在于:工具
效果比较吃数据集,若是数据集自己的词比较散,效果会不好学习
不具有通用性动画
计算比较慢,相比于利用word embedding + frozen而言ui
Word Embeddind是一种预训练技术。编码
在CV任务中,经常使用层级CNN结构,通常会使用CNN方法加以辅助。对于层级CNN结构来讲,不一样层级的神经元学习到不一样类型的图像特征,由底向上造成层级结构,所以越接近底层的神经元学习到特征越具备通用型(好比边角线、弧线等基础特征),越高层神经元学习到的特征越与具体任务相关。3d
所以,可使用ImageNet等大型数据集对网络进行预训练,抽取其底层任务无关的特征提取器的参数对特定任务的网络进行初始化:code
NLP语言模型 语言模型包括文法语言模型和统计语言模型,通常咱们指统计语言模型。 统计语言模型:把句子(sequence of word)看做一个随机事件,以相应几率描述其属于某种语言集合的可能性。给定一个词聚集合V,对于一个由V中的词构成的序列
,赋予几率
衡量其复合天然语法语义的置信度 常见的统计语言模型由N-gram Modelorm
那么容易想到在nlp领域也可使用预训练的方式对语义进行提取,其中最先的工做多是2003年的神经网络语言模型(NNLM),在2013年深度学习火爆以后开始收到重视,word embedding是网络训练的副产品,是一个由词向量组成的矩阵。2013年最火的用语言模型作word embedding的工具是word2vec。
Word2Vec的网络结构和NNLM相似,区别在于训练方法:
尝试word2vec可使用
gensim
库
WordEmbedding的问题在于:多义词问题,它的训练方式致使无论单词的上下文都是预测相同的这个单词,致使两种不一样的上下文信息都会编码到相应的word embedding空间
Deep contextualized word representation -- Embedding from Language Models,提供了多义词问题的解决方案。WordEmbedding在训练好以后每一个单词的表达就固定了,不会跟着context进行变化,也就是说它的embedding是静态的。
ELMO的本质思想是:使用语言模型训练单词的WordEmbedding,实际使用时根据上下文单词的语义进行调整,即根据上下文对Word Embedding进行调整。
ELMO采起了两阶段训练过程:
缺点(与GPT和Bert对比):
Transformer Transformer是个叠加的Self Attention构成的深度网络。注意力机制指扫描全局得到须要重点关注的目标区域,抑制无用信息。 Attention机制通常依附于Encoder-Decoder框架,单纯的Encoder-Decoder通常用于输入输出维度不一致,那么就利用Encoder将其编码为固定长度的信息向量(中间语义表示),再使用Decoder进行解码,其缺点在于:
- 中间语义表示长度有限,可能存在信息损耗
- Decoder根据中间语义表示即句子的全局信息进行解码,没法注重句子的局部信息
引入Attention模型后至关于给每一个单词都增长了权重,能够关注于局部信息了 动画演示 本质上Attention是对Source中元素的Value值进行加权求和(Source就是句子,元素就是每一个单词,其value就是embedding):
Self Attention也称为intra Attention,attention机制中Source和Target内容不同,Self Attention机制是句子内部元素之间发生Attention的机制(能够看做Source=Target的特殊状况)。Self Attention能够捕获同一个句子中单词之间的一些句法特征/语义特征,它直接捕获两个单词的特征,不一样于RNN的序列计算(这会致使越远的单词有效捕获的可能性越小)
Generative Pre-Training一样使用两阶段过程:
与ELMO不一样之处在于:
缺点:
Bert采用GPT彻底相同的两阶段模型(不一样之处在于它使用了双向且预训练语言模型的数据规模更大),因此其实:
那么问题就在于Transformer如何双向使用进行训练呢?
[MASK]
或者其余词对须要预测的词进行替换
MASK
标记的,所以不能只针对这个标记进行训练Bert的输入由三种embedding进行叠加: