NLP Transformers 面试题什么是词嵌入?

374 阅读13分钟

目录 什么是词嵌入(Word Embedding) 离散表示 分布式表示 神经网络 一、什么是词嵌入(Word Embedding) 词是自然语言表义的基本单元。我们之所以认识词语,是因为我们大脑中建立了很多映射连接。那计算机怎么去识别呢?这也是词嵌入引出的原因:把词映射为实数域向量的技术也叫词嵌入(word embedding),核心思想就是见每个词映射成低维空间(通常K=50-300维)上的一个稠密向量(Dense Vector)。

在NLP(自然语言处理)领域,文本表示是第一步,也是很重要的一步,通俗来说就是把人类的语言符号转化为机器能够进行计算的数字,因为普通的文本语言机器是看不懂的,必须通过转化来表征对应文本。早期是基于规则的方法进行转化,而现代的方法是基于统计机器学习的方法。

弄懂文本表示的发展历程,对于NLP学习者来说是必不可少的。接下来开始我们的发展历程。文本表示分为离散表示和分布式表示:

二、离散表示

2.1 One-hot表示 One-hot简称读热向量编码,也是特征工程中最常用的方法。其步骤如下:

构造文本分词后的字典,每个分词是一个比特值,比特值为0或者1。 每个分词的文本表示为该分词的比特位为1,其余位为0的矩阵表示。 每个词典索引对应着比特位。那么利用One-hot表示为:

One-hot表示文本信息的缺点(主要是不能稠密表示,具体表现如下):

比较起来很困难,英文相对还好(2000个单词),中文(1W多个词) 随着语料库的增加,数据特征的维度会越来越大,产生一个维度很高,又很稀疏的矩阵。 这种表示方法的分词顺序和在句子中的顺序是无关的,不能保留词与词之间的关系信息。

2.2 词袋模型 词袋模型(Bag-of-words model),像是句子或是文件这样的文字可以用一个袋子装着这些词的方式表现,这种表现方式不考虑文法以及词的顺序。

文档的向量表示可以直接将各词的词向量表示加和。例如:

1

John likes to watch movies. Mary likes too

John also likes to watch football games.

以上两句可以构造一个词典:

1

{"John": 1, "likes": 2, "to": 3, "watch": 4, "movies": 5, "also": 6, "football": 7, "games": 8, "Mary": 9, "too": 10}

那么第一句的向量表示为:[1,2,1,1,1,0,0,0,1,1],其中的2表示likes在该句中出现了2次,依次类推。

词袋模型同样有一下缺点:

词向量化后,词与词之间是有大小关系的,不一定词出现的越多,权重越大。 词与词之间是没有顺序关系的。

2.3 TF-IDF TF-IDF(term frequency–inverse document frequency)是一种用于信息检索与数据挖掘的常用加权技术。TF意思是词频(Term Frequency),IDF意思是逆文本频率指数(Inverse Document Frequency)。

字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。一个词语在一篇文章中出现次数越多, 同时在所有文档中出现次数越少, 越能够代表该文章。

image.png

分母之所以加1,是为了避免分母为0。

那么,TF−IDF=TF*IDF,从这个公式可以看出,当w在文档中出现的次数增大时,而TF-IDF的值是减小的,所以也就体现了以上所说的了。

缺点:依然是词与词之间是没有顺序关系的。

2.4 n-gram模型 n-gram模型为了保持词的顺序,做了一个滑窗的操作,这里的n表示的就是滑窗的大小,例如2-gram模型,也就是把2个词当做一组来处理,然后向后移动一个词的长度,再次组成另一组词,把这些生成一个字典,按照词袋模型的方式进行编码得到结果。改模型考虑了词的顺序。

例如:

1

John likes to watch movies. Mary likes too

John also likes to watch football games.

以上两句可以构造一个词典:

1

{"John likes": 1, "likes to": 2, "to watch": 3, "watch movies": 4, "Mary likes": 5, "likes too": 6, "John also": 7, "also likes": 8, "watch football": 9, "football games": 10}

那么第一句的向量表示为:[1, 1, 1, 1, 1, 1, 0, 0, 0, 0],其中第一个1表示John likes在该句中出现了1次,依次类推。

缺点:维度灾难,随着n的大小增加,词表会成指数型膨胀,会越来越大。

2.5 离散表示存在的问题 无法衡量词向量之间的关系。 词表的维度随着语料库的增长而膨胀。 n-gram词序列随语料库增长呈指数型膨胀,更加快。 离散数据来表示文本会带来数据稀疏问题,导致丢失了信息,与我们生活中理解的信息是不一样的。 回到顶部

