Unigram 标记器:它是如何工作的?

数据挖掘 nlp 变压器 标记化
2022-02-04 11:08:58

我一直试图了解 unigram 标记器是如何工作的,因为它用于我计划使用的 sentencePiece 标记器中,但我无法理解它。

我试图阅读原始论文,其中包含的细节太少,感觉就像是明确写出来的,无法理解。我还阅读了几篇关于它的博客文章,但没有一个真正澄清它(一篇直接承认没有完全理解它)。

有人可以向我解释吗?我熟悉 EM 算法,但我看不出它与损失函数有什么关系,以便找到子词的概率......

1个回答

Huggingface Transformers 库文档中的解释似乎更平易近人:

Unigram 是 Subword Regularization: Improvement Neural Network Translation Models with Multiple Subword Candidates (Kudo, 2018)中介绍的子词标记化算法。与 BPE 或 WordPiece 相比,Unigram 将其基本词汇表初始化为大量符号,并逐步修剪每个符号以获得更小的词汇表。例如,基本词汇可以对应于所有预先标记的单词和最常见的子字符串。Unigram 不直接用于转换器中的任何模型,但它与 SentencePiece 结合使用。

在每个训练步骤中,Unigram 算法在给定当前词汇表和 unigram 语言模型的情况下定义训练数据的损失(通常定义为对数似然)。然后,对于词汇表中的每个符号,算法计算如果要从词汇表中删除符号,整体损失会增加多少。Unigram 然后删除损失增加最低的符号中的 p(p 通常为 10% 或 20%)百分比,即那些对训练数据的整体损失影响最小的符号。重复此过程,直到词汇表达到所需的大小。Unigram 算法始终保留基本字符,以便可以标记任何单词。

因为 Unigram 不是基于合并规则(与 BPE 和 WordPiece 相比),该算法有几种方法可以在训练后对新文本进行标记。例如,如果经过训练的 Unigram 分词器展示了以下词汇:

["b", "g", "h", "n", "p", "s", "u", "ug", "un", "hug"],

"hugs" 可以被标记为 ["hug", "s"], ["h", "ug", "s"] 或 ["h", "u", "g", "s"]。那么选择哪一个呢?Unigram 在保存词汇表的基础上保存了训练语料库中每个标记的概率,以便可以在训练后计算每个可能的标记化的概率。该算法只是在实践中选择最可能的标记化,但也提供了根据概率对可能的标记化进行采样的可能性。

这些概率由训练标记器的损失定义。假设训练数据由单词𝑥1,…,𝑥𝑁组成,并且单词𝑥𝑖的所有可能标记的集合定义为𝑆(𝑥𝑖),那么总损失定义为

L=i=1Nlog(xS(xi)p(x))

有些部分不是很详细,但是,例如,它如何将基本(种子)词汇表初始化为大量符号”。这部分在第 3.2 节末尾的原始文章中进行了更清楚的解释:

有几种方法可以准备种子词汇。自然的选择是使用语料库中所有字符和最频繁子串的并集。使用增强后缀数组算法(Nong et al., 2009)时间和空间中枚举频繁子串,其中 T 是语料库的大小。O(T)O(20T)

关于用于计算概率的期望最大化算法的细节,会发生以下情况:

  1. 【期望】通过词汇表中对应的频率计数来估计每个子词的概率
  2. 【最大化】使用维特比算法对语料进行分割,返回最优的分割。

您可以在本教程中查看详细信息以及实际示例