神经网络与深度学习 笔记(七)自然语言处理NLP

一、序列数据与文本处理

1. 序列模型

序列数据是按照时间顺序排列的数据集合,可以是文本、音频、视频、时间序列等,这些数据在连续的时间步中具有相关性和顺序性,因此传统的模型很难直接处理这种类型的数据,序列模型的设计就是为了解决这些问题。

  • 特点和用途:
    • 处理序列数据的能力: 序列模型能够有效地处理序列数据,利用数据之间的时间顺序和相关性来进行预测、分类、生成等任务。
    • 捕捉时间依赖关系: 序列模型能够捕捉数据之间的时间依赖关系,即当前时刻的输出受到前面时刻的输入或状态的影响。
    • 应用于多种任务: 序列模型可以应用于多种任务,如语言建模、机器翻译、文本生成、情感分析、音频处理、时间序列预测等。
    • 记忆能力: 很多序列模型具有一定的记忆能力,能够利用过去的信息来影响未来的输出,例如循环神经网络(RNN)中的隐状态。
    • 处理变长序列: 序列模型可以处理不同长度的序列数据,因为它们的结构能够自适应不同长度的输入。

2. 数据预处理

  • 特征编码
    • One-Hot 编码: 对于分类变量,可以使用 One-Hot 编码将其转换为二进制向量,每个特征值对应一个唯一的索引位置,只有对应特征值的位置为1,其他位置为0。
    • 标签编码(Label Encoding): 对于有序分类变量,可以使用标签编码将其转换为整数,使得不同特征值之间存在大小关系。
    • 数值型特征处理: 对于数值型特征,可能需要进行归一化或标准化,以确保不同特征的数值范围相似。
    • 时间序列特征提取: 对于时间序列数据,可以提取各种统计特征,如均值、方差、最大值、最小值等,以及时间相关的特征,如时间间隔、季节性等。
  • 文本处理
    • 分词(Tokenization): 将文本数据分割成单词或者子词的序列。分词可以基于空格、标点符号或者语言的语法规则进行。
    • 单词嵌入(Word Embeddings): 将分词后的单词转换为密集的低维向量表示。常用的单词嵌入方法包括 Word2Vec、GloVe 和 FastText。
    • 停用词去除(Stopwords Removal): 去除文本中的常见停用词,如 “and”, “the”, “a” 等,这些词往往对文本分析任务的结果影响较小。
    • 词干提取(Stemming)和词形还原(Lemmatization): 将单词转换为它们的词干或基本形式,以减少词汇的变形形式。例如,“running” 可以转换为 “run”。
    • 文本向量化: 将经过分词和词嵌入后的文本转换为数值向量,可以使用词袋模型(Bag of Words)、TF-IDF 等方法。
    • 序列填充(Padding): 对于长度不同的序列数据,可以通过填充或截断使它们具有相同的长度,以便输入到模型中。
    • 其他文本预处理技术: 根据具体任务的需要,还可以进行其他文本预处理技术,如拼写校正、实体识别、语言模型等。

3. 文本处理与词嵌入

文本处理

一篇文章可以被简单地看作一串单词序列,甚至是一串字符序列。 我们将解析文本的常见预处理步骤。 这些步骤通常包括:

将文本作为字符串加载到内存中。
将字符串切分为词元(如单词和字符)。
建立一个字典,将拆分的词元映射到数字索引。
将文本转换为数字索引序列,方便模型操作。

第一步:读取数据集
以H.G.Well的时光机器为例,从中加载文本。 这是一个相当小的语料库,只有30000多个单词,而现实中的文档集合可能会包含数十亿个单词。如Chatgpt包含65T数据
在这里插入图片描述
词汇切分
将原始文本以文本行为单位进行切分
在这里插入图片描述
第三步:构建词索引表
打印前几个高频词及索引
在这里插入图片描述
将每一条文本行转换成一个数字索引列表
在这里插入图片描述

文本嵌入

