ゼファーネットのロゴ

映画レビューテキスト分類のためのTensorFlowでの単語埋め込みの使用。

日付:

この記事では、TensorFlow埋め込みレイヤーを使用して映画レビューのテキスト分類を実装する方法を説明します。

ご存知のように、ほとんどの機械学習アルゴリズムは、文字、単語、または文を理解できません。 それらは入力として数字のみを取ることができます。 ただし、テキストデータの性質は構造化されておらず、ノイズが多いため、この特性により、機械学習モデルにテキストデータを直接供給することはできません。

テキストデータを数値特徴に変換する方法はたくさんあり、従うプロセスは、選択した特徴工学手法の種類によって異なります。

機能エンジニアリングで最も人気のある手法のXNUMXつは ワンホットエンコーディング、この手法は、以下に示すように、文字または単語をXNUMX進数に変換します。

この手法を使用して、サイズN(語彙のサイズ)のベクトルを取得します。ベクトルは、i番目のエントリである1を除いて、すべてゼロです。

問題は ワンホットエンコーディング つまり、各単語の出現回数を考慮せずに、すべての単語が同じ重要性を持つことになります。 と呼ばれる技術 カウントのベクトル化 One Hot Encodingに似ていますが、特定の単語が存在するかどうか(0または1)をチェックする代わりに、ドキュメント内の単語数を考慮します。

ただし、この手法にはいくつかの問題もあります。たとえば、「The、at、which、…」のように頻繁に使用される単語では、多くの情報が得られません。 一方、より多くの情報を提供する単語は、頻度が低いか、まれである傾向があります。 この問題は通常、と呼ばれる手法を使用して対処されます 用語-頻度時間逆文書-頻度、前述の問題を考慮して、カウントベクトルをスパースベクトルに変換します。

説明するすべての方法は単語の頻度に依存しますが、このアプローチは多くのシナリオで機能しますが、複雑なタスクの場合は、意味関係のコンテキスト、つまり単語が近くに表示される頻度をキャプチャする必要があります。 例えば:

  1. 私は食べています リンゴ
  2. 使っています リンゴ

両方の文に「リンゴ」という単語が表示されていますが、隣接するさまざまな単語(近く)で使用すると、意味が異なります。 したがって、単語の埋め込みの背後にある考え方は、単語が使用される意味、意味関係、およびさまざまなコンテキストを表すことです。

ワンホットエンコーディングまたはカウントベクトル化によって取得されたベクトルとは異なり、単語の埋め込みは、このプロセスが密なベクトルであることが判明したデータから学習されます。 通常、これらのベクトルは、大きな語彙を扱う場合、256次元、512次元、または1024次元です。 逆に、20000次元、またはそれ以上(語彙サイズに応じて)のワンホットエンコーディングまたはカウントベクトルから取得されたベクトルとは対照的に、単語の埋め込みは、より少ない次元でより多くの情報を提供します。

単語の埋め込みの利点のXNUMXつは、特定のタスクに対して特定の単語の埋め込みを作成できることです。 英語の映画レビュー感情分析モデルの完璧な単語埋め込みスペースは、英語の法的文書分類モデルの完璧な埋め込みスペースから遠く離れている可能性があるため、この側面は重要です。 結局のところ、意味関係はタスクごとに異なります。

幸い、TensorFlowを使用すると、特定のタスクごとに新しい埋め込みスペースを学習できます。 新しい埋め込みスペースを学習するプロセスは、と呼ばれるレイヤーの重みを見つけることで構成されます。 Embedding Kerasでは、データとラベルに従って、ドキュメント内の単語間の意味関係に関する詳細情報を提供する埋め込みスペースを作成できます。

埋め込みレイヤーを作成するには、次に示すコードを使用できます。

>>> from tensorflow.keras.layers import Embedding>>> Embedded_layer = Embedding(1000,64)

埋め込み層は、可能なトークンの数(この例では1000)と埋め込みの次元(例64)の少なくともXNUMXつのパラメーターを受け取ります。 言い換えれば、 Embedding レイヤーは、形状(samples、sequence_length)の整数の2Dテンソルを受け取ります。 すべてのシーケンスは同じ長さである必要があります。そうでない場合、シーケンスは切り捨てられるか、ゼロが埋め込まれます。

