#分词器 #NLP #Hugging Face #阿莱夫 #阿法 #Rustic

aleph-alpha-tokenizer

一个受wordpiece启发的分词器的快速实现

4个版本 (2个重大更新)

0.3.1 2020年7月13日
0.3.0 2020年6月18日
0.2.0 2020年5月13日
0.1.0 2020年4月17日

#1763 in 算法

每月下载量31次

MIT/Apache

25KB
362

aleph-alpha-tokenizer

Rust docs.rs License: MIT/Apache

我们阿莱夫阿法非常喜欢huggingface的tokenizers crate。为这个优秀的库点赞。唯一的一个缺点是:接口针对绑定进行了优化,而不是为了在Rust中工作。

所以我们从中得到了启发,并试图改进一些东西。首先,我们想看看在实现相同的Model trait的同时,我们能使其变得多快。我们的实现基于非常好的fst crate。然后,我们添加了自己的接口,以发挥Rust的优势(主要是避免不必要的分配,重复使用数据,泛型)。

我们对改进后的性能非常满意。在我们的测试中,我们发现我们的分词器对任何给定的数据都能基本线性执行,而huggingface的wordpiece分词器在较长的多词时表现最差,表现最差。以下是一些基准测试的单核运行时间(单位:微秒)

# AlephAlphaTokenizer ~ 作为模型 wordpiece
0 749.950 1274.923 2025.289
1 1010.120 1511.214 1900.441
2 1775.973 2648.909 2995.574
3 2263.436 3598.771 12978.049
4 2262.490 3403.918 4864.752
5 2808.373 4456.960 18623.648
6 2783.996 4015.472 5362.356
7 3160.517 5048.136 9946.745
8 3016.781 4742.037 8066.818
9 3497.266 5626.896 8662.281
10 4446.626 6679.859 10584.524

(在启用所有缓解措施的情况下,在运行Fedora内核5.6.15-300.fc32.x86_64的Intel(R) Core(TM) i7-7600U CPU @ 2.80GHz上测量)

如您所见,使用我们的分词器作为模型比huggingface的wordpiece分词器快至少13%,通常更多。使用Rustic接口,我们可以省去很多分配和内存复制,所以至少快60%。

要重新运行基准测试,请调用cargo bench --all-features。否则,只会测试AlephAlphaTokenizer

许可协议

本软件包根据MIT或Apache许可证版本2进行许可,由您自行决定。

依赖项

~2–10MB
~76K SLoC