如何将词映射成向量?
直接想法:使用之前所述的独热向量
在这里插入图片描述
问题:维数过高→解决方案:

  • 词嵌入(word embedding),将独热向量映射为低维向量
    在这里插入图片描述
  • 映射参数矩阵
    在这里插入图片描述
  • 词嵌入训练效果
    在这里插入图片描述
    准确率74%(测试集),不好不差

二、循环神经网络

1. RNN模型

用RNN建模序列数据
输入:The cat sat on the mat
在这里插入图片描述

  • 问题
    随着输入的增加,会产生“遗忘”问题
    在这里插入图片描述

2. 误差反传

每个时间步的隐状态和输出可以写为:
在这里插入图片描述
通过一个目标函数在所有𝑇个时间步内评估输出 o t o_{t} ot和对应的标签 y t y_{t} yt之间的差异:
在这里插入图片描述
按照链式法则:
在这里插入图片描述
h t h_{t} ht既依赖于 h t h_{t} htℎ𝑡−1,又依赖于 w h w_{h} wh , 其中 h t − 1 h_{t-1} ht1的计算也依赖于 w h w_{h} wh。因此,用链式法则产生:
在这里插入图片描述
使用下面的公式移除上式的循环计算:
在这里插入图片描述
截断时间步:可以在𝜏步后截断上式中的求和计算

三、门控循环单元(GRU)

门控循环单元(Gated Recurrent Unit, GRU)是一种循环神经网络(RNN)的变体,旨在解决长期依赖问题和梯度消失问题,由Cho等人于2014年提出。

  • 基本思想:不是每个观察都同样重要
    1. 门控机制: GRU引入了门控机制来控制信息的流动,这些门控机制有助于模型学习长期依赖关系。与长短期记忆网络(LSTM)类似,GRU也有遗忘门和更新门,但其结构更加简单。
    2. 更新门(Update Gate): GRU中的更新门决定了在当前时间步,模型将多少来自前一个时间步的信息保留下来。更新门的值在0到1之间,它们通过一个sigmoid激活函数生成。当更新门接近1时,大部分过去的状态信息被保留,而当它接近0时,则意味着大部分过去的状态信息被遗忘。
    3. 重置门(Reset Gate): 重置门决定了在当前时间步,模型将如何考虑先前的信息。重置门的作用是控制过去状态的遗忘程度,从而允许模型更灵活地适应不同的时间序列结构。
    4. 候选状态(Candidate State): 在每个时间步,GRU会计算一个候选状态,该状态是根据当前输入和前一个状态生成的。候选状态会结合更新门的信息和先前的状态信息。
    5. 更新状态: 最后,根据更新门和候选状态,GRU会计算出当前时间步的隐藏状态。更新门控制了过去的信息如何被整合到当前的状态中,从而使模型能够更好地适应长期依赖关系。
  • 基本结构
    在这里插入图片描述
    训练结果(The time machine):和RNN对比
    在这里插入图片描述

四、LSTM

长短期记忆网络(Long Short-Term Memory, LSTM)是一种特殊类型的循环神经网络(RNN),旨在解决传统RNN中的梯度消失和梯度爆炸等问题,以便更好地处理长期依赖关系。
结构:

  1. 记忆单元(Memory Cell): LSTM引入了记忆单元的概念,这是一种能够记住信息的特殊结构。记忆单元会保留一段时间内的信息,并且可以通过门控机制来控制信息的流动。
  2. 门控机制: LSTM通过门控单元来控制信息的输入、输出和遗忘。这些门包括遗忘门、输入门和输出门,它们具有可学习的权重,通过sigmoid函数生成0到1之间的值,用于控制信息流动的程度。
    在这里插入图片描述
  3. 遗忘门(Forget Gate): 遗忘门决定了在当前时间步,模型将保留多少来自前一个时间步的状态信息。遗忘门的值为0到1之间,当门接近0时,意味着大部分过去的状态信息被遗忘,而当门接近1时,则意味着大部分过去的状态信息被保留。
    在这里插入图片描述
  4. 输入门(Input Gate): 输入门决定了在当前时间步,模型将保留多少来自当前输入的信息。输入门的值为0到1之间,它控制了新信息与先前状态的整合程度。
    在这里插入图片描述
  5. 候选状态(Candidate State): 在每个时间步,LSTM会计算一个候选状态,该状态是根据当前输入和前一个状态生成的。候选状态是未经筛选的信息,它会结合遗忘门和输入门的信息。
  6. 输出门(Output Gate): 输出门决定了在当前时间步,模型将输出多少信息到下一个时间步。输出门的值为0到1之间,它控制了当前状态的哪些部分将被输出。
    在这里插入图片描述
    在这里插入图片描述
  • 总结
    参数量是RNN的4倍
    输入输出和RNN相同
    在这里插入图片描述

