寫在前面
準備近期將微軟的machinelearning-samples翻譯成中文,水平有限,如有錯漏,請大家多多指正。
如果有朋友對此感興趣,可以加入我:https://github.com/feiyun0112/machinelearning-samples.zh-cn
GitHub Labeler
ML.NET 版本 | API 型別 | 狀態 | 應用程式型別 | 資料型別 | 場景 | 機器學習任務 | 演算法 |
---|---|---|---|---|---|---|---|
v0.7 | 動態 API | 最新的 | 控制檯應用程式 | .csv 檔案 和 GitHub 問題 | 問題分類 | 多類分類 | SDCA 多類分類器 |
這是一個簡單的原型應用程式,演示如何使用ML.NET APIs。主要的重點是建立、訓練和使用在 Predictor.cs 類中實現的ML(機器學習)模型。
概述
GitHubLabeler 是一個.NET Core控制檯應用程式, 它的功能如下:
- 在被標記的GitHub問題上訓練ML模型,以教導模型如何為新問題分配標籤。 (例如,您可以使用
corefx-issues-train.tsv
檔案,該檔案包含來自包含來自公共的corefx儲存庫的問題) - 標記新問題。 應用程式將從
appsettings.json
檔案中指定的GitHub儲存庫中獲取所有未標記的未解決問題,並使用在上面步驟中建立的受過訓練的ML模型對其進行標記
這個ML模型使用ML.NET的多類分類演算法(SdcaMultiClassTrainer
)。
輸入您的GitHub配置資料
在
appsettings.json
檔案中提供您的GitHub資料:為了允許應用程式在GitHub儲存庫中標記問題,您需要向 appsettings.json 檔案中提供以下資料。
{ "GitHubToken": "YOUR-GUID-GITHUB-TOKEN", "GitHubRepoOwner": "YOUR-REPO-USER-OWNER-OR-ORGANIZATION", "GitHubRepoName": "YOUR-REPO-SINGLE-NAME" }
您的使用者帳戶(
GitHubToken
)應具有對儲存庫(GitHubRepoName
)的寫入許可權。點選這裡檢視如何建立Github令牌。
GitHubRepoOwner
可以是GitHub使用者ID(即“MyUser”),也可以是GitHub組織(即“dotnet”)。提供訓練檔案
a. 您可以使用現有的
corefx_issues.tsv
資料檔案來體驗該程式。 在這種情況下,將從corefx儲存庫的標籤中選擇預測的標籤。 無需更改。b. 要使用GitHub儲存庫中的標籤,您需要在資料上訓練模型。為此,請從您的儲存庫中匯出GitHub問題到
.tsv
檔案,檔案包含以下幾列:- ID - 問題 ID
- Area - 問題的標籤(以這種方式命名以避免與ML.NET中的Label概念混淆)
- Title - 問題的標題
- Description - 問題的描述
將檔案新增到
Data
資料夾下。更新DataSetLocation
段以匹配您的檔名:private static string DataSetLocation = $"{BaseDatasetsLocation}/corefx-issues-train.tsv";
訓練
訓練是通過已知示例(在本例中,是包含標籤的問題)執行ML模型並教授它如何標記新問題的過程。在這個示例中,它是通過在控制檯應用程式呼叫下列方法來完成:
BuildAndTrainModel(DataSetLocation, ModelFilePathName);
訓練完成後,模型將儲存為MLModels\GitHubLabelerModel.zip
。
標記
當模型被訓練後,它可以用於預測新問題的標籤。
對於沒有連線到真正的GitHub儲存庫的單個測試/演示,請在控制檯應用程式中呼叫下列方法:
TestSingleLabelPrediction(ModelFilePathName);
要訪問GitHub儲存庫的實際問題,請在控制檯應用程式中呼叫另一個方法:
await PredictLabelsAndUpdateGitHub(ModelFilePathName);
為了便於在從GitHub倉庫中讀取問題時進行測試,它只會載入過去10分鐘中建立的並且需要標記的未標記問題。 但是您可以修改這個配置:
Since = DateTime.Now.AddMinutes(-10)
您可以修改這些設定。 在預測標籤後,程式會使用預測的標籤更新GitHub倉庫中的問題。