albert-khmer-codeswitch-tokenizer

This model is a Khmer-English Code-Switching ALBERT based on seanghay/albert-khmer-small, further pre-trained on a massive bilingual corpus with explicit code-switching data.

The model excels at understanding and processing mixed Khmer-English text, making it ideal for applications like sentiment analysis, named entity recognition, and question answering in code-switched contexts.

Model Details

  • Developed by: NOSON
  • Model type: ALBERT (A Lite BERT)
  • Language(s): Khmer (km), English (en)
  • License: Apache-2.0
  • Finetuned from model: seanghay/albert-khmer-small

Model Description

This model extends the original Khmer ALBERT with enhanced capabilities for:

  • Code-switching: Handles mixed Khmer-English text.
  • Technical vocabulary: Better understanding of tech terms, URLs, and modern language.
  • Cultural preservation: Maintains high integrity of complex Khmer words.

Training Data

The model was trained on a carefully balanced corpus consisting of:

  • Khmer Wikipedia (2023-2024 dumps)
  • WikiText-103 (English)
  • MC4 (Khmer & English subsets)
  • Custom Code-Switching Corpus (injected synthetic examples)

Training Procedure

Tokenizer Specifications

  • Algorithm: SentencePiece Unigram
  • Vocabulary Size: 64,000 tokens
  • Character Coverage: 1.0 (ensures perfect handling of all Khmer diacritics and subscripts)
  • Special Handling: Forced vocabulary injection for critical technical terms.

Evaluation Results

Lower TPC is better; higher percentages are better for integrity.

Metric This Model (64K) ALBERT Base (16K) XLM-R Base (250K)
TPC (Khmer) 0.114 βœ… 0.164 0.264
Lossless Round-Trip Yes βœ… Yes Yes
Tokenization Speed 0.3M tok/s 0.3M tok/s 0.4M tok/s

Complex Word Integrity Breakdown

Complex Word Meaning This Model ALBERT Base XLM-R Base
αž’αž˜αŸŒ Dharma βœ… 1 token ❌ 2 tokens ❌ 2 tokens
αž€αž˜αŸ’αž˜ Karma βœ… 1 token ❌ 2 tokens ❌ 2 tokens
αž“αž·αž–αŸ’αžœαžΆαž“ Nirvana βœ… 1 token ❌ 4 tokens ❌ 3 tokens
αž’αž—αž·αžœαžŒαŸ’αžαž“αŸ Development ❌ 2 tokens ❌ 2 tokens ❌ 2 tokens
αžŸαŸαžŠαŸ’αž‹αž€αž·αž…αŸ’αž… Economy βœ… 1 token ❌ 2 tokens βœ… 1 token
αž”αŸ’αžšαž‡αžΆαž’αž·αž”αžαŸαž™αŸ’αž™ Democracy βœ… 1 token ❌ 2 tokens ❌ 2 tokens
αž’αž’αž·αž”αžαŸαž™αŸ’αž™ Sovereignty βœ… 1 token ❌ 2 tokens ❌ 5 tokens

πŸ” Tokenization Examples

The true power of this custom 64K tokenizer is visible in how it handles complex Khmer morphology, mixed scripts, and English words without unnecessary fragmentation.

Click to expand detailed tokenization comparisons

1. Mixed Script Words

Text: The Khmer-English dictionary is very αž›αŸ’αž’αžŽαžΆαžŸαŸ‹αŸ”

  • βœ… OUR (11 tokens): ['The', 'Khmer', '-', 'English', '', 'dictionary', 'is', 'very', '', 'αž›αŸ’αž’αžŽαžΆαžŸαŸ‹', 'αŸ”']
  • ❌ ALBERT (18 tokens): ['The', 'Kh', 'mer', '-', 'E', 'ng', 'li', 'sh', '', 'dict', 'ion', 'ary', 'is', 'very', '', 'αž›αŸ’αž’', 'αžŽαžΆαžŸαŸ‹', 'αŸ”'] (Fractures "Khmer", "English", "dictionary")
  • ⚠️ XLM-R (12 tokens): ['The', 'Khmer', '-', 'English', 'di', 'ction', 'ary', 'is', 'very', 'αž›αŸ’αž’', 'αžŽαžΆαžŸαŸ‹', 'αŸ”']

