感情分析のためにニューラルネットワークを訓練する方法

筆者は、Write for Donations プログラムの一環として、寄付対象団体として IEEE 財団を選択しました。

イントロダクション

感情分析は、テキストマイニングと自然言語処理と強く関係しており、書かれたレビューから質的評価を抽出します。多くの人々は映画のレビューを読んで、その映画が一般の人々の間でどれだけ良いかを評価します。映画に数値や星の評価を付けることは、その映画の定量的な成功や失敗を示すわけではありませんが、映画のレビューの集まりはこれらの映画についての質的な視点を提供します。テキストの映画のレビューでは、視聴者が映画の良い点や悪い点だと思っているものが明らかになります。レビューのより詳細な分析を行うことで、その映画がレビュアーの期待に応えているかどうかが明らかになることがよくあります。感情分析は、レビュアーの主観やレビュー全体の極性を評価するために使用されることがあります。

感情分析を行うために、テキストデータ内の意見を認識し分類するためのコンピュータプログラムを実行します。具体的には、ライター(またはレビュアー)が与えられたトピック(この場合は映画)に対して肯定的な態度か否定的な態度を持っているかを判断するために使用します。感情分析は意見マイニングのサブドメインであり、構造化・半構造化・非構造化のテキストデータから特定のトピックに対する感情や意見を抽出することに焦点を当てています。他の意見マイニングモデルと同様に、ブランドや製品の意見を監視し、顧客のニーズを理解するために感情分析を使用することがあります。感情分析はテキストの極性(肯定的、否定的、または中立)、レビュアーの特定の感情や感情(怒り、喜び、悲しみなど、モデルによって定義されたもの)、緊急性、さらには意図(興味があるかないか)を検出することに焦点を当てています。

このチュートリアルでは、Kerasを使用して映画のレビューの感情を予測するニューラルネットワークを作成します。モデルは、国際映画データベース(IMDb)のレビューデータセットを使用して、レビューを2つのカテゴリ(ポジティブまたはネガティブ)に分類します。このチュートリアルの最後までに、深層学習モデルを作成し、感情分析を行うためにニューラルネットワークをトレーニングすることができます。

前提条件

  • One Ubuntu 22.04 server instance with at least 8GB RAM. This server will need a non-root user with sudo privileges and a firewall configured, which you can set up by following our initial server setup guide.
  • Python 3, pip, and the Python venv module installed on the server, which you can set up by following Steps 1 and 2 of our tutorial on How To Install Python 3 and Set Up a Programming Environment.
  • Jupyter notebook installed and running on a remote server, which you can set up with How to Install, Run, and Connect to Jupyter Notebook on a Remote Server.
  • A modern web browser that you will use to access Jupyter Notebook.
  • A fundamental understanding of machine learning and deep learning models. Learn more in An Introduction to Machine Learning.

ステップ1 — Jupyter Notebookの環境準備

Jupyter Notebookはインタラクティブな計算環境を提供しているため、Pythonのコマンドラインターミナルではなく、深層学習モデルを実行する際によく使用されます。Jupyter Notebookではコマンドや出力が一つのノートブックに表示されるため、分析プロセスの開発中に思考を記録することができます。

このチュートリアルをJupyter Notebookでフォローするには、新しいノートブックを開いて必要な依存関係をインストールする必要があります。これはこのステップで行います。

Note

注意:リモートサーバーでチュートリアルに従っている場合、ポートフォワーディングを使用してローカルマシンのブラウザからJupyter Notebookにアクセスすることができます。
ターミナルを開き、次のコマンドを入力してください:
ssh -L 8888:localhost:8888 your_non_root_user@your_server_ip

サーバーに接続したら、出力で提供されるリンクに移動してJupyter Notebookにアクセスしてください。このターミナルをチュートリアルの残りの部分で開いたままにしておいてください。

前提条件でサーバー上にJupyter Notebook環境を設定します。サーバーにログインしたら、仮想環境をアクティブにしてください。

  1. source ~/environments/my_env/bin/activate

 

その後、Jupyter Notebookアプリケーションを実行してアプリケーションを起動してください。

  1. jupyter notebook

 

