演習 - ニューラル ネットワークを使用してテキストのセンチメントを分析する
実際のテストでは、モデルに独自のテキストを入力して、モデルのパフォーマンス、つまりそのテキストで表現されているセンチメントがどれくらい適切に定量化されるかを確認します。 このユニットでは、入力としてテキスト文字列を受け取り、それをモデルに渡して、センチメントのスコアを返す、Python 関数を記述します。 その後、その関数を使用して、さまざまなテキスト文字列で表現されたセンチメントを分析します。
ノートブックの末尾にあるセルに次のコードを追加し、そのセルを実行します。
import string import numpy as np def analyze(text): # Prepare the input by removing punctuation characters, converting # characters to lower case, and removing words containing numbers translator = str.maketrans('', '', string.punctuation) text = text.translate(translator) text = text.lower().split(' ') text = [word for word in text if word.isalpha()] # Generate an input tensor input = [1] for word in text: if word in word_dict and word_dict[word] < top_words: input.append(word_dict[word]) else: input.append(2) padded_input = sequence.pad_sequences([input], maxlen=max_review_length) # Invoke the model and return the result result = model.predict(np.array([padded_input][0]))[0][0] return result
これらのステートメントで定義されている
analyze
という名前の関数では、入力として文字列を受け取り、その文字列で表現されたセンチメントを示す 0.0 から 1.0 の値を返します。 値が高いほど、センチメントは肯定的です。 その関数では、入力文字列がクリーンアップされ、load_data
関数によって作成された辞書の単語を参照する整数のリストに変換された後、最後にモデルのpredict
関数が呼び出されてテキストにセンチメントのスコアが付けられます。ノートブックを使用して次のステートメントを実行します。
analyze('Easily the most stellar experience I have ever had.')
出力は、0.0 から 1.0 の数値で表された入力テキストのセンチメントです。 モデルの評価は同意できるものですか。
今度は次のステートメントを試してください。
analyze('The long lines and poor customer service really turned me off.')
このテキストで表現されたセンチメントに対してモデルが出した値はいくつですか。
最後に、独自の文字列を入力してモデルをテストしてください。 結果は完璧ではありませんが、十分妥当なセンチメントの値がモデルで示されるはずです。 モデルのトレーニングには映画のレビューを使用しましたが、分析できるのは映画のレビューだけではありません。 なぜなら、映画の好き嫌いを表現する言葉と、他のそれとは無関係のテーマに関する感情を表現する言葉は、もともと似ているためです。