自然语言处理学习——CS224课程笔记

自然语言处理学习——CS224课程笔记

第一部分:词向量(Lecture 1)

对于自然语言处理问题,涉及到的基本处理单元是一个个单词(英文为单词,中文为词汇),将单词表示成计算机能够理解的符号是解决自然语言处理问题的基础。词向量就是目前发展出的分布式表示单词语义信息的关键方法。在正式介绍词向量之前,先介绍一下其它几种表示单词和文档的方法。

1. one-hot编码方式与词袋模型(bag of words)

one-hot编码是一种离散式的单词表示方式。先综合所有单词,计算单词的数量N,从而建立N维向量,用每个维度的单位向量表示一个单词。比如对于 “I love china”, 使用 [1, 0, 0] 表示 ” I ", 使用 [0, 1, 0] 表示 " love ", 使用 [0, 0, 1] 表示 " china "。one-hot 尽管可以用向量的方式表示单词,但是无法表达出单词之间的关系,同时对于较大的语料库,容易出现表示向量维度过大且过于稀疏的问题。

在 one-hot编码的基础上,可以对文档进行相应的编码。一篇文档由n个单词组成,可以将这n个单词的向量加总得到最终的向量。这样的方法被成为词袋模型(Bag of words)。从根本上开看,词袋模型通过统计各个单词出现的次数来表示一篇文档。词袋模型的问题在于1、没有考虑不同单词之间的关系,2、没有考虑不同单词的相对重要性。对于第二点,实际上,不同单词由于在所有文档中出现的频次不同,因此其对于文档的表示重要性也是不同的,由此进一步发展处理考虑单词重要性信息的TF-IDF方法。

2. TF-IDF

TF表示单篇文档中的词频,IDF表示逆向文档频率。TF考虑了不同单词在数据库中出现的频次不同,通过计算在文档中的”相对出现频率“来表示单词,相当于做了归一化处理。而IDF则考虑了不同单词在各个文档中的分布情况。综合TF-IDF可以更好地表示文档信息。
在这里插入图片描述

3. N-gram方法

N-gram方法考虑了单词的出现顺序。对于一段话而言,不同单词不是随机出现的,而是有很强的相互关系。N-gram 通过建立条件概率模型(马尔可夫模型),计算N个单词同时出现的概率,从而将N个单词作为整体用概率的形式表示出来。N-gram尽管考虑了单词的顺序,然而其序列会随着语料库快速膨胀,并且存在严重的数据稀疏问题。

以上的集中方法都是离散式的表示方法,主要有以下缺点:
(1)无法衡量词向量之间的关系
(2)词表维度随着原料库的增加而膨胀
(3)普遍存在数据稀疏问题

为了解决以上问题,词的分布式表示方法被提了出来。词的分布式表示的基本思想是语义相近的词,对应的词向量也应该相近。Word2Vec 方法是计算分布式词向量的关键方法。

Word2Vec

Word2Vec 利用大量的语料信息将单词表示成词向量,在词向量的生成过程充分利用了语句中的上下文信息,从而使得词向量能够反映出语义信息。Word2Vec可以将one-hot编码的稀疏词向量表示成稠密编码的低维词向量,并使得词向量具有语义信息。有两种处理方式:CBOW (continuous bag of words ) 方法和Skipgrams方法。
CBOW通过建立全连接神经网络,使用一段语句中的n-1个词预测剩下的一个词,从而获得该单词对应的隐向量,并将该向量最为词向量。模型结构如下所示。
在这里插入图片描述
Skipgrams 通过建立利用类似的方法来获得词向量。不过神经网络的输入是要表示的单词,而输出则是剩下的n-1个的单词。模型结构如下所示。

在这里插入图片描述
两种方法最后得到的词向量都具有表示语义的功能。语义相近的单词,对应的词向量也相近,从而很好的解决了单词离散表示方法存在的问题。

第二部分:词向量和词义(Lecture 2)

1. 关于word2vec的详细解释

