Transformers 中 Blenderbot Small(Blenderbot-90M)模型详解:配置、分词与推理实战

发布时间:2026/11/5 8:03:17

Transformers 中 Blenderbot Small(Blenderbot-90M)模型详解:配置、分词与推理实战 Transformers 中 Blenderbot SmallBlenderbot-90M模型详解配置、分词与推理实战【免费下载链接】transformers Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference and training.项目地址: https://gitcode.com/GitHub_Trending/tra/transformers本文围绕 Hugging Face Transformers 仓库中 Blenderbot Small 的官方模型文档docs/source/ja/model_doc/blenderbot-small.md展开结合 src/transformers/models/blenderbot_small 目录下的配置、建模与分词源码完整讲解这个 90M 参数轻量级对话模型的结构组成、配置参数默认值、分词器特殊符号约定以及单轮与多轮对话生成的可运行示例。读完本文你可以正确加载并推理facebook/blenderbot_small-90M检查点理解其 encoder-decoder 架构细节并掌握多轮对话中__end__/__start__分隔符的用法。一、Blenderbot Small 是什么适用场景与检查点约束Blenderbot Small 系列类BlenderbotSmallModel与BlenderbotSmallForConditionalGeneration是官方文档明确指出的仅与特定检查点搭配使用的模型即社区检查点facebook/blenderbot-90M当前仓库源码示例统一写作facebook/blenderbot_small-90M二者指向同一 90M 参数检查点。如果需要使用更大的 Blenderbot 检查点如 400M应改用 [BlenderbotModel] 和BlenderbotForConditionalGeneration而不是 Small 系列类。这一系列模型源自论文《Recipes for building an open-domain chatbot》Stephen Roller、Emily Dinan、Naman Goyal、Da Ju、Mary Williamson、Yinghan Liu、Jing Xu、Myle Ott、Carl Sherstinsky、Eric M. Smith、Y-Lan Boureau、Jason Weston2020年4月30日。论文的核心结论是开放域聊天机器人是一个难题模型规模与训练数据规模可以带来性能提升但好的对话还需要将多种技能无缝融合——提供引人入胜的话题切入点、认真倾听、保持一致的态度并恰当地表现知识、共情与人设。作者用 90M、2.7B、9.4B 三种规模的模型构建了配方变体人类评估表明其最佳模型在多轮对话的吸引力和人味human-likeness上优于既有方法。从源码结构看该模型由 Hugging Face 社区的 patrickvonplaten 贡献移植其实现基于论文作者开源的 ParlAI 项目代码改写而来。关键实践提示使用右侧右端填充官方文档给出的一个重要 TipBlenderbot Small 是带绝对位置嵌入的模型因此通常建议将输入右侧填充right padding。这一点在源码中可以得到直接印证BlenderbotSmallLearnedPositionalEmbedding 是一个可学习的位置嵌入层forward中默认用torch.arange(past_key_values_length, past_key_values_length seq_len)生成从 0 开始的连续位置索引。这意味着位置编码是从序列起点开始编号的——如果批处理时把 padding 放在左侧真实内容的起始位置会随样本不同而漂移学到的绝对位置与语义位置的对应关系会被破坏。因此做批量推理或训练时应将padding_side设为right。二、核心组件总览Config、Tokenizer、Model 三类接口文档中通过 autodoc 声明了六个核心接口它们在仓库中的实现位置如下表文档中的类职责源码实现位置BlenderbotSmallConfig模型超参数与检查点元信息configuration_blenderbot_small.pyBlenderbotSmallTokenizer纯 Python BPE 分词器tokenization_blenderbot_small.pyBlenderbotSmallTokenizerFasttokenizers后端加速版分词器由 BPE 后端自动生成继承自 tokenization_blenderbot_small.py 中的 Slow 版本BlenderbotSmallModel无 lm_head 的基础 encoder-decoder 模型modeling_blenderbot_small.py 中BlenderbotSmallModelBlenderbotSmallForConditionalGeneration带 LM 头、支持generate的 Seq2Seq 模型同上BlenderbotSmallForConditionalGenerationBlenderbotSmallForCausalLM仅用 decoder 做因果语言建模的包装同上BlenderbotSmallForCausalLM相关文档资源用于训练侧扩展因果语言建模任务指南翻译任务指南摘要任务指南三、BlenderbotSmallConfig配置参数与默认值BlenderbotSmallConfig继承自PreTrainedConfig完整定义见 configuration_blenderbot_small.py。它标注了model_type blenderbot-small并使用strict严格校验且声明了keys_to_ignore_at_inference [past_key_values]推理时忽略缓存键。其attribute_map做了通用属性映射num_attention_heads → encoder_attention_heads、hidden_size → d_model、num_hidden_layers → encoder_layers这是 Bart 风格 encoder-decoder 配置的共同惯例。默认参数取值如下全部来自源码默认值即 90M 检查点的规模设定参数默认值说明vocab_size50265词表大小GPT-2 风格 BPE 词表max_position_embeddings512绝对位置嵌入的最大序列长度上限encoder_layers/decoder_layers8 / 8编/解码器层数encoder_ffn_dim/decoder_ffn_dim2048 / 2048前馈网络中间维encoder_attention_heads/decoder_attention_heads16 / 16注意力头数d_model512隐藏层宽度即hidden_sizeactivation_functiongelu激活函数dropout0.1隐藏层 dropoutattention_dropout0.0注意力权重 dropout默认关闭activation_dropout0.0激活后 dropout默认关闭encoder_layerdrop/decoder_layerdrop0.0层丢弃正则init_std0.02权重初始化标准差use_cacheTrue生成时缓存 KVis_encoder_decoderTrue标识 encoder-decoder 结构decoder_start_token_id1解码起始 token对应__start__pad_token_id/bos_token_id/eos_token_id0 / 1 / 2特殊 token id与分词器约定一致forced_eos_token_id2强制终止 tokenscale_embeddingFalse是否对嵌入缩放tie_word_embeddingsTrue编解码器与 LM 头共享词嵌入文档给出的最简用法是配置 → 建模 → 取回配置三步from transformers import BlenderbotSmallConfig, BlenderbotSmallModel # 初始化一个 blenderbot_small-90M 风格的配置 configuration BlenderbotSmallConfig() # 从该配置初始化模型随机权重 model BlenderbotSmallModel(configuration) # 访问模型的配置 configuration model.config从默认值可以看出其小在哪里88 层、d_model512、16 头总参数量约 90M同时 90% 的 dropout 通道attention_dropout、activation_dropout默认为 0说明该架构依赖dropout0.1做正则。四、BlenderbotSmallTokenizerBPE 分词与特殊符号约定BlenderbotSmallTokenizer 是基于 BPEByte-Pair-Encoding的纯 Python 实现其词汇表文件为vocab.jsonmerges.txt外加tokenizer_config.json输出特征为input_ids与attention_mask。四个特殊 token 的默认值源自该类 docstring特殊 token默认值作用bos_token__start__句子起始符也是decoder_start_token_id对应的 tokeneos_token__end__句子结束符同时充当多轮对话中轮次之间的分隔符unk_token__unk__未登录词pad_token__null__填充符文档中为该分词器单独列出了两个方法get_special_tokens_mask为输入序列生成特殊 token 的掩码张量与save_vocabulary将词表落盘为vocab.json/merges.txt。BlenderbotSmallTokenizerFast是其加速版本两者接口一致日常推理推荐直接使用AutoTokenizer自动选择 Fast 后端。这个__end__/__start__约定正是官方模型文档中多轮对话示例的基础Blenderbot Small 本身是单句输入单句输出的 Seq2Seq 模型多轮能力靠把历史轮次拼进同一条输入、用特殊符号分隔来实现。五、模型结构共享嵌入、编码器-解码器与权重绑定BlenderbotSmallModel 的构造方式值得注意它不各自建嵌入层而是创建一个共享嵌入self.shared nn.Embedding(vocab_size, config.d_model, padding_idx)同时作为编码器与解码器的embed_tokens。源码中_tied_weights_keys显式声明了encoder.embed_tokens.weight与decoder.embed_tokens.weight均绑定到shared.weight这与配置里tie_word_embeddingsTrue相互印证。forward 的数据流是标准 Seq2Seq 路径若外部未提供encoder_outputs先跑BlenderbotSmallEncoder得到BaseModelOutput随后把编码器的last_hidden_state作为encoder_hidden_states送入BlenderbotSmallDecoder解码器同时使用因果自注意力掩码与交叉注意力。返回Seq2SeqModelOutput包含last_hidden_state解码器输出、past_key_values、编解码两侧的hidden_states/attentions以及cross_attentions。文档示例可直接复制运行from transformers import AutoTokenizer, BlenderbotSmallModel model BlenderbotSmallModel.from_pretrained(facebook/blenderbot_small-90M) tokenizer AutoTokenizer.from_pretrained(facebook/blenderbot_small-90M) inputs tokenizer(Studies have been shown that owning a dog is good for you, return_tensorspt) decoder_inputs tokenizer(Studies show that, return_tensorspt) # Batch size 1 outputs model(input_idsinputs.input_ids, decoder_input_idsdecoder_inputs.input_ids) last_hidden_states outputs.last_hidden_state list(last_hidden_states.shape) # [1, 3, 512]输出最后一维 512 正是d_model默认值与配置章节完全对应。六、BlenderbotSmallForConditionalGeneration单轮与多轮对话生成BlenderbotSmallForConditionalGeneration 在基础模型上追加了 LM 头。从源码看有三个实现要点LM 头与嵌入绑定self.lm_head nn.Linear(config.d_model, vocab_size, biasFalse)且_tied_weights_keys将lm_head.weight绑定到model.shared.weight进一步缩小参数量。final_logits_bias初始化了一个全零的final_logits_bias缓冲Bart 家族惯例logits 计算为lm_head(...) final_logits_biasresize_token_embeddings时会自动同步扩展该偏置。训练时的标签右移当传入labels时会自动把use_cache置为False并打印告警若未显式给出decoder_input_ids则调用shift_tokens_right用pad_token_id和decoder_start_token_id完成标签右移损失为CrossEntropyLoss。单轮对话示例源码 docstring 给出的示例modeling_blenderbot_small.pyfrom transformers import AutoTokenizer, BlenderbotSmallForConditionalGeneration mname facebook/blenderbot_small-90M model BlenderbotSmallForConditionalGeneration.from_pretrained(mname) tokenizer AutoTokenizer.from_pretrained(mname) UTTERANCE My friends are cool but they eat too many carbs. print(Human: , UTTERANCE) inputs tokenizer([UTTERANCE], return_tensorspt) reply_ids model.generate(**inputs) print(Bot: , tokenizer.batch_decode(reply_ids, skip_special_tokensTrue)[0]) # Bot: what kind of carbs do they eat? i dont know much about carbs.多轮对话用__end__/__start__拼接历史继续上面这轮对话时把双方历史按用户句 __end__ __start__ 机器人句的格式拼进一条字符串源码 docstring 示例REPLY Im not sure print(Human: , REPLY) NEXT_UTTERANCE ( My friends are cool but they eat too many carbs.__end__ __start__what kind of carbs do they eat? i dont know much about carbs__end__ __start__ Im not sure. ) inputs tokenizer([NEXT_UTTERANCE], return_tensorspt) next_reply_ids model.generate(**inputs) print(Bot: , tokenizer.batch_decode(next_reply_ids, skip_special_tokensTrue)[0]) # Bot: they eat a lot of carbs. carbs are high in fat, protein, and fats.注意两个细节轮次之间用__end__ __start__分隔用户句尾是__end__机器人句首是__start__模型生成时从decoder_start_token_id即__start__启动解码。这也解释了为什么配置中bos_token_id同时充当decoder_start_token_id。七、BlenderbotSmallForCausalLM纯解码器因果语言建模BlenderbotSmallForCausalLM 只复用解码器经由BlenderbotSmallDecoderWrapper包装这一设计与 Bart 的BartDecoderWrapper一致便于在EncoderDecoderModel框架下正确加载检查点。其构造函数会把config.is_decoder置True、config.is_encoder_decoder置FalseLM 头绑定到model.decoder.embed_tokens.weight。源码 docstring 中的示例from transformers import AutoTokenizer, BlenderbotSmallForCausalLM tokenizer AutoTokenizer.from_pretrained(facebook/blenderbot_small-90M) model BlenderbotSmallForCausalLM.from_pretrained(facebook/blenderbot_small-90M) assert model.config.is_decoder, f{model.__class__} has to be configured as a decoder. inputs tokenizer(Hello, my dog is cute, return_tensorspt) outputs model(**inputs) logits outputs.logits expected_shape [1, inputs.input_ids.shape[-1], model.config.vocab_size] list(logits.shape) expected_shape # True实现上还提供了一个logits_to_keep参数默认 0 表示计算全序列传正整数则只对最后 N 个位置计算 logits这是解码生成阶段省算力的常用手段。八、测试与验证如何确认实现正确性仓库为该模型提供了完整测试套件 tests/models/blenderbot_small/test_modeling_blenderbot_small.py覆盖配置、分词、生成行为三条线配置层BlenderbotSmallModelTester.get_config用最小规模参数2 层、hidden_size16、4 头、词表 99构造BlenderbotSmallConfig配合通用ConfigTester验证参数读写与一致性行为层通过prepare_blenderbot_small_inputs_dict构造input_ids/decoder_input_ids及对应的attention_mask用ne(pad_token_id)生成并复用了ModelTesterMixin、GenerationTesterMixin、PipelineTesterMixin三套混入意味着该模型通过了 transformers 统一的建模、生成beam/greedy/多轮与 pipeline 兼容性测试分词层tests/models/blenderbot_small/test_tokenization_blenderbot_small.py 验证 BPE 分词与特殊 token 行为。如果你本地克隆了仓库可以用如下命令单独验证建模测试slow标记的完整推理用例需显式加--runslowpython -m pytest tests/models/blenderbot_small/test_modeling_blenderbot_small.py -v九、小结选型边界Small 系列类只匹配 90M 检查点facebook/blenderbot-90M/facebook/blenderbot_small-90M更大规模请切换到BlenderbotModel/BlenderbotForConditionalGeneration。架构要点共享词嵌入 8 层编/解码器 d_model512绝对位置嵌入决定了批处理时必须右侧填充LM 头与嵌入权重绑定配合final_logits_bias做词表级偏置调整。多轮机制模型本身无会话记忆多轮靠把历史按__end__ __start__分隔拼接进单条输入实现。深入阅读配置默认值看 configuration_blenderbot_small.py前向与生成逻辑看 modeling_blenderbot_small.py分词细节看 tokenization_blenderbot_small.py。【免费下载链接】transformers Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference and training.项目地址: https://gitcode.com/GitHub_Trending/tra/transformers创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/27 17:27:32

