Skip to content

HuggingFace · 技术问答

Hugging Face · 技术问答

必会

重点 什么时候用 BERT 微调,什么时候用大模型?

口述:先看标注、任务死不死、显存。不是谁更新就用谁。

  1. BERT — 大量标注、任务固定、要准要快(生产推理)、显存大约 1–2GB。Logits 一次 argmax 出类别。
  2. 大模型 — 没标注、任务杂、要快速验证和零样本、显存大约 8GB+。拼 Prompt 生成再解析。

口条:有标签走微调,没标签走 Prompt。稳定分类别默认上大模型。

重点 为什么需要微调(Fine-tuning)?

口述:Hub 上拿来就能用,但那是通识,不懂你的业务口径。预训练像大学通识教育;微调像岗前培训。

  1. 预训练 — BERT 读过维基、书籍,懂语法、成语,「苹果」可以是水果也可以是公司。不知道你们发票怎么审、垃圾邮件怎么定义。
  2. 微调 — 在预训练权重上,用领域数据再训一小会儿。目标:从「懂中文的毕业生」变成「懂医疗发票的审核员」。

通用模型搞不定的例子(别说成自己上线的):

  • 通用 BERT 看见「CT显示肺部纹理增多」,只知道这是一句话;医疗微调后能标出检查项 / 部位 / 临床表现。
  • 「恭喜您中奖了」通用情感可能判成 Positive,业务里就是 Spam。

口条:预训练懂语言,微调懂业务。 标签和口径跟通用集不一致,就必须微调。

重点 AutoModel 和 AutoModelFor… 分别是什么?

口述:Auto* 是工厂,按 config.json 自动选 BERT / GPT 等实现。差在出什么:只要特征,还是直接出任务分数。

  1. AutoModel(Base) — 只有大脑。输出 Hidden States,一堆高维向量,人看不懂。适合自己在后面搭头、做特征、做检索向量。
  2. AutoModelForSequenceClassification(带头) — 大脑 + 嘴巴。Base 后面接一层全连接 Classification Head,直接出各类别 Logits,再 argmax 就是标签。

ForTokenClassificationForQuestionAnsweringForCausalLM 同理:都是 Base + 对应任务头。微调分类用带头的;只想抠 [CLS] 向量用 Base。

python
import os
os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"  # import 之前
os.environ["HF_HOME"] = "/path/to/hf_cache"         # model 和 tokenizer 缓存

from transformers import AutoModel, AutoModelForSequenceClassification

base_model = AutoModel.from_pretrained("bert-base-chinese")
cls_model = AutoModelForSequenceClassification.from_pretrained(
    "bert-base-chinese", num_labels=2
)
# 分类头输出形状:(batch_size, num_labels),例如 (2, 2)

num_labels 要和任务类别数一致,二分类写 2。口条:AutoModel 出向量,For… 出任务结果。

重点 Encoder-Only、Decoder-Only、Encoder-Decoder 有何区别?

答题要点

  • Encoder-Only(BERT):双向注意力,分类、NER、情感。
  • Decoder-Only(GPT/Llama):自回归生成,对话、代码、推理(当前主流 Chat)。
  • Encoder-Decoder(T5/BART):序列到序列,翻译、摘要。

加分句:先看任务是理解、生成还是转换,再报架构。



进阶

微调里 Datasets 和 DataCollator 干什么?

口述:业务数据通常在 CSV / Excel,不在 Hub。Datasets 负责加载和并行预处理;DataCollator 负责每个 batch 动态补齐,别把所有句子都垫到 512。

  1. 加载load_dataset("csv", data_files="my_data.csv")
  2. map — 不是普通 for 循环,能多进程并行。把文本列批量变成 Input IDs。
  3. DataCollator(动态补齐) — BERT 同一 batch 长度必须一致。全局补到 512:10 个字也垫 502 个 0,显卡在算空气。训练时看这一批最长(比如 50),只补到 50。速度上去、显存下来。
python
from datasets import load_dataset
raw = load_dataset("csv", data_files="my_data.csv")
tokenized = raw.map(tokenize_fn, batched=True)  # 可加 num_proc 并行

口条:CSV 进 Datasets,map 转 ID,Collator 按批最长补齐。 512 是模型上限,不是每句都要垫满。

用 Trainer API 有什么好处?

口述:HF 出现之前,训练循环要自己写 Forward、Backward、optimizer.stepzero_grad,写错一步就不收敛。Trainer 把这些脏活包掉,实例化一个类就能跑。

维度手写 PyTorch 循环HuggingFace Trainer
代码量一整段训练循环实例化 1 个类
功能日志、保存、断点续训要自己写Checkpoints、Logging 开箱即用
硬件混合精度要手配fp16=True
多卡自己上 DDP,难自动适配多卡

