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

发布时间:2026/9/10 3:46:09
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),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询