Anmerkung
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen, dich anzumelden oder die Verzeichnisse zu wechseln.
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen , die Verzeichnisse zu wechseln.
Die Microsoft.ML.Tokenizers-Bibliothek bietet einen umfassenden Satz von Tools zum Tokenisieren von Text in .NET-Anwendungen. Die Tokenisierung ist wichtig, wenn Sie mit großen Sprachmodellen (LLMs) arbeiten, da sie es Ihnen ermöglicht, Tokenanzahlen zu verwalten, Kosten zu schätzen und Text für KI-Modelle vorzuverarbeiten.
In diesem Artikel erfahren Sie, wie Sie die wichtigsten Features der Bibliothek verwenden und mit verschiedenen Tokenizermodellen arbeiten.
Voraussetzungen
- .NET 8 SDK oder höher
Hinweis
Die Microsoft.ML.Tokenizers-Bibliothek unterstützt auch .NET Standard 2.0, sodass sie mit .NET Framework 4.6.1 und höher kompatibel ist.
Installiere das Paket
Installieren Sie das NuGet-Paket "Microsoft.ML.Tokenizers":
dotnet add package Microsoft.ML.Tokenizers
Für Tiktoken-Modelle (z. B. GPT-4) müssen Sie auch das entsprechende Datenpaket installieren:
dotnet add package Microsoft.ML.Tokenizers.Data.O200kBase
Wichtigste Funktionen
Die Microsoft.ML.Tokenizers-Bibliothek bietet Folgendes:
- Erweiterbare Tokenizerarchitektur: Ermöglicht die Spezialisierung von Normalizer-, PreTokenizer-, Model-/Encoder- und Decoderkomponenten.
- Mehrere Tokenisierungsalgorithmen: Unterstützt BPE (Byte-Pair-Codierung), Tiktoken, Llama, CodeGen und vieles mehr.
- Tokenzählung und Schätzung: Hilft beim Verwalten von Kosten- und Kontextgrenzwerten beim Arbeiten mit KI-Diensten.
- Flexible Codierungsoptionen: Bietet Methoden zum Codieren von Text in Token-IDs, Zählen von Token und Decodieren von Token zurück in Text.
Verwenden des Tiktoken-Tokenizers
Der Tiktoken-Tokenizer wird häufig mit OpenAI-Modellen wie GPT-4 verwendet. Das folgende Beispiel zeigt, wie Sie einen Tiktoken-Tokenizer initialisieren und allgemeine Vorgänge ausführen:
// Initialize the tokenizer for the gpt-4o model.
Tokenizer tokenizer = TiktokenTokenizer.CreateForModel("gpt-4o");
string source = "Text tokenization is the process of splitting a string into a list of tokens.";
// Count the tokens in the text.
Console.WriteLine($"Tokens: {tokenizer.CountTokens(source)}");
// Output: Tokens: 16
// Encode text to token IDs.
IReadOnlyList<int> ids = tokenizer.EncodeToIds(source);
Console.WriteLine($"Token IDs: {string.Join(", ", ids)}");
// Output: Token IDs: 1279, 6602, 2860, 382, 290, 2273, 328, 87130, 261, 1621, 1511, 261, 1562, 328, 20290, 13
// Decode token IDs back to text.
string? decoded = tokenizer.Decode(ids);
Console.WriteLine($"Decoded: {decoded}");
// Output: Decoded: Text tokenization is the process of splitting a string into a list of tokens.
Um eine bessere Leistung zu erzielen, sollten Sie die Tokenizerinstanz in der gesamten App zwischenspeichern und wiederverwenden.
Wenn Sie mit LLMs arbeiten, müssen Sie Text häufig innerhalb von Tokengrenzwerten verwalten. Das folgende Beispiel zeigt, wie Text auf eine bestimmte Tokenanzahl gekürzt wird:
Tokenizer tokenizer = TiktokenTokenizer.CreateForModel("gpt-4o");
string source = "Text tokenization is the process of splitting a string into a list of tokens.";
// Get the last 5 tokens from the text.
var trimIndex = tokenizer.GetIndexByTokenCountFromEnd(source, 5, out string? processedText, out _);
processedText ??= source;
Console.WriteLine($"Last 5 tokens: {processedText.Substring(trimIndex)}");
// Output: Last 5 tokens: a list of tokens.
// Get the first 5 tokens from the text.
trimIndex = tokenizer.GetIndexByTokenCount(source, 5, out processedText, out _);
processedText ??= source;
Console.WriteLine($"First 5 tokens: {processedText.Substring(0, trimIndex)}");
// Output: First 5 tokens: Text tokenization is the
Verwenden Sie den Llama-Tokenizer
Der Llama Tokenizer ist für die Llama-Familie von Modellen konzipiert. Sie erfordert eine Tokenizermodelldatei, die Sie aus Modellrepositorys wie Hugging Face herunterladen können:
// Open a stream to the remote Llama tokenizer model data file.
using HttpClient httpClient = new();
const string modelUrl = @"https://huggingface.co/hf-internal-testing/llama-tokenizer/resolve/main/tokenizer.model";
using Stream remoteStream = await httpClient.GetStreamAsync(modelUrl);
// Create the Llama tokenizer using the remote stream.
Tokenizer llamaTokenizer = LlamaTokenizer.Create(remoteStream);
string input = "Hello, world!";
// Encode text to token IDs.
IReadOnlyList<int> ids = llamaTokenizer.EncodeToIds(input);
Console.WriteLine($"Token IDs: {string.Join(", ", ids)}");
// Output: Token IDs: 1, 15043, 29892, 3186, 29991
// Count the tokens.
Console.WriteLine($"Tokens: {llamaTokenizer.CountTokens(input)}");
// Output: Tokens: 5
// Decode token IDs back to text.
string? decoded = llamaTokenizer.Decode(ids);
Console.WriteLine($"Decoded: {decoded}");
// Output: Decoded: Hello, world!
Alle Tokenizer unterstützen erweiterte Codierungsoptionen, z. B. steuern der Normalisierung und Vortokenisierung:
ReadOnlySpan<char> textSpan = "Hello World".AsSpan();
// Bypass normalization during encoding.
ids = llamaTokenizer.EncodeToIds(textSpan, considerNormalization: false);
// Bypass pretokenization during encoding.
ids = llamaTokenizer.EncodeToIds(textSpan, considerPreTokenization: false);
// Bypass both normalization and pretokenization.
ids = llamaTokenizer.EncodeToIds(textSpan, considerNormalization: false, considerPreTokenization: false);
Verwende BPE-Tokenizer
Byte-Pair-Codierung (BPE) ist der zugrunde liegende Algorithmus, der von vielen Tokenizern verwendet wird, einschließlich Tiktoken. BPE wurde zunächst als Algorithmus zum Komprimieren von Texten entwickelt und dann von OpenAI für die Tokenisierung verwendet, als es das GPT-Modell vortrainierte. Im folgenden Beispiel wird die BPE-Tokenisierung veranschaulicht:
// BPE (Byte Pair Encoding) tokenizer can be created from vocabulary and merges files.
// Download the GPT-2 tokenizer files from Hugging Face.
using HttpClient httpClient = new();
const string vocabUrl = @"https://huggingface.co/openai-community/gpt2/raw/main/vocab.json";
const string mergesUrl = @"https://huggingface.co/openai-community/gpt2/raw/main/merges.txt";
using Stream vocabStream = await httpClient.GetStreamAsync(vocabUrl);
using Stream mergesStream = await httpClient.GetStreamAsync(mergesUrl);
// Create the BPE tokenizer using the vocabulary and merges streams.
Tokenizer bpeTokenizer = BpeTokenizer.Create(vocabStream, mergesStream);
string text = "Hello, how are you doing today?";
// Encode text to token IDs.
IReadOnlyList<int> ids = bpeTokenizer.EncodeToIds(text);
Console.WriteLine($"Token IDs: {string.Join(", ", ids)}");
// Count tokens.
int tokenCount = bpeTokenizer.CountTokens(text);
Console.WriteLine($"Token count: {tokenCount}");
// Get detailed token information.
IReadOnlyList<EncodedToken> tokens = bpeTokenizer.EncodeToTokens(text, out string? normalizedString);
Console.WriteLine("Tokens:");
foreach (EncodedToken token in tokens)
{
Console.WriteLine($" ID: {token.Id}, Value: '{token.Value}'");
}
// Decode tokens back to text.
string? decoded = bpeTokenizer.Decode(ids);
Console.WriteLine($"Decoded: {decoded}");
// Note: BpeTokenizer might not always decode IDs to the exact original text
// as it can remove spaces during tokenization depending on the model configuration.
Die Bibliothek bietet auch spezielle Tokenizer wie BpeTokenizer und EnglishRobertaTokenizer die Sie mit benutzerdefinierten Vokabularen für bestimmte Modelle konfigurieren können.
Weitere Informationen zu BPE finden Sie unter Byte-Pair-Codierungstokenisierung.
Allgemeine Tokenizervorgänge
Alle Tokenizer in der Bibliothek implementieren die Tokenizer Basisklasse. In der folgenden Tabelle sind die verfügbaren Methoden aufgeführt.
| Methode | Description |
|---|---|
| EncodeToIds | Konvertiert Text in eine Liste von Token-IDs. |
| Decode | Konvertiert Token-IDs wieder in Text. |
| CountTokens | Gibt die Anzahl der Token in einer Textzeichenfolge zurück. |
| EncodeToTokens | Gibt detaillierte Tokeninformationen einschließlich Werten und IDs zurück. |
| GetIndexByTokenCount | Sucht den Zeichenindex für eine bestimmte Tokenanzahl von Anfang an. |
| GetIndexByTokenCountFromEnd | Ermittelt den Zeichenindex für eine bestimmte Anzahl von Token vom Ende aus. |
Migrieren von anderen Bibliotheken
Wenn Sie derzeit DeepDev.TokenizerLib oder SharpToken verwenden, sollten Sie eine Migration zu Microsoft.ML.Tokenizers in Betracht ziehen. Die Bibliothek wurde verbessert, um Szenarien aus diesen Bibliotheken abzudecken und eine bessere Leistung und Unterstützung zu bieten. Anleitungen zur Migration finden Sie im Migrationshandbuch.