チュートリアル: .NET for Apache Spark と ML.NET での感情分析Tutorial: Sentiment analysis with .NET for Apache Spark and ML.NET

このチュートリアルでは、ML.NET と .NET for Apache Spark を使用してオンライン レビューの感情分析を行う方法について説明します。This tutorial teaches you how to do sentiment analysis of online reviews using ML.NET and .NET for Apache Spark. ML.NET は、クロスプラットフォームでオープンソースの機械学習フレームワークであり無料です。ML.NET is a free, cross-platform, open-source machine learning framework. ML.NET と .NET for Apache Spark を使用して、機械学習アルゴリズムのトレーニングと予測をスケーリングできます。You can use ML.NET with .NET for Apache Spark to scale the training and prediction of machine learning algorithms.

このチュートリアルでは、次の作業を行う方法について説明します。In this tutorial, you learn how to:

  • Visual Studio で ML.NET モデル ビルダー を使用して感情分析モデルを作成します。Create a sentiment analysis model using ML.NET Model Builder in Visual Studio.
  • .NET for Apache Spark コンソール アプリを作成します。Create a .NET for Apache Spark console app.
  • ユーザー定義関数を記述して実装します。Write and implement a user-defined function.
  • .NET for Apache Spark コンソール アプリを実行します。Run a .NET for Apache Spark console app.

必須コンポーネントPrerequisites

  • これまでに .NET for Apache Spark アプリケーションを開発したことがない場合は、最初に概要のチュートリアルに関する記事を読んで、基本についての理解を深めてください。If you haven't developed a .NET for Apache Spark application before, start with the Getting Started tutorial to become familiar with the basics. このチュートリアルを続ける前に、概要チュートリアルのすべての前提条件を満たしてください。Complete all of the prerequisites for the Getting Started tutorial before you continue with this tutorial.

  • このチュートリアルでは、Visual Studio で使用できるビジュアル インターフェイスである ML.NET モデル ビルダー (プレビュー) を使用します。This tutorial uses the ML.NET Model Builder (preview), a visual interface available in Visual Studio. Visual Studio がない場合は、無料で Visual Studio の Community バージョンをダウンロードすることができます。If you don't already have Visual Studio, you can download the Community version of Visual Studio for free.

  • ML.NET モデル ビルダー (プレビュー) をダウンロードしてインストールします。Download and install ML.NET Model Builder (preview).

  • Yelp レビュー データセットの yelptest.csvyelptrain.csv をダウンロードします。Download the yelptest.csv and yelptrain.csv Yelp review datasets.

データを確認するReview the data

Yelp レビュー データセットには、さまざまなサービスに関するオンライン Yelp レビューが含まれています。The Yelp reviews dataset contains online Yelp reviews about various services. yelptrain.csv を開き、データの構造を確認します。Open yelptrain.csv and notice the structure of the data. 1 番目の列にはレビュー テキストが含まれ、2 番目の列にはセンチメントのスコアが含まれます。The first column contains review text, and the second column contains sentiment scores. センチメント スコアが 1 の場合、レビューは肯定的になり、センチメント スコアが 0 の場合、レビューは否定的になります。If the sentiment score is 1, the review is positive, and if the sentiment score is 0, the review is negative.

サンプル データを次の表に示します。The following table contains sample data:

ReviewTextReviewText SentimentSentiment
Wow...Loved this place.Wow... Loved this place. 11
Crust is not good.Crust is not good. 00