特殊 loss、奇葩采样,循环还是要自己写。标准微调分类 / 生成,Trainer 够用。口条:标准微调用 Trainer;它包的是循环和工程,不是把模型训得更聪明。

微调这几个名词分别指什么?

口述:面试把四个词说清就够。HF 把 NLP 从数据准备 → 训练 → 推理串成一条流水线,人盯数据和模型本身。

  1. 预训练 vs 微调 — 预训练已经会语言;微调用少量领域数据适应特定任务。
  2. 动态补齐DataCollatorWithPadding这一批最长句补齐,不是全局垫到 512。
  3. Trainer API — 封装 Forward / Backward / 保存 / 多卡,开发者专注数据和模型。
  4. 评估策略 — 每个 epoch 结束做一次评估并保存,便于盯过拟合、挑 checkpoint。对应 eval_strategy="epoch"save_strategy="epoch"

口条:预训练通识,微调上岗;Collator 按批补齐;Trainer 包循环;epoch 末评估再存盘。

Pipeline 很好用,还要不要看里面封装了什么?

口述:Pipeline 是傻瓜相机,Demo 直接拍。要深度定制或微调,必须拆开。里面第一块是 Tokenizer:把文本变成 Tensor。

  1. 词表必须和模型一套 — 不能用 BERT 的字典去切 GPT。混用就是乱码,和权重必须同一 checkpoint。
  2. Padding — 短句补长(通常补 0),GPU 要整齐矩阵才能成 batch。
  3. Truncation — 超长切掉,BERT 一类常见上限 512。截断会丢尾巴,别默认以为全看见了。
python
import os
os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"  # 必须在 import 之前

from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-chinese")
inputs = tokenizer(
    ["我爱AI", "HuggingFace真好用"],
    padding=True,
    truncation=True,
    max_length=10,
    return_tensors="pt",
)
# input_ids:字对应的数字;attention_mask:1 是真字,0 是 Padding

口条:上手用 Pipeline,微调拆 Tokenizer。 mask 里 1 才进注意力,0 是垫的。

推理部署时 Tokenizer 为什么不能跨模型混用?

答题要点

  • 模型只认 Token ID;词表和切词算法(BPE / WordPiece)各不相同,同一 ID 在不同模型含义不同。
  • 特殊符号不兼容([CLS] vs <s>)。
  • 必须和权重同一 checkpoint 配对加载,否则乱码。

加分句:和 Embedding「query/doc 必须同模型」是同一类纪律。



了解

视频基础模型 InternVideo2 / 2.5 是什么?

口述:OpenGVLab 的视频基础模型。InternVideo2 强调渐进式预训练;其后续对话向版本强化长视频与细粒度理解。具体版本能力、数据规模和榜单以对应论文与模型卡为准,不将年份或课件口径当成长期结论。

InternVideo2 三阶段

  1. 时空结构 — Video Encoder 学结构;Expert Encoder 冻结引导。
  2. 多模态对齐 — 视频 / 音频 / 文本对比学习 Align。
  3. 对话 — Q-Former + LLM,next-token 出回答。

数据重点是时空一致与标签质量。InternVid2 使用语义切段,并对视觉、音频、语音分别描述再融合;训练数据规模应回查对应模型卡或论文。

InternVideo2.5 — 基于 InternVL2.5 + LRC:自适应分层 token 压缩 HiCo(更长视频);任务偏好 TPO(跟踪/分割等细粒度)。开源 Chat 约 8B。

口条:2 = 结构→对齐→对话;2.5 = 长视频 MLLM(HiCo + TPO)。

视频多模态注释框架 VidCap 是什么?主要用哪些模型?

口述:InternVideo2 的自动注释流水线,不是聊天模型。分模态 caption,再用 LLM 融合,给视频对齐训练造高质量文本。

四个组件:

  1. Video Captioner — InternVid 视频描述流水线 → 视觉描述
  2. Audio Captioner — VideoChat + BEATs,只训 Q-Former(WavCaps)→ 音频描述
  3. Speech CaptionerWhisperV2-large → 语音字幕
  4. LLM 融合Vicuna-1.5 校正并合成 AV / AVS

每 clip 产出 V、A、S、AV、AVS 五种文本。切段常用 AutoShot。下游 InternVideo2 动作识别课件口径:16 帧冲 SOTA(数字报论文,别说亲测)。

口条:VidCap = 视/音/语 Captioner + Vicuna 融合;是数据引擎,不是 Chat 本体。


没有标注、算法没排期,怎么最快验证电商评论情感分类?

答题要点

  • HuggingFace pipelinezero-shot-classification,业务只给标签列表。
  • 封装了分词→推理→后处理,适合 Demo。
  • 准确率不够再上标注和微调;Pipeline 难深度定制。

加分句:先证明业务有没有信号,再谈训练。