Transformers库-入门-Pipeline实践

《Transformers库-入门到熟悉》系列的参考学习资料:https://transformers.run/。如下内容是对于各章节的总结:

第四章 开箱即用的pipelines

几种pipeline

1、情感分析

2、零训练样本分类

3、文本生成:前缀模板 (Prefix Prompt)生成

4、遮盖词填充:基于填充模板 (Cloze Prompt)-先构建模板然后运用模型来完善模板,预测句子中被mask的文本

5、命名实体

6、抽取式问答:从给定的上下文中抽取答案,而非生成答案  

7、自动摘要:旨在将长文本压缩成短文本,并且还要尽可能保留原文的主要信息

补充说明:根据形式的不同,自动问答 (QA) 系统可以分为三种:

  • 抽取式 QA (extractive QA):假设答案就包含在文档中,因此直接从文档中抽取答案;

  • 多选 QA (multiple-choice QA):从多个给定的选项中选择答案,相当于做阅读理解题;

  • 无约束 QA (free-form QA):直接生成答案文本,并且对答案文本格式没有任何限制

重要组件

Pipeline的两个重要组件:模型(Models 类)和分词器(Tokenizers 类)。背后做了哪些事情:

1、预处理 (preprocessing),将原始文本转换为模型可以接受的输入格式;

2、将处理好的输入送入模型;

3、对模型的输出进行后处理 (postprocessing),将其转换为人类方便阅读的格式。

模型的输出是一个维度为 (Batch size, Sequence length, Hidden size) 的三维张量。可以像上面那样通过属性访问,也可以通过键(outputs["last_hidden_state"]),甚至索引访问(outputs[0])。

第五章 模型与分词器

模型

包含加载、保存模型。Transformers 库封装了很多不同的模型结构,常见的有:

1、*Model (返回 hidden states)

2、*ForCausalLM (用于条件语言模型)

3、*ForMaskedLM (用于遮盖语言模型)

4、*ForMultipleChoice (用于多选任务)

5、*ForQuestionAnswering (用于自动问答任务)

6、*ForSequenceClassification (用于文本分类任务)

7、*ForTokenClassification (用于 token 分类任务,例如 NER)

分词器

1、分词策略:按词切分 (Word-based),按字符切分 (Character-based),按子词切分 (Subword)

2、Padding

3、attention mask

4、添加新token

5、token embedding初始化

6、调整embedding矩阵

  • 向词表中添加新 token 后,必须重置模型 embedding 矩阵的大小,也就是向矩阵中添加新 token对应的embedding,这样模型才可以正常工作,将token 映射到对应embedding

  • 调整 embedding 矩阵通过 resize_token_embeddings() 函数来实现

  • 在默认情况下,新添加 token 的 embedding 是随机初始化的。新 token 会添加在词表的末尾,因此只需打印出最后两行

  • 可以直接赋值初始化token 对应的 embedding

补充说明:

1、部分模型的 Hub 页面中会包含很多文件,我们通常只需要下载模型对应的 config.jsonpytorch_model.bin,以及分词器对应的 tokenizer.jsontokenizer_config.jsonvocab.txt

2、分词器实现编码 (Encoding),其包含两个步骤

  • 使用分词器 (tokenizer) 将文本按词、子词、字符切分为 tokens

  • 将所有的 token 映射到对应的 token ID。

3、分词器会自动在序列的首尾添加了[CLS]和[SEP] token

第六章 必要的pytorch知识

基础知识

1、张量:张量的加减乘除是按照元素进行的

2、自动微分:执行 tensor.backward(),就会自动通过反向传播

3、调整张量形状(各方法对比如下)

  • view:将张量转换为新的形状。执行view 操作的张量必须是连续的 (contiguous),可以调用 is_conuous 来判断张量是否连续;如果非连续,需要先通过 contiguous 函数将其变为连续的

  • reshape:它与 view 功能几乎一致,并且能够自动处理非连续张量

  • transpose:交换张量中的两个维度

  • permute: 区别于transpose只交换两个维度,可以直接设置新的维度排列方式

4、广播机制

5、索引与切片

6、升维与降维

  • 升维:torch.unsqueeze

  • 降维:torch.squeeze。在不指定 dim 时,张量中所有形状为 1 的维度都会被删除,例如

