NLP经典论文阅读:从神经网络语言模型(NNLM)到词向量(word2vec)

本文仅供自己日后复习所用,参考了很多博客和知乎回答的内容,中途没有及时记录所以无法一一列出,希望谅解。

NLP的发展过程中的核心技术代表

2001 - Neural language models(神经语言模型)
2008 - Multi-task learning(多任务学习)
2013 - Word embeddings(词嵌入)
2013 - Neural networks for NLP(NLP神经网络)
2014 - Sequence-to-sequence models
2015 - Attention(注意力机制)
2015 - Memory-based networks(基于记忆的网络)
2018 - Pretrained language models(预训练语言模型)

本篇博客涉及其中之二。

1. 基于统计的语言模型

语言模型与维数灾难

语言模型是NLP领域一个基本且重要的任务,本质是对一段自然语言的文本进行概率的预测,一般通过计算某种语言的词序列的联合概率实现。
假设句子S长度为 T,词用 x 表示,那么这个句子的概率可用如下公式表示:
在这里插入图片描述
利用条件概率公式计算词语序列的联合概率,会带来一个问题:维数灾难(curse of dimensionality)
即模型参数太多,会导致过拟合。
假设要建模一个有10个单词的句子的联合概率分布,词表大小为100000,参数量为 10000 0 10 − 1 100000^{10} - 1 100000101

N-Gram模型

为了解决维数灾难的问题,引入马尔可夫假设:假定一个句子中的词只与它前面的 n-1 个词相关。
这样得到的就是N-Gram模型。

例如n=2时,得到bigram model:
在这里插入图片描述C是词频的统计函数。

训练语料里面有些 n 元组没有出现过,其对应的条件概率就是 0,导致计算一整句话的概率为 0。尤其在 n 取值较大时,这种数据稀疏导致的计算为 0 的现象变得特别严重
所以统计语言模型中一个很重要的方向便是设计各种平滑方法来处理这种情况。

除了数据稀疏,N-Gram还有两个缺点
一是基于统计的语言模型无法把 n 取得很大, 3-gram 比较常见。因此统计语言模型无法对语言中上下文较长的依赖关系建模。虽然用马尔可夫假设限定了窗口,但参数量还是随着窗口大小指数增长。
假设词表中词的个数为20000
在这里插入图片描述
二是N-Grams不考虑单词之间的“相似性”。
如训练语料中有一句“The cat is walking in the bedroom.”,那么,语言模型生成句子“a dog is running in a room”的概率应该相近。但N-Grams模型仅仅靠每个n元组出现的频次计算概率,无法解决词语相似性的问题。
下一节介绍的《A Neural Probabilistic Language Model》一文将着力解决这两个问题。

2. 神经网络语言模型(NNLM)

2003年,Bengio在他的经典论文《A Neural Probabilistic Language Model》中,首次将深度学习的思想融入到语言模型中,并发现将训练得到的NNLM(Neural Net Language Model)模型的第一层参数当做词的分布式表征时,能够很好地获取词语之间的相似度。
具体来说,如果一句话在训练数据中从来没见过,但组成它的单词和已经训练的句子中的单词相似,那么模型生成它的几率会较高。
图1
以上图为例,对NNLM模型,红框中的句子如果在训练语料中出现了很多次,那么绿框中没在训练语料中出现的句子(语义与语法角色与之相近)经模型预测出的概率比较高。
而N-Gram模型则不能做到这一点。

NNLM模型公式

在这里插入图片描述
f为一个概率输出函数
𝑖代表第𝑖个输出
g代表一个神经网络, 参数为𝜔
w代表输入的词, C(w)是词的向量表示
模型总的参数为𝜃=(𝐶,𝜔)
在这里插入图片描述
𝑅(𝜃)是一个正则化项
训练:找到参数𝜃使对数似然函数L最大

与 N-Gram 相比,这种方法不需要(事先计算并)保存所有的条件概率值,在模型训练完成后,通过直接输入词序列计算条件概率。且通过选取合适的模型可使得 cita中参数的个数远小于 n-gram 中模型参数的个数。

NNLM模型结构

在这里插入图片描述
输入:
长度为n-1的词序列
输出:
给定一段文本,下一个词为词表中各个词的条件概率
网络结构:
主体是一个三层的前馈神经网络,包括输入层,隐藏层和输出层。

设词向量化的维度为m,输入层有𝑚×(𝑛−1)个节点,隐藏层有h个节点,激活函数是双曲正切函数。神经网络的输出有V个节点(V为词表大小),这些节点的输出经过Softmax激活函数归一化为条件概率,本质上还是一个N-Gram模型。