三、分布式表示 为了提高模型的精度,又发明出了分布式的表示文本信息的方法,这就是这一节需要介绍的。

用一个词附近的其它词来表示该词,这是现代统计自然语言处理中最有创见的想法之一。当初科学家发明这种方法是基于人的语言表达,认为一个词是由这个词的周边词汇一起来构成精确的语义信息。就好比,物以类聚人以群分,如果你想了解一个人,可以通过他周围的人进行了解,因为周围人都有一些共同点才能聚集起来。

3.1 共现矩阵 共现矩阵顾名思义就是共同出现的意思,词文档的共现矩阵主要用于发现主题(topic),用于主题模型,如LSA。

局域窗中的word-word共现矩阵可以挖掘语法和语义信息,例如:

I like deep learning.

I like NLP.

I enjoy flying

有以上三句话,设置滑窗为2,可以得到一个词典:

{"I like","like deep","deep learning","like NLP","I enjoy","enjoy flying","I like"}

image.png

中间的每个格子表示的是行和列组成的词组在词典中共同出现的次数,也就体现了共现的特性。

存在的问题:

向量维数随着词典大小线性增长。

存储整个词典的空间消耗非常大。

一些模型如文本分类模型会面临稀疏性问题。

模型会欠稳定,每新增一份语料进来,稳定性就会变化。

回到顶部

四、神经网络 上面的模型都有很多弊端,最大的就是体现每个词或者词组需要一个维度向量来表示,可能会产生维度在灾难。有几种改进形式:

4.1 NNLM(Neural Network Language model) 首先可以考虑GAN对抗生成形式来机器学习,另一种就是NNLM,

image.png

本模型主要发明之初用于训练从上文推到下文信息,后来发现能用于embedding训练。

4.2 word2Vec

image.png

该模型在2013年被发现,有两种形式:一种CBOW(由上下文推测中间单词,效果较好,为后面算法提供思路),一种skip-Gram(由中间词推测上下文词语)

image.png

为了减少计算,提出了两种优化方法:

层次Softmax:至此还没有结束,因为如果单单只是接一个softmax激活函数,计算量还是很大的,有多少词就会有多少维的权重矩阵,所以这里就提出层次Softmax(Hierarchical Softmax),使用Huffman Tree来编码输出层的词典,相当于平铺到各个叶子节点上,瞬间把维度降低到了树的深度,可以看如下图所示。这课Tree把出现频率高的词放到靠近根节点的叶子节点处,每一次只要做二分类计算,计算路径上所有非叶子节点词向量的贡献即可。

负例采样(Negative Sampling):这种优化方式做的事情是,在正确单词以外的负样本中进行采样,最终目的是为了减少负样本的数量,达到减少计算量效果。将词典中的每一个词对应一条线段,所有词组成了[0,1]间的剖分,然后每次随机生成一个[1, M-1]间的整数,看落在哪个词对应的剖分上就选择哪个词,最后会得到一个负样本集合。

Word2Vec存在的问题

对每个local context window单独训练,没有利用包含在global co-currence矩阵中的统计信息。 对多义词无法很好的表示和处理,因为使用了唯一的词向量

4.3 GloVe GloVe的全称叫Global Vectors for Word Representation,它是一个基于全局词频统计(count-based & overall statistics)的词表征(word representation)工具,它可以把一个单词表达成一个由实数组成的向量,这些向量捕捉到了单词之间一些语义特性,比如相似性(similarity)、类比性(analogy)等。我们通过对向量的运算,比如欧几里得距离或者cosine相似度,可以计算出两个单词之间的语义相似性。

word2vec最大的缺点则是没有充分利用所有的语料,但GloVe和word2vec实际表现其实差不多。(也有说实际性能要优于word2vec)

4.4 ELMo 是2018年年初发明的模型,在一词多义方面取得了很大发展,使用了双向LSTM。大体如下图所示。

image.png

4.5 BERT 2018年年底发明的模型,结合了CBOW的思想,ELMo的结构,借鉴GPT模型的Transformer部件,使得模型效果刷新NLP的多项记录。

image.png

本节的模型较多,此处只是简单介绍,计划后续单独进行展开

更多面试题可以关注星空智能对话机器人的Gavin的公开课

image.png

# 以往公开课选段视频如下:

www.bilibili.com/video/BV1Vh…

