BERTを使用した感情分析の改善

クライアントに応答するボットがあり、少し自然で、より人間らしく聞こえるようにしたいとします。

UnsplashのHybridによる写真

それを達成するには、答えをよりパーソナライズする必要があります。話している顧客について詳しく知る方法の1つは、回答の極性を分析することです。ここでの極性とは、文(または文のグループ)がポジティブなステートメントまたはネガティブなステートメントとして知覚されることを意図して書かれているかどうかを検出することを意味します。これは、バイナリ分類の問題に直面していることを意味します。このNLPタスクを解決する多くの方法があります。私はいくつかをテストしましたが、実際に他のものよりも優れたものはBERTでした。

BERTの概要

BERT(トランスフォーマー向け双方向エンコーダ表現)は、Googleが開発し、2018年後半にリリースされた「言語表現の事前トレーニングの新しい方法」です(詳細については、こちらをご覧ください)。一般的なデータセット(WikipediaおよびBooksCorpusから)で事前にトレーニングされているため、さまざまなNLPタスクを解決するために使用できます。これには、文レベルの分類(ここで行う)、質問応答またはトークンレベルの分類(音声タグの一部など)が含まれ、BERTはこれらのタスクの多くで最先端のパフォーマンスを実現できます。

他の2つの最新モデルと比較したBERTアーキテクチャ(出典:Devlin et al。)

実際には、BERTは、英語およびその他の103の言語用に事前に訓練された言語モデルを提供しており、ニーズに合わせて微調整できます。ここでは、感情分析を行うために英語モデルを微調整する方法を見ていきます。

BERTを使用した微調整

BERTは最近、Pythonでチュートリアルノートを提供し、映画レビューで感情を検出する方法を説明しました。チュートリアルノートはよくできていてわかりやすいので、ここでは詳しく説明しません。ここではいくつかの考えを示します。最初に、ノートブックはIMDbデータセットを使用します。これはKerasから直接ダウンロードできます。このデータセットには、トレーニング用とテスト用の2つの等しい部分に分割された50000の映画レビューが含まれています。各データセットはバランスが取れており、12500の肯定的なレビューと12500の否定的なレビューがあります。

IMDbデータセットからのレビューの例。ゼロへの極性は、文が否定的な感情を表現することを意味しますが、1つは肯定的なことを意味します。

微調整するために、彼らは事前に訓練されたモデルの上に単一の新しいレイヤーとソフトマックスを適用しますが、カスタマイズすることができます。 Tensorflow推定器構造を使用して結果をトレーニングおよび予測します。また、ノートブックでコーディングされるか、GitHubにあるrun_classifier.pyファイルからインポートされたrun_configまたはmodel_fnなどの関数が必要なので、心配する必要はありません。 。

モデル評価

BERTのパフォーマンスを確認するために、他の2つのモデルと比較しました。 1つ目は、TF-IDFベクトル化によるロジスティック回帰です。 2番目は、Rezaeiniaらからインスピレーションを受けています。 (ギット)。 Word2Vec埋め込みと品詞タグ付けを使用し、両方の連結を1D畳み込みネットワークに渡します。

ロジスティック回帰は驚くほどうまく機能し、ニューラルベースのモデルよりも優れていますが、BERTはさらに優れたスコアを生成します。さらに、モデルがより大きなデータセットでトレーニングされると、BERTの結果は大幅に改善されます。欠点になる可能性があるのは、GPUを使用する場合でも、トレーニングに非常に長い時間がかかることです。ロジスティック回帰により、トレーニングが数秒で完了します。BERTを行うには20分ほどかかります(GPUおよび25000のトレーニングレビュー)。

さまざまなモデルの結果

DockerとTensorflowを使用する

モデルをsaved_model.pb(export_savedmodelメソッドなどで取得)として保存したら、モデルを実行して予測を行うサーバーをセットアップできます。最初に、テンソルフローサービングからDockerコンテナーを作成し(最初にDockerをインストールする必要があります)、それにモデルを追加します。 Model_enは、エクスポートしたモデルを含む1(tensorflowに必要)という名前のフォルダーを含むフォルダーでなければなりません。これは、以下のコマンドラインによって実現されます。

次に、入力として文を受け取り、それをBERT入力機能に変換する(チュートリアルノートブックのように)単純なクライアントを作成し、予測を行う実行中のDockerコンテナーを呼び出します。 Flaskを使用して、クライアントを単純なAPIに変えることができます。以下のPythonコードは、これらのさまざまな手順を示しています。

その後、たとえばPostmanを使用して、文字列要求を送信することで予測を行うことができます。

ほら!これで、BERTで優れたセンチメント分析を行い、それを実際のアプリケーションで使用する準備が整いました。