真实面经题目 · 原创解析

BERT 通常如何做分词,WordPiece 如何处理未登录词,特殊 token 在输入构造中有什么作用?

这题考 BERT 输入构造的基础细节。答案要说明 BERT 通常先做 BasicTokenizer,再做 WordPiece 子词切分;WordPiece 用最长匹配处理词表内子词,无法拆解时用 [UNK];同时讲清 [CLS]、[SEP]、[MASK]、[PAD]、attention mask 和 token type ids 的作用。

出现于:腾讯 · 算法

60 秒回答模板

BERT 的分词通常分两步。第一步是 BasicTokenizer,做文本清洗、大小写处理、标点切分、中文字符切分等基础处理;第二步是 WordPiece,把一个词进一步拆成词表中的子词。WordPiece 一般采用最长匹配策略,从词开头尽量匹配最长子串,后续子词会带 ## 前缀表示它不是词首。一个未见过的英文词如果可以被拆成若干词表子词,就不会变成未知词;如果完全无法由词表子词覆盖,才会映射成 [UNK]。BERT 输入还会加入特殊 token:[CLS] 放在序列开头,常用于分类任务的聚合表示;[SEP] 分隔句子或标记序列结束;[MASK] 用于 MLM 预训练;[PAD] 用于 batch 内补齐长度,并配合 attention mask 避免模型关注 padding。句子对任务还会用 token type ids 区分 A 句和 B 句。

考点 两阶段分词
难度 真实面经题
回答目标 让面试官看到你不仅知道 BERT 用 WordPiece,还能完整解释从原始文本到模型输入张量的构造过程和下游影响。

深入解析

01

BERT 分词是两级流程

BERT 不是直接按空格得到最终 token。常见流程是先用 BasicTokenizer 做基础规范化和粗切分,再用 WordPiece 做子词级切分。不同模型还会区分 cased 和 uncased,决定是否保留大小写信息。

02

BasicTokenizer 处理表面形态

BasicTokenizer 会处理空白、控制字符、标点、大小写、重音符号以及中文字符边界。对于中文,很多字符会被切成单字级 token 再进入词表匹配;对于英文,通常先得到近似 word 的片段再交给 WordPiece。

03

WordPiece 做最长匹配

WordPiece 从一个词的起始位置开始,在词表中寻找最长可匹配片段;如果不是词首,匹配到的子词通常带 ## 前缀。这样既能保留常见词整体表示,又能用子词组合表示罕见词、派生词和拼写变化。

04

OOV 不一定是 [UNK]

未登录词如果可以拆成词表中的多个子词,就可以被模型处理。例如罕见单词、拼写变体或带后缀的词,经常会被拆成词根和后缀子词。只有完全无法由词表覆盖时,才会落到 [UNK]。

05

特殊 token 构造输入格式

[CLS] 常放在开头,分类任务会取它对应的最终隐状态做整体表示;[SEP] 标记单句结束或句子对分隔;[MASK] 是遮盖语言模型预训练的关键 token;[PAD] 用于补齐同一 batch 的序列长度;[UNK] 表示无法识别的 token。

06

辅助标记也会影响模型

attention mask 告诉模型哪些位置是真实 token,哪些是 padding,避免注意力浪费在 [PAD] 上。token type ids 用于句子对任务,通常 A 句标 0,B 句标 1。再加上 position ids,三类 embedding 共同形成输入表示。

07

分词影响下游任务

WordPiece 会改变序列长度和标签粒度。做 NER、抽取式 QA 或 token 分类时,要处理原始词和子词的标签对齐;长文本要注意 subword 数变多导致截断;中文任务还要注意词边界信息可能变弱。

易错点

  • 把 BERT 分词简单说成按字或按词切,忽略 BasicTokenizer 和 WordPiece 两级流程。
  • 认为所有未登录词都会变成 [UNK],没有说明子词拆解机制。
  • 漏掉 ## 前缀含义,无法解释子词是否位于词首。
  • 只讲 token id,不讲 [CLS]、[SEP]、[MASK]、[PAD] 的作用。
  • 忽略 attention mask 和 token type ids,导致句子对任务输入解释不完整。
  • 没有说明分词对序列长度、截断、NER 标签对齐和下游效果的影响。

面试官追问

为什么 BERT 不直接用词级分词?

词级分词会让词表很大,且未登录词问题严重。WordPiece 在词和字符之间折中,用常见词保持紧凑表示,用子词处理罕见词和派生词。

[CLS] 为什么可以用于分类?

BERT 微调时会让 [CLS] 位置通过自注意力聚合整段输入信息。分类头通常接在 [CLS] 的最终隐状态上,因此它成为句子级任务的整体表示入口。

句子对任务如何构造输入?

常见格式是 [CLS] sentence A [SEP] sentence B [SEP]。同时 token type ids 将 A 句标为 0,B 句标为 1,attention mask 标记真实 token 和 padding。

WordPiece 对 NER 有什么影响?

一个原始词可能被拆成多个子词,标签需要对齐。常见做法是只在第一个子词上计算标签损失,或把标签扩展到所有子词,评估时再还原到原始词粒度。

[MASK] 在微调阶段也常出现吗?

普通分类、匹配、抽取等微调任务通常使用真实输入,不主动加入 [MASK]。它主要用于遮盖语言模型预训练,除非下游任务设计成填空式建模。