実行して接続した後、ブラウザでユーザーインターフェースにアクセスします。 新規のドロップダウンメニューからPython3(ipykernel)オプションを選択し、無題のPythonノートブックが開かれる新しいタブを選択します。ファイル名をneural_network.ipynbとして保存し、このファイルでコードを実行します。

それでは、ブラウザのJupyter Notebookの最初のセルで、データ処理に必要な依存関係をインストールするためにpipを使用してください。

「neural_network.ipynb」を日本語で言い換えると: ニューラルネットワーク.ipynb
!pip install numpy
!pip install tensorflow

このチュートリアルでは、numpyライブラリが線形代数で配列を操作するために使用されます。以下の関数を呼び出すことで、IMDbデータセットを配列形式で操作します:
・連結関数(concatenate関数)は、テストデータ配列のシーケンスをトレーニングデータ配列に結合します。
・ユニーク関数(unique関数)は、データセット配列内のユニークな要素を見つけます。
・ゼロ配列関数(zeros関数)は、データセットをベクトル化する際に、ゼロで埋められた新しい配列を返します。

tensorflowの依存関係によって、Pythonで深層学習モデルを訓練・展開することができます。tensorflowをインストールすると、TensorFlowの上で動作するkerasも同時にインストールされ、TensorFlowとユーザーの間に抽象化レベルを導入し、深層学習モデルの迅速な開発を可能にします。このチュートリアルでは、tensorflowとkerasを使用して感情分析の訓練と展開の全プロセスが行われます。

Jupyter Notebookに2つのコマンドを追加した後、実行ボタンを押してそれらを実行します。

あなたのJupyter Notebookは、各依存関係がダウンロードされていることを示す実行結果を提供します。この出力の下には新しい入力セルがあり、次のコードの行を実行することができます。

依存関係のダウンロードが完了したら、それらをインポートします。次のセルにこれらの行を追加してから、実行ボタンを押してください。

ニューラルネットワーク.ipynb
import numpy as np
from keras.utils import to_categorical
from keras import models
from keras import layers

Note

注意:これらのコマンドを実行する際には、TensorFlowとTensorRTのライブラリに関する警告が表示される場合があります。一般的に、TensorFlowはCPU、GPU、TPUと動作します。警告エラーには、インストールされたTensorFlowのバージョンがAVXやAVX2のオペレーションを利用できることが記載されており、これによって処理スピードが向上する可能性があります。この警告はエラーではなく、CPUを利用してTensorFlowが追加のスピードを実現するための注意事項です。

以下のように日本語で言い換えることができます:
Kerasのツールのインストールには、組み込みのIMDBデータベースが含まれています。このデータセットは、トレーニングデータとテストデータが50%ずつ含まれています。このチュートリアルでは、過学習を防ぐために、80%のトレーニングデータと20%のテストデータに分割します。そのため、ダウンロード後にデータとターゲットをマージし、後でチュートリアルで80%/20%に分割できるようにします。これらの行を新しいセルに追加して、実行ボタンを押してください。

ニューラルネットワーク.ipynb
from keras.datasets import imdb
(training_data, training_targets), (testing_data, testing_targets) = imdb.load_data(num_words=10000)
data = np.concatenate((training_data, testing_data), axis=0)
targets = np.concatenate((training_targets, testing_targets), axis=0)

このセルはIMDbデータセットをインポートし、トレーニングデータとテストデータを結合します。デフォルトでは、データセットはトレーニングデータ、トレーニングターゲット、テストデータ、およびテストターゲットに分割されます。

あなたのJupyter Notebookには、活動ログが表示され、データセットのダウンロードには数分かかります。

Output

Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/imdb.npz 17464789/17464789 [==============================] – 0s 0us/step

このステップでは、データセットのパターン、仮定、および異常を調べるためにJupyter Notebookの環境を準備しました。次に、データセット全体で探索的なデータ分析を実行します。

ステップ2:データセットの分析

