【HUAWEI】HCIP-AI-MindSpore Developer V1.0 | 第五章 自然语言处理原理与应用(2 自然语言处理关键技术) | 学习笔记

目录

[第五章 自然语言处理原理与应用](#第五章 自然语言处理原理与应用)

[2 自然语言处理关键技术](#2 自然语言处理关键技术)

[■ 词向量](#■ 词向量)

[▲ 为什么需要词向量?](#▲ 为什么需要词向量?)

[▲ 如何使用词向量?](#▲ 如何使用词向量?)

[▲ 如何表示词?-离散符号表示](#▲ 如何表示词?-离散符号表示)

[▲ 如何表示词?-分布式语义表示](#▲ 如何表示词?-分布式语义表示)

[▲ 如何表达词的语义?](#▲ 如何表达词的语义?)

[▲ Word2Vec](#▲ Word2Vec)

[◎ Word2Vec: Skip-gram (SG)](#◎ Word2Vec: Skip-gram (SG))

[◎ Word2Vec: Continuous Bag of Words (CBOW)](#◎ Word2Vec: Continuous Bag of Words (CBOW))

[▲ Glove: 统计count方法与直接预测方法的结合](#▲ Glove: 统计count方法与直接预测方法的结合)

[▲ fastText: 充分利用字符ngram信息](#▲ fastText: 充分利用字符ngram信息)

[▲ 词向量评估](#▲ 词向量评估)

[◎ 内部评估](#◎ 内部评估)

[◎ 外部评估](#◎ 外部评估)

[▲ 预训练 or 随机初始化?](#▲ 预训练 or 随机初始化?)

[■ 文本分类](#■ 文本分类)

[▲ 文本分类方法](#▲ 文本分类方法)

[▲ 传统统计方法](#▲ 传统统计方法)

[▲ 深度学习方法-TextCNN](#▲ 深度学习方法-TextCNN)

[▲ 深度学习方法-TextRNN](#▲ 深度学习方法-TextRNN)

[▲ 深度学习方法-BERT](#▲ 深度学习方法-BERT)

[■ 序列标注](#■ 序列标注)

[▲ 中文分词](#▲ 中文分词)

[▲ 词性标注](#▲ 词性标注)

[▲ 命名实体识别](#▲ 命名实体识别)

[▲ 序列标注方法](#▲ 序列标注方法)

[◎ CRF](#◎ CRF)

[■ 语言模型与文本生成](#■ 语言模型与文本生成)

[▲ 语言模型](#▲ 语言模型)

[▲ 语言模型应用](#▲ 语言模型应用)

[▲ N-Gram语言模型](#▲ N-Gram语言模型)

[▲ 固定窗口神经网络语言模型](#▲ 固定窗口神经网络语言模型)

[▲ RNN语言模型](#▲ RNN语言模型)

[▲ 双向RNN语言模型](#▲ 双向RNN语言模型)

[▲ 语言模型用于生成词向量](#▲ 语言模型用于生成词向量)

[▲ ELMo - Embeddings from Language Model](#▲ ELMo - Embeddings from Language Model)

[▲ BERT - Bidirectional Encoder Representations from Transformers](#▲ BERT - Bidirectional Encoder Representations from Transformers)

[■ 序列到序列与注意力机制](#■ 序列到序列与注意力机制)

[▲ 序列到序列](#▲ 序列到序列)

[▲ 序列到序列应用](#▲ 序列到序列应用)

[▲ 基于RNN的机器翻译](#▲ 基于RNN的机器翻译)

[▲ 注意力机制](#▲ 注意力机制)

[▲ Transformer](#▲ Transformer)

[■ 预训练模型](#■ 预训练模型)

[▲ BERT模型](#▲ BERT模型)

[▲ BERT, GPT, ELMo对比](#▲ BERT, GPT, ELMo对比)

[▲ BERT预训练任务](#▲ BERT预训练任务)



第五章 自然语言处理原理与应用

2 自然语言处理关键技术

■ 词向量

为什么需要词向量?

词向量 在自然语言处理(NLP)中扮演着核心角色,它们++++将词语从符号表示转化为空间中的向量++++,这一转化过程极大地提升了NLP系统的性能和效率。以下是词向量在NLP中不可或缺的几个主要原因:

语义表示 :词向量能够捕获词语的语义信息,将词语的含义转化为数值表示。例如,"dog"和"cat"在语义上比"table"更接近,这种语义关系在词向量空间中可以通过向量间的距离或角度来量化。

维度降解 :文本数据本质上是高维的,每一个词都可以视为一个维度。词向量通过将词嵌入到较低维度的向量空间中,实现了维度的降解,这++++不仅减少了计算资源的需求,还促进了模型的训练和优化++++。

解决同义词问题:在传统的词袋模型中,"quick"和"fast"被视为两个完全不同的词,但在词向量空间中,这两个词的向量会非常接近,因为它们在语义上是高度相关的。这有助于NLP系统更好地理解文本中的同义词和近义词。

处理未知词 :词向量模型,如FastText ,通过字符n-gram 的方法能够为词典中不存在的词生成向量表示,从而++++解决了处理稀有词和拼写错误词的问题++++。

词关系捕捉:词向量能够捕捉词与词之间的关系,如类比关系("king"之于"queen"就像"man"之于"woman")。这种关系在词向量空间中表现为向量之间的算术操作,为词义推理提供了可能。

型泛化能力:词向量通过预训练在大量文本数据上,能够学习到丰富的语言知识,这些预训练的词向量可以迁移到不同的NLP任务中,如文本分类、情感分析、机器翻译等,显著提高了模型的泛化能力和任务性能。

加速模型训练 :使用预训练的词向量作为特征输入,可以显著加快NLP模型的训练速度,因为词向量已经包含了丰富的语义信息,模型不需要从头学习这些基础的语言特征。

总之,++++词向量是连接符号文本数据和数值计算模型的桥梁++++,它们通过将词语转化为具有语义意义的数值表示,极大地提升了NLP系统的性能、效率和泛化能力,是现代NLP技术的基础和核心。

如何使用词向量?

词向量可以通过预训练模型获得,如**++++Word2Vec、GloVe、FastText、BERT++++**等,也可以通过自训练的方式,使用自己的语料库训练词向量。预训练的词向量通常可以从开源社区或模型发布者的网站上下载。

如何表示词?-离散符号表示

OneHot ,独热编码 ,是一种用离散符号来表示词向量的方法。++++向量的长度++++ 为词汇表中总的词数

如何表示词?-分布式语义表示

分布式语义 表示:每个单词不再是完全正交的 0-1 向量,而是在多维实数空间中的一个点,具体表现为一个实数向量。很多时候,也会把单词的这种分布式表示叫做**++++词嵌入( Word Embedding )++++**。

如何表达词的语义
Word2Vec
Word2Vec: Skip-gram (SG)

++++中 心 词++++ 来 预 测 周 围 的 词 。 在 Skip-gram 中,会利用周围的词的预测结果情况,使用梯度下降来不断的调整中心词的词向量,最终所有的文本遍历完毕之后,也就得到了文本所有词的词向量。

Skip-gram 示例

Word2Vec: Continuous Bag of Words (CBOW)

用**++++周围词++++**预测中心词,利用中心词的预测结果情况,使用梯度下降等方法,不断的去调整周围词的向量。当训练完成之后,每个词都会作为中心词,把周围词的词向量进行了调整,这样也就获得了整个文本里面所有词的词向量。

Word2Vec:损失函数

两组向量

Word2Vec 问题与改进

Glove : 统计count方法与直接预测方法的结合

GloVe (Global Vectors for Word Representation)是一种用于生成词向量的模型,它结合了**++++全局统计信息(如单词共现矩阵)++++** 和**++++局部预测信息++++** ,以学习词汇的分布式表示。GloVe的目标是捕获词汇的语义和语法属性,使得词向量不仅反映词汇的含义,而且还能体现词汇之间的关系,如词义相似性、类比关系等。

GloVe的统计Count方法

GloVe模型的第一步是构建单词共现矩阵,这涉及到统计语料库中单词两两出现的频率。共现矩阵的元素( X_{ij} )表示单词( i )和单词( j )一起出现在同一上下文窗口内的次数。这种全局统计信息反映了词汇在语料库中的分布特性,以及词汇之间的关联强度。

GloVe的直接预测方法

在统计了共现矩阵后,GloVe通过最小化一个目标函数来学习词向量,该目标函数旨在预测单词( i )的上下文中出现单词( j )的概率。

结合统计与预测

GloVe的独特之处在于它结合了统计Count方法(通过共现矩阵反映词汇的全局分布)和直接预测方法(通过目标函数最小化预测误差来学习词向量)。这种结合方式使得GloVe既能捕获词汇的全局语义特征,又能考虑到局部上下文的预测能力,从而生成高质量的词向量。

GloVe的优势

全局与局部信息的结合:GloVe通过共现矩阵捕获了词汇的全局分布特性,同时通过目标函数考虑了局部上下文的预测能力,这使得GloVe词向量在词汇关系的捕捉上更加准确和丰富。

词义相似性和类比关系 :GloVe词向量在反映词汇之间的相似性和类比关系方面表现优异,能够很好地支持诸如词汇相似度计算和词汇类比推理等NLP任务。

灵活的训练策略:GloVe提供了多种训练策略和参数设置,可以根据不同的语料规模和任务需求调整模型,以获得最佳的词向量表示。

总之,GloVe通过巧妙地结合统计Count方法 直接预测方法,生成了既反映词汇全局分布又考虑局部上下文的词向量,为自然语言处理任务提供了强大的基础表示。

fastText: 充分利用字符ngram信息

FastText 是Facebook AI Research Lab开发的一种高效的文本分类和词向量 学习工具。FastText的一个显著特点是它能充分利用字符n-gram信息来处理未知词和捕捉词内部的语义特征,这使得FastText在处理稀有词、拼写错误的词以及多语言文本时具有显著优势。

字符n-gram的概念

n-gram是一种在自然语言处理中常用的技术,++++用于捕获序列中连续的n个元素(如字母、单词)的统计特性++++字符n-gram指的是由连续的n个字符组成的子串。例如,单词"cat"的3-gram(即3字符的n-gram)包括"c", "a", "t", "ca", "at", "cat"。

FastText如何利用字符n-gram

词向量表示 :FastText为每个词构建向量表示时,除了考虑整个词的向量外,还会将词分解成一系列的字符n-gram,并为每个n-gram分配一个向量。词的最终向量表示是++++其所有n-gram向量的加权平均++++。

处理未知词 :当遇到词典中不存在的词时,++++FastText可以通过词的字符n-gram向量来推断该词的向量表示++++,这使得模型能够处理稀有词和拼写错误的词。

跨语言迁移学习 :由于++++字符n-gram不受词典限制++++,FastText能够通过共享字符n-gram向量在不同语言间进行知识迁移,这在多语言文本分类和词向量学习中非常有用。

捕捉词内部结构:字符n-gram能够捕捉词内部的结构信息,如词缀、词根和复合词的组成,这对于理解和区分具有相似拼写但意义不同的词(如"bat"和"bate")非常有帮助。

FastText的优点

灵活性:FastText能够处理词汇表之外的词,提高了模型对未知词的适应能力。

鲁棒性:对于拼写错误或变形的词,FastText能够通过字符n-gram捕捉到词的基本信息,从而保持词向量的准确性。

多语言支持:FastText通过字符n-gram的共享,能够轻松地在不同语言间迁移,适用于多语言环境下的文本处理任务。

总之,FastText通过++++利用字符n-gram信息++++ ,不仅增强了模型对词汇的表达能力,还提高了模型处理未知词和多语言文本的灵活性和鲁棒性,这使得FastText在文本分类、词向量学习等多种自然语言处理任务中表现出色。

词向量评估
内部评估

相似度任务:计算两个词的相似度。比如数据集 wordsim353 。

类比任务:经典的 King - Queen = Man - Woman 。

外部评估

以实际任务的指标来评价词向量的好坏。如命名实体识别、机器翻译、文本分类等。

预训练 or 随机初始化?

■ 文本分类

▲ 文本分类方法
▲ 传统统计方法
▲ 深度学习方法-TextCNN

TextCNN 是一种使用++++卷积神经网络++++ 对文本进行分类的模型。文本在经过词嵌入 后被送入神经网络,与 CNN 不同的是, TextCNN 的卷积操作用在一维 数据上。TextCNN 提取的特征类似++++N-gram 模型++++,是词的局部关系。

▲ 深度学习方法-TextRNN

TextRNN (Text Recurrent Neural Network)是一种利用循环神经网络(Recurrent Neural Network, RNN)处理文本数据的方法,主要用于文本分类、情感分析、语义理解等自然语言处理任务。TextRNN能够捕捉文本中的序列信息和上下文依赖关系,是深度学习在文本处理领域的基本模型之一。

TextR NN的基本结构

嵌入层(Embedding Layer) :文本数据通常由单词序列组成,嵌入层将每个单词转换为固定长度的向量表示,即词向量。词向量可以是预先训练好的(例如:Word2Vec、GloVe)或在训练过程中学习得到。

循环层(Recurrent Layer) :RNN单元(如LSTMGRU )负责处理嵌入层输出的词向量序列。RNN单元能够记住序列中的历史信息,并将其与当前输入结合,++++生成包含上下文信息的状态向量++++。

池化层(Pooling Layer) :为了提取文本的全局特征,TextRNN通常使用池化操作(如Max PoolingAverage Pooling),将RNN输出的序列状态向量压缩为固定长度的向量。

全连接层(Fully Connected Layer) :池化后的向量通过全连接层进行分类,通常会加入Dropout 层防止过拟合,最后通过激活函数(如Softmax)输出类别概率。

TextRNN的特点

序列建模:TextRNN能够建模文本序列中的时间依赖关系,捕捉词序信息和上下文依赖,这对于理解语义至关重要。

记忆能力 :使用LSTMGRU 等具有记忆单元的RNN结构,TextRNN能够处理长序列数据,缓解了普通RNN的长期依赖问题。

可扩展性:TextRNN的结构可以叠加多层,形成更深的网络,以增强模型的表达能力和拟合能力。

TextRNN的局限性

序列长度限制:RNN处理长序列数据时容易遭受梯度消失或爆炸问题,影响训练效果。

计算效率:由于RNN的序列依赖性,TextRNN在训练和推理时通常不能进行并行计算,效率较低。

缺乏注意力机制:传统的TextRNN模型可能难以区分文本中的重要和次要信息,这限制了其在复杂文本理解任务中的性能。

应用与改进

为了克服TextRNN的一些局限性,研究者提出了多种改进模型,如双向RNN(Bi-RNN)带有注意力机制的RNN(Attention-based RNN) 、以及结合卷积神经网络(CNN)的混合模型(如TextCNN+RNN) 。这些模型在保持RNN序列建模能力的基础上,++++引入了更高效的计算方式和更精细的信息筛选机制++++,进一步提高了文本处理任务的能力。

▲ 深度学习方法-BERT

BERT(Bidirectional Encoder Representations from Transformers)是谷歌于2018年发布的一种基于Transformer架构的预训练深度学习模型,它彻底改变了自然语言处理(NLP)领域的范式。BERT的主要创新点在于其双向的预训练机制和强大的语言理解能力,它能够生成高质量的词嵌入,捕捉词汇在上下文中的复杂语义,从而在广泛的NLP任务上取得突破性的性能。

BERT的关键特性

双向编码:BERT采用了双向的Transformer编码器,这意味着它能够同时利用上下文信息来理解词汇的意义。传统的语言模型通常基于单向的序列处理(如左至右或右至左),而BERT打破了这一限制,使得模型能够更全面地理解词汇在句子中的语境。

预训练与微调 :BERT通过大规模未标注文本的预训练阶段来学习通用的语言表示,然后再针对特定的下游任务进行微调。这种++++预训练-微调++++的策略允许BERT在几乎所有的NLP任务上达到或超越当时的最先进水平,而不需要重新训练整个模型。

Masked Language Model :BERT引入了Masked Language Model(MLM)任务,这是一种随机屏蔽句子中某些词汇并预测这些词汇的方法。通过这种方式,BERT能够在预训练阶段学习到词汇的上下文相关表示,而不仅仅是统计上的共现模式。

Next Sentence Prediction:除了MLM任务,BERT还使用了Next Sentence Prediction(NSP)任务来预测两个句子是否连贯。这有助于模型学习句子级别的语义关系,进一步增强了其语言理解能力。

BERT的应用

BERT在发布后迅速成为了NLP领域的基石模型,它在问答、情感分析、文本分类、命名实体识别、语义解析等多种任务上都展现出了卓越的表现。通过微调BERT模型,研究人员和工程师能够快速地将最先进的NLP技术应用到实际问题中,极大地推动了NLP领域的发展。

■ 序列标注

++++序列标注++++,即对每一个输入xi ,都有对应的标签 yi。

▲ 中文分词

中文分词( Chinese Word Segmentation ):指的是将一个汉字序列切分成一个个单独的词。分词就是将连续的字序列按照一定的规范重新组合成**++++词序列++++**的过程。

▲ 词性标注

词性标注( Part-Of-Speech tagging, POS tagging ):是指为句子的分词结果中的每个单词标注一个正确的词性 的程序,也即确定每个词是名词、动词、形容词或者其他词性的过程。词性标注 是很多 NLP 任务的预处理步骤,如句法分析、信息抽取,经过词性标注后的文本会带来很大的便利性,但不是不可或缺的步骤

▲ 命名实体识别

命名实体识别 ( Named Entity Recognition, NER )为自然语言处理( NLP )的基础任务之一,其目标是++++提取文本中的命名实体并对这些实体进行分类++++,比如人名、地名、机构、时间、货币和百分比等。

▲ 序列标注方法
CRF

条件随机场( Conditional Random Field , CRF )取消了 隐马尔科夫模型( Hidden Markov Model , HMM )的两个独立假设 ,把标签转移和上下文输入都当做全局特征之一,再全局进行概率归一化,解决了 HMM 的标签偏置和上下文特征缺失问题。

CRF-概率计算

CRF-特征

BiLSTM + CRF

LSTM ( Long Short Term Memory )是循环神经网络( RNN )的一种变种, BiLSTM 是指++++双向的 LSTM 网络++++, BiLSTM 相对于传统的 CRF 算法,可以更有效的学习上下文特征,无需手工设计特征,同时也能处理更长的上下文依赖。

BiLSTM + CRF 是被广泛验证并使用的用于实体识别的深度学习架构。

BiLSTM + CRF 里的 CRF 并不是指传统的 CRF 算法,这里只是用于学习标签转移特征并进行全局维特比解码的一个神经网络层。

■ 语言模型与文本生成

▲ 语言模型

给定一些词序列,预测最有可能的下一个词是什么。

▲ 语言模型应用

搜索推荐、代码补全、输入法补全等等。

▲ N-Gram语言模型

利用n 元模型 ( n -gram model )估算条件概率,即忽略距离大于等于n 的上文词的影响,因此若用频数计数的比例来计算n元条件概率可表示为:

▲ 固定窗口神经网络语言模型
▲ RNN语言模型
▲ 双向RNN语言模型

考虑了左右两边的上下文。

不能用于文本生成。

▲ 语言模型用于生成词向量

静态 vs 动态

▲ ELMo - Embeddings from Language Model

e.g. given "潮水 退了 就 知道 谁 没穿 裤子"

▲ BERT - Bidirectional Encoder Representations from Transformers

■ 序列到序列与注意力机制

▲ 序列到序列

序 列 到 序 列 ( Sequence-to-sequence, 简 称 Seq2Seq ) 是 一 种 由 双 向 RNN 组 成 的encoder-decoder 神经网络结构,从而满足++++输入输出序列长度不相同的情况++++,实现一个序列到另一个序列之间的转换。

▲ 序列到序列应用

机器翻译、语音识别、图片描述生成。

▲ 基于RNN的机器翻译

信息瓶颈问题

所有输入的信息都经由++++最后一个输入对应的隐层向量++++ 传递给解码器,在遇到较长的上下文输入时,特征的表达能力有限

▲ 注意力机制

全局Attention与局部Attention

Attention机制对比

▲ Transformer

Transformer: Attention is All You Need

Transformer 是谷歌的研究人员提出的一种全新的模型, Transformer 在被提出之后,很快就席卷了整个自然语言处理领域。与循环神经网络等传统模型不同, Transformer 模型仅仅使用一种被称作自注意力机制的方法和标准的前馈神经网络,完全不依赖任何循环单元或者卷积操作 。自注意力机制的优点在于可以直接对序列中任意两个单元之间的关系进行建模,这使得长距离依赖等问题可以更好地被求解。

Transformer 也可以当作一种表示模型,因此也被大量地使用在自然语言处理的其他领域,目前非常流行的 BERT 等预训练模型就是基于 Transformer 。

Transformer整体结构

Encoder

自注意力实现

多头注意力

输入层编码

位置编码

Layer Normalization

Decoder结构

Masked Attention

■ 预训练模型

在计算机视觉领域中,迁移学习通常是通过使用预训练模型来实现的。预训练模型是在大型基准数据集上训练的模型,用于解决相似的问题。这样的方法目前已被广泛的应用到了NLP领域。预训练模型的应用通常分为两步:

用大规模语料训练出一个较好的模型;

根据不同的任务,改造预训练模型,用新任务的数据集在预训练模型上进行微调。

▲ BERT模型
▲ BERT, GPT, ELMo对比

BERT基于Transformer的Encoder部分,GPT基于Transformer的Decoder部分,ELMo则基于LSTM;

GPT进行的是单向语言模型的训练 ,而BERT想要构造一个深层双向语言模型,ELMo则使用独立训练的从左到右和从右到左的LSTM;

GPT和BERT都是在已经训练好的模型基础上进行模型微调,而ELMo则是将训练好的词向量作为特征输入到下游任务中,因此是Feature-based

▲ BERT预训练任务

BERT 基于两种任务进行预训练: ++++Masked Language Model ( MLM )++++ 和++++Next Sentence Prediction( NSP )++++ 。BERT 为了使模型具备双向的能力,但又需要防止双向模型在预测某个 token 的时候已经提前知晓了该词的信息,采用了类似完形填空的方式,即 MLM 。 MLM 中简单地随机掩盖( mask )掉一定比例的输入 token (这些 token 被替换成 [MASK] 这个特殊 token ),然后训练的目标预测这些被遮盖掉的 token 。

MASK 细节

随机掩盖 15% 的 token ;

并不是简单的替换为 [MASK] ,而是 80% 的概率替换为 [MASK] , 10% 概率不替换, 10% 概率替换为随机的一个 token 。

一些重要的 NLP 任务如 Question Answering ( QA )需要理解句子之间的关系,而这种关系通常不会被语言模型直接捕捉到。为了使得模型能够理解句子之间的关系, BERT 中采用一个二分类的Next Sentence Prediction 任务进行预训练。

具体的做法是:当选择句子 A 和句子 B 作为训练数据时,句子 B 有 50% 的几率的确是句子 A 的下一句(标签是 IsNext ), 50% 的几率是从语料库中随机选择的句子(标签是 NotNext )。 [CLS] (特殊符号用于标记输入语句的开头)对应的最后一个隐层输出向量被用来训练 NSP 任务。

例子:

Input: [CLS] the man want to [MASK] store [SEP] he bought a gallon [MASK] milk

Label: IsNext
Input: [CLS] the man want to [MASK] store [SEP] penguin [MASK] are flight ## less birds [SEP]

Label: NotNext

说明:本文内容来源于网络,仅作为学习用途,如有侵权,请联系作者删除。

相关推荐
White-Legend17 分钟前
耗时一天,我用AI开发了AI小程序
人工智能·小程序
Jackilina_Stone39 分钟前
【HUAWEI】HCIP-AI-MindSpore Developer V1.0 | 第五章 自然语言处理原理与应用(3 And 4) | 学习笔记
人工智能·笔记·学习·计算机视觉·华为·自然语言处理·huawei
RacheV+TNY2642781 小时前
未来趋势:电商平台API接口的智能化与自动化发展
网络·人工智能·python·自动化·api
写点什么呢1 小时前
Pytorch学习12_最大池化的使用
人工智能·pytorch·python·深度学习·学习·pycharm
澄澈i1 小时前
设计模式学习[15]---适配器模式
c++·学习·设计模式·适配器模式
致Great1 小时前
Agentic RAG 解释
人工智能·自然语言处理·大模型·rag
hellocode_1 小时前
现场展示deepseek VS openAI o1模型大对比
人工智能·gpt·ai·chatgpt
denghai邓海1 小时前
用OpenCV实现UVC视频分屏
人工智能·opencv·音视频
Yunlord1 小时前
(六)优化 ChatGPT 交互:任务式 Prompt 的力量
人工智能·深度学习·chatgpt·prompt
魔都天健1 小时前
STLG_02_03_MS SQL - 主要组件、历史和版本
开发语言·数据库·sql·学习