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

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

  1. Nyissa meg Visual Studio, és hozzon létre egy új C#-konzolalkalmazást (.NET Core). Nevezze el a projekt MLSparkModel nevét.

  2. A Megoldáskezelő kattintson a jobb gombbal az MLSparkModel projektre. Ezután válassza a Machine Learning hozzáadása lehetőséget>.

  3. A ML.NET Modellszerkesztőben válassza a Hangulatelemzési forgatókönyv csempét.

  4. Az Adatok hozzáadása lapon töltse fel a yelptrain.csv adatkészletet.

  5. Válassza ki az oszlopok hangulatát a legördülő lista előrejelzéséhez .

  6. 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.

  7. 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.

  8. 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.

  9. Figyelje meg, hogy két projekt van hozzáadva a megoldásokhoz: MLSparkModelML.ConsoleApp és MLSparkModelML.Model.

  10. 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.

  1. Kattintson a jobb gombbal az MLSparkModelML.Console elemre Megoldáskezelő, és válassza a NuGet-csomagok kezelése parancsot.

  2. Keresse meg a Microsoft.Sparkot , és telepítse a csomagot. Microsoft. ML a Model Builder automatikusan telepíti.

SparkSession létrehozása

  1. 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ót CreateSingleDataSample .

  2. 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;
    
  3. Módosítsa a DATA_FILEPATHyelptest.csvelérési útját.

  4. Új kód létrehozásához SparkSessionadja hozzá a következő kódot a Main 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 MLudfUDF 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.