今回は、このデータを使ってモデルを訓練する方法を特定するために、データセットを評価します。 データセットを探索的に分析することで、データセットの潜在的な構造が明らかになります。 この過程では、一見分かりにくいトレンドやパターン、関係が明らかになることがあります。 これらの情報は、ミスを検出したり、仮定を間違えたり、主要な変数間の関係を理解するのに役立ちます。 こうした見識は、適切な予測モデルの選択につながる可能性があります。

このデータセットでの最初のタスクは、出力の種類とユニークな単語数を取得することです。この情報を取得するためには、新しいセルに以下の行を実行してください。

ニューラルネットワークのipynbファイル
print("The output categories are", np.unique(targets))
print("The number of unique words is", len(np.unique(np.hstack(data))))

このセルは、データセット内のユニークな感情(ポジティブ[1]またはネガティブ[0])の数と、レビューで使用されたユニークな単語の数を表示します。

以下の出力が表示されます。

Output

The output categories are [0 1] The number of unique words is 9998

この出力の最初の行は、映画がポジティブ(1)またはネガティブ(0)でラベル付けされていることを述べています。2行目は、データセットには9998個のユニークな単語があることを述べています。

次に、映画のレビューの平均単語の長さと単語の標準偏差を確認します。これを行うには、新しいセルで以下のコードを実行してください。

ニューラルネットワーク.ipynb
length = [len(i) for i in data]
print("The Average Review length is", np.mean(length))
print("The Standard Deviation is", round(np.std(length)))

このセルは、データセットの平均レビュー長と標準偏差を出力します。

Output

The Average Review length is 234.75892 The Standard Deviation is 173

この評価によれば、平均のレビューの長さは234単語であり、標準偏差は173です。

その次に、新しいセルでこれらの行を実行して、データセットの要素(最初のインデックス)を印刷します。

ニューラルネットワーク.ipynb
print("Label:", targets[0])
print(data[0])

データセットの最初の要素についての映画のレビューとラベルのペアを印刷します。

Output

Label: 1 [1, 14, 22, 16, 43, 530, 973, 1622, 1385, 65, 458, 4468, 66, 3941, 4, 173, 36, 256, 5, 25, 100, 43, 838, 112, 50, 670, 2, 9, 35, 480, 284, 5, 150, 4, 172, 112, 167, 2, 336, 385, 39, 4, 172, 4536, 1111, 17, 546, 38, 13, 447, 4, 192, 50, 16, 6, 147, 2025, 19, 14, 22, 4, 1920, 4613, 469, 4, 22, 71, 87, 12, 16, 43, 530, 38, 76, 15, 13, 1247, 4, 22, 17, 515, 17, 12, 16, 626, 18, 2, 5, 62, 386, 12, 8, 316, 8, 106, 5, 4, 2223, 5244, 16, 480, 66, 3785, 33, 4, 130, 12, 16, 38, 619, 5, 25, 124, 51, 36, 135, 48, 25, 1415, 33, 6, 22, 12, 215, 28, 77, 52, 5, 14, 407, 16, 82, 2, 8, 4, 107, 117, 5952, 15, 256, 4, 2, 7, 3766, 5, 723, 36, 71, 43, 530, 476, 26, 400, 317, 46, 7, 4, 2, 1029, 13, 104, 88, 4, 381, 15, 297, 98, 32, 2071, 56, 26, 141, 6, 194, 7486, 18, 4, 226, 22, 21, 134, 476, 26, 480, 5, 144, 30, 5535, 18, 51, 36, 28, 224, 92, 25, 104, 4, 226, 65, 16, 38, 1334, 88, 12, 16, 283, 5, 16, 4472, 113, 103, 32, 15, 16, 5345, 19, 178, 32]

この出力は、データセットの最初のレビューを提供し、その評価をポジティブ(1)として、フルテキストを整数インデックスとして示しています。デフォルトでは、テキストレビューは数値エンコードされた形で、整数ベースの単語インデックスのリストとして与えられます。レビュー内の単語は、データセット全体でどれだけ頻繁に現れるかに基づいてインデックスが付けられています。例えば、データ内で2番目に一般的な用語は整数2でエンコードされます。

新しいセルで以下の行を実行し、辞書を取り出し、単語のインデックスを元の単語に戻してテキストレビューを読むことができるようにします。

