LLM 中的 vocabulary 和 embedding vector

本文深入探讨了在大型语言模型(LLM)中,词汇表(vocabulary)的构建方法,包括分词和查表,并强调了词汇表大小对模型性能的影响。此外,介绍了embedding vector的数学基础,以及如何通过训练数据学习获得。预构建词汇表的策略,如语料统计、预定义词表、子词切分等也被讨论。最后,文章提到了可视化工具和方法,用于理解与分析embedding向量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

vocabulary

将自然语言转换为token id是根据模型使用的词汇表(vocabulary)进行的。这个过程通常分为两个步骤:

  1. 分词(Tokenization)

    将输入的自然语言文本按照某种规则分割成一系列的token,可以是单词、子词或者字符等。分词的规则需要事先定义好,通常使用诸如基于词典、基于规则、基于统计等方法。

  2. 查表(Lookup)

    将分词得到的每个token在词汇表中查找对应的数值id。词汇表本质上是一个token到整数id的映射表。对于模型来说,处理token id比处理原始文本更高效。

具体来说,模型在训练阶段会先构建一个词汇表,包含了所有可能出现的token及其对应的id。在预测时,输入文本首先被分词器分割成token序列,然后模型将每个token查表得到对应的id,运算时使用这些id代替原始token。

值得注意的是,有些token可能在训练集中从未出现过,这种情况下一般会将它们映射为一个特殊的未知token id,例如 “< unk >”。

所以token id这一步是将自然语言离散化,使其可以被模型高效处理,是连接自然语言和神经网络模型的关键环节。

词汇表的大小对语言模型的性能和效果非常重要,主要有以下几点原因:

  1. 覆盖率
    词汇表越大,能够覆盖的词汇就越多,对于拥有丰富词汇的语料来说,较大的词汇表可以更好地表示语言的多样性,避免过多的未知词。

  2. 参数量
    词汇表的大小直接决定了模型的Embedding层参数量。较大的词汇表意味着需要更多参数来存储每个词的Embedding向量,从而增加模型的容量,但也可能导致过度拟合。

  3. 计算效率
    在预测时,模型的输出层计算量与词汇表大小成正比。较大的词汇表会导致计算开销的增加,延长模型响应时间。

  4. 稀疏性
    过大的词汇表会加剧模型Embedding层的稀疏性,使得大量的Embedding向量无法被有效地利用和优化。

因此在设计语言模型时,需要在词汇表大小、模型覆盖能力、计算效率、参数量之间权衡取舍。通常采用以下策略:

  1. 对于开放域场景,需使用较大词汇表以覆盖更多词汇。

  2. 对于特定领域,可构建较小的领域词汇表。

  3. 采用子词或字符级别的表示,避免词汇表过大。

  4. 使用词汇表裁剪等技术,移除低频词。

词汇表的大小对模型非常重要,主要因为以下几个方面:

  1. 性能与精确度:一个较大的词汇表可以更精确地覆盖和表达语言的多样性,包括专业术语、新词等。这可以提高模型处理复杂文本的能力。然而,过大的词汇表可能会使模型变得参数庞大,训练和推理的计算成本增加。

  2. 泛化能力:较小的词汇表可能导致更高的词汇外(Out-Of-Vocabulary, OOV)率,即模型遇到未在词汇表中的词汇时无法正确处理。这对模型的泛化能力是不利的。通过合理设计词汇表可以减少OOV问题,例如使用子词分割(Subword Tokenization)方法。

  3. 内存与存储:词汇表的大小直接影响模型的内存使用和存储需求。更大的词汇表需要更多的内存来存储词嵌入(Word Embeddings),这可能在资源受限的环境中成为问题。

  4. 训练时间:词汇表越大,模型在训练期间需要学习的参数就越多,这可能导致训练时间延长。

预先构建词汇表

词汇表(vocabulary)是在训练语言模型之前就需要预先构建的。它定义了模型在输入和输出时将使用哪些词/字符的集合。词汇表的构建通常有以下几种常见方式:

  1. 语料统计

最常见的做法是基于大规模语料库统计词频,按一定规则(如设置词频阈值)选取高频词构建词汇表。这种方式可以覆盖语料中常见词汇。

  1. 预定义词表

在某些特定领域,可以使用预先定义好的专业词表,确保模型可以很好地覆盖该领域核心词汇。

  1. 基于规则

有些模型直接基于一套规则从训练语料中提取token,如字符级别、bytes等。这种做法无需预先统计词频。

  1. 子词切分

一些流行的做法如BPE(Byte Pair Encoding)、WordPiece等,是将单词按照统计规则切分成子词序列,子词作为词汇表的基本单元。这种方式可以处理未见词问题。

  1. 词汇表融合

在很多情况下,会将以上多种方式结合使用,构建覆盖面更广的融合词汇表。如先使用基本词表,再加入子词、专业词等。

除了上述构建词汇表的方法,还需要考虑如何处理稀有词、是否添加特殊token(如UNK)等问题。另外,为了控制模型计算复杂度,词汇表大小通常也有一定限制。

总的来说,合理构建高质量的词汇表对语言模型的性能非常重要,需要结合具体任务场景选择合适的构建策略。

例子

input: OpenAI’s large language models process text using tokens, which are common sequences of characters found in a set of text.

tokenization:

  1. 分词
    ![[Screen Shot 2024-04-27 at 22.10.40 PM.png]]
  2. 编码
    ![[Screen
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值