Tag Archives: NLP

CS224N(3.14)Future of NLP + Deep Learning

今天是该课程的最后一节课,介绍了使用未标注数据集进行NLP学习的方法,以及谈了谈NLP未来的发展方向。下面主要介绍使用未标注数据集进行NLP学习的方法。

我们知道,在机器翻译领域,特别缺少标注好的语料集。目前世界上有上千种语言,但用得最多的只有十几种。对于那些使用人数很少的语言,它们和其他语言之间标注好的翻译句子就更少了。如何使用少量标注集,甚至不用标注集,就能实现机器翻译功能,是NLP领域一个很有前景的发展方向。

之前的很多工作使用pre-training来提高机器翻译模型的性能。具体方法是,先在源语言和目标语言的语料集上分别训练一个语言模型,这是无监督的,这个语言模型可以学到不同词的含义。然后在翻译模型中,用源语言的语言模型初始化Encoder权重,用目标语言的语言模型初始化Decoder权重。使用pre-training的模型相比于不使用pre-training的模型的BLEU大概有2分的提高。

Pre-training的问题是,由于预训练是在两种语言上独立进行的,两种语言在预训练期间没有交互过程。

Continue reading

CS224N(3.5)Multitask Learning

今天介绍NLP中的多任务学习。

我们知道预训练和参数共享在CV中很重要,很多模型都会在ImageNet上预训练,然后迁移到具体的任务中进行微调。这种方式能够成功的原因是很多CV任务几乎都是以分类为基础任务,分类相当于CV的积木(building block),所以在ImageNet上训练的CNN分类模型迁移到其他CV任务中能起到很好的提升效果。

NLP中虽然也有一些预训练模块,比如预训练词向量,然后用到具体的NLP任务中,但也仅仅是将词向量作为下游模型的输入。在NLP中,并没有一个基础模型(包括模型的结构、权重等),能把整个基础模型迁移到下游任务进行微调,现在都是针对不同的问题设计专门的网络结构,比如POS、NER、NMT等,处于不同任务各自为政的局面。

Continue reading

CS224N(2.26)Coreference Resolution

今天介绍的内容是指代消解(Coreference Resolution)。指代(mention)是指句子中出现的名词、名词短语、代词等,指代消解就是把指向同一实体(entity)的指代聚类到一起的过程。比如下面的两句话,蓝色的词就是很多的指代,需要找出来哪些指代是指向同一个实体。比如Barack Obama、his、He都是指奥巴马。

下面的例子是比较简单的情况,事实上,在真实的语言中,情况更加复杂,比如有些指代可能表示多个实体。比如“他们”,可能同时指代了“小明”和“小王”,这种指代对于现在的NLP模型来说比较难,暂时不考虑。

Continue reading

CS224N(2.21)Transformers and Self-Attention For Generative Models

