Tokenizers:HuggingFace 开源的极速分词引擎

Tokenizers:HuggingFace 开源的极速分词引擎 文章目录TokenizersHuggingFace 开源的极速分词引擎快在哪三种主流算法全覆盖API 设计三步走Alignment Tracking 这个功能值得单说跨语言绑定预处理一站式适合什么样的场景TokenizersHuggingFace 开源的极速分词引擎NLP 领域有个绕不开的基础组件叫 Tokenizer。不管你是用 BERT、GPT 还是其他语言模型第一步都是把文本切成 token。HuggingFace 开源的 Tokenizers 项目用 Rust 重写了这个关键环节Star 数 10,784。快在哪Tokenizers 的核心用 Rust 实现。一台普通服务器 CPU1GB 文本的分词不到 20 秒就能完成。传统 Python 实现的分词器处理大规模文本时会成为瓶颈。Tokenizers 把这个瓶颈直接往前挪了一大截。训练新词表和实际分词速度持平几分钟就能完成原来需要几小时的工作。三种主流算法全覆盖Tokenizers 实现了当前 NLP 领域最常用的三种分词算法BPEGPT 系列模型用的就是它通过统计字符对出现频率逐步合并高频组合WordPieceBERT 的训练方式合并策略基于概率而非频率Unigram多语言模型常用从大词表出发逐步裁减三种算法覆盖了目前几乎所有预训练模型的场景。想复现 BERT 的分词器想给自定义数据训练 GPT 风格的 tokenizer几行代码就够。API 设计三步走训练一个分词器从初始化到产出结果三步完成选模型类型初始化 Tokenizer配置预分词规则喂数据开练fromtokenizersimportTokenizerfromtokenizers.modelsimportBPEfromtokenizers.pre_tokenizersimportWhitespacefromtokenizers.trainersimportBpeTrainer tokenizerTokenizer(BPE())tokenizer.pre_tokenizerWhitespace()trainerBpeTrainer(special_tokens[[UNK],[CLS],[SEP],[PAD],[MASK]])tokenizer.train(files[wiki.train.raw,wiki.valid.raw,wiki.test.raw],trainertrainer)训练完成后编码任意文本只要一行outputtokenizer.encode(Hello, yall! How are you?)这套 API 的设计思路很明确让研究者不用关心底层实现专注模型实验。需要深度定制时它也完全开放。Alignment Tracking 这个功能值得单说大多数分词器在做标准化处理后全角转半角、统一小写token 和原始文本之间的映射关系就丢了。Tokenizers 的 normalization 模块内置了 alignment tracking任意 token 都能回溯到原始句子中的对应位置。这个能力对下游任务很有价值。做命名实体识别时你需要知道模型预测的实体标签对应原文中的哪些字。没有对齐追踪这一步需要自己写大量胶水代码。跨语言绑定底层是 Rust但 HuggingFace 提供了完整的语言绑定Python 和 Node.js 由官方维护Ruby 有社区贡献版本Rust 原生接口也直接可用。安装对 Python 用户来说就一行pip install tokenizers。预处理一站式分词前后的琐碎操作Tokenizers 都内置了超长文本自动截断、批量推理时统一填充长度、特殊 token 自动添加。这些操作在工程中容易出错统一交给 tokenizer代码能干净不少。适合什么样的场景做 NLP 研究需要快速迭代不同分词方案Tokenizers 的训练速度能缩短实验周期。做生产环境的文本处理Rust 级别的性能加上 Python 的调用便利性比纯 Python 方案稳定得多。做多语言模型Unigram 算法的支持加上 alignment tracking能省去处理多语言文字的大量繁琐工作。这是一个解决 NLP 基础设施里真实性能问题的项目10,784 的 Star 数也说明市场已经给出了判断。能省去处理多语言文字的大量繁琐工作。这是一个解决 NLP 基础设施里真实性能问题的项目10,784 的 Star 数也说明市场已经给出了判断。