Pythonを使った感情分析(Sentiment Analysis)のFlair
Pythonを使った感情分析のFlair
感情分析シリーズの次のブログ投稿へようこそ!今日は、Pythonライブラリの感情分析に使用される方法の1つであるFlairを探求します。
収集したTwitterデータを使用して、映画「Extraction 2」の感情分析が行われました。このリンクからデータをkaggle.comでダウンロードすることができます。Twitterからデータを抽出し、前処理、TextBlobを使用した感情分析、Vaderを使用した感情分析を含む、感情分析シリーズの完全なリストをこのリンクで見つけることができます。
感情分析におけるFlair:強力なNLPライブラリ
Flairは、感情分析のタスクに焦点を当てたZalando Research [1]によって開発されたNLPライブラリです。これは、テキスト内の各単語またはトークンに対して感情ラベルを予測するためのモデルを訓練するために、シーケンスラベリングというディープラーニングの手法を使用しています [2]。これにより、モデルは文やドキュメント内の個々の単語やフレーズによって表現される感情を捉えることができます。Flairは、多言語の事前学習済みモデル[3]を提供しており、大規模な初期トレーニングを必要とせずに利用することができます。さらに、ユニークなデータセットを使用して事前学習済みモデルを微調整することも可能です。
Flairの主な利点は、複雑で混乱したテキストで伝えられる気分をより完全に理解するために、近くの単語や文の構造を考慮して文脈情報を抽出する能力です[2]。Flairを使用して入力の感情を予測するためには、テキストデータを事前処理する必要があります。ユーザーフレンドリーで直感的なAPIにより、感情分析機能をNLPアプリケーションに統合することが容易になります。Flairは、ソーシャルメディアモニタリング、顧客フィードバック分析、意見マイニングなど、さまざまなアプリケーションに正確な感情分析モデルを作成するための学者や開発者にとって有効なツールです[2]。
- ベイリー・カクスマー、ウォータールー大学の博士課程候補 – インタビューシリーズ
- ジョシュ・フィースト、CogitoのCEO兼共同創業者 – インタビューシリーズ
- 水中探査の革命:ブラウン大学のプリオボットが海洋の秘密を解き明かす
注意:Flairをインストールするには、
pip install flair
を使用できます。
classifier = TextClassifier.load('en-sentiment')for index, row in df.iterrows(): text = row['tokens'] sentence = Sentence(text) classifier.predict(sentence) sentiment = sentence.labels[0].value score = sentence.labels[0].score df.loc[index, 'sentiment'] = sentiment df.loc[index, 'score'] = scoreprint(df.head())
以下は、Flairを使用した感情分析に使用される主なコードスニペットです。
# 事前学習済みの感情分析モデルをロードするclassifier = TextClassifier.load('en-sentiment')# DataFrameの各行に対して繰り返し処理を行う # :( 時間がかかります :(for index, row in df.iterrows(): text = row['tokens'] sentence = Sentence(text) # 現在の文の感情を予測する classifier.predict(sentence) # 予測された感情とスコアを取得する sentiment = sentence.labels[0].value score = sentence.labels[0].score # DataFrameを感情とスコアで更新する df.loc[index, 'sentiment'] = sentiment df.loc[index, 'score'] = score# DataFrameの'sentiment'列を表示するprint(df['sentiment'])
このコードサンプルは、Flairパッケージを使用してDataFrameに感情を分類します。DataFrameの各エントリは、既にトレーニングされた感情分析モデルを使用して処理されます。分類器は、各テキストの感情とスコアの予測を決定するために使用されます。予測された感情とスコアは、DataFrameに追加されます。
上記のコードは、2つの新しい列を追加しました。
可視化
次に、matplotlib
ライブラリをpltとしてインポートします。コードは、DataFrameの「sentiment」列の各感情カテゴリの出現回数を数え、その数をsentiment_counts
変数に格納します。そして、棒グラフが作成されます。
import matplotlib.pyplot as plt# 各感情ラベルの出現回数を数えるsentiment_counts = df['sentiment'].value_counts()# 円グラフをプロットするplt.pie(sentiment_counts.values, labels=sentiment_counts.index, autopct='%1.1f%%')plt.title('感情分析結果')plt.show()# 各感情のカウント数を表示するfor sentiment, count in sentiment_counts.items(): print(f"{sentiment}: {count}")
結論
TwitterからスクラップしたExtraction 2の映画データを使って得られた感情分析の結果に基づき、以下の感情の数があります。
NEGATIVE(ネガティブ):6073
POSITIVE(ポジティブ):3926
ネガティブとポジティブの感情のみが含まれていることがわかります。興味深いことに、中立的な感情は無視されています。これには明らかな理由があります。Flairの事前学習済み感情分析モデルで使用される感情ラベルには通常、ポジティブとネガティブの感情が含まれていますが、中立的な感情は含まれていません。
中立的な感情ラベルを含むようにFlairの感情分析能力を拡張することができます。ただし、これには適切なデータセットの収集や注釈付け、および所望の感情分類タスクに特化したモデルのトレーニングが必要です。
上記の感情の数に基づくと、この映画はネガティブなフィードバックを受けたようですが、それは事前学習モデルに中立的な感情がないことが原因です。したがって、明確な分析を求める場合は、カスタムモデルを作成してさらなる分析を行うことが賢明です。
参考文献
[1] Zalando Research. (n.d.). Flair — a powerful NLP library. 参照元:https://github.com/zalandoresearch/flair
[2] Akbik, A., Blythe, D., & Vollgraf, R. (2018). Contextual String Embeddings for Sequence Labeling. 参照元:https://www.aclweb.org/anthology/C18-1139/
[3] Akbik, A., Bergmann, T., Blythe, D., Rasul, K., Schweter, S., Vollgraf, R., & Zalando SE. (2019). FLAIR: An Easy-to-Use Framework for State-of-the-Art NLP. 参照元:https://www.aclweb.org/anthology/N19-4010/
私のデータアナリストの道のりに参加するためにFOLLOW MEしてください。
プロジェクトの共同作業、知識共有、またはガイダンスについては、Twitterで繋がるか、[email protected]までメールでお問い合わせください。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles