tokenization 的两种方式 BEP 和wordPiece 的区别

1、BEP(Byte Pair Encoding:):

BPE 不断的迭代将出现频率最高的字符或字符序列进行合并

 

2、wordPiece

根据语言模型进行合并,它是从所有可能的subword单元中,选择一个subword单元加入语言模型后,如果该单元能最大程度地增加训练数据LM概率,则将该单元作为新的单元

### WordPiece 算法的 Tokenization 实现 WordPiece 是一种流行的分词方法,广泛应用于自然语言处理领域。它通过构建一个有限的词汇表来表示输入文本,并动态学习高频子词单元以优化性能。以下是基于 `tokenization` 的 WordPiece 算法实现的核心逻辑。 #### 初始词汇表的构造 为了初始化 WordPiece 的词汇表,可以采用类似于 Unigram 模型的方法[^2]。具体来说,在语料库中提取所有可能的子字符串作为候选词汇项。这些子字符串包括单个字符以及连续的多个字符组合。例如,对于单词 `"cats"`,会生成如下子字符串集合: ```plaintext ['c', 'a', 't', 's', 'ca', 'at', 'ts', 'cat', 'ats'] ``` 此过程确保了词汇表覆盖尽可能多的语言结构模式。 #### 动态更新词汇表 在实际应用中,初始词汇表通常过大而无法高效存储或检索。因此,需要逐步缩减其规模至目标大小。这一阶段涉及频繁统计并合并高概率共现的字符对。利用正则表达式可以在整个语料库范围内完成这种替换操作[^1]。每次迭代都会重新计算新的频率分布,并选择最佳的合并方案。 下面是一个简单的 Python 示例代码展示如何模拟上述流程: ```python import re from collections import defaultdict, Counter def get_stats(vocab): pairs = defaultdict(int) for word, freq in vocab.items(): symbols = word.split() for i in range(len(symbols)-1): pairs[symbols[i], symbols[i+1]] += freq return pairs def merge_vocab(pair, v_in): v_out = {} bigram_pattern = re.escape(' '.join(pair)) p = re.compile(r'(?<!\S)' + bigram_pattern.replace(' ', '') + r'(?!\S)') for word in v_in: w_out = p.sub(''.join(pair), word) v_out[w_out] = v_in[word] return v_out # 初始化词汇表 (假设已经预处理过) vocab = {'l o w </w>': 5, 'l o w e s t </w>': 2, 'n e w e s t </w>': 6} num_merges = 10 # 设定最大合并次数 for i in range(num_merges): pairs = get_stats(vocab) best_pair = max(pairs, key=pairs.get) # 找到最常出现的一对 if not pairs or not best_pair: break vocab = merge_vocab(best_pair, vocab) print("最终词汇表:", list(vocab.keys())) ``` 该脚本定义了一个基础框架用于演示 WordPiece 的工作方式。注意这只是一个简化版本,真实场景下的实现还需要考虑更多细节如特殊标记符 `<unk>` 或者更复杂的冲突解决策略等[^3]。 #### 总结 以上介绍了通过 tokenization 来实现 WordPiece 算法的主要步骤及其背后的理论依据。这种方法能够有效平衡内存占用与表达能力之间的关系,成为现代 NLP 工具包的重要组成部分之一[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

samoyan

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

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

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

打赏作者

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

抵扣说明:

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

余额充值