五、Transformer

1. 是什么

将Transformer模型看成是一个黑箱操作。在机器翻译中,就是输入一种语言,输出另一种语言。
在这里插入图片描述
由编码组件、解码组件和它们之间的连接组成。编码组件部分由6个编码器(encoder)叠在一起构成。解码组件部分也是由相同数量的解码器(decoder)组成的:
在这里插入图片描述
所有的编码器在结构上都是相同的,但它们没有共享参数。每个解码器都可以分解成两个子层。从编码器输入的句子首先会经过一个自注意力(self-attention)层,这层帮助编码器在对每个单词编码时关注输入句子的其他单词。 自注意力层的输出会传递到前馈神经网络中。每个位置的单词对应的前馈神经网络都完全一样。
在这里插入图片描述
解码器中也有编码器的自注意力层和前馈层。除此之外,这两个层之间还有一个注意力层,用来关注输入句子的相关部分:
在这里插入图片描述

2. 编码

词嵌入:在NLP中,将每个输入单词通过词嵌入算法转换为词向量。每个单词都被嵌入为512维的向量,我们使用方框格子来表示这些向量。
在这里插入图片描述
编码器接收向量列表作为输入,接着将向量列表中的向量传递到自注意力层进行处理,然后传递到前馈神经网络层中,将输出结果传递到下一个编码器中。
在这里插入图片描述

3. 注意力机制

如何使用向量计算注意力?

查询、键与值向量

计算自注意力的第一步就是从每个编码器的输入向量(每个单词的词向量)中生成三个向量。也就是说对于每个单词,我们创造一个查询向量、一个键向量和一个值向量。这三个向量是通过词嵌入与三个权重矩阵后相乘创建的。
在这里插入图片描述
计算自注意力的第二步是计算得分。为这个例子中的第一个词“Thinking”计算自注意力向量,需要拿输入句子中的每个单词对“Thinking”打分。这些分数决定了在编码单词“Thinking”的过程中有多重视句子的其它部分。
在这里插入图片描述
第三步和第四步是将分数除以8(8是论文中使用的键向量的维数64的平方根,这会让梯度更稳定。这里也可以使用其它值,8只是默认值),然后通过softmax传递结果,使得到的分数都是正值且和为1
在这里插入图片描述
第四步是将每个值向量乘以softmax分数(为了准备之后求和)。这里的直觉是希望关注语义上相关的单词,并弱化不相关的单词(例如,让它们乘以0.001这样的小数)。
第五步是对加权值向量求和然后即得到自注意力层在该位置的输出(在我们的例子中是对于第一个单词)
在这里插入图片描述
总结:所有步骤合并为以下公式:
在这里插入图片描述

多头注意力机制

增加 “多头”注意力机制,在两方面提高了注意力层性能:
扩展了模型专注于不同位置的能力;给出了注意力层的多个“表示子空间”
在这里插入图片描述
“多头”注意力机制计算:需八次不同的权重矩阵运算,我们就会得到八个不同的Z矩阵。
在这里插入图片描述
总结
在这里插入图片描述

六、拓展:大语言模型

大语言模型通常指的是具有大量参数和较大规模的训练数据的语言模型。这些模型能够处理和生成更加复杂和准确的文本,具有更高的语言理解和生成能力。一些著名的大语言模型包括GPT(Generative Pre-trained Transformer)系列模型,如GPT-3、GPT-4等,以及BERT(Bidirectional Encoder Representations from Transformers)等。

