基于深度学习的NLP (Attention机制及Transformer)
1. 自然语言处理NLP的定义与功能
- 自然语言处理是用机器处理人类语言的理论和技术。
- 由于自然语言的多义性、上下文有关性、模糊性、非系统性和环境密切相关性、涉及的知识面广等原因,自然语言处理是困难问题之一。自然语言处理的研究希望机器能够执行人类所期望的某些语言功能,这些功能包括:
- 语言模型:预测下一个词或短语的概率
- 文本分类:根据文本内容进行分类,如情感分析、主题分类等
- 命名实体识别:识别文本中的实体,如人名、地名、组织名等
- 关系抽取:从文本中抽取实体之间的关系
- 机器翻译:将一种自然语言翻译成另一种自然语言
- 文本摘要:从长篇文章中生成短篇摘要
- 问答系统:根据用户的问题提供答案
- 文本生成:根据给定的上下文生成连贯的文本
2. 文本输入向量
2.1 文本表示
- 在CV中,我们通常将输入图片转换为4维(batch, channel, height,weight)张量来表示;
- 在NLP中,基本上都是先将句子分词,然后每个词转化为对应的词向量序列。
- 文本表示的方法有很多,在此介绍两种:
- One-hot Encoding
- Word Embedding
2.2 One-hot Encoding独热编码
2.2.1 表示形式
- one-hot 编码用于将离散的分类标签转换为二进制向量
- 在NLP中,将输入单词用 One-Hot 形式编码成序列向量, one-hot编码在提取文本表征上属于词袋模型(bag of words)。
- 向量长度是预定义的词汇表中拥有的单词量,向量在这一维中的值只有一个位置是1,其余都是0,1对应的位置就是词汇表中表示这个单词的地方

2.2.2 缺点
- One-Hot 的形式看上去很简洁,但劣势在于它很稀疏,而且还可能很长,造成维数灾难。比如词汇表如果有 10k 个词,那么一个词向量的长度就需要达到 10k,而其中却仅有一个位置是1,其余全是0,导致计算和存储的效率都不高。
- 更重要的是,这种方式无法体现出词与词之间的关系。比如 “爱” 和 “喜欢” 这两个词,它们的意思是相近的,但基于 one-hot编码后的结果取决于它们在词汇表中的位置,无法体现出它们之间的关系
2.3 Word Embedding词嵌入
2.3.1 表示
- 我们需要另一种词的表示方法,能够体现词与词之间的关系,使得意思相近的词有相近的表示结果,这种方法即 Word Embedding。
2.3.2 优点
- 可以将文本通过一个低维向量来表达,不像 one-hot 那么长。
- 语意相似的词在向量空间上也会比较相近。
- 通用性很强,可以用在不同的任务中。
2.3.3 设计
- 那么应该如何设计这种方法呢?最方便的途径是设计一个可学习的权重矩阵W,将词向量与这个矩阵进行点乘,即得到新的表示结果(词向量)

2.3.4 分类
- 静态词向量(Static Word Embedding)
- Static Word Embedding训练后,一个Word只对应一个词向量。
- 常用模型:word2vec (CBOW,SkipGram);EM by Matrix factorization;
Glove
- 动态词向量(Contextualized(Dynamic) Word Embedding)
- 动态词向量:一个单词可以学出多个词向量
- 常用模型:CoVe、ELMo

3. Word2vec算法
-
word2vec可以在百万数量级的词典和上亿的数据集上进行高效地训练;其次,该工具得到的训练结果——词向量(word embedding),可以很好地度量词与词之间的相似性
-
word2vec算法的背后是一个浅层神经网络,完成词向量嵌入。Word2vec主要包含两个模型:CBOW和SkipGram模型。CBOW是根据上下文来预测中心单词;SkipGram通过中心词来预测上下文的单词。
-
这种方式在 2018 年之前比较主流,但是随着 BERT、GPT2.0 的出现,这种方式已经不算效果最好的方法了
4. NLP常用框架Encoder-Decoder
-
Encoder-Decoder模型框架(编码器-解码器模型框架)最早在2014年提出,当时是为了解决机器翻译的问题(机器翻译就是一个典型的Seq2Seq问题)而构建的,随后变成了深度学习中常见的模型框架。
-
Encoder将可变长度的输入序列编码成一个固定长度的向量;
-
Decoder将固定长度的向量解码成一个可变长度的输出序列;
-
根据不同的任务可以选择不同的编码器和解码器,可以是CNN,也可以是 RNN ,但通常是其变种 LSTM 或者 GRU
1. 自然语言处理NLP的定义与功能
- 自然语言处理是用机器处理人类语言的理论和技术。
- 由于自然语言的多义性、上下文有关性、模糊性、非系统性和环境密切相关性、涉及的知识面广等原因,自然语言处理是困难问题之一。自然语言处理的研究希望机器能够执行人类所期望的某些语言功能,这些功能包括:
- 语言模型:预测下一个词或短语的概率
- 文本分类:根据文本内容进行分类,如情感分析、主题分类等
- 命名实体识别:识别文本中的实体,如人名、地名、组织名等
- 关系抽取:从文本中抽取实体之间的关系
- 机器翻译:将一种自然语言翻译成另一种自然语言
- 文本摘要:从长篇文章中生成短篇摘要
- 问答系统:根据用户的问题提供答案
- 文本生成:根据给定的上下文生成连贯的文本
2. 文本输入向量
2.1 文本表示
- 在CV中,我们通常将输入图片转换为4维(batch, channel, height,weight)张量来表示;
- 在NLP中,基本上都是先将句子分词,然后每个词转化为对应的词向量序列。
- 文本表示的方法有很多,在此介绍两种:
- One-hot Encoding
- Word Embedding
2.2 One-hot Encoding独热编码
2.2.1 表示形式
- one-hot 编码用于将离散的分类标签转换为二进制向量
- 在NLP中,将输入单词用 One-Hot 形式编码成序列向量, one-hot编码在提取文本表征上属于词袋模型(bag of words)。
- 向量长度是预定义的词汇表中拥有的单词量,向量在这一维中的值只有一个位置是1,其余都是0,1对应的位置就是词汇表中表示这个单词的地方

