Oktatóanyag: Hangulatelemzés az Apache Sparkhoz és a ML.NET-hez készült .NET-tel
Ez az oktatóanyag bemutatja, hogyan hajthat végre hangulatelemzést az online véleményekről az Apache Sparkhoz készült ML.NET és .NET használatával. A ML.NET egy ingyenes, platformfüggetlen, nyílt forráskódú gépi tanulási keretrendszer. A ML.NET és az Apache Sparkhoz készült .NET segítségével skálázhatja a gépi tanulási algoritmusok betanítását és előrejelzését.
Eben az oktatóanyagban az alábbiakkal fog megismerkedni:
- Hangulatelemzési modell létrehozása ML.NET Model Builder használatával Visual Studio.
- Hozzon létre egy .NET-et az Apache Spark-konzolalkalmazáshoz.
- Felhasználó által definiált függvény írása és implementálása.
- Futtasson egy .NET for Apache Spark-konzolalkalmazást.
Előfeltételek
Ha még nem fejlesztett ki .NET for Apache Spark-alkalmazást, kezdje az Első lépések oktatóanyaggal, hogy megismerkedjen az alapokkal. Az oktatóanyag folytatása előtt végezze el az Első lépések oktatóanyag összes előfeltételét.
Ez az oktatóanyag a Visual Studio-ben elérhető ML.NET Model Builder (előzetes verzió) vizuális felületet használja. Ha még nem rendelkezik Visual Studio, ingyenesen letöltheti a Visual Studio közösségi verzióját.
Töltse le és telepítse a ML.NET Model Buildert (előzetes verzió).
Töltse le a yelptest.csv és yelptrain.csv Yelp-felülvizsgálati adatkészleteket.
Az adatok áttekintése
A Yelp véleményező adatkészlete online Yelp-értékeléseket tartalmaz a különböző szolgáltatásokról. Nyissa meg yelptrain.csv , és figyelje meg az adatok struktúráját. Az első oszlop véleményezési szöveget, a második pedig hangulatpontszámokat tartalmaz. Ha a véleménypontszám 1, a vélemény pozitív, és ha a véleménypontszám 0, akkor a vélemény negatív.
Az alábbi táblázat mintaadatokat tartalmaz:
Korrektúraszöveg | Hangulat |
---|---|
Wow... Imádtam ezt a helyet. | 1 |
A kéreg nem jó. | 0 |
Gépi tanulási modell létrehozása
Nyissa meg Visual Studio, és hozzon létre egy új C#-konzolalkalmazást (.NET Core). Nevezze el a projekt MLSparkModel nevét.
A Megoldáskezelő kattintson a jobb gombbal az MLSparkModel projektre. Ezután válassza a Machine Learning hozzáadása lehetőséget>.
A ML.NET Modellszerkesztőben válassza a Hangulatelemzési forgatókönyv csempét.
Az Adatok hozzáadása lapon töltse fel a yelptrain.csv adatkészletet.
Válassza ki az oszlopok hangulatát a legördülő lista előrejelzéséhez .
A Betanítás lapon állítsa be a betanítási időt 60 másodpercre , és válassza a Betanítás indítása lehetőséget. Figyelje meg a betanítás állapotát a Progress területen.
Miután a Model Builder befejezte a betanítást, értékelje ki a betanítási eredményeket. Az alábbi szövegmezőbe beírhatja a kifejezéseket : Próbálja ki a modellt , és válassza az Előrejelzés lehetőséget a kimenet megtekintéséhez.
Válassza a Kód lehetőséget, majd a Projektek hozzáadása lehetőséget a ML modell megoldáshoz való hozzáadásához.
Figyelje meg, hogy két projekt van hozzáadva a megoldásokhoz: MLSparkModelML.ConsoleApp és MLSparkModelML.Model.
Kattintson duplán az MLSpark C# projektre, és figyelje meg, hogy a következő projekthivatkozás lett hozzáadva.
<ItemGroup> <ProjectReference Include="..\MLSparkModelML.Model\MLSparkModelML.Model.csproj" /> </ItemGroup>
Konzolalkalmazás létrehozása
A Model Builder létrehoz egy konzolalkalmazást.
Kattintson a jobb gombbal az MLSparkModelML.Console elemre Megoldáskezelő, és válassza a NuGet-csomagok kezelése parancsot.
Keresse meg a Microsoft.Sparkot , és telepítse a csomagot. Microsoft. ML a Model Builder automatikusan telepíti.
SparkSession létrehozása
Nyissa meg az MLSparkModelML.ConsoleAppprogram.cs fájlját. Ezt a fájlt a Model Builder automatikusan generálta. Törölje az
using
utasításokat, a Main() metódus tartalmát és a régiótCreateSingleDataSample
.Adja hozzá a következő további
using
utasításokat a Program.cs elejéhez:using System; using System.Collections.Generic; using Microsoft.ML; using Microsoft.ML.Data; using Microsoft.Spark.Sql; using MLSparkModelML.Model;
Módosítsa a
DATA_FILEPATH
yelptest.csvelérési útját.Új kód létrehozásához
SparkSession
adja hozzá a következő kódot aMain
metódushoz. A Spark-munkamenet a Spark adatkészlettel és DataFrame API-val való programozásának belépési pontja.SparkSession spark = SparkSession .Builder() .AppName(".NET for Apache Spark Sentiment Analysis") .GetOrCreate();
A fent létrehozott Spark-objektum meghívásával elérheti a Spark és a DataFrame funkcióit a teljes programban.
DataFrame létrehozása és nyomtatás a konzolon
Olvassa el a Yelp felülvizsgálati adatait a yelptest.csv fájlból DataFrame
. Belefoglalás header
és inferSchema
beállítások. A header
beállítás az adatok helyett oszlopnévként olvassa be ayelptest.csv első sorát. A inferSchema
beállítás oszloptípusokat következtet az adatok alapján.
DataFrame df = spark
.ReadStream()
.Option("header", true)
.Option("inferSchema", true)
.Csv(DATA_FILEPATH);
df.Show();
Felhasználó által definiált függvény regisztrálása
A Spark-alkalmazásokban az UDF-ek, felhasználó által definiált függvények használatával számításokat és elemzéseket végezhet az adatokon. Ebben az oktatóanyagban a ML.NET-et használja egy UDF-tel az egyes Yelp-felülvizsgálatok kiértékeléséhez.
Adja hozzá a következő kódot a Main
metódushoz egy úgynevezett MLudf
UDF regisztrálásához.
spark.Udf()
.Register<string, bool>("MLudf", predict);
Ez az UDF egy Yelp felülvizsgálati sztringet használ bemenetként, és igaz vagy hamis kimenetet ad ki pozitív vagy negatív hangulatok esetén. Egy későbbi lépésben definiált predict() metódust használja.
A Spark SQL használata az UDF meghívásához
Most, hogy elolvasta az adatokat, és beépítette a ML, a Spark SQL használatával hívja meg azt az UDF-et, amely hangulatelemzést futtat a DataFrame minden sorában. Adja hozzá a következő kódot a Main
metódushoz:
// Use Spark SQL to call ML.NET UDF
// Display results of sentiment analysis on reviews
df.CreateOrReplaceTempView("Reviews");
DataFrame sqlDf = spark.Sql("SELECT ReviewText, MLudf(ReviewText) FROM Reviews");
sqlDf.Show();
// Print out first 20 rows of data
// Prevent data getting cut off by setting truncate = 0
sqlDf.Show(20, 0, false);
spark.Stop();
Predict() metódus létrehozása
Adja hozzá a következő kódot a Main()
metódus előtt. Ez a kód hasonló ahhoz, amit a Model Builder állít elő a ConsumeModel.cs fájlban. Ha ezt a módszert a konzolra helyezi, minden alkalommal betölti a modellt, amikor futtatja az alkalmazást.
private static readonly PredictionEngine<ModelInput, ModelOutput> _predictionEngine;
static Program()
{
MLContext mlContext = new MLContext();
ITransformer model = mlContext.Model.Load("MLModel.zip", out DataViewSchema schema);
_predictionEngine = mlContext.Model.CreatePredictionEngine<ModelInput, ModelOutput>(model);
}
static bool predict(string text)
{
ModelInput input = new ModelInput
{
ReviewText = text
};
return _predictionEngine.Predict(input).Prediction;
}
Modell hozzáadása a konzolalkalmazáshoz
A Megoldáskezelő másolja ki a MLModel.zip fájlt az MLSparkModelML.Model projektből, és illessze be az MLSparkModelML.ConsoleApp projektbe. A rendszer automatikusan hozzáad egy hivatkozást az MLSparkModelML.ConsoleApp.csproj fájlhoz.
A kód futtatása
A kód futtatásához használható spark-submit
. Nyissa meg a konzolalkalmazás gyökérmappáját a parancssor használatával, és futtassa az alábbi parancsokat.
Először tisztítsa meg és tegye közzé az alkalmazást.
dotnet clean
dotnet publish
Ezután lépjen a konzolalkalmazás közzétételi mappájába, és futtassa a következő spark-submit
parancsot. Ne felejtse el frissíteni a parancsot a Microsoft Spark jar-fájljának tényleges elérési útjával.
%SPARK_HOME%\bin\spark-submit --class org.apache.spark.deploy.dotnet.DotnetRunner --master local microsoft-spark-2-4_2.11-1.0.0.jar dotnet MLSparkModelML.ConsoleApp.dll
A kód letöltése
Ez az oktatóanyag hasonló a Hangulatelemzés Big Data-példában szereplő kódhoz.
Következő lépések
Folytassa a következő cikkel, amelyből megtudhatja, hogyan hajthat végre strukturált streamelést az Apache Sparkhoz készült .NET-tel.