现代文本分词器简介

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 构建

OSStatus
Ubuntu
Windows
GitHub ActionsCI

用例

  • 使用 C++ 实现机器学习模型的文本预处理
  • 设备端自然语言处理(无 Python 开销)
  • 高性能命令行工具
  • 无需运行时依赖的嵌入式系统

立即试用

Modern Text Tokenizer 现已上线,可用于您的项目。

几秒钟内即可克隆、编译和分词:Modern Text Tokenizer