当前位置: 首页 > article >正文

【模型学习】

https://zhuanlan.zhihu.com/p/522344841

from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained(model_checkpoint)
tokenizer("男女主角亦有专属声优这一模式是由谁改编的?", "任天堂游戏谜之村雨城")
{
'input_ids': [101, 5615, 3235, 2111, 7164, 2167, 4461, 2084, 3496, 3173, 2224, 7700, 2072, 4723, 3709, 4380, 5611, 7363, 4282, 6377, 5718, 10083, 102, 2212, 3198, 3102, 5089, 3974, 7379, 2120, 4492, 8289, 3086, 102],
'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
}

在这个示例中,我们使用了Hugging Face的Transformers库中的AutoTokenizer类来创建一个预训练的分词器(tokenizer)。AutoTokenizer.from_pretrained方法用于从预训练模型的检查点(model_checkpoint)加载分词器。然后,我们使用这个分词器对两个文本进行预处理,将它们转换为模型可以理解的输入ID序列、token类型ID序列和注意力掩码(attention mask)序列。

解释
input_ids:这是一个列表,表示输入文本被分词后的ID序列。每个ID对应一个词汇的编码。在这个示例中,input_ids表示了两个文本被分词后的ID序列。

token_type_ids:这是一个列表,表示每个子词的类型(通常用于区分输入文本中的两个文本)。在这个示例中,token_type_ids的值为0或1,表示两个文本的分词结果。

attention_mask:这是一个列表,表示每个子词是否有效(即是否在输入文本中)。在这个示例中,attention_mask的值为1,表示所有子词都是有效的。

示例代码
以下是一个完整的示例代码,展示了如何使用AutoTokenizer对文本进行预处理:

from transformers import AutoTokenizer

# 使用预训练的分词器
tokenizer = AutoTokenizer.from_pretrained("bert-base-chinese")

# 示例文本
text1 = "男女主角亦有专属声优这一模式是由谁改编的?"
text2 = "任天堂游戏谜之村雨城"

# 预处理文本
inputs = tokenizer(text1, text2, return_tensors='pt', max_length=50, truncation=True)

# 查看预处理结果
print(inputs)

input_ids**:这是一个列表,表示输入文本被分词后的ID序列 , 什么意思
在这里插入图片描述

attention_mask 干什么用的
attention_mask在自然语言处理(NLP)中主要用于指示模型在处理输入文本时哪些位置的子词是有效的(即应该考虑),哪些位置的子词是不重要的(如填充符号或特殊标记)。它通常是一个二进制掩码(0或1),其中1表示有效的子词,0表示不重要的子词。

详细解释
有效子词(1):当attention_mask的值为1时,表示该位置的子词是有效的,模型应该考虑它。在预处理文本时,通常会将有效的子词设置为1。

不重要子词(0):当attention_mask的值为0时,表示该位置的子词是不重要的。这些子词通常是填充符号(padding symbols)或特殊标记(如[CLS]和[SEP]),它们在模型的计算过程中不提供有用的信息。

示例
假设我们有一个文本"男女主角是由谁改编的?任天堂游戏谜之村雨城",经过分词后变成了以下子词ID序列:
attention_mask在自然语言处理(NLP)中主要用于指示模型在处理输入文本时哪些位置的子词是有效的(即应该考虑),哪些位置的子词是不重要的(如填充符号或特殊标记)。它通常是一个二进制掩码(0或1),其中1表示有效的子词,0表示不重要的子词。

详细解释
有效子词(1):当attention_mask的值为1时,表示该位置的子词是有效的,模型应该考虑它。在预处理文本时,通常会将有效的子词设置为1。

不重要子词(0):当attention_mask的值为0时,表示该位置的子词是不重要的。这些子词通常是填充符号(padding symbols)或特殊标记(如[CLS]和[SEP]),它们在模型的计算过程中不提供有用的信息。

示例
假设我们有一个文本"男女主角是由谁改编的?任天堂游戏谜之村雨城",经过分词后变成了以下子词ID序列:
为了将这个序列输入模型,我们需要为其创建一个attention_mask。假设我们使用了一个最大长度为50的序列,并且文本长度为23,那么我们需要将attention_mask设置为长度为50的序列,其中前23个位置为1,后27个位置为0:
为了将这个序列输入模型,我们需要为其创建一个attention_mask。假设我们使用了一个最大长度为50的序列,并且文本长度为23,那么我们需要将attention_mask设置为长度为50的序列,其中前23个位置为1,后27个位置为0:
在这个attention_mask中,前23个位置(对应有效的子词)被设置为1,后27个位置(对应填充符号)被设置为0。模型在处理这个输入序列时,只会考虑前23个有效的子词,忽略后面的填充符号。

使用场景
attention_mask在多种场景中都非常有用,包括但不限于:

文本分类:在分类任务中,可能需要将输入文本截断到一个固定的长度,并使用attention_mask来指示模型哪些位置的子词是有效的。

序列对齐:在机器翻译任务中,源文本和目标文本的长度可能不同,使用attention_mask可以帮助模型区分哪些位置的子词是源文本的哪些位置的子词。

问答任务:在问答任务中,输入文本可能包含多个段落,使用attention_mask可以帮助模型区分哪些位置的子词属于哪个段落。

通过attention_mask,模型可以更准确地理解输入文本的结构和内容,从而提高模型的性能和准确性。


http://www.kler.cn/news/365094.html

相关文章:

  • (小白教程)MPV.NET 播放器安装和添加插件脚本Bilibili弹幕
  • webpack面试笔记(一)
  • Spring Cloud:构建高可用分布式系统的利器
  • vue富文本使用editor
  • 在Java中,需要每120分钟刷新一次的`assetoken`,并且你想使用Redis作为缓存来存储和管理这个令牌
  • 15.6 JDBC数据库编程6——可滚动和可更新的ResultSet
  • 利用Spring Boot实现信息化教学平台
  • 博弈论 C++
  • Python 快速提取PowerPoint文档中的图片
  • 【Vue.js设计与实现】第三篇第9章:渲染器-简单Diff算法-阅读笔记
  • jupyter argparse问题
  • XML解析小坑记录[正则表达式解析]
  • 学习莫烦python---神经网络
  • 重生之“我打数据结构,真的假的?”--3.栈和队列(无习题)
  • PyTorch 介绍
  • Unity Apple Vision Pro 自定义手势识别交互
  • Vuex 状态机
  • Http模块总体设计
  • C# SM2 加签、验签工具
  • 【SpringCloud】Seata微服务事务
  • 【Flutter】路由与导航:基础路由与导航
  • HTML5教程(一)- 网页与开发工具
  • 基于RK3588/算能BM1684 AI盒子:综合视频智能AI分析系统建设方案(三)安全帽、睡岗检测、电瓶车、吸烟场景
  • 51单片机——OLED显示图片
  • Python进阶知识3
  • 数字 图像处理算法的形式