ニューラルネットワーク.ipynb
index = imdb.get_word_index()
reverse_index = dict([(value, key) for (key, value) in index.items()])
decoded = " ".join( [reverse_index.get(i - 3, "#") for i in data[0]] )
print(decoded)

このコードブロックは数値形式を読みやすいテキストにデコードします。get_word_index()関数を使うと、IMDbデータセットの単語をインデックスにマッピングした辞書が取得できます。その後、reverse_index変数は、単語インデックスを反転させた後のインデックスを単語にマッピングする辞書を保持します。dict()関数は、キーと値のペアでデータ値を格納する辞書を作成します。コードの最後の2行は、データセットの最初のシーケンスをデコードして表示します。

「get_word_index()」関数を使用すると、次の出力が得られます。

Output

# this film was just brilliant casting location scenery story direction everyone’s really suited the part they played and you could just imagine being there robert # is an amazing actor and now the same being director # father came from the same scottish island as myself so i loved the fact there was a real connection with this film the witty remarks throughout the film were great it was just brilliant so much that i bought the film as soon as it was released for # and would recommend it to everyone to watch and the fly fishing was amazing really cried at the end it was so sad and you know what they say if you cry at a film it must have been good and this definitely was also # to the two little boy’s that played the # of norman and paul they were just brilliant children are often left out of the # list i think because the stars that play them all grown up are such a big profile for the whole film but these children are amazing and should be praised for what they have done don’t you think the whole story was so lovely because it was true and was someone’s life after all that was shared with us all

このレビューのためのget_word_index()関数は、数値データを解読して読みやすい単語に変換し、認識できない単語は全て#で置き換えます。

このステップでは、データセットを評価し、各レビューがどのように準備されているかを確認しました。この情報を元に、データのトレーニングのための準備を行います。

ステップ3-トレーニング用のデータの準備

この段階では、学習のためのデータセットを準備します。ディープラーニングモデルは、一般的に学習に使用されるデータから開発されます。

このデータを準備する際には、貴重な洞察をもたらし、より正確なモデルの結果を導くために、正確な形式でデータを整えます。データの準備技術には、モデルに関連する特徴を選択する特徴選択、データセット内の変数をエンコーディング手法を用いて役立つ特徴に変換する特徴エンジニアリング、そしてトレインセットとテストセットにデータセットを分割するなどがあります。

このチュートリアルでは、データをテストセットと訓練セットに分割し、データのベクトル化による特徴エンジニアリングを行います。

次のセルで、データセット内のすべてのレビューをベクトル化するために、以下のコードを実行してください。

ニューラルネットワーク.ipynb
def vectorize(sequences, dimension = 10000):
    results = np.zeros((len(sequences), dimension))
    for i, sequence in enumerate(sequences):
        results[i, sequence] = 1
    return results

data = vectorize(data)
targets = np.array(targets).astype("float32")

最初に、各レビューをベクトル化し、10,000個の数字を含むようにします。このプロセスによって、データセット内の最大のレビューの長さが約10,000語であるため、10,000語より短いすべてのレビューをゼロで埋めます。ニューラルネットワークは、入力のサイズをすべて同じにする必要があるためです。

以下の日本語訳を1つ提供します:

vectorize()関数は、2つのパラメータを受け取ります:配列と10000のプリセット次元です。この関数は、NumPyのzeros()メソッドを呼び出し、ゼロで満たされた新しい配列を返し、その後のデータをエンコードします。コードの最後の2行で、データセット上で定義された関数を呼び出し、データセットのターゲット列を32ビット浮動小数点数に変換します。32ビット浮動小数点数は、約7桁の精度を持つ浮動小数点数です。ターゲット列を32ビット浮動小数点数に変換することで、列の精度とそれに伴うディープラーニングモデルが向上します。

データの準備の最終段階として、データをトレーニングセットとテストセットに分割します。40,000件のレビューをトレーニングセットに入れ、10,000件をテストセットに入れることで、先ほど説明した80/20の分割を提供します。

新しいセルでこれらのコマンドを実行してデータセットを分割してください。

ニューラルネットワーク.ipynb
test_x = data[:10000]
test_y = targets[:10000]
train_x = data[40000:]
train_y = targets[40000:]