2.2.2 缺点
- One-Hot 的形式看上去很简洁,但劣势在于它很稀疏,而且还可能很长,造成维数灾难。比如词汇表如果有 10k 个词,那么一个词向量的长度就需要达到 10k,而其中却仅有一个位置是1,其余全是0,导致计算和存储的效率都不高。
- 更重要的是,这种方式无法体现出词与词之间的关系。比如 “爱” 和 “喜欢” 这两个词,它们的意思是相近的,但基于 one-hot编码后的结果取决于它们在词汇表中的位置,无法体现出它们之间的关系
2.3 Word Embedding词嵌入
2.3.1 表示
- 我们需要另一种词的表示方法,能够体现词与词之间的关系,使得意思相近的词有相近的表示结果,这种方法即 Word Embedding。
2.3.2 优点
- 可以将文本通过一个低维向量来表达,不像 one-hot 那么长。
- 语意相似的词在向量空间上也会比较相近。
- 通用性很强,可以用在不同的任务中。
2.3.3 设计
- 那么应该如何设计这种方法呢?最方便的途径是设计一个可学习的权重矩阵W,将词向量与这个矩阵进行点乘,即得到新的表示结果(词向量)

2.3.4 分类
- 静态词向量(Static Word Embedding)
- Static Word Embedding训练后,一个Word只对应一个词向量。
- 常用模型:word2vec (CBOW,SkipGram);EM by Matrix factorization;
Glove
- 动态词向量(Contextualized(Dynamic) Word Embedding)
- 动态词向量:一个单词可以学出多个词向量
- 常用模型:CoVe、ELMo

3. Word2vec算法
-
word2vec可以在百万数量级的词典和上亿的数据集上进行高效地训练;其次,该工具得到的训练结果——词向量(word embedding),可以很好地度量词与词之间的相似性
-
word2vec算法的背后是一个浅层神经网络,完成词向量嵌入。Word2vec主要包含两个模型:CBOW和SkipGram模型。CBOW是根据上下文来预测中心单词;SkipGram通过中心词来预测上下文的单词。
-
这种方式在 2018 年之前比较主流,但是随着 BERT、GPT2.0 的出现,这种方式已经不算效果最好的方法了
4. NLP常用框架Encoder-Decoder
4.1 Encoder-Decoder模型框架
-
Encoder-Decoder模型框架(编码器-解码器模型框架)最早在2014年提出,当时是为了解决机器翻译的问题(机器翻译就是一个典型的Seq2Seq问题)而构建的,随后变成了深度学习中常见的模型框架。
-
Encoder将可变长度的输入序列编码成一个固定长度的向量;
-
Decoder将固定长度的向量解码成一个可变长度的输出序列;
-
根据不同的任务可以选择不同的编码器和解码器,可以是CNN,也可以是 RNN ,但通常是其变种 LSTM 或者 GRU


4.2 Encoder-Decoder架构的缺陷

-
传统Encoder-Decoder 的问题:当输入信息太长时,会丢失掉一些信息。

-
不论输入和输出的长度是什么,中间的「向量 c」 长度都是固定的;
-
y1、y2 和 y3 的计算都是基于同一个 C。这可能并不是最好的方案,因
为输入中不同单词对 y1、y2 和 y3 的影响是不同的
4.3 经典模型:Seq2Seq基础模型
- 在基础的模型中,Decoder的每一次解码又会作为下一次解码的输入,这样就会导致一个问题就是错误累计,如果其中一个RNN单元解码出现误差了,那么这个误差就会传递到下一个RNN单元,使训练结果误差越来越大。

4.4 改进的Seq2Seq模型:Teacher Forcing
- 使用了 Teacher Forcing,不管模型上一个时刻的实际输出的是什么,哪怕输出错了,下一个时间片的输入总是上一个时间片的期望输出。
- 在训练阶段,可以提前把 decoder 的整个输入序列提前准备好,直接放到decoder训练。

5. NLP中的Attention机制
- Attention 是挑重点,就算文本比较长,也能从中间抓住重点,不丢失重要的信息。
5.1 引入注意力机制的Encoder-Decoder框架



浙公网安备 33010602011771号