2. Pure Khmer (Complex Compound)

Text: αž–αŸ’αžšαŸ‡αž–αž»αž‘αŸ’αž’αžŸαžΆαžŸαž“αžΆαž˜αžΆαž“αžŸαžΆαžšαŸˆαžŸαŸ†αžαžΆαž“αŸ‹αŸ”

  • βœ… OUR (3 tokens): ['αž–αŸ’αžšαŸ‡αž–αž»αž‘αŸ’αž’αžŸαžΆαžŸαž“αžΆ', 'αž˜αžΆαž“αžŸαžΆαžšαŸˆαžŸαŸ†αžαžΆαž“αŸ‹', 'αŸ”'] (Perfectly intact)
  • ❌ ALBERT (4 tokens): ['', 'αž–αŸ’αžšαŸ‡αž–αž»αž‘αŸ’αž’αžŸαžΆαžŸαž“αžΆ', 'αž˜αžΆαž“αžŸαžΆαžšαŸˆαžŸαŸ†αžαžΆαž“αŸ‹', 'αŸ”']
  • ❌ XLM-R (8 tokens): ['αž–αŸ’αžšαŸ‡', 'αž–αž»αž‘αŸ’αž’', 'αžŸαžΆαžŸαž“αžΆ', 'αž˜αžΆαž“', 'សអរ', 'ៈ', 'αžŸαŸ†αžαžΆαž“αŸ‹', 'αŸ”'] (Severely fractured)

3. Pure Khmer (Formal)

Text: αž“αžΆαž™αž€αžšαžŠαŸ’αž‹αž˜αž“αŸ’αžαŸ’αžšαžΈαž”αžΆαž“αžαŸ’αž›αŸ‚αž„αžŸαž»αž“αŸ’αž‘αžšαž€αžαžΆ

  • βœ… OUR (3 tokens): ['αž“αžΆαž™αž€αžšαžŠαŸ’αž‹αž˜αž“αŸ’αžαŸ’αžšαžΈ', 'αž”αžΆαž“αžαŸ’αž›αŸ‚αž„', 'αžŸαž»αž“αŸ’αž‘αžšαž€αžαžΆ']
  • βœ… ALBERT (3 tokens): ['αž“αžΆαž™αž€αžšαžŠαŸ’αž‹αž˜αž“αŸ’αžαŸ’αžšαžΈ', 'αž”αžΆαž“', 'αžαŸ’αž›αŸ‚αž„αžŸαž»αž“αŸ’αž‘αžšαž€αžαžΆ']
  • ❌ XLM-R (9 tokens): ['', 'αž“αžΆαž™αž€αžšαžŠαŸ’αž‹αž˜αž“αŸ’αžαŸ’αžšαžΈ', 'αž”αžΆαž“', 'αžαŸ’', 'αž›αŸ‚αž„', 'សុ', 'αž“αŸ’αž‘', 'αžšαž€', 'ថអ'] (Fractures sub-consonants)

4. Pure Khmer (Long Sentence)