www.bilibili.com/video/BV1g4…

www.bilibili.com/video/BV1Sf…

GavinNLP星空对话机器人Transformer课程片段1--Transformer架构内部的等级化结构及其在NLP中的应用内幕

星空智能对话机器人的Gavin认为Transformer是拥抱数据不确定性的艺术。

Transformer的架构、训练及推理等都是在Bayesian神经网络不确定性数学思维下来完成的。Encoder-Decoder架构、Multi-head注意力机制、Dropout和残差网络等都是Bayesian神经网络的具体实现;基于Transformer各种模型变种及实践也都是基于Bayesian思想指导下来应对数据的不确定性;混合使用各种类型的Embeddings来提供更好Prior信息其实是应用Bayesian思想来集成处理信息表达的不确定性、各种现代NLP比赛中高分的作品也大多是通过集成RoBERTa、GPT、ELECTRA、XLNET等Transformer模型等来尽力从最大程度来对抗模型信息表示和推理的不确定性。

从数学原理的角度来说,传统Machine Learning及Deep learning算法训练的目标函数一般是基于Naive Bayes数学原理下的最大似然估计MLE和最大后验概率MAP来实现,其核心是寻找出最佳的模型参数;而Bayesian的核心是通过计算后验概率Posterior的predictive distribution,其通过提供模型的不确定来更好的表达信息及应对不确定性。对于Bayesian架构而言,多视角的先验概率Prior知识是基础,在只有小数据甚至没有数据的时候是主要依赖模型Prior概率分布(例如经典的高斯分布)来进行模型推理,随着数据的增加,多个模型会不断更新每个模型的参数来更加趋近真实数据的模型概率分布;与此同时,由于(理论上)集成所有的模型参数来进行Inference,所以Bayesian神经网络能够基于概率对结果的提供基于置信度Confidence的分布区间,从而在各种推理任务中更好的掌握数据的不确定性。

当然,由于Bayesian模型因为昂贵的CPU、Memory及Network的使用,在实际工程实践中计算Bayesian神经网络中所有概率模型分布P(B)是棘手的甚至是Intractable的几乎不能实现事情,所以在工程落地的时候会采用Sampling技术例如MCMC的Collapsed Gibbs Sampling、Metropolis Hastings、Rejection Sampling及Variational Inference的Mean Field及Stochastic等方法来降低训练和推理的成本。Transformer落地Bayesian思想的时候权衡多种因素而实现最大程度的近似估计Approximation,例如起使用了计算上相对CNN、RNN等具有更高CPU和内存使用性价比的Multi-head self-attention机制来完成更多视角信息集成的表达,在Decoder端训练时候一般也会使用多维度的Prior信息完成更快的训练速度及更高质量的模型训练,在正常的工程落地中Transformer一般也会集成不同来源的Embeddings,例如星空智能对话机器人的Transformer实现中就把One-hot encoding、Word2vec、fastText、GRU、BERT等encoding集成来更多层级和更多视角的表达信息。

拥抱数据不确定性的Transformer基于Bayesian下共轭先验分布conjugate prior distribution等特性形成了能够整合各种Prior知识及多元化进行信息表达、及廉价训练和推理的理想架构。理论上讲Transformer能够更好的处理一切以 “set of units” 存在的数据,而计算机视觉、语音、自然语言处理等属于这种类型的数据,所以理论上讲Transformer会在接下来数十年对这些领域形成主导性的统治力。

基于此,我们开发了全新一代围绕Transformer的自然语言处理课程:

NLP on Transformers 101

(基于Transformer的NLP智能对话机器人实战课程)

本课程以Transformer架构为基石、萃取NLP中最具有使用价值的内容、围绕手动实现工业级智能业务对话机器人所需要的全生命周期知识点展开,学习完成后不仅能够从算法、源码、实战等方面融汇贯通NLP领域NLU、NLI、NLG等所有核心环节,同时会具备独自开发业界领先智能业务对话机器人的知识体系、工具方法、及参考源码,成为具备NLP硬实力的业界Top 1%人才。

课程特色:

101章围绕Transformer而诞生的NLP实用课程 5137个围绕Transformers的NLP细分知识点 大小近1200个代码案例落地所有课程内容 10000+行纯手工实现工业级智能业务对话机器人 在具体架构场景和项目案例中习得AI相关数学知识 以贝叶斯深度学习下Attention机制为基石架构整个课程 五大NLP大赛全生命周期讲解并包含比赛的完整代码实现