第一部分谈到word2vec的实现有两种方式,Skipgrams和CBOW。两个模型除了使用的输入单词和输出单词不同外,各自对应的模型也不太相同。CBOW结合了神经网络方法和哈夫曼树,采用了一种”级联“的Softmax函数,Skipgrams模型相对而言要简单的多。这里以Skipgrams为例来进行说明。
在这里插入图片描述
对于Skipgrams方法,这的关键是通过神经网络模型学习两个大的矩阵系数,第一个矩阵为图中的W,用来表示单词语义的矩阵(W和onehot词向量相乘后会得到词向量的嵌入式表达),第二个矩阵是图中的W’,用来表示上下文信息的矩阵。onehot形式的词向量进入网络后先后和W, W’相乘,从而得到上下文的单词,这里使用softmax方法进行表示,并利用标记数据(onehot形式)进行训练。训练方法是”万能“的梯度下降法,具体的推导过程在这里不详细展示了。
尽管上述Skipgrams思路在理论上可行,但是在实际操作中依然需要解决很多”工程性“的问题。它包括以下几个方面。1、最后的softmax操作计算量太大,网络更新速度缓慢;2、某些高频词,如the等,会对模型产生不好的影响。解决方法也很简单,对于问题1,可以使用负采样的方法进行解决。这里负采样是指在隐藏层输出V维向量时(V是词库中单词总数),接下来只考虑正确的单词和其它采样的k个单词所对应的维度信息,通过设计所及回归损失函数,只更新和这k+1个维度相关的网络系数,从而大大加快了网络的训练速度。同时这里的在采样其它k个单词时,可以通过各个单词出现的频率或类似函数关系进行操作。对于问题2,直接不考虑包含某些高频词(如the)的训练数据即可。

2. Count-based模型

Word2Vec方法是通过神经网络监督训练的方式直接预测单词的语义矩阵,从而预测词向量。而Count-based模型则通过频率计数的方式表示词向量,其中的典型代表是SVD分解法。
首先可以根据文档内容,确定共现矩阵,如下所示。
在这里插入图片描述
共现矩阵是一个V×V的矩阵(V为词库单词数量),往往非常稀疏。可以通过SVD方法进行降维处理。而计算得到的S矩阵就可以看成是V个单词词向量组合的结果。
以下是Count-based 方法和Word2Vec方法(直接预测方法)的比较:
在这里插入图片描述

3. GloVe算法

GloVe算法据说可以综合Count-based模型和直接预测模型的优点,思路清奇。以下简单介绍以下。
在这里插入图片描述
对于共现矩阵,两个单词同时出现的概率是极低的,也就意味条件概率值很小,难以用于计算。但是同一单词对应的其它不同单词条件概率的比率却可以很高。于是,可以引出建模问题:
在这里插入图片描述
也就是使用词向量的函数来表达贡献概率的比值。更进一步,作者通过分析词向量函数应该满足的关系,直接反推出了词向量函数的表达式。
经过一系列的“推测”,最后显性的表达公式为:
在这里插入图片描述
到这一步就可以通过设立一个损失函数来使得上式尽可能满足,并学习到词向量。损失函数设定为:
在这里插入图片描述
f(x)为权重系数函数。

参考博客: https://blog.csdn.net/wuzhongqiang/article/details/106979179#t0

第三部分:子词模型(Lecture 3)

在做自然语言处理任务时,前文介绍的方法都是以一个单词为基本单元,以词向量的表示和学习为基础。而实际上也可以从另外的角度出发,在语音里面音素就可以作为比单词更基本的单元,实际上在自然语言处理里面也可以选择比单词更小的单元”子词”来作为分析的基础。这里有两种思路,一种思路是以单个字符为单元,建立字符级模型进行进一步的分析处理;另一种思路是建立比字符“大”而比单词“小”的“子词”模型进行分析处理。以下将分别进行介绍。

1. 字符级模型

字符级模型也有两种思路,一种思路是直接以单个字符进行处理,另一种思路是以单个字符为基础表示词嵌入向量,再利用词向量进行后续的分析处理。这两种方法都可以解决“陌生词”的问题。不过相比于直接的词向量模型,字符级模型存在序列长、处理速度慢等问题。
2017年的一篇论文:Fully Character-Level Neural Machine Translation without Explicit Segmentation 是以单个字符表示词向量的经典之作,其思路如下:
在这里插入图片描述
2018年的论文Revisiting Character-Based Neural Machine Translation with Capacity and Compression则展示了纯字符模型的效果。研究发现,在某些复杂的语言中,比如捷克语,字符级模型可以大幅提高翻译准确性,而在简单的语言中,比如英语和法语,字符级模型没有显著的提高。另外,对于较小的模型,单词级模型处理效果较好,而对于较大的模型,字符级模型处理效果较好。

