【AI面试秘籍】| 第24期:Transformers / LLM的词表应该选多大?
在构建和训练Transformers以及大型语言模型 (LLM) 时,词表 (Vocabulary) 大小的选择是一个至关重要且常常令人困惑的问题。它不仅直接影响模型的性能,还关系到模型的计算效率和内存占用。那么,当面试官抛出这个问题时,我们应该如何专业且全面地回答呢?
1. 理解词表的本质及其重要性 🎯
首先,我们需要明确词表是什么。简单来说,词表是模型能够理解和处理的最小语言单元 (token) 的集合。这些单元可以是字 (character)、词 (word),或者更常见的子词 (subword),例如通过 Byte Pair Encoding (BPE) 或 WordPiece 等算法构建的单元。
词表的大小直接决定了以下几个方面:
- 模型覆盖率:一个更大的词表可以覆盖更多的词汇,从而减少未登录词 (Out-of-Vocabulary, OOV) 的出现。OOV问题会导致模型无法准确理解输入文本的含义。
- 模型参数量:词表大小是模型输入层和输出层(尤其是softmax层)参数量的主要决定因素之一。词表越大,这两层的参数矩阵就越大,进而增加模型的整体大小和内存需求。
- 计算复杂度:尤其是在输出层进行softmax计算时,词表大小直接影响计算的复杂度。更大的词表意味着更昂贵的计算。
- 表示的粒度:基于字的词表粒度最细,但序列长度会很长;基于词的词表粒度较大,但容易出现OOV;子词则在两者之间取得了较好的平衡。
2. 词表大小选择的权衡因素 ⚖️
选择合适的词表大小需要在多个因素之间进行权衡:
-
任务和语料特性:
- 通用领域 vs. 特定领域:通用领域的模型(如GPT系列)通常需要更大的词表来覆盖广泛的语言现象。而特定领域的模型(如医学、法律领域的LLM)可以适当缩小词表,专注于领域内的专业词汇,甚至可以考虑是否需要重新构建词表。
- 语言特性:对于形态丰富的语言(如德语、俄语),词的变化形式多样,使用子词或更大的词表可能更有优势。对于中文这类以字为基本单位的语言,可以考虑基于字的词表或较小规模的子词词表。
- 语料库大小:训练语料库的大小也会影响词表的选择。如果语料库较小,过大的词表可能导致很多词的词频过低,无法得到充分训练。
-
模型性能与OOV:
- 理论上,词表越大,OOV问题越少,模型对生僻词的理解能力越强。然而,当词表大到一定程度后,新增词汇带来的性能提升可能会边际递减。
- 对于非常罕见的词,即使加入词表,由于其在训练数据中出现的次数过少,模型也难以学习到其准确的语义表示。
-
计算资源与效率:
- 更大的词表意味着更大的模型体积,需要更多的显存 (VRAM) 进行训练和推理。
- Softmax层的计算量与词表大小成正比,尤其是在训练过程中,这会显著影响训练速度。
- 虽然有一些技术如分层softmax (Hierarchical Softmax) 或采样softmax (Sampled Softmax) 可以缓解大词表带来的计算压力,但它们也可能引入额外的复杂性或近似误差。
-
子词切分算法的影响:
- BPE, WordPiece, SentencePiece 等子词算法本身就会影响最终词表的大小和构成。这些算法的目标是在固定的词表大小下,尽可能高效地表示文本,并减少OOV。
- 在选择词表大小时,通常会先运行这些子词切分算法,并观察在不同词表规模下,文本被切分的情况以及OOV的比例。
3. 业界常见实践与经验法则 💡
虽然没有一个“放之四海而皆准”的完美词表大小,但我们可以参考一些业界的实践和经验:
-
常见范围:对于大多数基于子词的LLM,词表大小通常在 30,000 到 100,000+ 之间。
- 例如,早期的BERT模型词表大小约为30,000 (英文) 和 21,128 (中文)。
- GPT系列模型的词表大小有所不同,GPT-2约为50,257,GPT-3及其后续模型也大致在这个量级或略有增加,通常会包含一些特殊token。
- 多语言模型(如XLM-R)通常拥有更大的词表,例如250,000,以覆盖多种语言的字符和子词。
-
经验法则:
- 覆盖率与词频:一个常见的做法是,选择一个能覆盖训练语料中99%~99.9% 词汇(按词频计算)的词表大小。过于稀有的词即使加入词表,学习效果也有限。
- Token长度与信息密度:理想的词表应该使得平均每个词被切分成的token数量不宜过多(例如,平均每个词1.x个token),以保证信息密度和处理效率。
- 可对齐性 (Alignability):对于需要跨语言或跨模态对齐的任务,词表的选择需要考虑不同语言或模态单元之间的对应关系。
-
实验与调优:
- 在实际项目中,通常会根据具体任务和数据,尝试几种不同大小的词表进行实验,评估它们在验证集上的性能表现(如困惑度Perplexity、下游任务指标)以及训练效率。
- 可以先从一个相对较小且常用的词表大小开始(如32k或50k),然后根据实验结果和资源限制进行调整。
4. 如何向面试官展示你的思考深度 👨💻
当面试官问及词表大小时,除了给出一些常见的数字范围,更重要的是展现你对此问题的深入思考:
- 定义先行:清晰地解释什么是词表及其在模型中的作用。
- 阐述权衡:详细说明选择词表大小时需要考虑的各项因素(任务、语料、性能、资源等)以及它们之间的相互制约关系。
- 列举实践:提及一些主流模型的词表大小作为参考,并解释其背后的可能原因。
- 强调方法:说明在实际工作中,你会如何通过实验和分析(如OOV率、token长度、模型性能)来确定一个合适的词表大小。
- 考虑未来/高级话题 (加分项):
- 可以提及词表扩展 (Vocabulary Expansion) 的技术,即在预训练模型的基础上,如何为特定领域或新语言增加词汇。
- 讨论无词表模型 (Vocab-free Models) 或基于字节的模型 (Byte-level Models) 的概念,它们旨在完全消除OOV问题,但可能面临序列更长、计算效率更低等挑战。例如,ByT5、CANINE。
- 提及一些优化大词表softmax计算的技术。
5. 总结与建议 ✍️
选择合适的词表大小是一个经验与实验相结合的过程。理解其背后的原理和权衡是关键。
- 不要追求绝对的最优,而是追求最适合当前任务、数据和资源的方案。
- 从小处着手,逐步迭代:如果时间和资源允许,可以从一个标准大小开始,然后进行增减实验。
- 关注子词切分的效果:确保子词切分算法能够有效地表示文本,减少不必要的切分。
想学习AI更多干货可查看往期内容
- 【AI面试秘籍】| 第7期:多轮对话如何实现长期记忆?高频考点解析+代码实战-CSDN博客
- 💡大模型中转API推荐
技术交流:欢迎在评论区共同探讨!更多内容可查看本专栏文章,有用的话记得点赞收藏噜!