macOS开源效率工具盘点:截图录屏取色OCR全能菜单栏应用

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 3:39:35

YOLOv5+DeepSort车辆测速系统毕设实战指南

简介:本资源是一套面向高校计算机视觉方向毕业设计与课程实践的完整车辆测速系统实现方案,基于YOLOv5目标检测与DeepSORT多目标追踪算法,聚焦校园场景下的车流与人流协同监控、实时速度估算及碰撞风险预警,切实服务于校园交通安全…

2026/11/5 13:50:18

基于Django的运维平台实战:资产、发布、巡检、告警一体化

简介:这份资源是一套基于Django框架开发的运维平台源码,面向具备Python基础、希望了解Web运维系统实现思路的开发者与运维人员,可用于学习主机管理、服务监控、日志查看、任务调度、权限控制、资源统计、脚本执行与故障告警等常见运维模块的落…

2026/11/5 13:25:11

基于ADS122U04IPWR与STM32F427ZI的工业测温方案设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 13:20:10

Dubbo服务下线实时告警:基于ZooKeeper Watch的轻量级监控方案

简介:这是一套面向Java分布式系统运维与开发人员的Dubbo服务高可用监控解决方案,聚焦于Provider异常下线的实时感知与告警响应。资源通过Zookeeper监听机制实现服务状态变更捕获,结合邮件通知模块,在不侵入原有Dubbo代码的前提下&…

