-
一、自然语言处理
- NLP 是借助计算机技术研究人类语言的科学
- 自然语言处理发展史
- 一、不懂语法怎么理解语言
- 依靠语言学家人工总结文法规则
- Chomsky Formal Languages
- 难点:上下文有关文法
- 规则增多,存在矛盾
- 依靠语言学家人工总结文法规则
- 二、只要看得足够多,就能处理语言
- 基于数学模型和统计方法
- 通信系统加隐马尔可夫模型
- 对一维且有序任务有优势
- 对二维及次序变化任务不能处理
- 通信系统加隐马尔可夫模型
- 硬件能力提升、海量数据,统计机器学习方法
- 基于有向图的统计模型
- 如2005年 Google 基于统计方法的翻译系统超过基于规则的SysTran系统
- 2006年 Hinton 证明深度信念网络 DBN , 逐层预训练策略, 基于神经网络和反向传播算法 Back Propagation 的深度学习方法 ; LSTM 长短时记忆网络 ;2024年 xLSTM
- 卷积神经网络 CNN ; 2017年 Attention 注意力模型 Transformer 结构
- 基于有向图的统计模型
- 基于数学模型和统计方法
- 一、不懂语法怎么理解语言
- 统计语言模型发展史
- 为自然语言建立数学模型
- 判断一个文字序列是否构成人类能理解并且有意义的句子
- 70年代 Jelinek 贾里尼克 统计模型
- P(S) = P(w_1,w_2,...,w_n)= P(w_1)P(w_2|w_1)P(w_3|w_1,w_2)...P(w_n|w_1,w_2,...,w_{n-1})
- 词语w_n出现的概率取决于在句子中出现在它之前的所有词(理论上也可以引入出现在它之后的词语)。但是,随着文本长度的增加,条件概率P(w_n| w_1,w_2,…,w_{n-1}) 会变得越来越难以计算,因而在实际计算时会假设每个词语 w_i 仅与它前面的 n-1个词语有关
- P(w_i|w_1,w_2,...,w_{i-1}) = P(w_i|w_{i-N+1},w_{i-N+2},...,w_{i-1})
- 这种假设被称为马尔可夫(Markov)假设,对应的语言模型被称为 N 元(N-gram)模型。例如当 N = 2 时,词语 w_i 出现的概率只与它前面的词语w_{i-1} 有关,被称为二元(Bigram)模型;而 N =1 时,模型实际上就是一个上下文无关模型。由于 N 元模型的空间和时间复杂度都几乎是 N 的指数函数,因此实际应用中比较常见的是取 N =3 的三元模型
- 2003年 本吉奥,NNLM 模型,神经网络语言模型
- 通过输入词语前面的 N-1 个词语来预测当前词语
- 词表 词向量 激活函数 Softmax 函数 , 词表 需要学习获得
- 2013年 Google ,Word2Vec 模型
- Word2Vec 模型提供的词向量在很长一段时间里都是自然语言处理方法的标配
- 训练方法 CBOW (Continuous Bag of Words)和 Skip-gram
- 使用周围词语来预测当前词
- 使用了上文和下文来预测,打破只通过上文来预测当前词的惯性
- 使用当前词来预测周围词
- 使用周围词语来预测当前词
- 多义词问题
- 运用词语之间的互信息 雅让斯基
- 2018年 ELMo模型 Embeddings from Languages Models
- 会根据上下文动态的调整词语的词向量
- 采用双层双向LSTM作为编码器
- 2018年 BERT模型 Bidirectional Encoder Representations from Transformers
- 两阶段框架 预训练 微调
- 类似ELMo 双向语言模型
- UNILM 模型
- 大语言模型
- Emergent Abilities 涌现能力
- 规模扩展定律 Scaling Laws
- 2022年11月 ChatGPT 模型
- Qwen LLaMA
- Emergent Abilities 涌现能力
- 为自然语言建立数学模型
-
二、Transformer模型
- 取代循环神经网络RNN和卷积神经网络CNN成为当前NLP模型的标配
- 2017年 Google 《Attention Is All You Need》
- 序列标注
- 《Universal Language Model Fine-tuning for Text Classification》
- GPT (the Generative Pretrained Transformer)
- BERT (Bidirectional Encoder Representations from Transformers)
- 结构
- 纯Encoder 模型
- BERT
- DistilBERT
- RoBERTa
- XLM
- ALBERT
- ELECTRA
- DeBERTa
- XLM-R
- ALBERT
- XLM
- BERT
- 纯Decoder 模型
- GPT
- GPT-2
- CTRL
- GPT-3
- GPT-Neo
- GPT-J
- GPT-3
- CTRL
- GPT-2
- GPT
- Encoder-Decoder 模型
- T5
- BART
- M2M-100
- BigBird
- M2M-100
- BART
- T5
- Encoder(左边):负责理解输入文本,为每个输入构造对应的语义表示(语义特征)
- Decoder(右边):负责生成输出,使用 Encoder 输出的语义表示结合其他输入来生成目标序列
- 注意力层
- 原始结构
- 纯Encoder 模型
- Transformer
- 预训练语言模型
- 自监督学习
- 自监督学习是一种训练目标可以根据模型的输入自动计算的训练方法。
- 因果语言建模
- NNLM
- 遮盖语言建模
- CBOW
- 迁移学习
- 特定任务的标注语料
- 有监督学习
- 微调
- 有监督学习
- 找到一个尽可能接近我们任务的预训练模型,然后微调它
- 特定任务的标注语料
- 更好的性能 不断地增加模型大小
- 海量数据
- 时间和经济成本都非常高
- 模型蒸馏
-
三、注意力机制
- Attention
- 分词 词向量 矩阵
- RNN
- 递归计算 较慢
- Yt = f(Yt-1, Xt)
- 递归计算 较慢
- CNN
- 滑动窗口 局部上下文计算
- Yt = f(Xt-1, Xt,Xt+1)
- 滑动窗口 局部上下文计算
- Attenion
- Self-Attention
- Yt = f(Xt, A,B)
- A=B=X
- Yt = f(Xt, A,B)
- Self-Attention
- Scaled Dot-product Attention
- 计算注意力权重
- 更新 token embeddings
- Attention(Q,K,V) = softmax( ....)
- Pytorch 实现, torch.nn.Embedding
- Multi-head Attention
- 首先通过线性映射将序列映射到特征空间,每一组线性投影后的向量表示称为一个头 (head),然后在每组映射后的序列上再应用 Scaled Dot-product Attention
- Transformer Encoder
- The Feed-Forward Layer
- Layer Normalization
- Positional Embeddings
- 绝对位置表示
- 相对位置表示
- Transformer Decoder
- Masked multi-head self-attention layer
- Encoder-decoder attention layer
- Attention
-
四、开箱即用的pipelines
- NLP 任务分类
- 文本分类
- 对文本中词语进行分类
- 文本生成
- 从文本中抽取答案
- 根据输入文本生成新的句子
- pipelines
- feature-extraction 获得文本的向量化表示
- fill-mask 填充被遮盖的词、片段
- ner 命名实体识别
- question-answering 自动问答
- sentiment-analysis 情感分析
- summarization 自动摘要
- text-generation 文本生成
- translation 机器翻译
- zero-shot-classification 零训练样本分类
- 情感分析
- 示例代码:下载了模型 distilbert-base-uncased-finetuned-sst-2-english
- 零训练样本分类
- 不提供任何标注数据的情况下自定义分类标签
- 示例代码:下载了模型 facebook/bart-large-mnli
- 文本生成
- 遮盖词填充
- 命名实体识别
- 自动问答
- 示例: 根据给定的上下文回答问题
- 分类
- 抽取式
- 多选
- 无约束
- 自动摘要
- 旨在将长文本压缩成短文本 , 尽可能保留原文的主要信息
- pipeline 原理
- 结构:
- 将文本预处理为模型可以理解的格式;
- 使用分词器进行预处理
- 将预处理好的文本送入模型;
- Model input
- Full model
- Transformer network
- Embeddings
- Layers
- Hidden states
- Head
- Transformer network
- Model outputs
- 对模型输出进行后处理
- 对模型的预测值进行后处理,输出人类可以理解的格式。
- 将文本预处理为模型可以理解的格式;
- Tokenizer ; Model ; Post-Processing
- 结构:
- NLP 任务分类
-
五、模型与分词器
- 模型
- 加载模型
- AutoModel 或者 对应Model类, 如BertModel
- BertModel.from_pretrained()
- 保存模型
- Model.save_pretrained()
- 加载模型
- 分词器
- 分词策略
- 按词切分 word-based
- 按字符切分 character-based
- 按子词切分 subword
- 复杂单词 被分为多个子词
- 加载与保存分词器
- Tokenizer.from_pretrained()
- Tokenizer.save_pretrained()
- 文件: special_tokens_map.json、tokenizer_config.json 、vocab.txt
- 编码与解码文本
- 文本编码 : 分词 和 映射
- 解码 :: token IDs 转回原来的字符串 , 合并被分为多个token的单词
- 分词策略
- 处理多段文本
- Padding 操作
- Attention Mask
- 直接使用分词器
- 编码句子对
- 添加Token
- 添加新Token
- tokenizer.add_tokens
- tokenizer.add_special_tokens
- 调整embedding 矩阵
- resize_token_embeddings
- 添加新Token
- Token embedding 初始化
- 直接赋值
- 初始化为已有token的值
- 模型
-
六、必要的Pytorch知识
- Pytorch 基础
- 张量
- 张量计算
- 自动微分
- backward
- 调整张量形状
- view \ reshape
- 转置 transpose
- 交换维度 permute
- 广播机制
- 索引与切片
- 降维与升维
- unsqueeze
- squeeze
- 加载数据
- Dataset
- 映射型Map-style数据集
- 迭代型Iterable-style数据集
- DataLoader
- Dataset
- 训练模型
- 构建模型
- 优化模型参数
- 损失函数
- 优化器
- 训练循环
- optimizer.zero_grad()
- loss.backwards()
- optimizer.step()
- 验证,测试循环
- 保存及加载模型
- 保存和加载模型权重
- 保存和加载完整模型
- 代码
- Pytorch 基础
- 七、微调预训练模型
- 八、快速分词器
Transformers快速入门-学习笔记
于 2025-02-23 17:26:58 首次发布