esemény
Intelligens alkalmazások létrehozása
márc. 17. 21 - márc. 21. 10
Csatlakozzon a meetup sorozathoz, hogy valós használati esetek alapján, skálázható AI-megoldásokat hozzon létre más fejlesztőkkel és szakértőkkel.
RegisztrációEzt a böngészőt már nem támogatjuk.
Frissítsen a Microsoft Edge-re, hogy kihasználhassa a legújabb funkciókat, a biztonsági frissítéseket és a technikai támogatást.
Ez a minta oktatóanyag bemutatja, hogy a ML.NET használatával hoz létre egy GitHub-problémaosztályozót egy olyan modell betanítása céljából, amely osztályozza és előrejelzi a GitHub-problémák területcímkéjét egy .NET Core-konzolalkalmazáson keresztül a Visual Studióban c# használatával.
Eben az oktatóanyagban az alábbiakkal fog megismerkedni:
Az oktatóanyag forráskódját a dotnet/samples adattárban találja.
Hozzon létre egy "GitHubIssueClassification" nevű C# -konzolalkalmazást . Kattintson a Tovább gombra.
Válassza a .NET 7-et a használni kívánt keretrendszerként. Válassza a Létrehozás lehetőséget.
Hozzon létre egy Data (Adatok ) nevű könyvtárat a projektben az adatkészletfájlok mentéséhez:
A Megoldáskezelő kattintson a jobb gombbal a projektre, és válassza azÚj mappahozzáadása> lehetőséget. Írja be az "Adatok" kifejezést, és nyomja le az Enter billentyűt.
Hozzon létre egy Modellek nevű könyvtárat a projektben a modell mentéséhez:
A Megoldáskezelő kattintson a jobb gombbal a projektre, és válassza azÚj mappahozzáadása> lehetőséget. Írja be a "Modellek" kifejezést, és nyomja le az Enter billentyűt.
Telepítse a Microsoft.ML NuGet-csomagot:
Megjegyzés
Ez a minta az említett NuGet-csomagok legújabb stabil verzióját használja, hacsak másként nem rendelkezik.
A Megoldáskezelő kattintson a jobb gombbal a projektre, és válassza a Manage NuGet Packages (NuGet-csomagok kezelése) lehetőséget. Válassza a "nuget.org" lehetőséget a Csomag forrásaként, válassza a Tallózás lapot, keresse meg a Microsoft.ML , és válassza a Telepítés gombot. Válassza az OK gombot a Változások előnézete párbeszédpanelen, majd válassza az Elfogadom gombot a Licenc elfogadása párbeszédpanelen, ha elfogadja a felsorolt csomagok licencfeltételét.
Töltse le a issues_train.tsv és a issues_test.tsv adatkészleteket , és mentse őket a korábban létrehozott Adatok mappába. Az első adatkészlet betanítása a gépi tanulási modellt, a második pedig a modell pontosságának kiértékelésére használható.
A Megoldáskezelő kattintson a jobb gombbal az egyes *.tsv fájlokra, és válassza a Tulajdonságok lehetőséget. A Speciális területen módosítsa a Másolás kimeneti könyvtárra értékét másolásra, ha újabb.
Adja hozzá a következő további using
utasításokat a Program.cs fájl elejéhez:
using Microsoft.ML;
using GitHubIssueClassification;
Hozzon létre három globális mezőt a nemrég letöltött fájlok elérési útjainak, valamint a ésDataView
PredictionEngine
a MLContext
globális változóinak tárolásához:
_trainDataPath
rendelkezik a modell betanítása során használt adatkészlet elérési útjára._testDataPath
a modell kiértékeléséhez használt adatkészlet elérési útját használja._modelPath
a betanított modell mentési útvonalával rendelkezik._mlContext
a MLContext feldolgozási környezetet biztosító._trainingDataView
a betanítási IDataView adatkészlet feldolgozására szolgál._predEngine
PredictionEngine<TSrc,TDst> az egyszeri előrejelzésekhez használt.Adja hozzá a következő kódot a következő sorhoz közvetlenül a using utasítás alatt, hogy megadja ezeket az elérési utakat és a többi változót:
string _appPath = Path.GetDirectoryName(Environment.GetCommandLineArgs()[0]) ?? ".";
string _trainDataPath = Path.Combine(_appPath, "..", "..", "..", "Data", "issues_train.tsv");
string _testDataPath = Path.Combine(_appPath, "..", "..", "..", "Data", "issues_test.tsv");
string _modelPath = Path.Combine(_appPath, "..", "..", "..", "Models", "model.zip");
MLContext _mlContext;
PredictionEngine<GitHubIssue, IssuePrediction> _predEngine;
ITransformer _trainedModel;
IDataView _trainingDataView;
Hozzon létre néhány osztályt a bemeneti adatokhoz és előrejelzésekhez. Adjon hozzá egy új osztályt a projekthez:
A Megoldáskezelő kattintson a jobb gombbal a projektre, majd válassza azÚj elemhozzáadása> lehetőséget.
Az Új elem hozzáadása párbeszédpanelen válassza az Osztály lehetőséget, és módosítsa a Név mezőt GitHubIssueData.cs értékre. Ezután válassza a Hozzáadás gombot.
Megnyílik a GitHubIssueData.cs fájl a kódszerkesztőben. Adja hozzá a következő using
utasítást a GitHubIssueData.cs elejéhez:
using Microsoft.ML.Data;
Távolítsa el a meglévő osztálydefiníciót, és adja hozzá a következő, két osztályt GitHubIssue
tartalmazó IssuePrediction
kódot a GitHubIssueData.cs fájlhoz:
public class GitHubIssue
{
[LoadColumn(0)]
public string? ID { get; set; }
[LoadColumn(1)]
public string? Area { get; set; }
[LoadColumn(2)]
public required string Title { get; set; }
[LoadColumn(3)]
public required string Description { get; set; }
}
public class IssuePrediction
{
[ColumnName("PredictedLabel")]
public string? Area;
}
Az label
az oszlop, amelyet előre szeretne jelezni. Az azonosítottak Features
azok a bemenetek, amelyeket a modellnek a címke előrejelzéséhez ad.
A LoadColumnAttribute használatával adja meg az adatkészlet forrásoszlopainak indexeit.
GitHubIssue
a bemeneti adathalmaz osztály, és a következő String mezőkkel rendelkezik:
ID
(GitHub-probléma azonosítója)Area
(a betanítás előrejelzése)Title
(GitHub-probléma címe) az első feature
, amely a Area
Description
a második feature
, amelyet a Area
IssuePrediction
a modell betanítása után az előrejelzéshez használt osztály. Egyetlen string
(Area
) és attribútummal PredictedLabel
ColumnName
rendelkezik. Ez PredictedLabel
az előrejelzés és a kiértékelés során használatos. A kiértékeléshez a betanítási adatokat, az előrejelzett értékeket és a modellt tartalmazó bemenetet használja a rendszer.
Minden ML.NET művelet az MLContext osztályban kezdődik. Az inicializálás mlContext
új ML.NET környezetet hoz létre, amely megosztható a modelllétrehozás munkafolyamat-objektumai között. Fogalmilag hasonló a következőhözEntity Framework
: DBContext
.
Inicializálja a _mlContext
globális változót egy új példánysal MLContext
egy véletlenszerű maggal (seed: 0
) a több betanítás során megismételhető/determinisztikus eredmények érdekében. Cserélje le a Console.WriteLine("Hello World!")
sort a következő kódra:
_mlContext = new MLContext(seed: 0);
ML.NET az IDataView felületet használja a numerikus vagy szöveges táblázatos adatok rugalmas, hatékony leírására.
IDataView
betölthet szöveges fájlokat vagy valós időben (például SQL-adatbázist vagy naplófájlokat).
A globális változó inicializálásához és betöltéséhez _trainingDataView
adja hozzá a következő kódot az mlContext
inicializálás után:
_trainingDataView = _mlContext.Data.LoadFromTextFile<GitHubIssue>(_trainDataPath,hasHeader: true);
A LoadFromTextFile() meghatározza az adatsémát, és beolvassa a fájlt. Az adatútvonal változóit veszi fel, és egy IDataView
értéket ad vissza.
Adja hozzá a következőt a metódus meghívása LoadFromTextFile()
után:
var pipeline = ProcessData();
A ProcessData
metódus a következő feladatokat hajtja végre:
Hozza létre a metódust ProcessData
a Program.cs fájl alján a következő kóddal:
IEstimator<ITransformer> ProcessData()
{
}
A Area GitHub-címke előrejelzéséhez GitHubIssue
használja a MapValueToKey() metódust, hogy az Area
oszlopot numerikus kulcs típusú Label
oszlopmá (a besorolási algoritmusok által elfogadott formátumban) alakítsa át, és adja hozzá új adathalmazoszlopként:
var pipeline = _mlContext.Transforms.Conversion.MapValueToKey(inputColumnName: "Area", outputColumnName: "Label")
Ezután hívja meg a , mlContext.Transforms.Text.FeaturizeText
-t, amely a szöveget (Title
és Description
) tartalmazó oszlopokat számvektorlá alakítja az egyes hívott TitleFeaturized
és DescriptionFeaturized
. Fűzze hozzá mindkét oszlop featurizációját a folyamathoz a következő kóddal:
.Append(_mlContext.Transforms.Text.FeaturizeText(inputColumnName: "Title", outputColumnName: "TitleFeaturized"))
.Append(_mlContext.Transforms.Text.FeaturizeText(inputColumnName: "Description", outputColumnName: "DescriptionFeaturized"))
Az adat-előkészítés utolsó lépése az összes funkcióoszlopot egyesíti a Szolgáltatások oszlopban az Összefűzés() metódus használatával. Alapértelmezés szerint a tanulási algoritmus csak a Szolgáltatások oszlopban szereplő funkciókat dolgozza fel. Fűzze hozzá ezt az átalakítást a folyamathoz a következő kóddal:
.Append(_mlContext.Transforms.Concatenate("Features", "TitleFeaturized", "DescriptionFeaturized"))
Ezután fűzze hozzá az a fájlt AppendCacheCheckpoint a DataView gyorsítótárazásához, így ha többször is iterálja az adatokat a gyorsítótár használatával, jobb teljesítményt érhet el, mint az alábbi kód esetében:
.AppendCacheCheckpoint(_mlContext);
Figyelmeztetés
Az AppendCacheCheckpoint használatával csökkentheti a betanítási időt a kis- és közepes adathalmazokhoz. Ne használja (távolítsa el a következőt: . AppendCacheCheckpoint()) a nagy méretű adathalmazok kezelésekor.
Adja vissza a folyamatot a ProcessData
metódus végén.
return pipeline;
Ez a lépés kezeli az előfeldolgozást/featurizációt. A ML.NET elérhető további összetevők használatával jobb eredményeket érhet el a modellel.
Adja hozzá a következő hívást a BuildAndTrainModel
metódushoz a metódus hívását ProcessData()
követő következő sorként:
var trainingPipeline = BuildAndTrainModel(_trainingDataView, pipeline);
A BuildAndTrainModel
metódus a következő feladatokat hajtja végre:
Hozza létre a metódust BuildAndTrainModel
közvetlenül a metódus deklarációja ProcessData()
után a következő kóddal:
IEstimator<ITransformer> BuildAndTrainModel(IDataView trainingDataView, IEstimator<ITransformer> pipeline)
{
}
A besorolás olyan gépi tanulási feladat, amely adatokat használ egy elem vagy adatsor kategóriájának, típusának vagy osztályának meghatározásához , és gyakran az alábbi típusok egyike:
Ilyen típusú probléma esetén használjon többosztályos besorolású tanulási algoritmust, mivel a problémakategória előrejelzése több kategória (többosztályos) egyike lehet, nem csak kettő (bináris).
Fűzze hozzá a gépi tanulási algoritmust az adatátalakítási definíciókhoz, és adja hozzá a következőt a kód első soraként a következőben BuildAndTrainModel()
:
var trainingPipeline = pipeline.Append(_mlContext.MulticlassClassification.Trainers.SdcaMaximumEntropy("Label", "Features"))
.Append(_mlContext.Transforms.Conversion.MapKeyToValue("PredictedLabel"));
A SdcaMaximumEntropy a többosztályos besorolási betanítási algoritmus. Ez hozzá lesz fűzve a pipeline
fájlhoz, és elfogadja a featurizált Title
és a (Features
) és Description
a Label
bemeneti paramétereket, hogy tanuljanak az előzményadatokból.
Illesztse a modellt az splitTrainSet
adatokhoz, és adja vissza a betanított modellt úgy, hogy a metódus következő kódsoraként adja hozzá a BuildAndTrainModel()
következőt:
_trainedModel = trainingPipeline.Fit(trainingDataView);
A Fit()
metódus az adathalmaz átalakításával és a betanítás alkalmazásával tanítja be a modellt.
A PredictionEngine egy kényelmi API, amely lehetővé teszi, hogy egyetlen adatpéldányon adjon át egy előrejelzést, majd végezzen el egy előrejelzést. Adja hozzá ezt a metódus következő soraként BuildAndTrainModel()
:
_predEngine = _mlContext.Model.CreatePredictionEngine<GitHubIssue, IssuePrediction>(_trainedModel);
Adjon hozzá egy GitHub-problémát a betanított modell előrejelzésének teszteléséhez a metódusban a Predict
következő példány GitHubIssue
létrehozásával:
GitHubIssue issue = new GitHubIssue() {
Title = "WebSockets communication is slow in my machine",
Description = "The WebSockets communication used under the covers by SignalR looks like is going slow in my development machine.."
};
A Predict() függvénnyel egyetlen adatsoron készít előrejelzést:
var prediction = _predEngine.Predict(issue);
Megjelenítheti GitHubIssue
és a megfelelő Area
címke-előrejelzést jelenítheti meg, hogy megossza az eredményeket, és ennek megfelelően járjon el rajtuk. Hozzon létre egy megjelenítést az eredményekhez a következő Console.WriteLine() kóddal:
Console.WriteLine($"=============== Single Prediction just-trained-model - Result: {prediction.Area} ===============");
Adja vissza a modellt a BuildAndTrainModel
metódus végén.
return trainingPipeline;
Most, hogy létrehozta és betanította a modellt, ki kell értékelnie egy másik adatkészlettel a minőségbiztosítás és az ellenőrzés érdekében. A metódusban a Evaluate
rendszer átadja a metódusban BuildAndTrainModel
létrehozott modellt az értékeléshez. Hozza létre a metódust közvetlenül a Evaluate
után BuildAndTrainModel
, az alábbi kódhoz hasonlóan:
void Evaluate(DataViewSchema trainingDataViewSchema)
{
}
A Evaluate
metódus a következő feladatokat hajtja végre:
Adjon hozzá egy hívást az új metódushoz közvetlenül a BuildAndTrainModel
metódushívás alatt, a következő kóddal:
Evaluate(_trainingDataView.Schema);
Ahogy korábban a betanítási adatkészlettel is tette, töltse be a tesztadatkészletet úgy, hogy hozzáadja a következő kódot a Evaluate
metódushoz:
var testDataView = _mlContext.Data.LoadFromTextFile<GitHubIssue>(_testDataPath,hasHeader: true);
Az Evaluate() metódus kiszámítja a modell minőségi metrikáit a megadott adatkészlet használatával. Egy objektumot MulticlassClassificationMetrics ad vissza, amely a többosztályos besorolási kiértékelők által kiszámított általános metrikákat tartalmazza.
A metrikáknak a modell minőségének meghatározásához először le kell őket szereznie.
Figyelje meg, hogy a gépi tanulási _trainedModel
globális változó (egy ITransformer) Transform() metódusának használatával adja meg a funkciókat, és előrejelzéseket ad vissza. Adja hozzá a következő kódot a Evaluate
metódushoz a következő sorként:
var testMetrics = _mlContext.MulticlassClassification.Evaluate(_trainedModel.Transform(testDataView));
A rendszer a következő metrikákat értékeli ki a többosztályos besoroláshoz:
Mikropontosság – Minden mintaosztálypár egyenlő mértékben járul hozzá a pontossági metrikához. Azt szeretné, hogy a mikropontosság a lehető legközelebb legyen az egyikhez.
Makró pontossága – Minden osztály egyenlő mértékben járul hozzá a pontossági metrikához. A kisebbségi osztályok ugyanolyan súlyt kapnak, mint a nagyobb osztályok. Azt szeretné, hogy a makró pontossága a lehető legközelebb legyen az egyikhez.
Naplóvesztés – lásd: Naplóvesztés. Azt szeretné, hogy a naplóvesztés a lehető legközelebb legyen a nullához.
Naplóveszteség csökkentése – Az [-inf, 1,00] tartományai, ahol az 1,00 tökéletes előrejelzés, a 0 pedig az átlagos előrejelzéseket jelzi. Azt szeretné, hogy a naplóveszteség csökkentése a lehető legközelebb legyen az egyikhez.
A metrikák megjelenítéséhez, az eredmények megosztásához és azok végrehajtásához használja az alábbi kódot:
Console.WriteLine($"*************************************************************************************************************");
Console.WriteLine($"* Metrics for Multi-class Classification model - Test Data ");
Console.WriteLine($"*------------------------------------------------------------------------------------------------------------");
Console.WriteLine($"* MicroAccuracy: {testMetrics.MicroAccuracy:0.###}");
Console.WriteLine($"* MacroAccuracy: {testMetrics.MacroAccuracy:0.###}");
Console.WriteLine($"* LogLoss: {testMetrics.LogLoss:#.###}");
Console.WriteLine($"* LogLossReduction: {testMetrics.LogLossReduction:#.###}");
Console.WriteLine($"*************************************************************************************************************");
Ha elégedett a modellel, mentse egy fájlba, hogy később vagy egy másik alkalmazásban előrejelzéseket készítsen. Adja hozzá a következő kódot a Evaluate
metódushoz:
SaveModelAsFile(_mlContext, trainingDataViewSchema, _trainedModel);
Hozza létre a SaveModelAsFile
metódust a Evaluate
metódus alatt.
void SaveModelAsFile(MLContext mlContext,DataViewSchema trainingDataViewSchema, ITransformer model)
{
}
Adja hozzá a következő kódot a SaveModelAsFile
metódushoz. Ez a kód a metódussal Save
szerializálja és zip-fájlként tárolja a betanított modellt.
mlContext.Model.Save(model, trainingDataViewSchema, _modelPath);
Adjon hozzá egy hívást az új metódushoz közvetlenül a Evaluate
metódushívás alatt, a következő kóddal:
PredictIssue();
Hozza létre a metódust PredictIssue
közvetlenül a Evaluate
metódus után (és közvetlenül a SaveModelAsFile
metódus előtt) a következő kóddal:
void PredictIssue()
{
}
A PredictIssue
metódus a következő feladatokat hajtja végre:
Töltse be a mentett modellt az alkalmazásba úgy, hogy hozzáadja a következő kódot a PredictIssue
metódushoz:
ITransformer loadedModel = _mlContext.Model.Load(_modelPath, out var modelInputSchema);
Adjon hozzá egy GitHub-problémát a betanított modell előrejelzésének teszteléséhez a metódusban a Predict
következő példány GitHubIssue
létrehozásával:
GitHubIssue singleIssue = new GitHubIssue() { Title = "Entity Framework crashes", Description = "When connecting to the database, EF is crashing" };
Ahogy korábban is tette, hozzon létre egy példányt PredictionEngine
a következő kóddal:
_predEngine = _mlContext.Model.CreatePredictionEngine<GitHubIssue, IssuePrediction>(loadedModel);
A PredictionEngine egy kényelmi API, amely lehetővé teszi, hogy egyetlen adatpéldányon végezzen előrejelzést.
PredictionEngine
nem szálbiztos. Egyszálas vagy prototípusos környezetben is használható. Az éles környezetekben a jobb teljesítmény és a szálbiztonság érdekében használja a PredictionEnginePool
szolgáltatást, amely objektumokat hoz létre ObjectPool
PredictionEngine
az alkalmazás teljes területén való használatra. Ebből az útmutatóból megtudhatja, hogyan használható PredictionEnginePool
ASP.NET Core webes API-ban.
Megjegyzés
PredictionEnginePool
A szolgáltatásbővítmény jelenleg előzetes verzióban érhető el.
PredictionEngine
A használatával előrejelezheti a Area GitHub-címkét, ha hozzáadja a következő kódot az PredictIssue
előrejelzés metódusához:
var prediction = _predEngine.Predict(singleIssue);
Megjelenítés Area
a probléma kategorizálásához és a probléma megfelelő megoldásához. Hozzon létre egy megjelenítést az eredményekhez a következő Console.WriteLine() kóddal:
Console.WriteLine($"=============== Single Prediction - Result: {prediction.Area} ===============");
Az eredményeknek az alábbihoz hasonlónak kell lenniük. A folyamat folyamata során üzeneteket jelenít meg. Megjelenhetnek figyelmeztetések vagy üzenetek feldolgozása. Ezeket az üzeneteket eltávolítottuk az alábbi eredményekből az egyértelműség érdekében.
=============== Single Prediction just-trained-model - Result: area-System.Net ===============
*************************************************************************************************************
* Metrics for Multi-class Classification model - Test Data
*------------------------------------------------------------------------------------------------------------
* MicroAccuracy: 0.738
* MacroAccuracy: 0.668
* LogLoss: .919
* LogLossReduction: .643
*************************************************************************************************************
=============== Single Prediction - Result: area-System.Data ===============
Gratulálunk! Sikeresen létrehozott egy gépi tanulási modellt egy GitHub-probléma területcímkéinek besorolásához és előrejelzéséhez. Az oktatóanyag forráskódját a dotnet/samples adattárban találja.
Ez az oktatóanyag bemutatta, hogyan végezheti el az alábbi műveleteket:
További információért lépjen tovább a következő oktatóanyagra
.NET-visszajelzés
A(z) .NET egy nyílt forráskód projekt. Visszajelzés adásához válasszon egy hivatkozást:
esemény
Intelligens alkalmazások létrehozása
márc. 17. 21 - márc. 21. 10
Csatlakozzon a meetup sorozathoz, hogy valós használati esetek alapján, skálázható AI-megoldásokat hozzon létre más fejlesztőkkel és szakértőkkel.
RegisztrációOktatás
Modul
Ebben a modulban megtudhatja, hogyan taníthat be és használhat gépi tanulási modellt a prediktív karbantartáshoz ML.NET Model Builder használatával.
Tanúsítvány
Microsoft Tanúsított: Azure Adattudós Szaktárs - Certifications
Kezelheti az adatok betöltését és előkészítését, a modellek betanítását és üzembe helyezését, valamint a gépi tanulási megoldások monitorozását a Python, az Azure Machine Learning és az MLflow használatával.
Dokumentáció
Oktatóanyag: Webhely-megjegyzések elemzése – bináris besorolás - ML.NET
Ez az oktatóanyag bemutatja, hogyan hozhat létre egy .NET-konzolalkalmazást, amely osztályozza a webhely megjegyzéseiből származó hangulatot, és végrehajtja a megfelelő műveletet. A bináris hangulatosztályozó c#-t használ a Visual Studióban.
Oktatóanyag: Íriszvirágok kategorizálása – k-közép klaszterezés - ML.NET
Tanulja meg, hogyan használhatja az ML.NET-et klaszterezési környezetben.
Oktatóanyag: Árak előrejelzése regresszióval - ML.NET
Ez az oktatóanyag bemutatja, hogyan hozhat létre regressziós modellt ML.NET használatával az árak előrejelzéséhez, különösen a New York-i taxiárak előrejelzéséhez.