データセットは、テストセットとトレーニングセットに1:4の比率で分割されており、トレーニングセットとテストセットの目標値はそれぞれtrain_yとtest_yとして保存され、レビューはトレーニングセットとテストセットにそれぞれtrain_xとtest_xとして保存されています。データセットの分割により、モデルは新しいデータでテストや評価を行うだけでなく、過学習を避けることができます。過学習とは、アルゴリズムがトレーニングデータを過剰にモデル化する状況です。

このステップでは、データを準備し、データセットをトレーニングセットとテストセットに分けました。生データをディープラーニングモデルで使用できる特徴に変換しました。トレーニング用にデータを準備したので、これからディープラーニングモデルが使用するニューラルネットワークを構築し、トレーニングを行います。

ステップ4 – ニューラルネットワークの構築とトレーニング

あなたは今、あなた自身のニューラルネットワークを構築することができます。

最初に、構築したいモデルのタイプを定義します。Kerasでは、Model Sequential APIとFunctional APIの2つのモデルのタイプが利用可能です。このチュートリアルでは、レイヤーを一つずつ作成できるSequential APIを使用します。

Note

注意:より複雑なディープラーニングモデルの場合は、Functional API を使用する必要があります。Sequential API では、レイヤーを共有したり、複数の入力や出力を持つモデルを作成することができません。ただし、このチュートリアルでは、Sequential API で十分です。

新しいセルで次のコマンドを実行して、モデルをシーケンシャルモデルとして設定します。

ニューラルネットワークの.ipynbファイル
model = models.Sequential()

Note

注意:この時点で別のTensorFlowのエラーが発生する可能性があります。それは、適切なコンパイラタグでTensorFlowを再構築するようにというエラーです。このエラーは前のエラーと関連しており、TensorFlow 2.xのパッケージはCPUとGPUの両方をサポートしているため、TensorFlowはGPUドライバを探しています。この警告は安全に無視しても構いません。それはチュートリアルの結果には影響しません。

ディープラーニングモデルの基盤となるのはレイヤーですので、次に入力層、隠れ層、出力層を追加します。各層にはdenseを使用し、過学習を防ぐためにdropoutを利用します。

新しいセルでこれらの行を実行し、レイヤーを追加してください。

ニューラルネットワーク.ipynb
# Input - Layer
model.add(layers.Dense(50, activation = "relu", input_shape=(10000, )))
# Hidden - Layers
model.add(layers.Dropout(0.3, noise_shape=None, seed=None))
model.add(layers.Dense(50, activation = "relu"))
model.add(layers.Dropout(0.2, noise_shape=None, seed=None))
model.add(layers.Dense(50, activation = "relu"))
# Output- Layer
model.add(layers.Dense(1, activation = "sigmoid"))
model.summary()

隠れ層でRelu関数を使用する理由は、それが望ましい結果を生成するからです。ReluはRectified Linear Unitの略であり、この関数は負の入力を受け取ると0を返し、正の値を受け取るとその値を返します。この関数を最初の層に追加することで、負の値を0に変換します。このチュートリアルでは、Relu関数によって入力層に入力される値は常に正の値になるため、ニューラルネットワークの入力に必要な条件を満たします。

出力層では、値が0と1にマッピングされるシグモイド関数を使用します。出力は正(1)または負(0)ですので、シグモイド関数によって出力層は0または1の出力を生成することが保証されます。

最後に、kerasにモデルの概要を表示させます。

あなたは、たった今トレーニングしたモデルの特徴の概要を受け取ります。 (Anata wa, tatta ima torēningu shita moderu no tokuchō no gaiyō o uketori masu.)

Output

Model: “sequential” _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= dense (Dense) (None, 50) 500050 dropout (Dropout) (None, 50) 0 dense_1 (Dense) (None, 50) 2550 dropout_1 (Dropout) (None, 50) 0 dense_2 (Dense) (None, 50) 2550 dense_3 (Dense) (None, 1) 51 ================================================================= Total params: 505,201 Trainable params: 505,201 Non-trainable params: 0 _________________________________________________________________ ​