機械学習モデルを構築するBuild your machine learning model

  1. Visual Studio を開き、新しい C# コンソール アプリ (.NET Core) を作成します。Open Visual Studio and create a new C# Console App (.NET Core). プロジェクトには「MLSparkModel」という名前を付けます。Name the project MLSparkModel.

  2. ソリューション エクスプローラー で、MLSparkModel プロジェクトを右クリックします。In Solution Explorer, right-click the MLSparkModel project. 次に、 [追加] > [機械学習] を選択します。Then select Add > Machine Learning.

  3. ML.NET モデル ビルダーで、 [Sentiment Analysis](感情分析) シナリオ タイルを選択します。From the ML.NET Model Builder, select the Sentiment Analysis scenario tile.

  4. [Add data](データの追加) ページで、yelptrain.csv データセットをアップロードします。On the Add data page, upload the yelptrain.csv data set.

  5. [Columns to Predict](予測する列) ドロップダウンから [Sentiment](感情) を選択します。Choose Sentiment from the Columns to Predict dropdown.

  6. [Train](トレーニング) ページで、トレーニング時間を "60 秒" に設定し、 [Start training](トレーニングの開始) を選択します。On the Train page, set the time to train to 60 seconds and select Start training. [Progress](進行状況) の下にトレーニングの状態が表示されます。Notice the status of your training under Progress.

  7. モデル ビルダーのトレーニングが完了したら、トレーニングの結果を [Evaluate](評価) します。Once Model Builder is finished training, Evaluate the training results. [Try your model](モデルを試す) の下のテキスト ボックスに語句を入力して [Predict](予測) を選択し、出力を確認することができます。You can type phrases into the text box below Try your model and select Predict to see the output.

  8. [Code](コード) を選択してから [Projects](プロジェクトの追加) を選択して、ML モデルをソリューションに追加します。Select Code and then select Add Projects to add the ML model to the solution.

  9. ソリューションに次の 2 つのプロジェクトが追加されることに注意してください: MLSparkModelML.ConsoleAppMLSparkModelML.ModelNotice that two projects are added to your solutions: MLSparkModelML.ConsoleApp and MLSparkModelML.Model.

  10. MLSpark C# プロジェクトをダブルクリックして、次のプロジェクト参照が追加されていることを確認します。Double-click on your MLSpark C# project and notice that the following project reference has been added.

    <ItemGroup>
        <ProjectReference Include="..\MLSparkModelML.Model\MLSparkModelML.Model.csproj" />
    </ItemGroup>
    

コンソール アプリを作成するCreate a console app

モデル ビルダーによってコンソール アプリが自動的に作成されます。Model Builder creates a console app for you.

  1. ソリューション エクスプローラーで MLSparkModelML.Console を右クリックし、 [NuGet パッケージの管理] を選択します。Right-click on MLSparkModelML.Console in Solution Explorer, and select Manage NuGet Packages.

  2. Microsoft.Spark を検索し、パッケージをインストールします。Search for Microsoft.Spark and install the package. Microsoft.ML は、モデル ビルダーによって自動的にインストールされます。Microsoft.ML is automatically installed for you by Model Builder.

SparkSession を作成するCreate a SparkSession

  1. MLSparkModelML.ConsoleAppProgram.cs ファイルを開きます。Open the Program.cs file for MLSparkModelML.ConsoleApp. このファイルは、モデル ビルダーによって自動生成されたものです。This file was autogenerated by Model Builder. using ステートメント、Main() メソッドの内容、および CreateSingleDataSample 領域を削除します。Delete the using statements, the contents of the Main() method, and the CreateSingleDataSample region.

  2. 次に示す別の using ステートメントを Program.cs ファイルの先頭に追加します。Add the following additional using statements to the top of the Program.cs:

    using System;
    using System.Collections.Generic;
    using Microsoft.ML;
    using Microsoft.ML.Data;
    using Microsoft.Spark.Sql;
    using MLSparkModelML.Model;
    
  3. DATA_FILEPATH を実際の yelptest.csv のパスに変更します。Change the DATA_FILEPATH to the path of your yelptest.csv.

  4. 新しい SparkSession を作成するために、次のコードを Main メソッドに追加します。Add the following code to your Main method to create a new SparkSession. Spark セッションは、Dataset API と DataFrame API を使用して Spark をプログラミングするためのエントリ ポイントです。The Spark Session is the entry point to programming Spark with the Dataset and DataFrame API.

    SparkSession spark = SparkSession
         .Builder()
         .AppName(".NET for Apache Spark Sentiment Analysis")
         .GetOrCreate();
    

    上で作成した spark オブジェクトを呼び出すことで、プログラムの至るところで Spark と DataFrame の機能にアクセスできます。Calling the spark object created above allows you to access Spark and DataFrame functionality throughout your program.

DataFrame を作成してコンソールに出力するCreate a DataFrame and print to console