简述NNLM的要点如下:

  1. 将词向量化,特征向量的维数(例如实验中的m=30、60或100)比词表的大小(例如17000)要小得多。
  2. 将句子的联合概率用该句中的词的向量表示。
  3. 同时训练词向量和预测函数的参数。
  4. 采用Softmax函数作为输出,解决了数据稀疏的问题。

总的参数量的统计放一页自己做的PPT
在这里插入图片描述
这里对Embedding层做一些解释:

首先,为了避免做one-hot向量与映射矩阵C的非常稀疏的向量运算,实际输入的是单词序列的index序列。
例如单词 “I” 在词典(大小为|V|)中的index是10,单词 “am” 的 index 是23,“Bengio” 的 index 是65,则句子“I am Bengio”的index序列就是 10, 23, 65。
通过 C 矩阵完成映射,C 矩阵参数个数为 |V| * m,它就是look-up table
取出第10、23、65行向量拼成3 × m的矩阵就是Embedding层的输出了,这个思想也为word2vec所继承。
注意输入是要拉平的,矩阵大小为 3 m × 1 3m \times 1 3m×1

W可选为零(如果不需要从词向量到输出的直接连接),b和d都是对应层大小的biases。

NNLM达到了5-gram,但参数量远小于N-gram所需 ∣ V ∣ 5 |V|^5 V5

现在来思考一下为什么NNLM可以work呢?
原文是这样描述的
In the previous example, if we knew that dog and cat played similar roles (semantically and syntactically), and similarly for (the,a), (bedroom,room), (is,was),(running,walking), we could naturally generalize (i.e. transfer probability mass)
from
The cat is walking in the bedroom
to
A dog was running in a room
and likewise to The cat is running in a room
A dog is walking in a bedroom
The dog was walking in the room


and many other combinations.
In the proposed model, it will so generalize because “similar” words are expected to have a similar feature vector, and because the probability function is a smooth function of these feature values, a small change in the features will induce a small change in the probability. Therefore, the presence of only one of the above sentences in the training data will increase the probability, not only of that sentence, but also of its combinatorial number of “neighbors” in sentence space (as represented by sequences of feature vectors).

个人的理解是,因为“相似”的单词,如"cat"和"dog","the"和"a"会具有相似的特征向量(在向量空间上距离近),并且因为输出的概率函数是这些词向量的平滑函数,所以词向量的小变化将导致输出条件概率的小变化。因此,在训练数据中只出现上述句子中的一个,不仅会增加该句子的预测概率,还会增加其句子空间中,那些由组成该句的词的相似词所组成的句子(所谓neighbors)的预测概率。因为句子是由词向量的序列所表示的。

NNLM总结

NNLM的两个主要贡献:

  • 使用神经网络构建N元模型,基于相似词语解决数据稀疏的问题。
  • 开创性地给出了一种训练词向量的方法,即将模型的第一层特征映射矩阵当做词的分布式表示,直接启发了后来的 word2vec 。

NNLM的不足:

  • 计算复杂度过大
  • NNLM 虽然将 N-Gram 的阶 n 提高到了 5,相比原来的统计语言模型是一个很大的进步,但是为了获取更好的长程依赖关系,5 显然是不够的。
  • NNLM 只对词的左侧文本进行建模,得到的词向量不能充分表征语义。

3. Word2vec

引入

2003年Bengio提出NNLM后,NLP研究人员对NNLM做出了多种改进,但没有取得非常惊艳的效果,直到2013年Word2vec的横空出世。它解决的问题是如何在一个大型数据集上快速、准确地学习出词的向量表示?
传统的NNLM模型包含四层,即输入层、映射层、隐含层和输出层,计算复杂度很大程度上依赖于映射层到隐含层之间的计算,而且需要指定上下文的长度。考虑到大部分复杂性是由模型中的非线性隐藏层引起的,Word2vec论文中研究者决定探索更简单的模型,这些模型可能无法像神经网络那样精确地表示数据,但可能可以更有效地进行训练。

要注意Word2Vec中的模型和NNLM和RNNLM目的不同的。

  • 后者更加专注于解决语言模型的问题,词向量只是其副产品
  • 前者更加专注于解决词向量的问题,在保证准确率的情况下,尽量提高计算效率

CBOW和Skip-Gram

Word2vec论文提出了两种模型,CBOW和Skip-Gram,代表训练词向量的两种方式。
在这里插入图片描述
无论CBOW 还是 Skip-Gram,本质上都是两个全连接层的相连,隐层的激活函数是线性的。
下面对比NNLM与Word2vec的参数量
在这里插入图片描述
在这里插入图片描述
相比NNLM ,Word2vec参数量已经大大减小,且与上下文所取词的个数无关,避免了 N-gram 中随着阶数 N 增大计算复杂度急剧上升的问题。
注:RNNLM模型被提出用来改进NNLM模型,去掉了映射层,只有输入层、隐含层和输出层,计算复杂度来源于上一层的隐含层到下一层隐含层之间的计算。

