ML.NET 示例:多類分類之問題分類

feiyun0112發表於2018-12-06

寫在前面

準備近期將微軟的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配置資料

  1. 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”)。

  2. 提供訓練檔案

    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倉庫中的問題。

相關文章