Estimating user’s emotion from non-verbal behaviour in communication
(実際に作成した論文はこちら)
Distinction
コンピュータが人間の感情などの非言語コミュニケーションを感知し、会話戦略を修正することで、人間とコンピュータのインタラクションはより自然なものになると考えられる。本論文では、知的エージェントによるアプリケーションユーザーを支援するために、マルチモーダルな特徴量からコミュニケーションにおけるユーザーの感情を推定するモデルの開発に焦点を当てる。この目的のために、14本のビデオでプレゼンテーションや会話を観察した参加者の顔、目、口、姿勢の特徴を含むマルチモーダルデータセットを使用する。また、このデータセットには、各参加者の発言内容の英語字幕が含まれており、事前に学習したBERTモデルを用いて感情分析を行い、ユーザの感情カテゴリを予め用意します。顔、目、口、姿勢の動きなど様々な特徴量を抽出し、ユーザーの感情カテゴリを推定しました。これらの特徴量から、Pytorchの3層ニューラルネットワークとランダムフォレストを用いて、EkmanレベルとGroupレベルの感情カテゴリを推定するクラス分類モデルを作成し、感情カテゴリの推定精度を評価した。実験の結果、マルチモーダルモデルは、Ekmanレベルで0.82、Groupレベルで0.96の分類精度を達成しました。今回使用したデータセットでは、非言語情報の量が限られているにもかかわらず、このモデルはユーザーの感情を予測する優れた可能性を持っていると考えています。さらに、ユーザーが話している動画から非言語データを収集し、感情推定モデルを作成することができました。他の動画についても同様の手法で、ユーザの顔、手、口、姿勢などの非言語情報を得ることができ、今後のプロジェクトで活用することができます。
今回は下記の3つのモデルを作成しました。
このプロジェクトでは、平均13分59秒の動画を14本収集しました。 話者による発話数は1動画あたり平均269回であり、合計3761回でした。 つまり3761個の感情カテゴリーを得ることができました。
英語字幕のタイムスタンプから、各センテンスの終了時刻とそのセンテンス中の間隔(終了時刻-開始時刻)を求めます。
各文章の動画に対してOpenFaceとOpenPoseの特徴抽出を行うために、FFm-pegという動画や音声を録画・変換・再生するフリーソフトを使って各文章のYouTube動画を切り出す。
各文章のタイムスタンプと発話中の間隔から、各文章の動画を抽出し、(a) OpenFace入力または手動データ観測用のMP4、(b) OpenPose入力用のAVIファイルフォーマットで出力する。
学習・評価データの目的変数として用いる感情カテゴリを用意するため、英語字幕の1文に対して感情分析を行いました。 その感情分析には、感情カテゴリをエクマンレベル(joy, anger, fear, sadness, disgust, and surprise)+ neutral とグループレベル(positive, negative, ambiguous) + neutralで分類したBERTベースの事前学習済みモデルを使用しました。
※neutralは、感情カテゴリに分類できないような中立的なもの(迷ったらneutral行き) ※ambiguousは「驚き」みたいなネガティブよりもポジティブに近いもの
Output Format https://github.com/TadasBaltrusaitis/OpenFace/wiki/Output-Format
OpenPose Doc - Output https://cmu-perceptual-computing-lab.github.io/openpose/web/html/doc/md_doc_02_output.html
ユーザーの感情カテゴリーの7クラス分類と4クラス分類のモデルを作成する。
比較的にスコア(Accuracy)が良かったロジスティック回帰、ランダムフォレスト、3層ニューラルネットワークを代表として採用しました。
SVMなども使用して分類してみましたが、スコアがそこまで伸びなかったです。
使用したスクリプトの格納先は以下となります。
https://github.com/kurokawa5/msc_project_for_job_applicaion/tree/main/python
https://github.com/kurokawa5/msc_project_for_job_applicaion/tree/main/sh
Script名 | 役割 |
---|---|
01_youtube_downloader.ipynb | ライブラリ(pytube)を使って指定されたYoutube動画を取得する |
02_organized_excel_file.ipynb | 開始時刻と字幕文章が交互に並んで1列になっているものを、それぞれの列を用意し、整理する |
03_adding_time_information.ipynb | 字幕文章の終了時刻とその差分 (終了時刻 - 開始時刻)を算出する |
04_emotion_extraction_from_subtitles.ipynb | 事前に学習したBERTモデル(GoEmotions PyTorch)を用いて、すべての文に感情を付与する |
05_ffmpeg.ipynb | 再生時間や差分に応じて動画(mp4、avi)を感情カテゴリー毎に切り出す |
06_run_openface.ipynb | OpenFaceを使って顔の座標点や視線推定を取得する(効率化するためにshスクリプトを用意した) |
07_openface_result_merged.ipynb | video毎に感情カテゴリ毎の出力結果(csvファイル)をマージする |
08a_remove_success0.ipynb | OpenFace の結果で success=0(そもそも取得失敗しちゃった) の行を削除する。 |
08b_features_selection_LR_ekman.ipynb | 特徴量を少し選定して、アルゴリズムはロジスティック回帰を使用して、グリッドサーチを使用してモデルを探す(感情カテゴリはEkman) |
08b_features_selection_LR_group.ipynb | 特徴量を少し選定して、アルゴリズムはロジスティック回帰を使用して、グリッドサーチを使用してモデルを探す(感情カテゴリはGroup) |
08b_features_selection_RF_ekman.ipynb | 特徴量を少し選定して、アルゴリズムはランダムフォレストを使用して、グリッドサーチを使用してモデルを探す(感情カテゴリはEkman) |
08b_features_selection_RF_group.ipynb | 特徴量を少し選定して、アルゴリズムはランダムフォレストを使用して、グリッドサーチを使用してモデルを探す(感情カテゴリはGroup) |
09_jsontocsv.ipynb | OpenPoseの出力結果(JSONファイル)をCSVファイルに変換する |
09_run_openpose.ipynb | OpenPoseを使って体の関節の位置をを取得する(効率化するためにshスクリプトを用意した) |
10_openpose_result_merged.ipynb | video毎に感情カテゴリ毎の出力結果(csvファイル)をマージする |
10_preprocessing_openpose.ipynb | 欠損値のある行を削除 |
11b_features_selection_LR_ekman.ipynb | 特徴量を少し選定して、アルゴリズムはロジスティック回帰を使用して、グリッドサーチを使用してモデルを探す(感情カテゴリはEkman) |
11b_features_selection_LR_group.ipynb | 特徴量を少し選定して、アルゴリズムはロジスティック回帰を使用して、グリッドサーチを使用してモデルを探す(感情カテゴリはGroup) |
11b_features_selection_RF_ekman.ipynb | 特徴量を少し選定して、アルゴリズムはランダムフォレストを使用して、グリッドサーチを使用してモデルを探す(感情カテゴリはEkman) |
11b_features_selection_RF_group.ipynb | 特徴量を少し選定して、アルゴリズムはランダムフォレストを使用して、グリッドサーチを使用してモデルを探す(感情カテゴリはGroup) |
12a (申し訳ございませんが、無くしました。) | OpenFaceとOpenPoseの出力結果(CSVファイル)をマージ |
12b_features_selection_LR_ekman_face_pose.ipynb | 特徴量を少し選定して、アルゴリズムはロジスティック回帰を使用して、グリッドサーチを使用してモデルを探す(感情カテゴリはEkman) |
12b_features_selection_LR_group_face_pose.ipynb | 特徴量を少し選定して、アルゴリズムはロジスティック回帰を使用して、グリッドサーチを使用してモデルを探す(感情カテゴリはGroup) |
12b_features_selection_RF_ekman_face_pose.ipynb | 特徴量を少し選定して、アルゴリズムはランダムフォレストを使用して、グリッドサーチを使用してモデルを探す(感情カテゴリはEkman) |
12b_features_selection_RF_group_face_pose.ipynb | 特徴量を少し選定して、アルゴリズムはランダムフォレストを使用して、グリッドサーチを使用してモデルを探す(感情カテゴリはGroup) |
13_openface_3layer_nn_model_pytorch_ekman_ep100_ver1.0.ipynb | ニューラルネットワークのモデル作成(感情カテゴリはEkman) |
13_openface_3layer_nn_model_pytorch_ekman_ep300_ver1.0.ipynb | ニューラルネットワークのモデル作成(感情カテゴリはEkman) |
13_openface_3layer_nn_model_pytorch_ekman_ep600_ver1.0.ipynb | ニューラルネットワークのモデル作成(感情カテゴリはEkman) |
13_openface_3layer_nn_model_pytorch_group_ep100_ver1.0.ipynb | ニューラルネットワークのモデル作成(感情カテゴリはGroup) |
13_openface_3layer_nn_model_pytorch_group_ep300_ver1.0.ipynb | ニューラルネットワークのモデル作成(感情カテゴリはGroup) |
13_openface_3layer_nn_model_pytorch_group_ep600_ver1.0.ipynb | ニューラルネットワークのモデル作成(感情カテゴリはGroup) |
14_openpose_3layer_nn_model_pytorch_ekman_ep100_ver1.0.ipynb | ニューラルネットワークのモデル作成(感情カテゴリはEkman) |
14_openpose_3layer_nn_model_pytorch_ekman_ep300_ver1.0.ipynb | ニューラルネットワークのモデル作成(感情カテゴリはEkman) |
14_openpose_3layer_nn_model_pytorch_ekman_ep600_ver1.0.ipynb | ニューラルネットワークのモデル作成(感情カテゴリはEkman) |
14_openpose_3layer_nn_model_pytorch_group_ep100_ver1.0.ipynb | ニューラルネットワークのモデル作成(感情カテゴリはGroup) |
14_openpose_3layer_nn_model_pytorch_group_ep300_ver1.0.ipynb | ニューラルネットワークのモデル作成(感情カテゴリはGroup) |
14_openpose_3layer_nn_model_pytorch_group_ep600_ver1.0.ipynb | ニューラルネットワークのモデル作成(感情カテゴリはGroup) |
15_openface_openpose_3layer_nn_model_pytorch_ekman_ep100_ver1.0.ipynb | ニューラルネットワークのモデル作成(感情カテゴリはEkman) |
15_openface_openpose_3layer_nn_model_pytorch_ekman_ep300_ver1.0.ipynb | ニューラルネットワークのモデル作成(感情カテゴリはEkman) |
15_openface_openpose_3layer_nn_model_pytorch_ekman_ep600_ver1.0.ipynb | ニューラルネットワークのモデル作成(感情カテゴリはEkman) |
15_openface_openpose_3layer_nn_model_pytorch_group_ep100_ver1.0.ipynb | ニューラルネットワークのモデル作成(感情カテゴリはGroup) |
15_openface_openpose_3layer_nn_model_pytorch_group_ep300_ver1.0.ipynb | ニューラルネットワークのモデル作成(感情カテゴリはGroup) |
15_openface_openpose_3layer_nn_model_pytorch_group_ep600_ver1.0.ipynb | ニューラルネットワークのモデル作成(感情カテゴリはGroup) |
16_plot_confusion_matrix_ekman.ipynb | 修論のためにconfusion matrixを用意 |
17_plot_confidence_face.ipynb | 修論のためにニューラルネットワークモデルの感情カテゴリ毎のconfidence値を図示 |
17_plot_confidence_pose_face.ipynb | 修論のためにニューラルネットワークモデルの感情カテゴリ毎のconfidence値を図示 |
17_plot_confidence_pose.ipynb | 修論のためにニューラルネットワークモデルの感情カテゴリ毎のconfidence値を図示 |
約2.5ヶ月使用してアイデア決めから修論作成まで実施しました。 実際のスケジュール感は以下の図のようなイメージです。
モデル作成
修論作成
毎週、教授とミーティング(30分〜1時間)を行い、進捗報告をしました。 その時に使用した資料をこちらに格納してます。