LlamaTokenizer encodes some runs of repeated characters differently from SentencePiece
I maintainer di solito rispondono entro 2 giorni
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 88/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- csharp
- Ambito
- machine-learning
Direzione di ricerca
Inizia in SentencePieceBpeModel.cs leggendo SymbolPair.CompareTo e confronta la gestione dei pareggi con l’implementazione di CodeGenTokenizer. Poi esamina LlamaTestData ed esegui i test del tokenizer che coprono i casi elencati di caratteri ripetuti. Il lavoro è completato quando i casi aggiunti corrispondono agli ID di SentencePiece e i test esistenti del tokenizer hanno esito positivo.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
System Information (please complete the following information):
- OS & Version: Windows 11
- ML.NET Version: Microsoft.ML.Tokenizers 3.0.0-preview.26457.2, same code on main at 681cfb6b
- .NET Version: .NET 10.0
Describe the bug
LlamaTokenizer encodes some runs of repeated characters differently from SentencePiece. When several pairs of symbols can merge into pieces with the same score, SentencePiece merges the leftmost pair first, while SentencePieceBpeModel merges the rightmost one.
To Reproduce
using Stream stream = File.OpenRead("tokenizer.model"); // https://huggingface.co/hf-internal-testing/llama-tokenizer
LlamaTokenizer tokenizer = LlamaTokenizer.Create(stream);
Console.WriteLine(string.Join(", ", tokenizer.EncodeToIds("____")));
| Text | LlamaTokenizer |
SentencePiece 0.2.2 |
|---|---|---|
____ |
1, 4770, 1649 (▁__, __) |
1, 903, 22359 (▁_, ___) |
...... |
1, 6317, 3045 (▁.., ....) |
1, 13035, 636 (▁...., ..) |
~~~~ |
1, 3695, 30022, 7377 (▁~, ~, ~~) |
1, 3695, 7377, 30022 (▁~, ~~, ~) |
Hugging Face tokenizers gives the same ids as SentencePiece. The difference is rare in prose but common in source code, where indentation and separator lines such as // ---------------- are runs of one character. Compared with SentencePiece 0.2.2:
| Corpus | Texts | Encoded differently from SentencePiece |
|---|---|---|
| WikiText-103, test split | 2,891 paragraphs | 1 (0.03%) |
| XNLI, test split, 15 languages | 75,150 sentences | 39 (0.05%) |
| Source code in C#, Java, Python, C++ and TypeScript from public repositories | 7,560 blocks of 20 lines | 1,567 (20.7%) |
| Total | 85,601 | 1,607 |
In code, for instance, a line indented by 20 spaces before if starts with ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁, ▁▁▁, ▁if in SentencePiece and with ▁▁▁, ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁, ▁if in LlamaTokenizer. With the fix below, no text in the three sets differs.
Expected behavior
The ids SentencePiece produces. Its SymbolPairComparator in bpe_model.cc ranks a pair lower when the scores are equal and its left is greater (i1 == i2 && h1.left > h2.left), so the leftmost pair merges first.
Additional context
SymbolPair.CompareTo in SentencePieceBpeModel.cs breaks ties with other.Left.CompareTo(Left), which dequeues the rightmost pair first; the SymbolPair of CodeGenTokenizer uses Left.CompareTo(other.Left). I have a fix, Left.CompareTo(other.Left), with the three cases above added to LlamaTestData, and would like to contribute it.
- Lingua principale
- C#
- Stelle
- 9.4k
- Fork
- 2k
- Merge medio
- 4g 14h
- PR unite (30g)
- 33
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di dotnet/machinelearning
-
BertTokenizer merges words separated only by `\n`, `\t` or `\r`Forse già presa @rosebyte l’ha presa 21 giorni fa. Apertaarea-Tokenizers green
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
dotnet/machinelearning#7724 · 2 commenti · 1 assegnatario ·
I maintainer di solito rispondono entro 2 giorni
-
Comment in example code not matching docstring for TimeSeriesCatalog.DetectSeasonality MethodApertaarea-TimeSeries documentation untriaged
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 90/100
dotnet/machinelearning#7205 ·
I maintainer di solito rispondono entro 2 giorni
-
area-ONNX documentation Priority:3
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
dotnet/machinelearning#5894 · 1 commento ·
I maintainer di solito rispondono entro 2 giorni
-
Add a .vsconfig fileApertaarea-Infrastructure Priority:2
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
dotnet/machinelearning#3260 · 2 commenti · 1 reazione ·
I maintainer di solito rispondono entro 2 giorni
-
area-Core enhancement Priority:3
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
dotnet/machinelearning#2669 · 1 commento ·
I maintainer di solito rispondono entro 2 giorni
Tutte le issue di dotnet/machinelearning
Issue simili
-
area-signalr
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
dotnet/aspnetcore#69842 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 64/100
I maintainer di solito rispondono entro 2 giorni
-
bug needs-triage
Difficoltà 2/5 Meno di un'ora Idoneità per principianti 78/100
microsoft/microsoft-ui-reactor#1373 ·
I maintainer di solito rispondono entro 1 giorno
-
Client customer-reported KeyVault needs-team-attention question Service Attention
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
Azure/azure-sdk-for-net#63861 · 3 commenti · 1 reazione ·
I maintainer di solito rispondono entro 1 giorno
-
:watch: Not Triaged dotnet-csharp/svc fundamentals/subsvc
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 85/100
I maintainer di solito rispondono entro 1 giorno