Tiny BPE Trainer 소개
GPT부터 RoBERTa까지 오늘날 대부분의 최신 NLP 모델은 **바이트 쌍 인코딩(BPE)**을 사용한 하위 단어 토큰화에 의존합니다. 하지만 순수 C++로 자신만의 어휘를 학습시키고 싶다면 어떻게 해야 할까요?
Tiny BPE Trainer를 만나보세요. 최신 C++17/20으로 작성된 놀랍도록 빠른 헤더 전용 BPE 트레이너로, 종속성 없음, 완벽한 UTF-8 지원, 그리고 HuggingFace 호환 출력(vocab.txt
, merges.txt
)을 제공합니다.
왜 또 다른 BPE 트레이너가 필요할까요?
기존 옵션은 다음과 같은 경우가 많습니다.
- Python 전용, 높은 런타임 종속성(Rust, Protobuf 등)
- C++ 애플리케이션에 쉽게 임베드할 수 없음
- 속도, 단순성 또는 크로스 플랫폼 사용에 중점을 두지 않음
Tiny BPE Trainer의 특징은 다음과 같습니다.
- 헤더 전용
- 크로스 플랫폼(Linux, Windows, macOS)
- HuggingFace 호환
- 제 다른 프로젝트인 Modern Text Tokenizer 와 완벽하게 호환됩니다.
핵심 기능
- 일반 텍스트 또는 JSONL 데이터세트를 사용한 완전한 BPE 학습
- CLI 및 C++ API 지원 - 툴링 또는 임베드에 적합
- HuggingFace 호환 출력 (
vocab.txt
,merges.txt
) - UTF-8 안전 – 이모지, 다국어 스크립트, 특수 문자 처리
- 구성 가능 – 소문자, 구두점 분리, 최소 빈도 등
- 데모 모드 – 한 줄 명령으로 모든 것을 테스트
데모
1./Tiny-BPE-Trainer --demo
합성 코퍼스를 생성하고, 어휘를 학습하고, 통계를 출력하고, 토큰화를 실행하는 모든 작업을 단 몇 초 만에 완료합니다. CI 및 스모크 테스트에 적합합니다.
BPE 토크나이저 학습 방법
빌드하기
1g++ -std=c++17 -O3 -o Tiny-BPE-Trainer Tiny-BPE-Trainer.cpp
코퍼스에서 학습하기
1./Tiny-BPE-Trainer -i corpus.txt -v 16000 -o my_tokenizer
또는 JSONL에서:
1./Tiny-BPE-Trainer -i dataset.jsonl --jsonl -v 32000
텍스트 토큰화
1./Tiny-BPE-Trainer --test "안녕하세요! 테스트입니다."
Modern Text Tokenizer와 완벽하게 호환
훈련이 완료되면, 제 Modern Text Tokenizer 에서 사용자 지정 어휘를 직접 사용할 수 있습니다.
1TextTokenizer tokenizer;
2tokenizer.load_vocab("my_tokenizer_vocab.txt");
3auto ids = tokenizer.encode("Hello world!");
이렇게 하면 런타임 종속성이 전혀 없는 완전한 C++ 토크나이저 파이프라인을 얻을 수 있습니다.
실제 데이터셋 사용
HuggingFace 데이터셋을 사용하여 코퍼스를 쉽게 생성할 수 있습니다.
1from datasets import load_dataset
2
3dataset = load_dataset("imdb", split="train")
4with open("corpus.txt", "w", encoding="utf-8") as f:
5 for x in dataset:
6 f.write(x["text"].strip().replace("\n", " ") + "\n")
그런 다음 훈련하세요:
1./Tiny-BPE-Trainer -i corpus.txt -v 16000 -o imdb_tokenizer
벤치마크
1처리된 문자 수: 3,300만 자
2고유 단어 수: 10만 6천 단어
3어휘 크기: 32,000개
4훈련 시간: 약 30분(Ryzen 9, -O3)
대용량 코퍼스 파일(IMDB, WikiText)에서도 Tiny BPE Trainer는 효율적이고 예측 가능한 성능을 제공하며 HuggingFace, SentencePiece 및 자체 C++ 토크나이저와 호환되는 어휘를 생성합니다.
사용 사례
- LLM 및 변환기를 위한 맞춤형 토크나이저 훈련
- Python을 사용할 수 없는 환경에서 기기 내 자연어 처리
- 고성능 전처리기 구축
- 도메인별 어휘 훈련(법률, 의료, 코드)
지금 사용해 보세요
1git clone https://github.com/Mecanik/Tiny-BPE-Trainer
2cd Tiny-BPE-Trainer
3g++ -std=c++17 -O3 -o Tiny-BPE-Trainer Tiny-BPE-Trainer.cpp
4./Tiny-BPE-Trainer --demo
고급 옵션, CLI 플래그 및 통합 팁은 GitHub의 전체 README를 확인하세요.
NLP 및 C++ 커뮤니티를 위해 ❤️로 제작되었습니다.
마음에 드셨다면 GitHub에 별표를 표시해 주세요 , 프로젝트에 사용하거나 기여해 주세요!
댓글