Notes of Hugging face

本文最后更新于:1 年前

Hugging face 笔记

Transformer models

pipeline() 第一个参数为模型用途,第二个参数为社区中的模型名字,从而获取模型各种接口

A brief chronology of Transformers models.

GPT, BERT, BART/T5 使用不同策略,回归、编码、seq2seq

causal/masked language modeling 预测后面/中间

预训练白手起家,微调增加限定,领域适应

Pretrained -- fine-tuning the knowledge inside the model transfer

Transferring the knowledge of a pretrained model to a new model by initializing the second model with the first model's weights.

编码(理解语句)解码(输出语句)对应不同需求

  • 仅编码(预训练遮盖词语):词句分类、命名识别
  • 仅解码(只知道前面的词语):文本生成
  • 编码+解码(T5单一单词随机遮盖不同跨度单词):翻译、总结

语言模型通常是自监督的(通过预测下一个单词或者完形填空)

BERT 编码架构,mask words,擅长事实性问题

GPT 解码架构,自回归模型

T5 解码-编码架构,多语言架构

Architecture of Transformers

Tokenizers 将自然语言转换成 ID Tensor,将参数传递给模型(一般维度很大)做预测,Tokenizers 再次将 IDs 转换为自然语言

分词三种:单词、字母、子单词

padding 需要结合 attention-masking 保证输出的稳定性

model-head 将预测结果转换为目标输出

Finetune models

分批次使用 Dataset.map(model, batch=true) 增加缓存,在多线程下以及多次访问下加速

若训练前类型和模型不匹配,训练头部会随机增加权重

Dataset library

Dataset.map() 操作数据,使用 lambda 函数省去较小函数的构造

常用 filter()map() 函数

内存映射是指将一个文件映射成应用程序地址空间内某个地址范围

Tokenizer library

使用 (example['train'] for example in dataset) 获得生成器,减少内存消耗

DistilBERT,使用知识蒸馏技术

tokenizer 不同

规范化(初始处理多空格、Unicode)、预标记化(拆分为单词)、后处理(掩码)

BERT GPT T5
忽略双空格 不忽略双空格 不忽略双空格
空格删除,不可逆 空格替换为 Ġ,可逆 空格替换为 _,可逆
Wordpiece 算法 BPE 算法 Unigram 算法(Viterbi 算法)
\(\displaystyle \max_{i}\left(\dfrac{N_{i,\text{merge}}}{N_{i,\text{left}}\cdot N_{i,\text{right}}}\right)\to \{V\}\) \(\displaystyle \max_{i}(N_{i,\text{merge}})\to \{V\}\) \(\displaystyle\min\left[ -N\log \left (\prod_{\bigsqcup_{j} \text{Sub}_j\in\{\text{Words}\}}P(\text{Sub}_j)\right)\right]\)
子串 子串和合并规则 子串
选取最长有效子串 合并有效分词 选取损失最小有效子串
词汇量小 词汇量小 词汇量大

Main NLP tasks

翻译任务:BLEU 分数衡量(双语互译质量评估辅助工具)① precision 生成答案中有多大比例重合,存在常用词干扰,例如 \(\text{the the the the the the the}\) 分数为 \(100\%\) ② modified precision 考虑词语在参考翻译中出现次数截断计数 ③ 加入惩罚,避免词语短得分高 ③ n-gram 增加翻译流畅性,与前者求几何平均 ④ Sentence brevity penalty 短惩罚 \[ \mathrm{BP}=\begin{cases} 1 & \text { if } c>r \\ e^{(1-r / c)} & \text { if } c \leq r \end{cases} , \mathrm{BLEU}=\mathrm{BP} \cdot \exp \left(\sum_{n=1}^N w_n \log p_n\right) . \] 摘要:ROUGE 分数,recall 标准答案中有多大比例重合,precision 生成答案中有多大比例重合,两者综合考量,取调和平均 \(F_1=\dfrac{2P_1P_2}{P_1+P_2}\)

因果推断模型:数据集中设置 max_length

问答系统:合并为 [CLS] question [SEP] context [SEP] 作为训练输入

Ask for questions

CUDA 出 bug 在 CPU 上跑,因为前者是异步的

过拟合用于 debug,损失函数降为 0

Hugging face course 问题

一、BERT/GPT/T5 的架构和区别

\[ \begin{array}{|c|c|c|} \hline \text { BERT } & \text { GPT } & \text { T5 } \\ \hline \text { incoder 架构 } & \text { decoder 架构 } & \text { incoder-decoder 架构 } \\ \hline \text { 编码模型 } & \text { 自回归模型 } & \text { Seq2seq 模型 } \\ \hline \text { 获取所有可见词 } & \text { 获取前面词语 } & \text { 获取前面词语 } \\ \hline \text { 分类, Full-mask } & \text { 文本生成 } & \text { 跨多语言, 翻译总结 } \\ \hline \end{array} \]

tokenizer 预训练方法不同(子词算法不同)


二、不同架构一定对应不同任务吗?

不同架构可以用来训练非匹配任务,但效果欠佳;当架构与任务类型匹配时,效果好。

三、Tokenizer 怎么拿到词语和数字的关系?

  1. 规范化(初始处理多空格、Unicode)、预标记化(拆分为单词)
  2. 使用不同字词切分算法:按字词划分,按字符划分,按子串划分(例如 Wordpiece, BPE, Unigram 算法)结合语料训练构建得到词汇表(一般不超过 \(50000\) 个词汇)
  3. 依据词汇表以及对应策略分词得到切片(##前缀处理)
  4. 后处理:标记掩码、偏移映射(每个标记的文本跨度)等索引

四、掩码模型的微调方法以及种类

  1. 导入数据
  2. 切片张量化(小的 max_length 占用内存小,有重叠划分)
  3. 随机屏蔽(设定屏蔽比例,标记掩码全词掩码

衡量方法:perplexity,交叉熵指数,数值越小意味着语法正确的句子概率更高

\[ \operatorname{perplexity}(S)=p\left(w_1, w_2, w_3, \ldots, w_m\right)^{-1 / m} \]

困惑度 perplexity 可以理解为,如果每个时间步都根据语言模型计算的概率分布随机挑词,那么平均情况下,挑多少个词才能挑到正确的那个。


五、各种衡量指标

\[ \begin{array}{|c|c|c|} \hline \text { BLEU } & \text { ROUGE } & \text { perlexity } \\ \hline \text { 翻译 } & \text { 摘要总结 } & \text { 掩码模型 } \\ \hline \text { 常用词干扰、长度短惩罚 } & \text { recall + precision } & \text { 交叉熵指数 } \\ \hline \mathrm{BP} \cdot \exp \left(\sum_{n=1}^N w_n \log p_n\right) & \dfrac{2 P_1 P_2}{P_1+P_2} & p\left(w_1, \cdots, w_m\right)^{-1 / m} \\ \hline \text { 高代表准确、流畅 } & \text { 高代表准确、精炼 } & \text { 高代表偏离统计模型 } \\ \hline \end{array} \]


Notes of Hugging face
https://lr-tsinghua11.github.io/2023/01/14/NLP/Hugging%20face%20%E7%AC%94%E8%AE%B0/
作者
Learning_rate
发布于
2023年1月14日
许可协议