emotion2vec
emotion2vec
テキスト感情ベクタライザの提案 〜 doc2vec, fasttext, skipthoughtに続く第四のテキストベクタライザ 〜
(ジョーク投稿です。正確なリプレゼンテーションかどうか、十分な検証をする必要があります)
感情は難しい
コミュ症の人が何らか相手の感情を察しようとした場合、既存の知識や経験に基づいて相手が何を意図しているのか、把握することが難しいという悲しい事実があります。
ディープラーニングってやつでなんとかして!案件ですね。
リプレゼンテーション(表象)の選択
最も端的に感情を示している素性は何でしょうか。映像ではその人の行動であったり、表情であったりします。
テキストの世界では、最近の若い人たちは、絵文字というものを使うことがあります。絵文字はその文脈では伝えきれてない感情を絵文字の表現力を借りて表現する場合で有効であります。
例) 💢 -> ムカつく ❤ -> 好き好き ♪ -> 気分が上昇している
なるほど。漫画はよく読むのでよくわかりますね。なんで漢字の書き取りがあって、絵文字の書き取りは小学校ではやらないんですかね。
テキストにおいては、絵文字がそのテキストの秘められたリプレテーション(表象)になっているように仮説が立てられそうです。
手法
Word Level CNNを用いて、テキストをベクトル化します。ベクトル次元数は2014次元で大きいです。
Twitterのフリープランで400万ツイートものツイートを頑張って集めました。これを分かち書きして、fasttextで分散表現に置き直します。
分散表現で記された文章をCNNにかけて、そのツイートに内在されていたはずの絵文字を予想するタスクを与えます。複数の絵文字がある場合、複数予想させます。
結果として、感情を示すベクトルが獲得できるようになります。
(epochは前回CNNでのテキスト認識で用いたoverfitにならない25epochを適応) optimizer:adam window size:1,2,3,4,5 input-vector:256dim * 30dim output-vector:2048dim その他諸々はコードを参照ください
コード
(商用利用する際には一声くださると助かります)
github.com
結果
今回のemotion2vecは極端な不均衡データでありました。そもそも感情は自然に分布しないと思うので、それはいいのですが、特定の♪などの絵文字リプレゼンテーションになりがちになりました。
(テキストは小説家になろうの「蜘蛛ですが何か」からお借りしました)
text.ないわー。 😭 8 ♡ 7 😂 5 💢 4 😳 3 ♪ 2 💓 2 🙄 2 💗 2 ✋ 2 😑 2 ❤ 2 ✨ 2 😊 2 👍 1 😢 1 💕 1 ❗ 1 😇 1 💩 1 (悲しくて起こっている感情のベクタ)
text.これで私は自由だー! ♡ 7 ✨ 6 ♪ 5 💕 5 😭 4 😂 4 😊 4 💓 3 👍 3 💗 3 🏻 2 😆 2 😍 2 ☆ 2 🙌 2 😳 1 🙏 1 ❤ 1 ☺ 1 😌 1 (自由の感情のベクタ)
text.《熟練度が一定に達しました。スキル『蜘蛛糸LV3』が『蜘蛛糸LV4』になりました》 ★ 94 ☆ 58 ♪ 43 (なんか事務口調のテキストには星がいっぱいつきます)
text.あ、でも蜘蛛猛毒だと大抵の相手は即死しちゃうな。 😱 8 💢 8 😭 7 😨 7 😡 6 💥 6 😇 5 ♡ 5 💦 5 😂 4 😅 4 🏻 4 🙏 4 ♂ 3 (ムンクっぽい何か)
text.マジかー。 😭 16 😂 6 😇 3 😳 3 😍 2 😢 2 😱 2 💕 2 ♡ 2 🙄 1 💗 1 💓 1 💢 1 ✨ 1 🙏 1 💦 1 🙈 1 😌 1 😅 1 (マジかー)
text.「クソッ!?」 ♡ 17 💢 10 💩 9 ♪ 2 ❤ 1 ☆ 1 ♥ 1 ☺ 1 (うんちのお気持ち)
text. うるせぇ、てめえ、ぶっ殺すぞ
💢 99
(わかる)
text. あのあの、エッチなのはダメなのです ♡ 25 ♪ 7 💕 3 💦 3 😭 3 ☆ 2 ♥ 2 😂 2 😢 2 😊 1 ❤ 1 😅 1 😇 1 😑 1 😌 1 (ちゃんとハートと汗があるよ、電ちゃんっぽい発言を意図しました)
考察
Word LevelじゃなくてChar Levelのほうがよかった気がする。
強い感情に引っ張られて大きなウェイトがつくので、感情の起伏を定量的に記すのもいいかもしれない
まとめ
じつはこれはText GAN(SeqGAN)の副産物だったりします。SeqGANにはとにかく前処理が山ほどあって、なんとなく学習までのイメージがあるのですが、遠いです💦