このレイヤーは、形状の3D浮動小数点テンソルを返します (samples, sequence_length, embedding_dimensionality). 最初は、他のレイヤーと同様に、埋め込みレイヤーの重みはランダムになります。 ただし、トレーニングプロセス中に、これらの重みはバックプロパゲーションによって徐々に調整され、下流のモデルが予測を行うために使用できるものに空間を構造化します。

1. 会話型 AI が顧客サービスを自動化する方法

2. 自動チャット vs ライブチャット: カスタマーサービスの未来はどうなる?

3. COVID-19パンデミックにおける医療アシスタントとしてのチャットボット

4. チャットボット対。 インテリジェント仮想アシスタント — 違いと注意点は?

ここで検討した概念を適用して、映画レビューを分類できるモデルを構築しましょう。

バイナリ感情分類に使用されるデータセットには、他のベンチマークデータセットよりも多くのデータが含まれています。 具体的には、このデータセットは25000の肯定的な映画レビューと25000の否定的な映画レビューを提供します。 データセットはにあります Kaggle 次のリンクを使用するプラットフォーム: IMDBデータセット。 映画レビューがどのように見えるかを見てみましょう。

'素晴らしい小さな作品。 撮影技術は非常に控えめで、非常に昔のBBCのファッションであり、作品全体に心地よい、時には不快な臨場感を与えます。 俳優は非常によく選ばれています-マイケルシーンは「すべてのポラリを持っている」だけでなく、彼はすべての声をパットダウンしています! ウィリアムズの日記のエントリへの参照によって導かれるシームレスな編集を本当に見ることができます、それは見る価値があるだけでなく、それは素晴らしく書かれ、実行された作品です。 コメディの偉大な巨匠の一人と彼の人生についての見事な作品。 リアリズムは本当にささいなことで帰ってきます。伝統的な「夢」のテクニックを使用するのではなく、堅実なままで消える警備員のファンタジー。 それは私たちの知識と感覚に基づいており、特にオートンとハリウェルに関するシーンで、セット(特にハリウェルの壁画がすべての表面を飾っているフラットのシーン)は非常によくできています。

上記のテキストは肯定的なレビューに対応しており、Pythonはこれらのレビューを可変長の文字列として処理します。 テキストデータを数値特徴に変換するために使用できる方法を調べてみましょう。ほとんどの機械学習モデルはトレーニングプロセス中に数値特徴を使用するため、これは重要なステップです。 テキストデータを含むデータフレームは、次のようになります。

4つの列が表示されます。モデルをトレーニングするには、 clean_review & labels レビューとそれぞれのラベルを含む列。1は肯定的なレビューを意味し、0は否定的なレビューを意味します。

TensorFlowはと呼ばれるクラスを提供します Tokenizer,これにより、データまたは「トークン」から情報の最小単位が取得されます。

tf.keras.preprocessing.text.Tokenizer(
num_words =なし、
フィルタ= '! "#$%&()* +、-。/:; <=>?@ [\] ^ _` {|} 〜tn'、
lower = True、split = ''、char_level = False、oov_token = None、
document_count = 0、** kwargs
)

Tokenizerクラスは、少なくともXNUMXつの引数を受け取ります。これは、単語の頻度に基づいて保持する単語の最大数を示します。 このクラスは、句読点、タブ、および改行を削除するためのフィルターを実装します。 最後に、デフォルトでは、トークンは単語レベルです。

トークナイザーは、単語をインデックスにマップする辞書を作成します。この辞書は次のようになります。

>>> tokenizer.word_index
{'the':1、
'および':2、
'a':3、
'の':4、
'から':5、
'is':6、
'in':7、
'それ':8、
'i':9、
...
}

