ML.NET 示例:多類(lèi)分類(lèi)之問(wèn)題分類(lèi)
寫(xiě)在前面
準(zhǔn)備近期將微軟的machinelearning-samples翻譯成中文,水平有限檐春,如有錯(cuò)漏逻淌,請(qǐng)大家多多指正。
如果有朋友對(duì)此感興趣疟暖,可以加入我:https://github.com/feiyun0112/machinelearning-samples.zh-cn
GitHub Labeler
ML.NET 版本API 類(lèi)型狀態(tài)應(yīng)用程序類(lèi)型數(shù)據(jù)類(lèi)型場(chǎng)景機(jī)器學(xué)習(xí)任務(wù)算法
v0.7動(dòng)態(tài) API最新的控制臺(tái)應(yīng)用程序.csv 文件 和 GitHub 問(wèn)題問(wèn)題分類(lèi)多類(lèi)分類(lèi)SDCA 多類(lèi)分類(lèi)器
這是一個(gè)簡(jiǎn)單的原型應(yīng)用程序卡儒,演示如何使用ML.NET?APIs。主要的重點(diǎn)是創(chuàng)建俐巴、訓(xùn)練和使用在 Predictor.cs 類(lèi)中實(shí)現(xiàn)的ML(機(jī)器學(xué)習(xí))模型骨望。
概述
GitHubLabeler 是一個(gè).NET Core控制臺(tái)應(yīng)用程序, 它的功能如下:
在被標(biāo)記的GitHub問(wèn)題上訓(xùn)練ML模型欣舵,以教導(dǎo)模型如何為新問(wèn)題分配標(biāo)簽擎鸠。 (例如,您可以使用corefx-issues-train.tsv文件缘圈,該文件包含來(lái)自包含來(lái)自公共的corefx存儲(chǔ)庫(kù)的問(wèn)題)
標(biāo)記新問(wèn)題劣光。 應(yīng)用程序?qū)腶ppsettings.json文件中指定的GitHub存儲(chǔ)庫(kù)中獲取所有未標(biāo)記的未解決問(wèn)題,并使用在上面步驟中創(chuàng)建的受過(guò)訓(xùn)練的ML模型對(duì)其進(jìn)行標(biāo)記
這個(gè)ML模型使用ML.NET的多類(lèi)分類(lèi)算法(SdcaMultiClassTrainer)糟把。
輸入您的GitHub配置數(shù)據(jù)
在appsettings.json文件中提供您的GitHub數(shù)據(jù):
為了允許應(yīng)用程序在GitHub存儲(chǔ)庫(kù)中標(biāo)記問(wèn)題绢涡,您需要向 appsettings.json 文件中提供以下數(shù)據(jù)。
{"GitHubToken":"YOUR-GUID-GITHUB-TOKEN","GitHubRepoOwner":"YOUR-REPO-USER-OWNER-OR-ORGANIZATION","GitHubRepoName":"YOUR-REPO-SINGLE-NAME"}
您的用戶(hù)帳戶(hù)(GitHubToken)應(yīng)具有對(duì)存儲(chǔ)庫(kù)(GitHubRepoName)的寫(xiě)入權(quán)限遣疯。
點(diǎn)擊這里查看如何創(chuàng)建Github令牌雄可。
GitHubRepoOwner可以是GitHub用戶(hù)ID(即“MyUser”),也可以是GitHub組織(即“dotnet”)另锋。
提供訓(xùn)練文件
a. 您可以使用現(xiàn)有的corefx_issues.tsv數(shù)據(jù)文件來(lái)體驗(yàn)該程序。 在這種情況下狭归,將從corefx存儲(chǔ)庫(kù)的標(biāo)簽中選擇預(yù)測(cè)的標(biāo)簽夭坪。 無(wú)需更改。
b. 要使用GitHub存儲(chǔ)庫(kù)中的標(biāo)簽过椎,您需要在數(shù)據(jù)上訓(xùn)練模型室梅。為此,請(qǐng)從您的存儲(chǔ)庫(kù)中導(dǎo)出GitHub問(wèn)題到.tsv文件,文件包含以下幾列:
ID - 問(wèn)題 ID
Area - 問(wèn)題的標(biāo)簽(以這種方式命名以避免與ML.NET中的Label概念混淆)
Title - 問(wèn)題的標(biāo)題
Description - 問(wèn)題的描述
將文件添加到Data文件夾下亡鼠。更新DataSetLocation段以匹配您的文件名:
privatestaticstringDataSetLocation =$"{BaseDatasetsLocation}/corefx-issues-train.tsv";
訓(xùn)練
訓(xùn)練是通過(guò)已知示例(在本例中赏殃,是包含標(biāo)簽的問(wèn)題)運(yùn)行ML模型并教授它如何標(biāo)記新問(wèn)題的過(guò)程。在這個(gè)示例中间涵,它是通過(guò)在控制臺(tái)應(yīng)用程序調(diào)用下列方法來(lái)完成:
BuildAndTrainModel(DataSetLocation, ModelFilePathName);
訓(xùn)練完成后仁热,模型將保存為MLModels\GitHubLabelerModel.zip。
標(biāo)記
當(dāng)模型被訓(xùn)練后勾哩,它可以用于預(yù)測(cè)新問(wèn)題的標(biāo)簽抗蠢。
對(duì)于沒(méi)有連接到真正的GitHub存儲(chǔ)庫(kù)的單個(gè)測(cè)試/演示,請(qǐng)?jiān)诳刂婆_(tái)應(yīng)用程序中調(diào)用下列方法:
TestSingleLabelPrediction(ModelFilePathName);
要訪問(wèn)GitHub存儲(chǔ)庫(kù)的實(shí)際問(wèn)題思劳,請(qǐng)?jiān)诳刂婆_(tái)應(yīng)用程序中調(diào)用另一個(gè)方法:
awaitPredictLabelsAndUpdateGitHub(ModelFilePathName);
為了便于在從GitHub倉(cāng)庫(kù)中讀取問(wèn)題時(shí)進(jìn)行測(cè)試迅矛,它只會(huì)加載過(guò)去10分鐘中創(chuàng)建的并且需要標(biāo)記的未標(biāo)記問(wèn)題。 但是您可以修改這個(gè)配置:
Since = DateTime.Now.AddMinutes(-10)
您可以修改這些設(shè)置潜叛。 在預(yù)測(cè)標(biāo)簽后秽褒,程序會(huì)使用預(yù)測(cè)的標(biāo)簽更新GitHub倉(cāng)庫(kù)中的問(wèn)題。