Text: αž–αŸ’αžšαŸ‡αž–αž»αž‘αŸ’αž’αžŸαžΆαžŸαž“αžΆαž‚αžΊαž‡αžΆαžŸαžΆαžŸαž“αžΆαž…αž˜αŸ’αž”αž„αž€αŸ’αž“αž»αž„αž”αŸ’αžšαž‘αŸαžŸαž€αž˜αŸ’αž–αž»αž‡αžΆαŸ”

  • βœ… OUR (6 tokens): ['αž–αŸ’αžšαŸ‡αž–αž»αž‘αŸ’αž’αžŸαžΆαžŸαž“αžΆ', 'αž‚αžΊαž‡αžΆ', 'αžŸαžΆαžŸαž“αžΆ', 'αž…αž˜αŸ’αž”αž„', 'αž€αŸ’αž“αž»αž„', 'αž”αŸ’αžšαž‘αŸαžŸαž€αž˜αŸ’αž–αž»αž‡αžΆαŸ”']
  • ❌ ALBERT (8 tokens): ['', 'αž–αŸ’αžšαŸ‡αž–αž»αž‘αŸ’αž’αžŸαžΆαžŸαž“αžΆ', 'αž‚αžΊαž‡αžΆ', 'αžŸαžΆαžŸαž“αžΆ', 'αž…αž˜αŸ’αž”αž„', 'αž€αŸ’αž“αž»αž„', 'αž”αŸ’αžšαž‘αŸαžŸαž€αž˜αŸ’αž–αž»αž‡αžΆ', 'αŸ”']
  • ❌ XLM-R (10 tokens): ['αž–αŸ’αžšαŸ‡', 'αž–αž»αž‘αŸ’αž’', 'αžŸαžΆαžŸαž“αžΆ', 'αž‚αžΊαž‡αžΆ', 'αžŸαžΆαžŸαž“αžΆ', 'αž…αž˜αŸ’', 'αž”αž„', 'αž€αŸ’αž“αž»αž„', 'αž”αŸ’αžšαž‘αŸαžŸαž€αž˜αŸ’αž–αž»αž‡αžΆ', 'αŸ”']

5. Pure English (Complex)

Text: The quick brown fox jumps over the lazy dog.

  • βœ… OUR (10 tokens): ['The', 'quick', 'brown', 'fox', 'jumps', 'over', 'the', 'lazy', 'dog', '.']
  • ❌ ALBERT (13 tokens): ['The', 'quick', 'brown', 'f', 'ox', 'jump', 's', 'over', 'the', 'la', 'zy', 'dog', '.']
  • ❌ XLM-R (13 tokens): ['The', 'quick', 'brown', '', 'fox', 'jump', 's', 'over', 'the', 'la', 'zy', 'dog', '.']

πŸ’» How to Use

1. Load the Model and Tokenizer

from transformers import AutoTokenizer, AlbertForMaskedLM

# Load from Hugging Face Hub
tokenizer = AutoTokenizer.from_pretrained("noson71/albert-khmer-codeswitch-64k")
model = AlbertForMaskedLM.from_pretrained("noson71/albert-khmer-codeswitch-64k")

# Test tokenization
text = "αž™αžΎαž„αž€αŸ†αž–αž»αž„αžŸαž·αž€αŸ’αžŸαžΆαž’αŸ†αž–αžΈ machine learning αž“αž·αž„ blockchain technologyαŸ”"
tokens = tokenizer.tokenize(text)
print(tokens)
# Output: ['αž™αžΎαž„', 'αž€αŸ†αž–αž»αž„', 'αžŸαž·αž€αŸ’αžŸαžΆαž’αŸ†αž–αžΈ', '▁', 'machine', '▁', 'learning', 'αž“αž·αž„', '▁', 'blockchain', '▁', 'technology', 'αŸ”']
# Note: '▁' represents a space prefix in the SentencePiece Metaspace decoder.

Citation

@misc{{noson71-albert-khmer-codeswitch-tokenizer,
  author = {{NOSON.AI}},
  title = {{ALBERT Khmer Code-Switching}},
  year = {{2026}},
  publisher = {{Hugging Face}},
  url = {{https://huggingface.co/noson71/albert-khmer-codeswitch}}
}}
Downloads last month
31
Safetensors
Model size
15.6M params
Tensor type
F32
Β·
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support

Model tree for noson71/albert-khmer-codeswitch

Finetuned
(3)
this model