现代文本分词器简介
BERT、DistilBERT 和其他基于 Transformer 的架构等现代自然语言处理 (NLP) 模型高度依赖于有效的分词。但 C++ 开发者经常面临诸多限制,例如依赖项过多、Unicode 支持不佳,或与基于词汇的编码器缺乏兼容性。
正因如此,我创建了 现代文本分词器——一款速度超快、仅使用标头文件的 C++ 分词器,它支持 UTF-8 编码、零依赖,并且开箱即用,机器学习就绪。
它的独特之处?
- 零依赖 – 无需 Boost、无需 ICU、无需外部库。
- UTF-8 安全 – 可正确处理多语言文本、表情符号和多字节字符。
- 仅使用标头文件 – 将其添加到您的项目中即可使用。
- 词汇编码 – 从 HuggingFace 加载
vocab.txt
并生成 token ID。 - Transformer-Ready – 支持
[CLS]
、[SEP]
、[PAD]
和序列格式。
主要功能
- 使用
std::string_view
快速实现 ASCII 与 Unicode 分支 - 流畅的配置 API:
1 TextTokenizer tokenizer; 2 tokenizer 3 .set_lowercase(true) 4 .set_split_on_punctuation(true) 5 .set_keep_punctuation(true);
- 加载词汇:
1 tokenizer.load_vocab("vocab.txt");
- 编码/解码:
1 auto ids = tokenizer.encode("Hello world!"); 2 std::string decoded = tokenizer.decode(ids);
表现
1174000 个字符的性能测试
2
3结果:
4标记化:2159 μs(22000 个标记)
5编码:1900 μs
6解码:430 μs
7总时间:4.49 毫秒
8吞吐量:36.97 MB/s
基于 Ryzen 9 5900X @ -O3 的发布模式进行基准测试
使用方法
添加头文件:
1#include "Modern-Text-Tokenizer.hpp"
然后编译:
1g++ -std=c++17 -O3 -o tokenizer_demo main.cpp
想要将它与 BERT 或 DistilBERT 一起使用吗?只需下载词汇文件即可:
1curl -O https://huggingface.co/distilbert/distilbert-base-uncased/raw/main/vocab.txt
跨平台 CI 构建
OS | Status |
---|---|
Ubuntu | ✅ |
Windows | ✅ |
GitHub Actions |
用例
- 使用 C++ 实现机器学习模型的文本预处理
- 设备端自然语言处理(无 Python 开销)
- 高性能命令行工具
- 无需运行时依赖的嵌入式系统
立即试用
Modern Text Tokenizer 现已上线,可用于您的项目。
几秒钟内即可克隆、编译和分词:Modern Text Tokenizer
评论