2. 子词模型

除了选择单词和字符作为基本单元,也可以选择介于单词和字符之间的“子词”作为基本单元。子词模型也有两种思路,一种思路是用word pieces来代替word,整体思路和词模型相似;另一种思路是采取单词、字符同时存在的混合模型。混合模型主要包括单词、字符和字符块。其中生成字符块的关键算法叫Byte Pair Encoding算法,以下将进行简单介绍。
在这里插入图片描述
BPE的基本思想是先以单个字符词典,然后使用n-gram方法将频率最高的字符串加入到词典中,通过不断重复这样的过程来扩充词典。最后以词典里面的“单词”为基本单元进行处理。
实际上,在实际应用中可以灵活使用单词级模型和子词模型,比如混合两种模型的 Hybrid NMT方法。其核心思想是在输入为正常单词的时候使用单词级进行处理,而在输入为稀有词或者词库中不存在的词时使用字符级模型进行处理。

这里特别提一下fastText方法。fastText方法可以使用“子词”单元来生成嵌入词向量。
在这里插入图片描述
参考博客: https://blog.csdn.net/weixin_42691585/article/details/107009195

第四部分 语义环境词嵌入模型(Contextual Word Embeddings)

前面谈到了对于自然语言处理任务,词向量的学习表示是基础。而对于词向量的学习表示方法,有one-hot编码方式,TF-IDF模式,word2vec, GloVe等方法。这些方法应用在特定任务的训练集上。然而,词向量的事先学习无法解决一词多义的问题。基于语义环境的词嵌入模型由此被提出解决这一问题。语义环境词嵌入模型的核心在于通过具体的上下文语义环境确定词向量,“一句一词一向量”。比较典型的代表有ELMo, GPT, Bert等,以下讲分别进行介绍。

1. ELMo

ELMo(Embeddings from Language Models)利用语言模型通过上下文来确定词向量。在ELMo被提出之前,TagLM被提出了进行语音词嵌入,模型比ELMo简单。其先使用无监督数据预训练词向量和语言模型,接着将词向量和由语言模型得到的单词编码组合作为有标记的序列模型的输入,然后训练有标记的序列模型。其示意图如下:
在这里插入图片描述
ELMo在TagLM的基础上进行了进一步的拓展,采用了更加复杂的模型,其采用两层的Bi-LSTM模型来学习单词的表示。单词的表示既可以是各个隐藏层权重的和,也可以是特定隐藏层的权重。对于较简单的任务,一般选择浅层网络层的系数,而对于较复杂的任务,一般选择深层网络层的系数。ELMo的结构如下所示。
在这里插入图片描述

2. Transformer 与迁移学习

Transformer完全使用注意力机制的模型,不再采用CNN或者RNN的结构,里面的self attention的结构实现了并行计算的功能,其示意图如下。
在这里插入图片描述
Transformer包括encoder和decoder两个部分,由于self attention结构没有考虑到单词的位置信息,所以在模型输入中特意加上了单词的位置信息。对于Transformer的具体结构和功能,这里不做详细介绍。

Howard and Ruder (2018)的论文 Universal Language Model Fine-tuning for Text Classification,提出了使用迁移学习来进行文本分类的方法,并取得了良好的效果。其基本做法是:首先在一个非常大的数据集上(和任务不相关)训练一个语言模型,接着利用任务数据集对该模型进行微调,然后利用该模型在分类任务中进行进一步训练,得到最终结果。迁移学习的引入极大地提高了准确性,成为后来一系列复杂模型的基本处理方法。

3. GPT, Bert, GPT2

GPT, Bert, GPT2等一众模型继承了上文提到的(ULMT)采取的迁移学习的思路。GPT使用了单向结构来对单词进行表示,基本模型为Transformer中的Decoder部分。Bert则使用了双向结构,基本模型为Transformer中的Encoder部分。Bert的训练效果由于GPT。GPT2模型和GPT基本一致,不过有更多的参数,同时在更大的训练集中进行训练,取得了比Bert更优的结果。
最后对语义环境词嵌入各个模型的比较如下:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值