はじめに
この記事では
Detection of emotion by text analysis using machine learning
という感情分析に関する論文を自分なりにメモしてます。解説じゃなくてメモです!
勉強記録!!
JPHACKS2024で制作しようとしていた感情分析LINE botの参考にと思って読みました。
今回は本当にざっくりとしたメモの記録で、次回以降、実装してみます。
導入
1. 感情とは
感情分析および検出を行うにあたって、感情についての定義する必要
・「経験的、行動的、生理学的要素を含む複雑な反応パターン」と定義されることが多い。
・幸福、悲しみ、嫌悪、恐怖、驚き、怒りの6つと定義 by ポールエックマン
2. 感情検出のアプローチ
感情分析の分野では
(1)少数の基本的な感情が定義される基本モデル(カテゴリカルプローチ)
(2)次元感情モデル(次元アプローチ)
(3)評価の構成要素モデル
のようなアプローチがある
3. 今回の論文のアプローチ
- 感情の定義は6つの感情
・喜び joy
・悲しみ sadness
・怒り anger
・恐怖 fear
・愛 love
・驚き surprise - 感情検出
カテゴリカルアプローチを採用した
データの前処理
・データはsnsの会話内容からの感情を含むKaggleのテキストデータを使用
・データはトレーニングセット、テストセット、検証セットの3つに分割
・データセットの比率は全データが20,000件の投稿に対して、16,000/2000/2000
前処理はTensorFlow Keras の Tokenizer API を使用
パラメータ
・num_words (最も頻出する単語の最大数)
・filter (句読点のフィルタリング)
・lower (すべてのテキストを小文字に変換する)
・word_index (単語のインデックス作成)
・トークン化の他に全ての文を同じ長さにするためPaddingで前処理
Pad_sequensesには、「0」を代入して文を拡大するPaddingと最長文の長さを表すmaxlenの二つを引数に使用
・ディープラーニングでは単語をベクトル化
感情認識のアプローチ
語彙ベースによるアプローチ
感情クラスへの所属の数値度が注釈されてある単語の辞書を用意し、テキスト内に辞書内の単語がどれくらいあるかに基づいて分析する。
※今回は機械学習、ニューラルネットワークの学習を優先したいので、詳細は割愛します。
機械学習・ディープラーニングによるアプローチ
機械学習・ディープラーニングアプローチ
・SVM(サポートベクターマシン)
・NB(ナイーブベイズ)
・CNN
・RNN(LSTM)
・CNN + LSTM
を利用した
結果
・NBの方がSVMよりもパフォーマンスがよかった
・論文(Ghourabi et al. 2020)によれば、CNN + LSTMのパフォーマンスが一番高く、これは今回の研究とも一致した
以下の表はNB、SVM、CNN (Conv1D) + RNN (LSTM)を使用した感情の自動検出の精度測定値
Naive Bayse | SVM | Conve1D + LSTM | |
---|---|---|---|
Sadness | 0.50 | 0.67 | 0.96 |
Joy | 0.83 | 0.67 | 0.93 |
Anger | 0.80 | 0.33 | 0.91 |
Fear | 0.33 | 0.10 | 0.88 |
Love | 0.40 | 0.52 | 0.81 |
Surprise | 0.50 | 0.50 | 0.74 |
次回・感想
実装編
正直、論文の読解記録としてはイマイチだと思うので#論文読みで他の論文解説記事も読み込んでいきたいです。
あと単純にLLM初心者すぎたので理解していない部分が多い
参考