現代文本分詞器簡介

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