次に、トレーニングのためにモデルをコンパイルして設定します。トレーニング中に重みとバイアスを変化させるアルゴリズムであるAdamオプティマイザを使用し、損失関数にはバイナリクロスエントロピー、評価指標には正解率を使用します。損失関数は、モデルがトレーニング中に最小化すべき量を計算します。この場合、クロスエントロピー損失は真のラベルと予測ラベルの間の距離を測る上で、バイナリ(0または1)分類アプリケーションにおいて優れた指標です。

次のセルでモデルをコンパイルするために、次の行を実行してください。

ニューラルネットワーク.ipynb
model.compile(
optimizer = "adam",
loss = "binary_crossentropy",
metrics = ["accuracy"]
)

compile()関数は、モデルのアーキテクチャを定義します。この定義の中で、モデルのオプティマイザとしてadamアルゴリズムを実装します。このアルゴリズムは、一次および二次モーメントを近似することに基づいた勾配降下法の手法です。メトリックおよびロスパラメータは非常に関連しています。メトリックパラメータはモデルのパフォーマンスを判断する方法を定義し、ロスパラメータはトレーニング中にモデルが最小化しようとする量を定義します。ここでは、メトリックは正解率(モデルが正しく予測する割合)であり、ロスはbinary_crossentropy(ラベルと予測値の間のメトリックであり、ラベルクラスが2つしかない場合に使用される)です。

今、モデルをトレーニングできるようになります。そのために、バッチサイズ32と2つのエポックを使用します。バッチサイズはニューラルネットワークを通過するサンプルの数であり、エポックはトレーニングデータ全体を繰り返し処理することを意味します。バッチサイズが大きいほどトレーニングは速くなりますが、収束するまでに時間がかかることがあります。逆に、バッチサイズが小さいとトレーニングは遅くなりますが、収束が早くなることがあります。

次に、これらの行を次のセルで実行して、モデルのトレーニングを始めましょう。入力を入力に正しくマッピングするためのすべてのパラメータを適切な値にするためのモデルトレーニングを開始します。

ニューラルネットワーク.ipynb
results = model.fit(
train_x, train_y,
epochs= 2,
batch_size = 32,
validation_data = (test_x, test_y)
)

モデルを.fit()関数を使って訓練します。この関数は、データセットに対して固定回数のイテレーションでディープラーニングモデルを学習させます。この関数には2つの必須パラメータがあります。

  • train_x refers to the input data.
  • train_y refers to the target data for the training set on which the data will be trained and can take other parameters.

他のパラメーターには、以下のものが含まれます。 (Hoka no paramētā niwa, ika no mono ga fukumaremasu.)

  • epochs (the number of epochs to train the model where an epoch is an iteration over the entire data provided).
  • batch_size (the number of samples per gradient update).
  • validation_data (the data on which the model will evaluate the loss at the end of each epoch).

このコードは2エポックとバッチサイズ32を使用してモデルを訓練します。つまり、データセット全体がニューラルネットワークを通過し、各反復ごとに32の訓練例が使用されます。検証データはtest_xとtest_yとして提供されます。

Note

注意:感情分析モデルのトレーニングはRAMを多く消費します。8GBのRAMサーバーでこのチュートリアルを実行すると、以下の警告が表示される場合があります:xの割り当てが利用可能なシステムメモリの10%を超えています。この警告は、トレーニングが利用可能なシステムメモリのかなりの部分を使用しており、チュートリアルの残りには影響しないことを示しているだけなので、無視してチュートリアルを続けることができます。

このステップでは、準備したデータセットでディープラーニングモデルを構築し、訓練しました。次に、このステップで生成された検証データを使用して、別のデータセットに対するモデルのパフォーマンスを評価します。

ステップ5 – モデルの評価を行います。

このステップでモデルを評価します。モデルの評価は機械学習の改善と開発プロセスにおいて重要です。この評価により、データを最も適切に表現するモデルや、選択したモデルの性能を見つけることができます。

機械学習の分類モデルには、主要なモデル評価メトリックスとして、正解率、適合率、再現率、F1スコアの4つがあります。

