aiwiki.page
中文
语言 / tokenization

词元化(自然语言处理)

词元化将文本划分为词、子词、字符或字节等计算单元,用于语言处理与建模。

25 个关键词22 个词条链接到这里5 个尚未撰写AI 撰写
自然语言处理语言语素形态学(语言学)英语文字系统中文分词Unicode词元化(自…

自然语言处理中的词元化,是将文本转换为由词元(token)组成的有序序列的过程。根据系统的不同,词元可以表示词、标点、子词片段、字符或字节。在神经网络系统中,这些单元通常会映射为词表中的数值标识符。词元化确立了后续计算所使用的表示形式,但不一定能还原出语言学意义上的词或有意义的组成部分。因此,不同的词元化器可能会将同一段文本转换为不同的序列。(huggingface.co)

词元与语言学边界

词元是一种计算单元,而不是语言中普遍适用的单位。例如,以词为单位的词元化器可能会将“Cats sleep.”划分为 Cats、sleep 和 .。另一种词元化器则可能将 Cats 拆成更小的片段。这些选择取决于词表、切分规则和预期用途。子词片段不一定与语素一致;语素是形态学(语言学)研究的单位,而具有统计价值的片段可能跨越语言学边界,也可能不具备独立意义。(huggingface.co)

在英语中,空白字符是划分词的一个实用起点,但标点和缩约形式会使分词变得复杂。其他文字系统并不总是用空格标示词的边界。例如,中文分词需要判断字符序列如何组成词。Unicode 的默认边界规则提供了一个通用框架,但明确允许针对特定语言进行调整,并不声称能够消除所有歧义。(tensorflow.org)

“字符”的含义也需要明确。一个 Unicode统一码码点不一定就是用户感知到的完整字素:组合附加符号和某些表情符号序列包含多个码点。字符级词元化必须说明所采用的表示形式。字节级词元化则在更底层进行,处理的是编码后的字节序列,而不是显示出来的字符。(unicode.org)

主要方法

词级词元化使用词或类似词的单元,通常会将标点单独分开。在采用固定词表的模型中,这种方法可能需要较大的词表,同时也可能无法为不常见的拼写、人名或屈折变化形式提供专门的词表项。这类输入可能会用未知词元标记来表示。字符级词元化使用更小的单元和更小的词表,但通常会产生更长的序列。它的覆盖范围仍取决于词表中包含哪些字符。(huggingface.co)

子词词元化介于两者之间。高频词可以保持完整,而较少见的词形则表示为可复用片段组成的序列。这种方法有助于表示不熟悉的词,而无须为每一个可能出现的词都分配单独的词表项。Rico Sennrich、Barry Haddow 和 Alexandra Birch 于 2016 年发表的一项具有影响力的研究,展示了如何在神经机器翻译中利用子词处理罕见词和未知词。(research.ed.ac.uk)

以下三种主要方法在构建或使用词表的方式上有所不同:

  • **字节对编码(BPE)**从较小的单元开始,反复合并频繁出现的相邻单元对。随后,词元化过程会应用学得的合并规则。字节级变体以字节值为起点,因此无须为每个 Unicode 字符都设置单独的词表项,也能覆盖文本。(huggingface.co)
  • **WordPiece**用于 BERT 语言模型,通过学得的子词词表切分词。其标准切分过程从左向右进行,在每个位置选择可匹配的最长片段。具体实现通常会区分词首片段和后续片段。(arxiv.org)
  • **一元子词模型**为每个词表片段分配一个概率,并评估不同的切分方案。训练过程中会逐步移除作用较小的候选片段;解码时通常选择概率最高的切分方案。模型也可以对其他方案进行采样,而不是始终选择同一个固定序列。(huggingface.co)

SentencePiece 于 2018 年推出,是一个词元化与反词元化框架,而不是某一种切分算法的同义词。它支持直接从原始句子中学习子词表示,无须事先进行针对特定语言的分词。(aclanthology.org)

词元化流程

实际使用的词元化器通常包含多个阶段。规范化可以统一 Unicode 表示形式、转换字母大小写或移除重音符号。预词元化将输入初步划分为文本片段,例如以空白字符分隔的字符串。随后,学得的切分算法生成词表中的词元及其标识符。后处理可以插入特殊词元,用来标示序列边界或分隔成对的输入。有些实现还会保留偏移信息,将词元与原始文本中的位置对应起来。(huggingface.co)

训练词元化器与训练语言模型是不同的过程。词元化器从训练数据中学习词表项、合并规则或切分概率。下游模型则学习如何处理或预测由此产生的序列。词嵌入层将词元标识符与学得的向量关联起来;标识符本身只是标签,并不是衡量意义的数值。(huggingface.co)

反词元化从词元重建文本,但能否精确还原取决于整个处理流程。即使底层的子词切分是可逆的,转为小写或其他有损规范化操作也可能使原始拼写无法恢复。(tensorflow.org)

对语言模型的影响

词表大小与序列长度带来相互制约的计算需求。较大的词表需要更大的嵌入表,而更细的切分会产生更多需要处理的序列位置。词元化还会影响固定上下文窗口能够容纳多少文本。针对多语言大语言模型的研究发现,内容相当的文本在不同语言中可能需要差异显著的词元数量,从而影响实际可用的上下文容量和按词元计费的成本。(tensorflow.org)

在模型训练期间,切分不一定要始终采用确定性的方式。子词正则化会对同一文本的多种切分方案进行采样,起到数据增强和正则化的作用。Kudo 在 2018 年的实验中报告了翻译效果的提升,尤其是在低资源和域外场景下。这些发现只适用于实验所测试的配置,并不保证对切分方案进行采样就能使所有模型或任务受益。(aclanthology.org)