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

发布时间:2026/9/10 3:46:21

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/9/10 3:41:20

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/9/10 3:41:20

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

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

2026/9/10 5:01:27

基于Matlab的电池等效电路建模与SOC估计仿真实践

简介:这份基于Matlab的电池模型仿真资源,覆盖10个经典电池模型,面向电子信息工程、计算机、数学等专业的大学生,适用于课程设计、期末大作业或毕业设计阶段的算法验证与系统仿真。压缩包共101个文件,大小仅1.11MB&…

2026/9/10 5:01:27

MATLAB TMM波导仿真:3分钟获取TE/TM模式透射谱

简介:本资源是一套基于MATLAB实现的传输矩阵法(TMM)计算工具,面向光学、电磁学方向的研究生、科研人员及工程技术人员,用于快速建模与分析波导结构的反射率、透射率等关键光学特性。压缩包为RAR格式,共2个文…

2026/9/10 4:56:27

背包问题不再玄学:从01背包到多维背包的DP详解

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

2026/9/9 13:11:35

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/8 7:15:15

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/9 16:31:09

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/10 0:00:55

目录对比去重实战:用哈希算法精准清理重复文件

我电脑里现在还有一块换了三次机的“数据墓地”硬盘,里面存着2016年以前所有旧笔记本的完整备份。平时不觉得有什么,直到前阵子想把它整理归档,发现同一个安装包、同一批照片、同一份论文草稿,在几个不同的备份目录里反复出现。更…

2026/9/10 0:00:55

Leaflet离线地图完整Demo合集:内网部署与坐标纠偏实战

简介:这是一份面向Web GIS开发者的LeafLet离线地图示例合集,帮助开发者快速掌握离线地图从搭建到交互的完整流程。压缩包共723个文件,大小14.06MB,以319个js脚本、175个html页面和29个css样式文件为主体,配合png/svg图…

2026/9/10 0:00:55

MATLAB读取Rinex 3.02观测文件:多系统GNSS数据解析实战

简介:基于MATLAB开发的Rinex3.02版观测文件(o文件)读取代码包,面向卫星定位导航方向的学习者与研究人员,用于解决新版观测文件的数据解析、历元提取与时间转换问题。压缩包共4个文件,包含两个m脚本、一个19…

2026/9/7 16:23:03

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/7 22:46:00

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/9 10:21:54

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

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

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

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