特点

  1. 大规模参数: 大语言模型通常具有数十亿甚至数百亿的参数量级,这使得模型能够学习到更多的语言知识和语言模式。
  2. 大规模训练数据: 大语言模型通常是在庞大的文本数据集上进行训练的,包括互联网上的大量文本、书籍、文章、新闻等。这样的数据规模有助于模型学习到更广泛和更准确的语言知识。
  3. 更高的语言理解和生成能力: 大语言模型能够更好地理解和处理复杂的语言结构、语义和语境,并且能够生成更加准确和流畅的文本。这使得大语言模型在自然语言处理任务中取得了显著的性能提升。
  4. 更广泛的应用: 大语言模型在各种自然语言处理任务中都有广泛的应用,包括语言建模、文本生成、文本分类、命名实体识别、情感分析、机器翻译等。

大模型的训练

  • 阶段一:无监督预训练
    无监督预训练技术分为两个阶段,分别是语言模型预训练和掩码语言模型预训练。语言模型预训练的目标是预测下一个单词的概率,掩码语言模型预训练的目标是根据输入的部分文本预测掩码位置上的单词。
    在这里插入图片描述
  • 阶段二:有监督训练微调技术
    微调技术是ChatGPT实现对话生成的关键技术之一,它可以通过在有标注数据上进行有监督训练(人为问题回答),从而使模型适应特定任务和场景。微调技术通常采用基于梯度下降的优化算法,不断地调整模型的权重和偏置,以最小化损失函数,从而提高模型的表现能力。
  • 阶段三:
    奖励模型训练
    一个奖励模型(RM)的目标是刻画模型的输出是否在人类看来表现不错。即,输入[提示(prompt),模型生成的文本] ,输出一个刻画文本质量的标量数字。用于训练奖励模型的Prompt数据一般来自于一个预先富集的数据集,比如Anthropic的Prompt数据主要来自Amazon Mechanical Turk上面的一个聊天工具;OpenAI的Prompt数据则主要来自那些调用GPT API的用户。
    在这里插入图片描述
    强化学习语言模型训练
    基于前面提到的预先富集的数据,从里面采样prompt输入,同时丢给初始的语言模型和我们当前训练中的语言模型(policy),得到俩模型的输出文本 y 1 , y 2 {y}_{1},{y}_{2} y1y2然后用奖励模型RM对 y 1 、 y 2 {y}_{1}、{y}_{2} y1y2打分,判断谁更优秀。打分的差值便可以作为训练策略模型参数的信号。有了这个reward,可以使用PPO算法更新模型参数。
    在这里插入图片描述
  • 11
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以通过构建一个基于自然语言处理神经网络模型,对笔记本程序里的记录内容进行自学习。通常来说,这种模型可以使用深度学习的技术,例如循环神经网络(RNN)、长短期记忆网络(LSTM)等。 具体来说,可以采用以下步骤: 1. 数据预处理:将笔记本程序里的记录内容进行清理和标准化,例如去除停用词、标点符号等,并将文本转化为向量表示。 2. 构建神经网络模型:可以使用已经训练好的预训练模型,也可以自己构建模型。常见的模型包括循环神经网络(RNN)、长短期记忆网络(LSTM)等。 3. 模型训练:使用已经标注好的数据进行模型训练,可以采用梯度下降等优化算法。 4. 模型评估:使用测试数据对模型进行评估,通常可以使用损失函数、准确率等指标来评估模型性能。 5. 模型应用:使用训练好的模型对新的笔记内容进行预测。 需要注意的是,自然语言处理是一个复杂的任务,涉及到语法、句法、语义等多个方面,因此构建一个性能良好的神经网络模型需要耗费大量的时间和精力。同时,模型训练需要大量的计算资源和数据集,因此需要谨慎选择算法和数据集,以提高模型的性能和泛化能力。 总之,可以通过构建一个基于自然语言处理神经网络模型,对笔记本程序里的记录内容进行自学习,但需要注意模型构建的复杂性和计算资源的需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值