HuggingfaceNLP笔记6.7Unigram tokenization

Unigram算法常用于SentencePiece中,这是Albert、T5、mBART、Big Bird和XLNet等模型使用的分词算法。

💡 本节将深入讲解Unigram,包括完整的实现过程。如果你只想了解分词算法的概要,可以跳到最后。

训练算法

与BPE和WordPiece不同,Unigram的工作方式相反:它从一个大型词汇表开始,然后逐步移除其中的词汇,直到达到所需的词汇大小。构建基础词汇表的方法有很多种,例如,我们可以取预处理单词中最常见的子串,或者在初始语料库上应用大词汇量的BPE。

在训练的每一步,Unigram算法会根据当前词汇表计算语料库的损失。然后,对于词汇表中的每个符号,算法计算如果移除该符号,整体损失会增加多少,并寻找那些增加损失最少的符号。这些符号对语料库的整体损失影响较小,可以说它们“需求较低”,是最佳的移除候选。

由于这个过程很昂贵,这里的 “𝑝” 是一个超参数,你可以控制它,通常设置为10%或20%。这个过程不是仅仅移除与最小损失增加相关联的单个符号,而是移除与最小损失增加相关联的𝑝百分比的符号。然后重复这个过程,直到词汇表达到期望的大小。

注意,我们永远不会移除基本字符,以确保任何单词都能被分割。

现在,这仍然有些模糊:算法的主要部分是计算语料库的损失,并查看移除一些词汇后它如何变化,但我们还没有解释如何做到这一点。这一步依赖于Unigram模型的分词算法,我们将在下一部分深入探讨。

我们将使用之前的示例语料库:

("hug", 10), ("pug", 5), ("pun", 12), ("bun", 4), ("hugs", 5)

在这个例子中,我们将使用所有严格的子串作为初始词汇:

["h", "u", "g", "hu", "ug", "p", "pu", "n", "un", "b", "bu", "s", "hug", "gs", "ugs"]

分词算法

Unigram模型是一种语言模型,它假设每个令牌与之前的令牌独立。这是最简单的语言模型,因为给定先前上下文的令牌X的概率只是令牌X的概率。如果使用Unigram语言模型生成文本,我们总是预测最常出现的令牌。

给定令牌的概率是它在原始语料库中的频率(找到它的次数),除以词汇表中所有令牌频率之和(确保概率总和为1)。例如,“ug"在"hug”、"pug"和"hugs"中出现,所以它在我们的语料库中的频率为20。

以下是词汇表中所有可能子词的频率:

("h", 15) ("u", 36) ("g", 20) ("hu", 15) ("ug", 20) ("p", 17) ("pu", 17) ("n", 16)
("un", 16) ("b", 4) ("bu", 4) ("s", 5) ("hug", 15) ("gs", 5) ("ugs", 5)

所有频率的总和为210,因此子词"ug"的概率为20/210。

📝 现在轮到你了! 编写代码计算上述频率,并检查显示的结果是否正确,以及总和是否正确。

现在,要对给定的单词进行分词,我们查看所有可能的分割方式,并根据Unigram模型计算每种方式的概率。由于所有令牌都被视为独立的,这个概率是每个令牌概率的乘积。例如,"pug"的分词["p", "u", "g"]的概率为:

P([“p”,“u”,“g”])=P(“p”)×P(“u”)×P(“g”)=5210×36210×20210=0.000389P([“p”,“u”,“g”])=P(“p”)\times P(“u”)\times P(“g”)=\frac{5}{210}\times\frac{36}{210}\times\frac{20}{210}=0.000389P([p,u,g])=P(p)×P(u)×P(g)=2105×21036×

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NJU_AI_NB

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值