导图社区 自然语言处理(NLP)
自然语言处理NLP的相关研究内容,发展历程,重点模型和处理手段,进行了梳理。NLP是计算机科学、人工智能和语言学的交叉学科,致力于使计算机能够理解、生成和处理人类语言。它涵盖了广泛的技术和应用,包括语音识别、文本生成、机器翻译、情感分析等。
编辑于2024-08-05 18:20:25《方法论与工程化解决方案》知识总结,本书借助数据仓库实现一套用户画像系统的方案。从实际工程案例出发,结合多业务场景,内容涵盖开发离线批处理计算的标签及流式计算标签,为读者的分析、开发、搭建用户画像系统,并借助该用户画像系统为运营人员制定运营用户的策略提供端到端的解决方案。
数据仓库与数据挖掘相关背景、概念、技术信息梳理,包含1数据资源、2数仓的概念与结构、3数仓的设计与开发、4联机分析处理OLAP、5数据挖掘、6数据预处理、7数据挖掘常用算法等内容。
大数据技术涉及到的中间件和解决方案梳理,思维导图展示了大数据处理流程中的关键组件及其相互关系,从数据采集、存储、处理到分析,涵盖了大数据技术的各个方面。
社区模板帮助中心,点此进入>>
《方法论与工程化解决方案》知识总结,本书借助数据仓库实现一套用户画像系统的方案。从实际工程案例出发,结合多业务场景,内容涵盖开发离线批处理计算的标签及流式计算标签,为读者的分析、开发、搭建用户画像系统,并借助该用户画像系统为运营人员制定运营用户的策略提供端到端的解决方案。
数据仓库与数据挖掘相关背景、概念、技术信息梳理,包含1数据资源、2数仓的概念与结构、3数仓的设计与开发、4联机分析处理OLAP、5数据挖掘、6数据预处理、7数据挖掘常用算法等内容。
大数据技术涉及到的中间件和解决方案梳理,思维导图展示了大数据处理流程中的关键组件及其相互关系,从数据采集、存储、处理到分析,涵盖了大数据技术的各个方面。
自然语言处理(NLP)
1时间线
20世纪50-80年代:早期研究
1950: 图灵测试(Turing Test)提出,标志着机器智能的早期概念形成。 1957: Chomsky的生成语法理论(Generative Grammar)提出,为形式语言学和计算语言学奠定了基础。 1964: ELIZA开发,早期的自然语言处理程序,能够模拟与人类的对话。
1990年代:统计方法的兴起
1990年代初: 隐马尔可夫模型(HMM) 被广泛应用于语音识别和部分自然语言处理任务。 1998: WordNet 发布,是一个大型的英语词汇数据库,成为许多NLP任务的重要资源。
2000年代:机器学习方法的应用
2001: Latent Dirichlet Allocation(LDA) 由David Blei等人提出,是一种生成概率模型,用于主题建模。 2003: Mikolov等人提出的Word2Vec 技术通过Skip-Gram和CBOW模型进行词嵌入学习,开启了词向量表示的研究浪潮。
2010年代前期:深度学习的崛起
2013: Word2Vec 发布,这是一种基于神经网络的词嵌入方法,极大地提升了词表示的能力。 2014: GloVe(Global Vectors for Word Representation)由Pennington等人提出,使用全局词共现信息生成词嵌入。 2014: Sequence-to-Sequence (Seq2Seq) 模型由Google提出,用于机器翻译等任务,标志着深度学习在NLP中的成功应用。 2014: 神经图像描述生成模型 由Vinyals等人提出,结合CNN和RNN生成描述性文本。
2010年代后期:Transformer模型的出现与发展
2017: Transformer模型 由Vaswani等人提出,其"Attention is All You Need"论文标志着完全基于注意力机制的模型的诞生,Transformer消除了对RNN的依赖,极大地提升了并行处理能力和模型表现。 2018: BERT(Bidirectional Encoder Representations from Transformers)由Google提出,通过双向Transformer编码器进行预训练,开启了基于预训练的微调范式,显著提升了NLP任务的效果。 2018: OpenAI GPT(Generative Pre-trained Transformer)发布,展示了基于Transformer架构的生成语言模型的强大能力。 2019: GPT-2 由OpenAI发布,比原先的GPT更大、更强,能够生成高质量的文本,进一步推动了生成语言模型的发展。
2020年代:大规模模型与多模态发展
2020: T5(Text-To-Text Transfer Transformer) 由Google提出,将所有NLP任务统一为文本到文本的转换任务,展示了极强的通用性和性能。 2020: GPT-3 由OpenAI发布,是一个拥有1750亿参数的超大规模语言模型,展示了卓越的生成能力和广泛的应用潜力。 2020: BART(Bidirectional and Auto-Regressive Transformers)由Facebook提出,结合BERT和GPT的特点,用于文本生成和文本摘要任务。 2021: DALL-E 和 CLIP 由OpenAI发布,展示了文本到图像生成和多模态理解的能力,标志着NLP与其他领域的融合。 2021: LaMDA(Language Model for Dialogue Applications)由Google提出,专注于对话理解和生成,推动了对话系统的发展。 2022: Chinchilla 和 Gopher 是DeepMind提出的超大规模语言模型,在许多NLP任务上达到了新的性能基准。 2023: ChatGPT(基于GPT-4)发布,进一步提升了对话生成和理解的能力,并在众多应用中得到广泛使用。
2预训练是什么
1图像领域的预训练
卷积神经网络(CNN),一般用于图片分类任务。CNN 由多个层级结构组成,不同层学到的图像特征也不同。发现:越浅的层学到的特征越通用,越深的层学到的特征和具体任务的关联性越强。深度训练一个多层的CNN模型所需要的数据需求量特别大。
对于一个模型训练任务B,在数据量较少时,可以利用前任已训练好的与任务A相似的模型。 方式1-冻结:模型A的浅层参数保持不变,高层参数随机初始化,使用少量训练数据训练确定高层参数; 方式2-微调:一开始,模型A的浅层参数保持不变,高层参数随机初始化,然后使用少量数据进行训练,训练过程中亦对浅层参数进行调整。
2预训练思想
有两个相似的任务:任务 A 和任务 B。针对于任务 B 预先训练好了模型 B。 在对任务 A 对应的模型 A 进行训练时,模型的参数不再是随机初始化的,而是利用模型 B 的参数对模型 A 进行初始化,再通过任务 A 的数据对模型 A 进行调整训练。
3语言模型
1做什么用
实现两种计算: 1.计算词语序列组成合法句子的概率(即评估是否为一句话); 2.根据上下文,将一段不完整的句子进行补全。
2解决方案
基本任务
分词(Tokenization)
将文本拆分成单个词语或子词单位
词性标注(Part-of-Speech Tagging)
给每个词分配相应的词性标签,如名词、动词等
命名实体识别(Named Entity Recognition, NER)
识别文本中的专有名词,如人名、地名、日期、机构名等。
共指消除(Co-reference)
识别出文本中的代词,明确代词所指的是现实中的什么实体。
句法分析(Syntactic Parsing)
分析句子的句法结构,构建语法树
依存关系解析(Dependency Parsing)
分析句子中词语之间的依存关系
常见模型及策略
1.统计语言模型
概述
使用计算条件概率方式来解决语言模型的两个问题。通过分析大量文本数据中词语出现的频率和共现关系,来预测词序列的概率分布,从而评估句子的合理性或生成新句子。
原理说明
统计语言模型的核心思想是基于概率论,通过分析大规模的文本数据,估计词语序列的概率。例如,给定一个词序列W1,W2,...,Wn,语言模型的目标是估计该序列出现的联合概率P(W1,W2,...,Wn)。
常见模型
N-gram模型
原理
基于词语序列的历史信息,使用固定窗口大小(如3-gram,即前面两个词固定的情况下出现当前词的概率,类似的还有2-gram、4-gram)来预测下一个词语的概率。该模型的局限于以下前提:1)一个词出现的概率只受它前面词的影响,因此无法理解词与词互相之间的相似度有什么影响。2)这个词需要存在于词库当中,否则概率值无法算
平滑策略
对于未纳入词库中的词,考虑其概率计算的异常处理
优点
简单有效:n-gram模型简单、易于理解和实现,在特定的应用场景中(如早期的语音识别和机器翻译)效果不错。 数据驱动:统计语言模型利用大规模的文本数据,能够自动捕捉语言中的一些规律,避免了大量的手工特征工程。 计算效率高:n-gram模型通过有限的上下文进行预测,计算复杂度相对较低,适合实时应用。
缺点
数据稀疏性问题:由于n-gram模型依赖于固定的上下文长度,在大规模语料中依然存在一些词组或句子从未出现过的问题,导致模型无法正确估计这些词序列的概率。 上下文局限:n-gram模型仅考虑固定长度的上下文,忽略了更长距离的依赖关系,难以捕捉复杂的语言结构。 计算复杂度问题:随着n值的增加,n-gram模型的参数空间急剧膨胀,导致计算和存储资源的需求显著增加。 无法处理未见词:对于未在训练语料中出现过的词汇,统计语言模型无法处理,这使得模型的泛化能力受限。
应用场景
1文本生成:利用统计语言模型,可以生成具有语法和语义合理性的句子或段落。这在自动文本生成、对话系统中有广泛应用。 2机器翻译:在统计机器翻译系统中,语言模型用来为目标语言的句子打分,从而选择最合理的翻译结果。 3语音识别:在语音识别系统中,语言模型帮助识别最可能的词序列,尤其是当音频信号不明确时,语言模型可以根据上下文推测词汇。 4拼写纠正:语言模型可以预测最可能的词汇,帮助纠正拼写错误。例如,当用户输入“tihs”时,模型可能推荐将其更正为“this”。
2.神经网络语言模型NNLM
概述
神经网络语言模型(Neural Network Language Model, NNLM)是一种利用神经网络来建模语言的模型,它通过神经网络学习词语的分布式表示(也称为词嵌入或词向量),并基于这些表示来计算词与词之间的距离,从而预测句子或文本的概率。 神经网络语言模型克服了传统统计语言模型的许多局限性,如数据稀疏性和有限的上下文捕捉能力。
神经网络算法NN
概述
人工神经网络算法(Artificial Neural Network)是一类模仿生物神经网络结构和功能的计算模型。
基本结构
神经元(Neuron)
基本单元,模拟生物神经元。接收输入信号并产生输出。
层(Layer)
输入层(Input Layer):接收外部数据。 隐藏层(Hidden Layers):处理和提取特征。 输出层(Output Layer):产生预测结果。
隐藏层为多层的意义
神经网络有多个层(layers),主要是为了提高模型的表达能力和处理复杂任务的能力。每一层可以提取和处理不同层次的特征,从而使网络能够学习和理解数据的复杂模式和结构。以下是多层神经网络的一些关键原因: 1. 特征提取 初级特征:较低层次的神经元通常提取简单特征,如边缘、角点等。 高级特征:较高层次的神经元则逐渐组合这些简单特征,形成更加复杂和抽象的表示,如物体、模式等。 2. 非线性映射 通过使用非线性激活函数(如ReLU、Sigmoid等),多个层次的组合可以表示复杂的非线性关系,使模型能够处理复杂的任务。 3. 模块化设计 每一层可以看作是一个功能模块,负责特定的任务或特征处理。这种分层设计使得模型更加模块化,便于理解和调试。 4. 深度学习能力 增加层数可以增加网络的深度,使得模型能够更好地逼近复杂的函数映射,提高模型的表现力和泛化能力。
权重和偏置(Weights and Biases)
权重决定信号传递的强度,偏置帮助调整输出。
工作原理
1.前向传播(Forward Propagation):输入数据经过神经元层层传递,产生最终输出。 2.激活函数(Activation Function):对每个神经元的输出进行非线性变换,如ReLU、Sigmoid、Tanh。(ReLU函数=max(0, x);Sigmoid函数将负无穷到正无穷的数转换为0到1之间的数;Tanh函数将负无穷到正无穷的数转换为-1到1之间的数) 3.损失函数(Loss Function):衡量模型预测值与真实值之间的差异,如均方误差、交叉熵。 4.反向传播(Backpropagation):计算损失函数相对于各层权重和偏置的梯度,通过梯度下降算法调整权重和偏置,最小化损失函数。
常见类型
前馈神经网络(Feedforward Neural Networks)
最简单的结构,信息单向流动,没有循环。
卷积神经网络(Convolutional Neural Networks, CNNs)
主要用于图像处理,通过卷积层提取空间特征。
循环神经网络(Recurrent Neural Networks, RNNs)
处理序列数据,具有时间记忆能力。包括LSTM和GRU等变种。
生成对抗网络(Generative Adversarial Networks, GANs)
由生成器和判别器组成,用于生成逼真的数据样本。
独热编码
概述
独热编码(One-Hot Encoding)是一种将分类数据转换为数值数据的编码方式,常用于机器学习和深度学习模型的输入预处理。它的主要思想是将每一个类别表示为一个长度为N的二进制向量,其中N是类别的数量。对于一个类别,只会有一个位置的值为1,其余位置的值为0。
作用目的
让计算机能够认识“分类”
示例
假设有一个包含3个类别的特征:“红色”、“绿色”和“蓝色”。使用独热编码后,它们会被转换为: 红色:1, 0 ,0 绿色:0, 1, 0 蓝色:0, 0, 1
应用
1.分类特征处理:将分类变量转换为可以输入到机器学习模型中的数值形式。 2.神经网络输入:在神经网络中,特别是用于分类问题时,独热编码是表示类别标签的一种常见方式。
优缺点
优点
简单直观:易于理解和实现。 避免顺序问题:不同于标签编码(Label Encoding),独热编码不会引入类别之间的顺序关系。
缺点
维度增加:对于类别数很多的特征,独热编码会导致数据维度急剧增加,导致计算和存储的开销增大。 稀疏性:编码后的向量是稀疏的,大部分元素都是0。
向量相似度计算
是什么
向量相似度计算是一种度量两个向量之间相似性的方法,常用于信息检索、推荐系统、自然语言处理等领域。向量相似度计算的目的是确定两个向量在多大程度上相似,从而判断它们表示的对象是否相似。
常见计算方法
余弦相似度
余弦相似度 (Cosine Similarity): 计算两个向量夹角的余弦值,范围在[-1, 1]之间。越接近1,表示两个向量越相似。
欧氏距离
欧氏距离 (Euclidean Distance): 计算两个向量在多维空间中的直线距离。距离越小,表示两个向量越相似。
曼哈顿距离
曼哈顿距离 (Manhattan Distance): 计算两个向量在多维空间中的“城市街区”距离,即各维度差值的绝对值之和。
词嵌入(Word Enbeddings)
神经网络语言模型的一个重要特点是将每个词映射为一个低维的连续向量,即词嵌入。词嵌入可以捕捉词语之间的语义关系,如相似词具有相似的向量表示。 这些词嵌入通常通过在大规模文本数据上训练神经网络来学习,并能在不同任务中迁移使用。
词表示
是什么
"词表示"(Word Representation)指的是将词语转换为机器可以理解和处理的数值向量的过程。词表示是NLP任务的基础,实现了词表示便能够对词语进行相似度计算,进而捕捉词语的语义和上下文信息。
词向量构建方法
1. 词袋模型(Bag of Words, BOW)
将文本表示为词汇表中词语的出现频率向量,忽略词语顺序和上下文
2. 词频-逆文档词频模型 TF-IDF (Term Frequency-Inverse Document Frequency)
在词袋模型基础上,引入词语在文档中的频率和逆文档频率,突出重要词语
3. Word2Vec
概述
Word2Vec是一种用于自然语言处理(NLP)的词嵌入(word embedding)技术。它通过训练一个浅层的神经网络模型来生成词向量,使得语义上相似的词在向量空间中距离更近。
两种架构
连续词袋模型(CBOW)
目标:预测给定上下文词的当前词。 输入:一个窗口大小为 k 的上下文词的集合。 输出:当前词的向量表示。 过程: 1)将输入词的向量求和,形成一个上下文向量; 2)使用上下文向量通过一个神经网络层来预测目标词; 3)通过反向传播算法调整网络权重,使得预测的词向量尽可能接近实际的词向量。
跳字模型(Skip-Gram)
目标:预测给定当前词的上下文词。 输入:一个目标词。 输出:目标词周围的上下文词的向量表示。 过程: 1)将目标词的向量输入到一个神经网络层。 2)预测目标词周围的上下文词。 3)通过反向传播算法调整网络权重,使得预测的上下文词向量尽可能接近实际的上下文词向量。
缺点
1.上下文敏感性不足:Word2Vec生成的词向量是静态的,无法捕捉到词在不同上下文中的多义性。例如,“bank”一词在金融和河岸的上下文中有不同的含义,但Word2Vec生成的向量无法区分这些细微差别。 2.训练数据依赖性:模型的质量高度依赖于训练数据的质量和多样性。如果训练数据不够丰富或者有偏差,生成的词向量可能无法准确反映词的实际用法。 3.窗口大小限制:在Skip-Gram模型中,上下文是通过固定大小的窗口来定义的,这限制了模型捕捉长距离依赖的能力。 4.维度灾难:尽管Word2Vec能够将词嵌入到低维空间中,但随着词汇量的增加,模型的参数数量也会迅速增加,导致计算复杂性上升。 5.语义组合性问题:Word2Vec模型生成的词向量虽然在捕捉词与词之间的关系方面表现良好,但在处理词的组合语义时(如“king”和“man”的组合“kingman”)可能不够精确。 6.稀疏性问题:在大型词汇表中,很多词是非常罕见的,这会导致训练数据中的稀疏性问题,影响模型对这些词的学习。 7.无法捕捉句法信息:Word2Vec模型主要关注词的语义信息,但并不直接捕捉词的句法角色或句法结构。 8.负采样和层次采样的局限性:虽然这些技术可以加速训练过程,但它们可能无法完全捕捉到词向量之间的复杂关系。 9.模型泛化能力:Word2Vec模型通常在特定数据集上训练,可能在新的或不同的数据集上表现不佳。 10.更新和维护成本:随着语言的演变,模型可能需要定期更新以适应新词汇和新用法,这会带来额外的维护成本。
4. ELMo
概述
ELMo(Embeddings from Language Models)是一种先进的词嵌入技术,由Allen Institute for Artificial Intelligence(AI2)的Matt Gardner等人在2018年提出。与Word2Vec等早期的词嵌入方法不同,ELMo使用深度双向语言模型(bi-directional language model)来生成上下文相关的词向量。
特点
上下文相关性:ELMo能够捕捉词在不同上下文中的不同含义,生成上下文相关的词向量。 双向性:ELMo利用双向LSTM(Long Short-Term Memory)网络,可以同时考虑词的前文和后文信息。 深度学习:ELMo模型基于深度学习框架,能够学习更复杂的语言模式。 任务适应性:ELMo生成的词向量可以针对不同的NLP任务进行微调,以更好地适应特定任务的需求。
缺点
计算成本高:模型的计算无法并行,计算成本较高,尤其是在生成词向量时需要进行多次前向传播。 实时性问题:由于计算成本高,ELMo可能不适合需要实时响应的应用场景。 数据依赖性:ELMo模型的质量同样依赖于训练数据的质量和多样性。 模型复杂性:ELMo模型相对复杂,需要更多的参数和调参工作。 更新和维护:随着语言的演变,模型可能需要定期更新和维护以适应新的语言用法。
NNLM原理和流程
原理
词嵌入
1.对所有单词做独热编码,得到单词编码后的表示w
2.准备一个随机矩阵Q(词向量矩阵),作用于w,得到词向量C
3.使用训练数据,训练得到Q的参数权重
神经网络结构
常见的神经网络语言模型包括前馈神经网络(Feedforward Neural Networks)、循环神经网络(Recurrent Neural Networks, RNN)、长短期记忆网络(Long Short-Term Memory, LSTM)和Transformer模型。主要目的是,使用训练数据,得到词语间的前后依赖关系。
概率分布预测
NN输出层通常是一个Softmax层,用于将网络的输出转换为下一个词的概率分布。
流程
1.数据预处理
-文本清理:去除标点符号、特殊字符、大小写统一等。 -分词:将文本切分成词或子词。 -词汇表构建:创建词汇表,分配每个词或子词一个唯一的索引。 -词嵌入初始化:将词汇表中的词映射到词嵌入向量。
2.构建神经网络模型
-嵌入层:将输入词索引转换为词嵌入向量。 -隐藏层:采用RNN、LSTM、GRU或Transformer等网络层进行处理。 -输出层:使用Softmax层输出每个词的概率。
3.损失函数
通常使用交叉熵损失函数(Cross-Entropy Loss)来衡量预测词概率分布与实际词的真实分布之间的差异。
4.优化器
使用梯度下降优化器(如SGD、Adam等)来最小化损失函数。
5.模型训练
-前向传播:将输入数据通过网络,计算预测概率分布。 -损失计算:根据预测结果和实际标签计算损失值。 -反向传播:计算梯度,并更新模型参数。 -迭代训练:重复上述过程,直到模型收敛或达到预定的训练轮数。
6.模型评估
使用验证集或测试集评估模型的性能,常用指标包括困惑度(Perplexity)、准确率等。
CNN和RNN
CNN
概述
卷积神经网络(Convolutional Neural Networks, CNNs)是一类专门用于处理网格结构数据(如图像)的深度学习模型。其主要结构包括卷积层、池化层和全连接层。
关键组件
卷积层(Convolutional Layer)
负责从输入数据中提取特征 应用多个卷积核(滤波器)在输入数据上进行卷积操作,提取特征。 每个卷积核在输入上滑动,计算局部区域的加权和,生成特征图。
激活函数(Activation Function)
常用ReLU(Rectified Linear Unit),引入非线性。
池化层(Pooling Layer)
进行下采样操作,减小特征图的尺寸,减少计算量并控制过拟合。 常用的池化方法包括最大池化(Max Pooling)和平均池化(Average Pooling)。
全连接层(Fully Connected Layer)
类似传统神经网络,将池化层的输出展开成一维向量,进行分类或回归任务。
工作原理
卷积操作:卷积核与输入图像局部区域进行点积运算,生成特征图。 激活:非线性激活函数应用于特征图。 池化:池化操作缩小特征图尺寸,保留重要信息。 全连接:池化层输出连接到全连接层,最终进行分类或其他任务。
优势
局部连接:卷积核局部感受野,减少参数数量,提高训练效率。 参数共享:同一卷积核在不同位置应用,进一步减少参数。 层级结构:多层卷积叠加,逐级提取从低级到高级的特征。
RNN
概述
循环神经网络(Recurrent Neural Networks, RNNs)是一类专门用于处理序列数据的神经网络。与传统神经网络不同,RNN具有循环连接,可以捕捉序列中的时间依赖关系。其结构允许信息通过隐藏层的循环连接在时间步之间传递。
关键特点
时间依赖性:RNN能够处理和记忆序列数据中的时间依赖关系。 共享参数:所有时间步共享相同的参数,减少了模型复杂度。 序列输入输出:能够处理变长的输入和输出序列。
工作原理
在每个时间步,RNN接收当前输入和先前隐藏状态,更新当前隐藏状态。
变形版RNN
为解决RNN中的梯度消失和梯度爆炸问题产生了许多变形版本的RNN
长短期记忆网络LSTM
LSTM通过引入门控机制(输入门、遗忘门、输出门)来控制信息流
门控循环单元
门控循环单元(Gated Recurrent Unit, GRU),包含两个门:更新门(Update Gate,决定保留多少过去的信息)和重置门(Reset Gate,决定丢弃多少过去的信息),相比LSTM,GRU的结构更简单,计算效率更高。
双向RNN
双向循环神经网络(Bidirectional Recurrent Neural Network, Bi-RNN)是一种扩展RNN的架构,旨在更好地捕捉序列数据中的上下文信息。Bi-RNN通过在两个方向上处理序列数据来提高模型的表现,即正向(从前往后)和反向(从后往前)。
缺点
由于RNNs的长序列依赖问题,导致模型计算无法并行,计算效率不高
优缺点
优点
可捕捉复杂的语义关系:通过学习词嵌入和使用深层神经网络,神经网络语言模型能够捕捉到词语之间更复杂的语义关系和上下文依赖。 解决了长距离依赖问题:特别是RNN和Transformer模型,可以处理长距离依赖的问题,而这在传统n-gram模型中是难以实现的。 泛化能力强:词嵌入可以帮助模型在处理未见词或低频词时更好地泛化,从而提高模型的性能。
缺点
训练成本高:神经网络语言模型通常需要大规模的训练数据和高计算资源,训练时间较长,尤其是深度网络和大型模型(如GPT-3、BERT等)。 解释性差:由于神经网络的“黑箱”特性,模型的内部决策过程难以解释,尤其是在复杂任务中,这可能带来挑战。 数据依赖性强:这些模型对训练数据的质量和数量高度敏感,数据偏差可能导致模型偏差。
应用场景
1文本生成:神经网络语言模型可以生成连贯的自然语言文本,用于聊天机器人、故事生成、诗歌创作等。 2机器翻译:如Transformer架构(BERT、GPT、T5等)在神经机器翻译中取得了显著进展,通过上下文捕捉准确翻译结果。 3语音识别和拼写纠错:通过上下文预测,神经网络语言模型能有效地改善语音识别的准确性,并帮助纠正输入错误。 4语言理解和问答系统:用于训练模型理解文本中的复杂语义关系,从而提高自然语言理解和问答系统的性能。
3.注意力机制Attention
概述
Attention思想来源于计算机视觉领域,目的是为了从大量信息中有选择地筛选出少量重要信息并聚焦到这些重要信息上,忽略不重要的信息。 NNs在进行词向量构建时,虽然能将上下文信息编入词向量中,但允许的上下文长度是有限的(如,LSTM在单词超过200时就会失效),而 Attention 机制可以更加好的解决序列长距离依赖问题,并且具有并行计算能力。
Attention
基本概念
注意力权重
注意力机制的核心是为输入序列中的每个元素分配一个权重,表示该元素在当前时刻的重要性。这些权重通常通过一个注意力得分函数来计算。 权重越大,表示该输入元素对当前输出的影响越大。
注意力得分
注意力得分表示查询(query)和键(key)之间的相似性或相关性,通常通过点积、加性模型或其他相似度度量来计算。 点积注意力(Dot-Product Attention):通过计算查询和键向量的点积来得到注意力得分。 加性注意力(Additive Attention):通过将查询和键拼接后经过一个前馈神经网络得到得分。
查询、键和值(Q, K, V)
查询(Query, Q):用于从输入数据中寻找相关信息的向量。在翻译任务中,通常是解码器当前时间步的隐状态。 键(Key, K):与查询进行匹配的向量,表示输入序列中的各个元素。 值(Value, V):对应于键的实际内容或信息,用于生成最终的加权和输出。
加权和
将注意力权重与值向量相乘并求和,得到的结果是对输入序列的加权和。这一加权和表示了模型在生成当前输出时综合考虑的输入信息。
工作流程
说明
1.计算注意力分数:对于序列中的每个元素,模型会计算一个分数,这个分数反映了该元素对于当前任务的相关性。 2.归一化:将计算得到的分数通过softmax函数进行归一化处理,确保所有元素的权重之和为1。 3.加权求和:将归一化后的权重与对应的元素相乘,然后对所有元素进行加权求和,得到最终的输出。
图示
自注意力Self-Attention
概述
自注意力是一种特殊的注意力机制,其中查询、键和值来自同一个序列。 自注意力机制可以捕捉序列中任意位置的依赖关系,是Transformer模型的核心组件。 自注意力允许模型在处理每个位置的元素时,同时考虑整个序列中的所有元素。
特点
1.内部依赖:自注意力机制只使用序列自身的信息来计算注意力权重,而不是依赖于外部的序列。 2.并行计算:由于自注意力机制不依赖于序列中元素的顺序,它可以并行处理序列中的所有元素,这大大提高了计算效率。 3.长距离依赖:自注意力机制能够有效地捕捉序列中任意两个元素之间的关系,无论它们在序列中的位置有多远。 4.可解释性:通过观察自注意力权重,可以直观地了解模型在处理序列时关注的重点。
位置编码
因为自注意力机制本身对序列的顺序不敏感,Transformer模型通过位置编码引入位置信息。位置编码通常是一些固定或可训练的向量,添加到输入的词嵌入中,以保留序列的顺序信息。
与基本Attention的区别
依赖关系
自注意力:模型在计算注意力时只依赖于序列本身的元素。 普通注意力:模型可能依赖于外部的序列信息,例如在机器翻译中,解码器的注意力可能依赖于编码器的输出
计算方式
自注意力:通常使用点积(dot-product)或其他函数来计算序列内部元素之间的相似度,然后通过softmax函数归一化。 普通注意力:可能使用不同的方法来计算注意力权重,例如基于外部序列的特定信息。
应用场景
自注意力:广泛应用于Transformer模型中,用于处理自然语言处理任务,如机器翻译、文本摘要等。 普通注意力:可以应用于各种序列到序列的任务,如机器翻译、语音识别等,其中解码器的输出依赖于编码器的输出。
效率
自注意力:由于可以并行处理,自注意力机制在处理长序列时通常更高效,但计算量会随着输入序列的增大而增大,因为要计算序列中任意一个词与其他所有词关系信息。 普通注意力:可能需要按顺序处理序列,因此在处理长序列时可能会更慢。
灵活性
自注意力:由于其灵活性,自注意力机制可以轻松地捕捉序列内部的复杂模式和长距离依赖。 普通注意力:可能受到外部序列信息的限制,因此在某些情况下可能不够灵活。
掩码自注意力Masked Self-Attention
在处理序列数据(如机器翻译中的解码过程)时,为了防止模型在预测时查看未来的信息,使用掩码来屏蔽未来时间步的输入。 掩码可以应用在注意力得分计算之前,将无效位置的得分设置为负无穷大,确保这些位置不会影响最终的注意力权重。
掩码机制的实现
1.掩码向量:通常,掩码是一个与输入序列同样长度的向量,其中有效数据对应位置的值为1,填充数据对应位置的值为0。 2.掩码操作:在计算注意力分数时,掩码向量会与注意力分数相乘。对于填充位置,由于掩码为0,乘积也为0,这样在应用softmax函数之前,这些位置的注意力分数就已经被消除了影响。 3.负无穷掩码:在某些实现中,填充位置的掩码值可能被设置为一个非常大的负数(如负无穷),这样在应用softmax函数时,这些位置的注意力权重会接近于零。 4.维度匹配:掩码向量通常需要与注意力分数的维度匹配,以便能够进行逐元素的乘法操作。
优缺点
优点:掩码机制提高了模型的效率和准确性,确保了模型只处理有意义的数据。 缺点:某些情况下,掩码可能会稍微增加模型的复杂性,特别是在实现和调试过程中。
多头注意力Multi-Head Self-Attention
概述
多头注意力允许模型同时从不同的角度学习输入数据的不同表示。每个头可以学习到不同的信息,比如一个头可能专注于语法结构,而另一个头可能关注语义信息。 多头注意力通过捕捉不同的语义关系,增强了模型的表达能力。
图示流程
4.transformer模型
概述
Transformer模型是一种深度学习架构,由Vaswani等人在2017年的论文《Attention Is All You Need》中首次提出。它主要用于处理序列数据,特别是在自然语言处理领域取得了显著的成功。 Transformer模型的核心是注意力机制,该机制的引入极大地提升了处理序列数据的效率和效果。
模型架构组成
架构图
组成部分
编码器
编码器由多个相同的层组成,每层包括多头自注意力机制和前馈神经网络。编码器处理输入序列,并生成连续的表示,这些表示捕捉了输入序列的上下文信息。
解码器
解码器也是由多个相同的层组成,每层包括遮蔽(Masked)多头自注意力、编码器-解码器注意力和前馈神经网络。遮蔽自注意力确保了在生成序列的每一步中,只能看到当前步骤之前的位置。
位置编码
为了使模型能够理解序列中单词的顺序,每个输入序列的元素都会加上一个位置编码,这个编码通常是通过正弦和余弦函数生成的。
输出层
在解码器的最后,模型的输出会通过一个线性层和一个softmax层,用于生成下一个词的概率分布。
处理流程
1.输入处理
输入序列首先被转换为一系列的嵌入向量,包括词嵌入和(可选的)位置编码。
2编码器编码
编码器由多个相同的层堆叠而成,每个层包含两个主要的子层: 多头自注意力机制:计算输入序列中每个元素相对于其他所有元素的注意力权重。 前馈全连接网络:对自注意力的输出进行进一步的非线性变换。
3解码器解码
解码器同样由多个相同的层堆叠而成,每个层包含三个主要的子层: 遮蔽多头自注意力:确保在生成序列的每一步中,只能看到当前步骤之前的位置,通过遮蔽未来位置的注意力权重来实现。 编码器-解码器注意力:解码器层的自注意力输出将与编码器的输出相结合,以获取整个序列的全局上下文。 前馈全连接网络:与编码器中的前馈网络相同,对解码器的输出进行非线性变换。
4残差连接和层归一化
在每个子层的输出上应用残差连接和层归一化,以改善深层网络的训练。
5输出层
解码器的最后一层输出将通过一个线性层和一个softmax层,以预测下一个词的概率分布。
6训练过程
模型通过最小化预测的词概率分布和真实词的分布之间的交叉熵损失来训练。
优缺点
优点
1并行化处理:Transformer模型依赖于注意力机制,而非序列递归结构,因此可以更好地并行处理数据,训练速度显著快于RNN类模型。 2长距离依赖建模:自注意力机制允许Transformer模型有效地捕捉输入序列中的长距离依赖关系,这是传统RNN和LSTM等模型难以处理的。 3灵活性和扩展性:Transformer模型架构灵活,可以通过调整层数和头数等超参数来适应不同规模和复杂度的任务。它还可以轻松扩展到不同的输入输出模态,如图像、文本和语音的多模态任务。 4卓越的性能:在许多NLP基准任务上,Transformer模型(如BERT、GPT、T5等)达到了或超过了人类表现的水平,成为当前主流的语言模型。
缺点
1计算资源消耗大:Transformer模型需要大量的计算资源,特别是在大规模预训练阶段,内存和计算要求非常高,训练和推理成本较高。 2对长序列的处理效率问题:虽然Transformer可以捕捉长距离依赖,但其计算复杂度是序列长度的平方级(O(n^2)),因此对特别长的序列处理效率较低。对此,一些改进版本(如Longformer、Transformer-XL)试图通过局部注意力或稀疏注意力来解决这个问题。 3依赖大规模数据:Transformer模型依赖于大规模数据进行预训练,以便捕捉广泛的语言知识。如果数据量不足,模型可能难以发挥其全部潜力。
应用场景
1机器翻译:Transformer模型最早被应用于机器翻译,极大地提高了翻译质量。 2文本生成:Transformer模型被广泛应用于文本生成任务中,如对话系统、自动写作、新闻生成等。GPT(Generative Pre-trained Transformer)系列模型是其中的典型代表。 3语言理解:BERT(Bidirectional Encoder Representations from Transformers)模型通过预训练和微调的方式,在语言理解任务(如问答、情感分析、文本分类)上取得了卓越的性能。 4摘要生成:Transformer模型可以生成文本的摘要,帮助用户快速获取关键信息。 5文本分类和序列标注:在情感分析、主题分类、命名实体识别等任务中,Transformer模型同样表现优异。 6语音处理和多模态学习:Transformer架构也被扩展到语音识别、语音合成和图像文本结合的多模态任务中。
5.bert模型
概述
BERT(Bidirectional Encoder Representations from Transformers)模型是自然语言处理(NLP)领域的一项重要进展,由Google AI在2018年提出。 bert模型是基于Transformer的双向编码器预训练模型,它的出现显著提升了原有模型在NLP任务上的能力。
解决了什么问题
基于上下文的动态词表示
在BERT之前,许多NLP模型使用静态的词向量,即每个词都有一个固定的向量表示,不考虑上下文。这导致同一个词在不同语境中的含义无法被模型准确捕捉。BERT通过引入双向编码器(bidirectional encoder),使得词的表示能够动态地根据上下文变化。BERT能够为每个词生成上下文相关的向量表示,从而更好地理解词语在不同语境中的含义。
长距离依赖的捕捉
传统的序列模型,如RNN或LSTM,在处理长序列时,往往难以捕捉到远距离词语之间的依赖关系。这是因为这些模型的记忆机制和递归结构在长序列中容易丢失上下文信息。BERT使用了Transformer架构中的自注意力机制(self-attention),能够在整个输入序列中灵活地捕捉词语之间的长距离依赖。这使得BERT在处理长文本时表现得更为出色。
单向语言模型的局限性
传统的语言模型通常是单向的,如从左到右(前向)或从右到左(后向)生成词的表示。这种单向性限制了模型对上下文的全面理解,尤其是在需要同时考虑前后文的任务中。BERT通过双向编码的方式同时考虑一个词的前文和后文,从而能够生成更完整的语义表示。这在很多需要全局上下文理解的任务中(如问答、阅读理解)显著提高了模型的表现。
预训练与微调的分离
传统的NLP模型通常针对特定任务进行训练,无法充分利用大规模未标注数据来学习语言的通用特征。BERT采用了“预训练 + 微调”的范式。首先在大规模未标注文本上进行预训练,学习通用的语言表示,然后通过在特定任务上进行微调来适应具体任务需求。这种方法不仅提高了模型的泛化能力,还有效减少了对标注数据的依赖。
多任务学习的统一模型
不同的NLP任务(如文本分类、命名实体识别、问答)通常需要不同的模型架构,这导致模型开发和维护复杂化。 BERT提供了一个通用的模型架构,通过预训练后的微调,可以适应各种下游任务。这种统一的模型架构简化了多任务学习的实现,并且在多个任务上都表现出色。
原理
BERT模型的核心思想是通过大规模预训练生成语言的双向表示,然后在特定任务中进行微调。这种方法不同于传统的单向语言模型,使BERT能够更好地理解上下文。
优缺点
优点
上下文理解能力强:由于双向训练,BERT 能够更好地理解语言的上下文。 泛化性能好:预训练得到的表示可以迁移到多种不同的 NLP 任务。 处理多种NLP任务:BERT可以在不同任务之间迁移,适应性强。其通用性使其成为各种NLP任务的基础模型。
缺点
计算资源消耗大:BERT 模型通常需要大量的计算资源进行训练和推理。 模型参数多:大型的 BERT 模型包含数亿参数,需要大量的存储空间。 训练时间长:由于模型规模大,BERT 的训练时间较长。 推理速度较慢:由于BERT模型较大,推理速度相对较慢,特别是在实际应用中,可能会带来延迟,影响用户体验。 应用部署复杂:由于BERT模型参数较多且计算复杂度较高,在实际应用中,部署和优化模型以达到实时性要求可能需要额外的工程努力。
应用场景
1. 文本分类:BERT可以应用于情感分析、主题分类等文本分类任务。通过将整段文本输入BERT,提取出富有语义信息的向量表示,再通过分类器进行分类。 2. 问答系统:在问答任务中,BERT通过上下文捕捉问题和答案之间的关系,能够精确定位答案的位置,并生成准确的答案。 3. 命名实体识别(NER):BERT能够识别文本中的实体(如人名、地名、组织等),在NER任务中广泛应用。 4. 文本生成与摘要:BERT也可以用于生成文本摘要,提取关键句子来总结长文档的内容。 5. 机器翻译:虽然BERT本身不是专门用于机器翻译的模型,但其预训练的语言表示可以作为其他模型(如翻译模型)的输入,以提升翻译质量。 6. 对话系统:BERT可以用于对话系统中,理解用户的输入并生成合适的响应,提升对话的流畅度和准确性。
3模型的衡量和评估
相关概念
损失函数
概述
损失函数(Loss Function),也称为代价函数或目标函数,是用来衡量模型预测值与实际值之间差异的函数。它反映了模型的预测性能,是优化的目标。损失函数越小,表示模型的预测越接近真实值。
常见分类
均方误差(MSE):常用于回归问题,计算预测值与实际值差的平方的平均值。 交叉熵损失:常用于分类问题,衡量模型预测的概率分布与实际分布之间的差异。 绝对误差(MAE):计算预测值与实际值差的绝对值的平均值。
梯度下降
是什么
梯度下降(Gradient Descent),是一种优化算法,用于最小化损失函数。它通过迭代地调整模型的参数(如权重和偏置),沿着损失函数梯度的反方向进行更新,以达到损失函数的最小值。
工作原理
1初始化参数:随机初始化模型参数。 2前向传播:计算模型的预测输出。 3计算损失:使用损失函数计算预测输出与实际输出之间的差异。 4反向传播:计算损失函数关于模型参数的梯度,即损失函数对每个参数的偏导数。 5参数更新:根据梯度和学习率更新模型参数。学习率是一个超参数,控制每次更新的步长。 6迭代优化:重复上述过程,直到模型在验证集上的性能不再提升或达到预定的迭代次数。
与损失函数的关系
1目标与方法:损失函数定义了优化的目标,梯度下降提供了实现该目标的一种方法。 2迭代过程:损失函数的值随着梯度下降的迭代过程逐渐减小。 3反向传播:梯度下降依赖于反向传播算法来计算损失函数的梯度,这是深度学习中训练神经网络的关键步骤。 4超参数调整:损失函数和梯度下降的效率和性能受到超参数(如学习率、批次大小等)的影响。
常见评估指标
准确率(Accuracy)
预测正确的样本数占总样本数的比例,适用于类别平衡的数据集。
精确率(Precision)
正确预测为正类的样本数占所有预测为正类的样本数的比例,适用于关注正类样本时。
召回率(Recall)
正确预测为正类的样本数占所有真实为正类的样本数的比例,适用于减少漏报(False Negatives)的情况。
F1分数
精确率和召回率的调和平均数,适用于类别不平衡的数据集。
ROC曲线和AUC值
ROC曲线展示了不同阈值下模型的真阳性率和假阳性率,AUC值表示曲线下的面积,反映模型的分类能力。
均方误差(MSE)
用于回归问题,表示预测值与真实值之间误差的平方和的均值。
均方根误差(RMSE)
MSE的平方根,更易解释,因为它与目标变量的单位相同。
平均绝对误差(MAE)
预测值与真实值之间误差的绝对值的均值。
R²(决定系数)
反映模型对数据方差的解释能力,用于回归模型。
评估角度
泛化能力
训练集与测试集的性能比较
如果模型在训练集上表现很好,但在测试集上表现不佳,说明模型可能过拟合。
交叉验证(Cross-validation)
通过K折交叉验证来评估模型的泛化能力,减少由于数据划分造成的性能波动。
留出法(Hold-out)
将数据集分成训练集、验证集和测试集,分别用于训练、调优和最终评估。
稳定性
鲁棒性:模型在面对噪音数据或不完整数据时的表现,如对抗样本的抵抗能力。 一致性:模型在不同数据分布或不同数据集上的表现一致性。
模型复杂度
参数数量:衡量模型的复杂度,过多的参数可能导致过拟合,而过少则可能欠拟合。 计算资源:模型训练和推理的时间、内存消耗等,也是评估模型实用性的一个维度。
可解释性
对于一些任务,尤其是在高风险领域,如金融、医疗,模型的可解释性非常重要。使用工具如LIME、SHAP可以帮助理解模型决策。
用户需求和应用场景
满足实际需求:模型的好坏最终取决于它是否满足实际应用需求,比如预测准确性、响应速度等。 商业和社会影响:模型的决策可能对业务或社会产生影响,因此评估模型的好坏还需要考虑其实际应用中的潜在影响。