今天介绍大名鼎鼎的Transformer,它于2017年出自谷歌的论文《Attention Is All You Need》(https://arxiv.org/pdf/1706.03762.pdf),用Attention实现机器翻译模型,并取得了新的SOTA性能。

传统的机器翻译模型一般是结合RNN和Attention,可以看我之前的博客介绍:CS224N(1.31)Translation, Seq2Seq, Attention。虽然RNN+Attention的组合取得了不错的效果,但依然存在一些问题。由于RNN是序列依赖的模型,难以并行化,训练时间较长;且当句子很长时由于梯度消失难以捕捉长距离依赖关系。虽然相继推出的LSTM和GRU能一定程度上缓解梯度消失的问题,但这个问题依然存在。而且LSTM和GRU难以解释,我们根本不知道当前timestep依赖远的词多一点还是近的词多一点。

Transformer的思想很激进,它完全抛弃了RNN,只保留Attention,从其论文标题可见一斑。RNN无法并行化的根本原因是它的正向和反向传播是沿着句子方向(即水平方向),要想实现并行化,肯定不能再走水平方向了。于是,Transformer完全抛弃水平方向的RNN,而是在垂直方向上不断叠加Attention。由于每一层的Attention计算只和其前一层的Attention输出有关,所以当前层的所有词的Attention可以并行计算,互不干扰,这就使得Transformer可以利用GPU进行并行训练。

Continue reading

CS224N(2.14)Subword Models

今天介绍一下subword(子词)模型。之前介绍的NLP模型都是基于word的,对于英文来说是一个个单词,对于中文来说是一个个词语(需要分词)。不过,最近几年,subword模型多起来了,这就是我们今天要介绍的内容。

对于英文来说,文字的粒度从细到粗依次是character, subword, word,character和word都很好理解,subword相当于英文中的词根、前缀、后缀等,如unfortunately中的un、ly、fortun(e)等就是subword,它们都是有含义的。对于中文来说,只有两层,character和subword是同一层,表示单个的字,而word表示词语。

Continue reading

CS224N(2.12)Convolutional Networks for NLP

今天我们介绍如何使用CNN解决NLP问题。截止目前,我们学习了很多RNN模型来解决NLP问题,由于NLP是序列的问题,使用RNN这种循环神经网络是很符合直觉的,而且也取得了不错的效果。但是,由于RNN速度较慢,而且梯度消失问题比较严重,人们就想借用CV领域的CNN,看是否能解决NLP的问题。

我们在之前的博客中已经详细介绍过卷积神经网络CNN,这里不再详细介绍。下面我们以一篇paper中使用CNN对句子进行情感分类为例,简要介绍下怎样将CNN应用到NLP中。

Continue reading

CS224N(2.7)Question Answering

这节课的内容比较简单,是问答系统(Question Answering, QA)的入门介绍。

首先,为什么需要QA?目前各大搜索引擎对于一个查询,给出的都是一个结果列表。但是很多查询是一个问题,答案也往往比较确定,比如“现任美国总统是谁?”,此时,返回一堆结果列表就显得太过啰嗦了,尤其是在手机等移动设备上搜索时,简单的给出回答也许会更好一些。另一方面,智能手机上的助手如Siri、Google Now之类的,用户期望的也是简洁的答案,而不是一堆网页列表。

QA系统的组成主要有两个部分,一部分是根据问题检索到相关的文档,这部分是传统的信息检索的内容;另一部分是对检索到的文档进行阅读理解,抽取出能回答问题的答案,这部分就是本文要介绍的QA系统。

QA的历史可追溯到上世纪七十年代,但真正取得突破性进展也就是最近几年。2015/2016年,几个大规模QA标注数据集的发表,极大的推动了这个领域的发展。这其中比较有名的数据集是斯坦福大学发布的Stanford Question Answering Dataset (SQuAD)。

Continue reading

CS224N(1.31)Translation, Seq2Seq, Attention

今天介绍另一个NLP任务——机器翻译,以及神经网络机器翻译模型seq2seq和一个改进技巧attention。

机器翻译最早可追溯至1950s,由于冷战的需要,美国开始研制由俄语到英语的翻译机器。当时的机器翻译很简单,就是自动从词典中把对应的词逐个翻译出来。

后来在1990s~2010s,统计机器翻译(Statistical Machine Translation, SMT)大行其道。假设源语言是法语$x$,目标语言是英语$y$,机器翻译的目标就是寻找$y$,使得$P(y|x)$最大,也就是下图的公式。进一步,通过贝叶斯公式可拆分成两个概率的乘积:其中$P(y)$就是之前介绍过的语言模型,最简单的可以用n-gram的方法;$P(x|y)$是由目标语言到源语言的翻译模型。为什么要把$P(y|x)$的求解变成$P(x|y)*P(y)$?逐个击破的意思,$P(x|y)$专注于翻译模型,翻译好局部的短语或者单词;而$P(y)$就是之前学习的语言模型,用来学习整个句子$y$的概率,专注于翻译出来的句子从整体上看起来更加通顺、符合语法与逻辑。所以问题就转化为怎样求解$P(x|y)$。

Continue reading

CS224N(1.29)Vanishing Gradients, Fancy RNNs

梯度消失

今天介绍RNN的梯度消失问题以及为了解决这个问题引出的RNN变种,如LSTM何GRU。

上一篇博客中,通过公式推导,我们已经解释了RNN为什么容易产生梯度消失或梯度爆炸的问题,核心问题就是RNN在不同时间步使用共享参数$W$,导致$t+n$时刻的损失对$t$时刻的参数的偏导数存在$W$的指数形式,一旦$W$很小或很大就会导致梯度消失或梯度爆炸的问题。下图形象的显示了梯度消失的问题,即梯度不断反传,梯度不断变小(箭头不断变小)。

Continue reading

CS224N(1.24)Language Models and RNNs

今天要介绍一个新的NLP任务——语言模型(Language Modeling, LM),以及用来训练语言模型的一类新的神经网络——循环神经网络(Recurrent Neural Networks, RNNs)。

语言模型就是预测一个句子中下一个词的概率分布。如下图所示,假设给定一个句子前缀是the students opened their,语言模型预测这个句子片段下一个词是books、laptops、exams、minds或者其他任意一个词的概率。形式化表示就是计算概率

\begin{eqnarray}P(x^{(t+1)}|x^{(t)},...,x^{(1)})\tag{1}\end{eqnarray}

$x^{(t+1)}$表示第$t+1$个位置(时刻)的词是$x$,$x$可以是词典$V$中的任意一个词。

Continue reading