正確性は一般的に使用されるパフォーマンス指標であり、モデルが正しく予測した割合を評価します。正確性は、正しい予測の数を予測の総数で割ることで決定されます。このチュートリアルでは、モデルを評価するために正確性を使用します。

このモデルの文脈における「精度」とは、予測されたポジティブな映画のレビューの総数に対して正しく予測されたポジティブな映画のレビューを指します。一方、リコールは、データセットで評価された映画のレビューの総数に対して正しく予測されたポジティブな映画のレビューの割合です。精度は、「あなたのモデルがポジティブとマークしたすべての映画レビューのうち、実際にポジティブだったものは何件ですか?」という問いに答えます。これに対して、リコールは「実際にポジティブなすべての映画のレビューのうち、モデルがポジティブとマークしたものは何件ですか?」という問いに答えます。F1スコアは精度とリコール結果の加重平均です。そのため、誤ったカテゴリに分類されたレビューも考慮されます。

このチュートリアルでは、モデルの性能を正確性を使って評価します。次のセルでこのコードを実行してください。

ニューラルネットワーク.ipynbを日本語で要約する
scores = model.evaluate(test_x, test_y, verbose=0)
print("Accuracy: %.2f%%" % (scores[1]*100))

このコードはモデルの精度スコアをscoresという変数に保存し、それを画面に表示します。.evaluate関数は3つのパラメーターを受け取ります。

  • x_test: the feature column for the test dataset.
  • y_test: the target column for the test dataset.
  • verbose: the mode of verbosity.

以下の出力は正確率とともに表示されます。

Output

Accuracy: 86.59%

この訓練済みのモデルの正確性は86.59%です。

この正確度スコアは、このモデルが約10回中9回、レビューが肯定的か否定的かを正しく予測することを示しています。より高い正確度を持つ分類器を作成するために、コードを改善することができます。モデルのエポック数やバッチサイズを増やすことで、モデルの性能を向上させることができます。

ディープラーニングモデル(および機械学習モデル)は、与えられたデータの強力さに比例します。したがって、モデルの精度を向上させるには、より多くのデータを追加することが一般的に行われます。しかし、このモデルに使用されるデータは組み込まれており、修正することはできません。この場合、モデルの精度を向上させるためには、モデルにさらなる層を追加するか、ステップ4でのエポック数(データセットをニューラルネットワークを通じて複数回通過する回数)を増やすことで改善することができます。

エポック数を増やすために、model.fit()セル内のエポック数を2から3(または他の数字)に置き換えて、そのセルとそれに続くセルを再度実行してください。

ニューラルネットワーク.ipynb
results = model.fit(
train_x, train_y,
epochs= 3,
batch_size = 32,
validation_data = (test_x, test_y)
)

エポック数が増えましたので、訓練データは合計でニューラルネットワークを三回通過し、モデルはデータから学習する追加の機会が生まれます。モデル.evaluate()関数を再実行すると、更新された正答率が新たに出力されます。

このステップでは、構築したモデルを精度を計算して評価しました。初期の計算が終わった後、エポック数を増やしてモデルを改善し、再度精度のスコアを評価しました。

結論

このチュートリアルでは、Kerasを使用して映画のレビューの感情をポジティブかネガティブかに分類するためにニューラルネットワークの学習を行いました。このチュートリアルでは、Stanford大学の研究者によって収集されたIMDb感情分類データセットを使用しました。このデータセットは、Kerasの事前ダウンロード済みの2値感情分類のデータセットの1つを含んでいます。25,000件の高度に極端な映画のレビューがトレーニング用とテスト用に用意されています。このデータセットを使って、感情分析のための大規模なニューラルネットワークモデルを開発しました。

以下のオプションから、日本語で自由に表現します:
自分でデータを用意するか、他の人気データセットでテストすることで、構築してトレーニングしたニューラルネットワークの実装を試すことができます。他のKerasのデータセットを試したり、異なるアルゴリズムを試してみることもできます。

あなたのKerasとTensorFlowの経験を活かすために、弊社のチュートリアル「KerasとTensorFlowを使用した従業員の退職予測モデルの構築方法」をご覧いただくことができます。

コメントを残す 0

Your email address will not be published. Required fields are marked *