(A, 1, B, 1, C)会变成(A, B, C);当给定 dim 时,只会删除给定的维度(形状必须为 1),例如对于(A, 1, B),squeeze(input, dim=0) 会保持张量不变,只有 squeeze(input, dim=1) 形状才会变成(A, B)。

加载数据

1、数据集类:Dataset或 IterableDataset负责存储样本以及它们对应的标签。包含:迭代型、映射型数据集

2、数据加载类:DataLoader负责迭代地访问数据集中的样本

1、DataLoader

参数包含:

  • dataset(数据集)

  • batch_size (batch 大小)

  • shuffle:是否打乱数据集

  • sampler:采样器,也就是一个索引上的迭代器

  • collate_fn:批处理函数,用于对采样出的一个 batch 中的样本进行处理(例如前面提过的 Padding 操作)

2、sampler

常见的 Sampler 对象包括序列采样器 SequentialSampler 和随机采样器 RandomSampler,它们都通过传入待采样的数据集来创建

训练模型

Pytorch 所有的模块(层)都是 nn.Module的子类。通过 __init__() 初始化模型中的层和参数,在 forward() 中定义模型的操作:

  • 损失函数:Pytorch 实现了很多常见的损失函数,例如:

    • 用于回归任务的均方误差 (Mean Square Error) nn.MSELoss

    • 用于分类任务的负对数似然 (Negative Log Likelihood) nn.NLLLoss

    • 同时结合了 nn.LogSoftmax 和 nn.NLLLoss 的交叉熵损失 (Cross Entropy) nn.CrossEntropyLoss 等。

  • 优化器:Pytorch 实现了很多优化器,例如 SGD、ADAM、RMSProp 等。

每一轮迭代 (Epoch) 实际上包含了两个步骤:

  • 训练循环 (The Train Loop) 在训练集上进行迭代,尝试收敛到最佳的参数;

  • 验证/测试循环 (The Validation/Test Loop) 在测试/验证集上进行迭代以检查模型性能有没有提升。

在训练循环中,优化器通过以下三个步骤进行优化:

  • 调用 optimizer.zero_grad() 重设模型参数的梯度。默认情况下梯度会进行累加,为了防止重复计算,在每个训练阶段开始前都需要清零梯度;

  • 通过 loss.backwards() 反向传播预测结果的损失,即计算损失对每一个参数的偏导;

  • 调用 optimizer.step() 根据梯度调整模型的参数。

保存模型

本章核心代码存储于:How-to-use-Transformers/train_model_FashionMNIST.py

结尾

亲爱的读者朋友:感谢您在繁忙中驻足阅读本期内容!您的到来是对我们最大的支持❤️

正如古语所言:"当局者迷,旁观者清"。您独到的见解与客观评价,恰似一盏明灯💡,能帮助我们照亮内容盲区,让未来的创作更加贴近您的需求。

若此文给您带来启发或收获,不妨通过以下方式为彼此搭建一座桥梁: ✨ 点击右上角【点赞】图标,让好内容被更多人看见 ✨ 滑动屏幕【收藏】本篇,便于随时查阅回味 ✨ 在评论区留下您的真知灼见,让我们共同碰撞思维的火花

我始终秉持匠心精神,以键盘为犁铧深耕知识沃土💻,用每一次敲击传递专业价值,不断优化内容呈现形式,力求为您打造沉浸式的阅读盛宴📚。

有任何疑问或建议?评论区就是我们的连心桥!您的每一条留言我都将认真研读,并在24小时内回复解答📝。

愿我们携手同行,在知识的雨林中茁壮成长🌳,共享思想绽放的甘甜果实。下期相遇时,期待看到您智慧的评论与闪亮的点赞身影✨!

万分感谢🙏🙏您的点赞👍👍、收藏⭐🌟、评论💬🗯️、关注❤️💚~


自我介绍:一线互联网大厂资深算法研发(工作6年+),4年以上招聘面试官经验(一二面面试官,面试候选人400+),深谙岗位专业知识、技能雷达图,已累计辅导15+求职者顺利入职大中型互联网公司。熟练掌握大模型、NLP、搜索、推荐、数据挖掘算法和优化,提供面试辅导、专业知识入门到进阶辅导等定制化需求等服务,助力您顺利完成学习和求职之旅(有需要者可私信联系)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值