機械学習を用いた日報の品質判定
機械学習は「データの収集、アルゴリズムの選定、モデルの学習、評価、予測」という一連の流れで構成されます。ここではC#を使用して、日報の内容からその品質(合格/不合格)を判定する二値分類モデルを構築する例を紹介します。
1. 問題の定義
このモデルは、日報の文章を特徴量として、それが基準を満たしているかどうかを判断する二値分類のタスクです。つまり、入力された文章に対して「合格(1)」か「不合格(0)」のどちらかを出力します。
2. 環境構築
C#で機械学習を実行するには、Microsoft.ML NuGetパッケージをインストールする必要があります。これにより、機械学習用のAPIがプロジェクトに追加されます。
3. 学習・評価用データの準備
以下のようなTSV形式のデータを使用します。列はSentiment(ラベル)とSentimentText(日報本文)の2つです:
Sentiment SentimentText
1 初日出社、特筆事項なし
1 指示されたタスクを完了
1 コード作成と雑務文書作成
0 デザイン図の作成と個人ページ構築
0 要件定義とDB移行作業
学習データ(train.tsv)と評価データ(test.tsv)の2種類を用意します。データの多様性がモデル精度に直結します。
4. 特徴クラスの定義
ML.NETでは、データの構造をC#のクラスで定義する必要があります:
using Microsoft.ML.Data;
public class 日報データ
{
[Column(ordinal: "0", name: "Label")]
public float 品質ラベル;
[Column(ordinal: "1")]
public string 本文;
}
public class 品質予測
{
[ColumnName("PredictedLabel")]
public bool 予測結果 { get; set; }
[ColumnName("Probability")]
public float 一致率 { get; set; }
}
5. 実装コード
モデル保存メソッド
private static void モデル保存(MLContext mlContext, ITransformer model)
{
using (var fs = new FileStream("model.zip", FileMode.Create))
mlContext.Model.Save(model, fs);
Console.WriteLine("モデルを保存しました。");
}
モデル学習メソッド
public static ITransformer 学習実行(MLContext mlContext, string dataPath)
{
var data = mlContext.Data.ReadFromTextFile<日報データ>(dataPath, separatorChar: '\t', hasHeader: true);
var pipeline = mlContext.Transforms.Text.FeaturizeText(
inputColumnName: "本文", outputColumnName: "Features")
.Append(mlContext.BinaryClassification.Trainers.FastTree());
return pipeline.Fit(data);
}
モデル評価メソッド
public static void モデル評価(MLContext mlContext, ITransformer model)
{
var testData = mlContext.Data.ReadFromTextFile<日報データ>("test.tsv", separatorChar: '\t', hasHeader: true);
var predictions = model.Transform(testData);
var metrics = mlContext.BinaryClassification.Evaluate(predictions);
Console.WriteLine($"精度: {metrics.Accuracy:P2}");
Console.WriteLine($"AUC: {metrics.Auc:P2}");
モデル保存(mlContext, model);
}
単一予測メソッド
private static void 単一予測(MLContext mlContext, ITransformer model)
{
var predictor = model.CreatePredictionEngine<日報データ, 品質予測>(mlContext);
var input = new 日報データ { 本文 = "要件定義と設計作業を実施" };
var result = predictor.Predict(input);
Console.WriteLine($"本文: {input.本文} | 結果: {(result.予測結果 ? "合格" : "不合格")} | 一致率: {result.一致率}");
}
複数予測メソッド
public static void 複数予測(MLContext mlContext)
{
var samples = new[]
{
new 日報データ { 本文 = "新機能開発とテスト実施" },
new 日報データ { 本文 = "本日は休日" }
};
ITransformer loadedModel;
using (var fs = new FileStream("model.zip", FileMode.Open))
loadedModel = mlContext.Model.Load(fs);
var dataView = mlContext.Data.LoadFromEnumerable(samples);
var predictions = loadedModel.Transform(dataView);
var results = mlContext.CreateEnumerable<品質予測>(predictions, false);
var query = samples.Zip(results, (sample, pred) => (sample, pred));
foreach (var item in query)
{
Console.WriteLine($"本文: {item.sample.本文} | 結果: {(item.pred.予測結果 ? "合格" : "不合格")} | 一致率: {item.pred.一致率}");
}
}
メイン処理
public static void Main()
{
var mlContext = new MLContext();
var model = 学習実行(mlContext, "train.tsv");
モデル評価(mlContext, model);
単一予測(mlContext, model);
複数予測(mlContext);
}
このようにして、C#上で日報の品質判定を行う機械学習モデルを構築できます。学習データの質と量が結果に大きく影響するため、適切なデータ準備が重要です。