このプロセスの後、各ドキュメントをシーケンスに変換する必要があります。これは、次の方法を使用して行うことができます。 texts_to_sequences、後で、すべてのシーケンスを持つ最大長を指定して各シーケンスをパディングする必要があります。これにより、指定された最大長に応じて、元のシーケンスが切り捨てられるか、ゼロがパディングされます。

シーケンスの最大長を100と定義したので、形状の行列が得られました (50000,100)、これは、長さが50000の100件のレビューです。これらのシーケンスがどのように見えるかを見てみましょう。 これを行うには、単語インデックス辞書を使用して、インデックスを単語にマップします。

モデルに適合するトレーニングセットと、モデルのパフォーマンスを検証するためのテストセットを作成しましょう。 40000件のレビューを使用してモデルをトレーニングし、残りを検証目的で使用します。

変数のような training_samples & validation_samples 以前に定義されました。

肯定的なレビューと否定的なレビューを分類するための簡単なモデルを定義します。 このレイヤーの出力は3Dテンソルになるため、モデルは埋め込みレイヤーから始まります。 このレイヤーは、密なレイヤーをフィードするためにフラット化する必要があります。このため、ベクトルを平均化して出力をフラット化するGlobalAveragePooling1Dレイヤーを使用します。 その後、モデルはXNUMXつの密な層で形成されます。 モデルアーキテクチャを以下に示します。

モデルアーキテクチャ

学習プロセスを加速するために、コールバックを使用して早期停止を実装します。これにより、過剰適合を防ぐことができます。 さらに、学習プロセスを改善するために、 ReduceLROnPlateau 折り返し電話。 この実装により、モデルのパフォーマンスが停止したときの学習率が低下します。

テストデータの精度が停滞しているように見える一方で、トレーニングデータの精度がより速く向上するため、モデルは過剰適合する傾向があります。

正確さ

損失のグラフィックでも同じ動作が見られます。トレーニングデータの損失は急激に減少し、テストデータの損失は増加するため、早期停止手法を使用すると、最適なモデルを取得してトレーニングプロセスを停止できます。

損失

このモデルの一般的な精度は86.80%です。これは、埋め込みレイヤーの基本的な実装に非常に適しているため、モデルを改善するためにパラメーターを調整すると、パフォーマンスが向上します。

埋め込みレイヤーを視覚化するには、最初のレイヤーの重みを抽出する必要があります。 これらの重みを使用して、語彙のすべての単語に対応するベクトルを取得できます。 このようにして、これを介して視覚化を生成するために必要な情報を含むファイルを生成できます。 ウェブサイト

上に示したアニメーションでは、埋め込みスペースを見ることができます。 この空間が、私たちが扱っている問題の種類に対応して、XNUMXつの反対側にグループ化される傾向があることがわかります。 このプロジェクトの開発に使用されたコードの詳細を知りたい場合は、私の GitHubリポジトリ

感情分析は、自然言語処理の一般的なタスクです。 しかし、人間の言語は複雑であるため、困難です。 たとえば、ある映画のレビューは、俳優のパフォーマンスについての褒め言葉で始まり、映画についての悪いコメントで終わり、否定的なレビューにつながる可能性があります。 別のシナリオは、人々が皮肉を使って意見を形成する場合です。 想像してみてください。多くの人は皮肉さえ理解していません。 したがって、XNUMX台のマシンが人間の言語のこれらの側面を理解するのに苦労すると考えるのは十分に公正です。

TensorFlowを使用してテキストデータを処理し、機械学習モデルを構築して、テキストデータを入力として持つ問題を処理する方法を学びました。

私はデータサイエンスに情熱を注いでおり、これらの概念を使用して問題を簡単に解決する方法を説明したいと思います。 ご不明な点がある場合、または単に接続したい場合は、で私を見つけることができます LinkedIn またはmanuelgilsitio@gmail.comで私にメールしてください

PlatoAi。 Web3の再考。 増幅されたデータインテリジェンス。

アクセスするには、ここをクリックしてください。

Source: https://chatbotslife.com/using-word-embeddings-with-tensorflow-for-movie-review-text-classification-6c943d14cca2?source=rss—-a49517e4c30b—4

スポット画像

最新のインテリジェンス

スポット画像