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

