.NET?9?new?features-Microsoft.ML.Tokenizers?庫(文本標記化功能)
在 .NET 9 中,微軟引入了 Microsoft.ML.Tokenizers
庫,為 .NET 開發(fā)者提供了強大的文本標記化功能。
一、什么是Microsoft.ML.Tokenizers
Microsoft.ML.Tokenizers
是一個用于文本標記化的庫,是 .NET 生態(tài)系統(tǒng)中的一個強大庫旨在將文本轉換為令牌(tokens)
以便在自然語言處理(NLP)任務中使用。該庫支持多種標記化算法,包括字節(jié)對編碼(BPE)、SentencePiece 和 WordPiece,滿足不同模型和應用的需求。
二、主要應用場景
自然語言處理(NLP):在訓練和推理階段,將文本轉換為模型可處理的令牌格式。
預處理步驟:在文本分析、情感分析、機器翻譯等任務中,對輸入文本進行標記化處理。
自定義詞匯表:開發(fā)者可以導入自定義詞匯表,使用 BPE Tokenizer 處理特定領域的文本數(shù)據(jù)。
三、支持的模型和服務
Microsoft.ML.Tokenizers
針對多種流行的模型系列進行了優(yōu)化,包括:
- GPT 系列:如 GPT-4、GPT-o1 等。
Llama 系列。
Phi 系列。
Bert 系列。
此外,該庫還與其他 AI 服務集成,如 Azure、OpenAI 等,為開發(fā)者提供統(tǒng)一的 C# 抽象層,簡化與 AI 服務的交互。
四、主要類Class
1. Tokenizer
類
Tokenizer
類充當文本處理的管道,接受原始文本輸入并輸出 TokenizerResult
對象。它允許設置不同的模型、預處理器和規(guī)范化器,以滿足特定需求。
主要方法:
Encode(string text)
: 將輸入文本編碼為包含令牌列表、令牌 ID 和令牌偏移映射的對象。Decode(IEnumerable<int> ids, bool skipSpecialTokens = true)
: 將給定的令牌 ID 解碼回字符串。TrainFromFiles(Trainer trainer, ReportProgress reportProgress, params string[] files)
: 使用輸入文件訓練標記器模型。
主要屬性:
Model
: 獲取或設置標記器使用的模型。PreTokenizer
: 獲取或設置標記器使用的預處理器。Normalizer
: 獲取或設置標記器使用的規(guī)范化器。Decoder
: 獲取或設置標記器使用的解碼器。
2. Model 類
Model
類是標記化過程中使用的模型的抽象基類,如 BPE、WordPiece 或 Unigram。具體模型(如 Bpe
)繼承自該類,并實現(xiàn)其方法。
主要方法:
GetTrainer()
: 獲取用于訓練模型的訓練器對象。GetVocab()
: 獲取將令牌映射到 ID 的詞匯表。GetVocabSize()
: 獲取詞匯表的大小。TokenToId(string token)
: 將令牌映射到標記化 ID。IdToToken(int id, bool skipSpecialTokens = true)
: 將標記化 ID 映射到令牌。Tokenize(string sequence)
: 將字符串序列標記化為令牌列表。Save(string vocabPath, string mergesPath)
: 將模型數(shù)據(jù)保存到詞匯和合并文件中。
3. Bpe 類
Bpe
類表示字節(jié)對編碼(Byte Pair Encoding)模型,是 Model
類的具體實現(xiàn)之一。它用于將文本拆分為子詞單元,以提高對未登錄詞的處理能力。
主要屬性:
UnknownToken
: 獲取或設置未知令牌。在遇到未知字符時使用。FuseUnknownTokens
: 獲取或設置是否允許多個未知令牌融合。ContinuingSubwordPrefix
: 用于僅存在于另一個子詞后面的任何子詞的可選前綴。EndOfWordSuffix
: 用于描述詞尾子詞特征的可選后綴。
主要方法:
Save(string vocabPath, string mergesPath)
: 將模型數(shù)據(jù)保存到詞匯和合并文件中。Tokenize(string sequence)
: 將字符串序列標記化為令牌列表。GetTrainer()
: 獲取用于訓練模型的訓練器對象,并生成詞匯和合并數(shù)據(jù)。
4. EnglishRoberta 類
EnglishRoberta
類是專門為英語 Roberta 模型設計的標記器模型。它繼承自 Model
類,并實現(xiàn)了特定于 Roberta 的標記化邏輯。
主要屬性:
PadIndex
: 獲取符號列表中填充符號的索引。SymbolsCount
: 獲取符號列表的長度。
主要方法:
AddMaskSymbol(string maskSymbol)
: 將掩碼符號添加到符號列表。IdsToOccurrenceRanks(IReadOnlyList<int> ids)
: 將令牌 ID 列表轉換為最高出現(xiàn)次數(shù)排名。OccurrenceRanksIds(IReadOnlyList<int> ranks)
: 將最高出現(xiàn)次數(shù)排名的列表轉換為令牌 ID 列表。Save(string vocabPath, string mergesPath)
: 將模型數(shù)據(jù)保存到詞匯、合并和匹配項映射文件中。
5. RobertaPreTokenizer 類
RobertaPreTokenizer
類是為英語 Roberta 標記器設計的預處理器。它負責在標記化之前對文本進行初步拆分和處理。
主要方法:
PreTokenize(string text)
: 對輸入文本進行預標記化處理。
6. Split 類
Split
類表示將原始字符串拆分后的子字符串。每個子字符串由一個標記表示,最終可能代表原始輸入字符串的各個部分。
主要屬性:
TokenString
: 獲取基礎拆分令牌。
五、示例代碼
使用 Microsoft.ML.Tokenizers
庫對文本進行標記化,以適配 GPT-4 模型,可以按照以下步驟進行:
安裝必要的 NuGet 包:確保項目引用了
Microsoft.ML.Tokenizers
包。加載 GPT-4 的詞匯表和合并對文件:從官方或可信來源獲取 GPT-4 模型的詞匯表(
vocab.json
)和合并對(merges.txt
)文件。初始化 BPE 模型并加載詞匯表:使用
Microsoft.ML.Tokenizers
庫中的Bpe
類加載詞匯表和合并對文件。創(chuàng)建標記器并進行文本標記化和解碼:使用
Tokenizer
類對輸入文本進行標記化,并根據(jù)需要解碼回原始文本。
以下是示例代碼:
using System; using Microsoft.ML.Tokenizers; class Program { static void Main(string[] args) { // 初始化 BPE 模型 var bpe = new Bpe(); // 加載 GPT-4 的詞匯表和合并對文件 bpe.Load("path_to_vocab.json", "path_to_merges.txt"); // 創(chuàng)建標記器 var tokenizer = new Tokenizer(bpe); // 輸入文本 var inputText = "這是一個用于測試的文本。"; // 對文本進行標記化 var encoded = tokenizer.Encode(inputText); // 輸出標記化結果 Console.WriteLine("Tokens:"); foreach (var token in encoded.Tokens) { Console.WriteLine(token); } // 解碼回原始文本 var decodedText = tokenizer.Decode(encoded.Ids); Console.WriteLine($"Decoded Text: {decodedText}"); } }
路徑設置:將
"path_to_vocab.json"
和"path_to_merges.txt"
替換為實際的文件路徑。詞匯表和合并對文件的獲取:確保從官方或可信來源獲取與 GPT-4 模型兼容的詞匯表和合并對文件。
模型兼容性:雖然此代碼使用了通用的 BPE 標記器,但在實際應用中,可能需要根據(jù) GPT-4 模型的具體要求進行調整。
到此這篇關于.NET 9 new features-Microsoft.ML.Tokenizers 庫的文章就介紹到這了,更多相關.NET 9 new features-Microsoft.ML.Tokenizers 內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
ASP.NET?MVC5網(wǎng)站開發(fā)之用戶添加和瀏覽2(七)
這篇文章主要為大家詳細介紹了ASP.NET?MVC5網(wǎng)站開發(fā)之用戶添加和瀏覽,感興趣的小伙伴們可以參考一下2016-08-08ASP.NET Core自定義中間件如何讀取Request.Body與Response.Body的內容詳解
這篇文章主要給大家介紹了關于在ASP.NET Core自定義中間件中如何讀取Request.Body與Response.Body的內容,文中通過示例代碼介紹的非常詳細,對大家學習或者使用ASP.NET Core具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2020-05-05asp.net MVC 根據(jù)菜單樹類別不同動態(tài)加載視圖的實現(xiàn)步驟
這篇文章主要介紹了asp.net MVC 根據(jù)菜單樹類別不同動態(tài)加載視圖的實現(xiàn)步驟,本文給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧2024-08-08asp.net(C#)實現(xiàn)功能強大的時間日期處理類完整實例
這篇文章主要介紹了asp.net(C#)實現(xiàn)功能強大的時間日期處理類,封裝了針對日期與時間的各種常用的判斷與計算功能,非常方便實用,需要的朋友可以參考下2016-06-06