CBOW最简单的情况:One-word context

在这里插入图片描述
将文本中相邻的两个词分别作为输入和输出,比如输入“今天”,期望输出“天气”。
这个模型中有两个全连接层,分别用矩阵W和W’表示
输入是一个one-hot向量(实际还是用lookup-table的方式)
比如现在输入一个词 x 的 one-hot向量[1,0,0,…,0],则在输入层到隐含层的权重里,只有对应 1 这个位置的权重被激活,这些权重的个数,跟隐含层节点数是一致的,从而这些权重组成一个向量来表示x。
在这里插入图片描述
因为每个词语的 one-hot encoder 里面 1 的位置是不同的,所以,这个向量就可以用来唯一表示 x。
这个操作等效于取出W中的一行。

当模型训练完后,最后得到的其实是神经网络的权重。

W的每一行是输入层的相关字的N维向量表示。
(其实word2vec中有两种词向量,输入向量和输出向量,分别存在输入矩阵W的行和输出矩阵W’的列中)
一般取输入向量为词的向量表示
在这里插入图片描述

推广至Multi-word context

CBOW和Skip-Gram是上面模型的推广形式。
CBOW的输入矩阵W是共享的,输出层为一个分类器,目标是使当前词的概率最大。Skip-gram模型与CBOW的输入跟输出恰好相反,输入层为当前词向量,输出层是使得上下文的预测概率最大,输出矩阵W’是共享的
它们的训练都采用SGD。
放一页自己做的PPT
在这里插入图片描述
具体的反向传播过程的推导可见笔记:文档:word2vec学习(带公式及反向传播推导过…

Word2vec得到的词向量

原论文使用谷歌新闻语料库来训练单词向量。
在这里插入图片描述
word2vec训练出的词向量,具有以下特点:

  • 具有相似语义的词的向量在空间上相近。
  • 词向量之间的代数运算可以用来回答词之间非常微妙的语义关系。

例如,要找到和“small”词义相近,并且能形成“big”——“biggest”这种语感的词,可以通过如下公式,计算出一个向量,然后搜索向量空间中最近的向量代表的词。
在这里插入图片描述
在这里插入图片描述
原论文中的模型(Skip-gram model trained on 783M words with 300 dimensionality)训练出的词向量,满足上图中的词间的语义关系。
“罗马是意大利的首都。”和“柏林是德国的首都。”这两句话除去首都,国家词汇的上下文语义很接近,可能让训练出来的词向量相近。

为了评估词向量的质量,论文中定义了一个测试集,包含5种语义和9种语法问题。
在这里插入图片描述
如何生成训练问题呢?思路和上面找词向量的思想是一致的。

  1. 手动创建一个相似单词对的列表。
  2. 通过连接两个单词对形成一个大的问题列表。
    举例来说,中国的每个省和省会,可以组成23个单词对。随机抽取两对形成问题。
    假设抽取了“湖北-武汉”和“湖南-长沙”这两个单词对
    计算“湖北”-“武汉”+“长沙”的向量,去找最接近的单词,看是不是“湖南”。

词向量的性能探究

原论文对不同模型训练出的词向量做了大规模的对比测试,这里只列几个主要结论。
Skip-gram和CBOW模型在semantic和syntactic两个维度上进行相似度测试时表现远好于nnlm和rnnlm。
CBOW架构在语法任务上比NNLM更好,在语义任务上也差不多。最后,Skip-gram架构在语法任务上比CBOW模型稍差(但仍然比NNLM模型好),在测试的语义部分比所有其他模型好得多。
在这里插入图片描述

几个优化方法

Hierarchical SoftMax

上面提到的基本模型结构,在实际运算中效率不高,在每一次更新输出矩阵𝑊^′(size为𝐷×𝑉 )的时候都需要做全量更新。
在这里插入图片描述
首先将词典中的每个词按照词频大小构建出一棵 Huffman 树,保证词频较大的词处于相对比较浅的层,词频较低的词相应的处于 Huffman 树较深层的叶子节点,每一个词都处于这棵 Huffman 树上的某个叶子节点。
将原本的一个 |V| 分类问题变成了 log |V| 次的二分类问题
Hierarchical Softmax公式推导

Negative Sampling

在这里插入图片描述

参考文献

1. 论文

【1】A Neural Probabilistic Language Model
【2】Efficient Estimation of Word Representations in Vector Space
【3】Distributed Representations of Words and Phrases and their Compositionality
【4】word2vec Parameter Learning Explained

2. 讲解教程

【5】深度长文:NLP的巨人肩膀(上)
【6】108 Spring - Applied Deep Learning, National Taiwan University
【7】Word2Vec Tutorial - The Skip-Gram Model

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值