2026/11/5 13:20:10

SSM超市管理系统源码解析:从分层架构到本地部署与业务修改

简介:这份资源是面向高校计算机专业学生与Java初学者的一套SSM框架课程设计完整项目,围绕超市管理场景,帮助读者完成从框架整合到业务模块落地的实战练习,适合作为毕业设计或课程作业的参考方案。压缩包共792个文件,约…

2026/11/5 13:20:10

SSM超市管理系统实战:从课设跑通到二次开发全解析

简介:这份资源是面向高校计算机相关专业学生与Java入门开发者的SSM课程设计参考项目,围绕超市管理场景,解决商品、库存、销售等业务模块从设计到落地的实践需求,适合作为课程作业、毕业设计原型或SSM框架练手案例。压缩包共792个文…

2026/11/5 13:15:07

PIPE4.3.0安装排错:JDK版本、JAVA_HOME与Petri验证

简介:PIPE 4.3.0 是一款基于 Petri 网的图形化建模与仿真软件,面向软件工程、系统分析与教学实验场景,帮助读者完成并发、同步与竞争等系统行为的建模、动态仿真及性质分析。压缩包共 2391 个文件,约 28.43MB,包含大量…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 0:02:07

多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中…

2026/11/5 0:02:07

大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#…

2026/11/5 0:02:07

鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