DataFrame として、yelptest.csv ファイルから Yelp レビュー データを読み取ります。Read in the Yelp review data from the yelptest.csv file as a DataFrame. header オプションと inferSchema オプションを指定します。Include header and inferSchema options. header オプションを指定すると、yelptest.csv の最初の行が、データではなく列名として読み取られます。The header option reads the first line of yelptest.csv as column names instead of data. inferSchema オプションを指定すると、データに基づいて列の型が推測されます。The inferSchema option infers column types based on the data.

DataFrame df = spark
    .ReadStream()
    .Option("header", true)
    .Option("inferSchema", true)
    .Csv(DATA_FILEPATH);

df.Show();

ユーザー定義関数を登録するRegister a user-defined function

Spark アプリケーションで UDF ("ユーザー定義関数") を使用して、データの計算と分析を行うことができます。You can use UDFs, user-defined functions, in Spark applications to do calculations and analysis on your data. このチュートリアルでは、ML.NET と UDF を使用して、各 Yelp レビューを評価します。In this tutorial, you use ML.NET with a UDF to evaluate each Yelp review.

MLudf という名前の UDF を登録するために、次のコードを Main メソッドに追加します。Add the following code to your Main method to register a UDF called MLudf.

spark.Udf()
    .Register<string, bool>("MLudf", predict);

この UDF は、入力として Yelp レビュー文字列を受け取り、肯定的または否定的な感情に対して、それぞれ true または false を出力します。This UDF takes a Yelp review string as input, and outputs true or false for positive or negative sentiments, respectively. 後のステップで定義する predict() メソッドが使用されます。It uses the predict() method that you define in a later step.

Spark SQL を使用して UDF を呼び出すUse Spark SQL to call the UDF

データを読み取り、ML を組み込んだので、Spark SQL を使用して、DataFrame の各行に対して感情分析を実行する UDF を呼び出します。Now that you've read in your data and incorporated ML, use Spark SQL to call the UDF that will run sentiment analysis on each row of your DataFrame. 次のコードを Main メソッドに追加します。Add the following code to your Main method:

// 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() メソッドを作成するCreate predict() method

Main() メソッドの前に、次のコードを追加します。Add the following code before your Main() method. このコードは、モデル ビルダーによって ConsumeModel.cs に生成されるものと似ています。This code is similar to what is produced by Model Builder in ConsumeModel.cs. このメソッドをコンソールに移動すると、アプリを実行するたびにモデルが読み込まれます。Moving this method to your console loads the model loading each time you run your app.

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;
}

コンソール アプリにモデルを追加するAdd the model to your console app

ソリューション エクスプローラーで、MLSparkModelML.Model プロジェクトから MLModel.zip ファイルをコピーし、MLSparkModelML.ConsoleApp プロジェクトにそれを貼り付けます。In Solution Explorer, copy the MLModel.zip file from the MLSparkModelML.Model project and paste it in the MLSparkModelML.ConsoleApp project. MLSparkModelML.ConsoleApp.csproj に参照が自動的に追加されます。A reference is automatically added in MLSparkModelML.ConsoleApp.csproj.

コードを実行するRun your code

spark-submit を使用してコードを実行します。Use spark-submit to run your code. コマンド プロンプトを使用してコンソール アプリのルート フォルダーに移動し、次のコマンドを実行します。Navigate to your console app's root folder using the command prompt and run the following commands.

最初に、アプリをクリーンにして発行します。First, clean and publish your app.

dotnet clean
dotnet publish

次に、コンソール アプリの発行フォルダーに移動して、次の spark-submit コマンドを実行します。Then navigate to the console app's publish folder and run the following spark-submit command. 忘れずに、実際の Microsoft Spark jar ファイルのパスで、コマンドを更新してください。Remember to update the command with the actual path of your Microsoft Spark jar file.

%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

コードを取得するGet the code

このチュートリアルは、「ビッグ データでの感情分析」の例のコードに似ています。This tutorial is similar to the code from the Sentiment Analysis with Big Data example.

次の手順Next steps

次の記事に進み、.NET for Apache Spark で構造化ストリーミングを行う方法を学習してください。Advance to the next article to learn how to do Structured Streaming with .NET for Apache Spark.