CINC Tech Blog

株式会社CINCのエンジニアチームが日々習得した技術やTipsを公開するブログです

日本語極性判定AIを開発しました

開発部のTです。開発を続けていた文章の感情検知器の第一バージョンがついにローンチされます。本記事ではこの感情検知器のご紹介させていただきます。

以下、技術プレスリリース: www.cinc-j.co.jp

www.cinc-j.co.jp

Index

  • 第一部: お披露目
    1. 簡単なご紹介
    2. 使ってみた
    3. 精度の検証
    4. 開発余地・今後の展望
  • 第二部: 開発裏ストーリー
    1. 前置き
    2. 本編
      • 第一の関門: 仕様設計
      • 第二の関門: データセット取得の困難さ
      • 第三の関門: 精度検証
      • 第四の関門: ラベルの精度の限界
    3. 終わりに

第一部 お披露目

1. 簡単なご紹介

感情検知器とは?

感情検知器は、日本語の文章の感情を検知するテクノロジーです。 実際に感情検知器に文章を入れてみましょう。

ロイヤルミルクティーのやつばちこい美味しい、1番更新された!

上記の文章は、実際にタイムラインに流れた文章です。 この文章の感情を検知してみましょう。

key value
感情スコア 91.8%
楽しい感情 1
愛する感情 1
悲しい感情 0
恐れの感情 0
怒る感情 0

出力を上の段から見てみましょう。"感情スコア" は、感情の強さを示す"エモ度"です。 エモ度は、0 ~ 100% で表されます。 高いほど感情が強く出た文章で、直情的な文章です。 また、低いほど感情が低い文章、もしくはフォーマルで婉曲的な文章となります。 今回のエモ度は91.8%なので、かなりエモーショナルな文章と判定されました。

上記の文章からは 楽しい感情 と 愛する感情 の感情が検知されています。 直感とよく一致していますね!

その他の文章を見てみましょう。

【あすへのひとこと】速効性は怠慢の元(20・新生)

Key Value
感情スコア 7.7%
楽しい感情 0
愛する感情 0
悲しい感情 0
恐れの感情 0
怒る感情 0

今回の文章は、ただ客観的な事実を述べているだけです。 このためエモ度は7.7%と、とても低い値になりました。

また上記の文章では、全ての感情が陰性と判定されています。 今度は、少しひねった文章を見てみましょう。

研究費あたりの論文数の話をするなら有名な を見れば「選択と集中」の失敗は明らかでは…

Key Value
感情スコア 8.1%
楽しい感情 0
愛する感情 0
悲しい感情 1
恐れの感情 0
怒る感情 0

上記のような文章は、中立的な文章と判断されエモ度はやはり低く出ています。 しかし、きちんと 悲しい感情 の感情が検知されました。 エモ度が低くても、感情は独立に検出されます。

2. 使ってみた

今度は、感情検知器を実際に使用して簡単な文章分析を行いました。 R&Dチームが保有する感情検知器のテストに使用した70000件の文章から、センチメント分析をしてみましょう。

応用例1) 単語のセンチメント分析

単語のセンチメント分析では、ある単語に対する感情を集計します。 あるキーワードを含んだ文章のサンプル全てに感情検知を行い、その結果を平均化したものになります。 ある単語が、どういった文脈で使われているかを見ることができます。

まず、以下のキーワードを検索してみましょう。

> "母の日"

Emotion Rate
楽しい感情 76.0%
愛する感情 48.0%
悲しい感情 12.0%
恐れの感情 4.0%
怒る感情 2.7%
Sample Size n = 75

"母の日" を含む文章は75件見つかりました。サンプルを収集した時期がちょうど母の日を含んでいたたため、比較的たくさんの文章が検出されました。 この内、76%の文章から 楽しい感情 の感情が検知され、48%の文章から 愛する感情の感情が検知されました。 なお、一つの文章が複数の感情を陽生とすることがあるため、合計が100%にならないことにご注意ください。 この結果も直感通りですね。

少数ですが、悲しい感情という感情も検知されています。 どのような文章か気になりますね。 どうやら、以下の2文章のようです。

1) 調香師(パフューマー) 母の日に 子供がいない私の 淋しさ 埋めてくださるように若い人たちが 思い思いの 心を届けてくださった日 嬉しさと 勿体なさ 申し訳なさは 世のお母さんと同じ思いです

2) 母の日にねぇ、亡くなった。 この男の子にとって母の日は悲しい日に… 2歳長男と共に車にはねられた33歳母親が死亡 運転の男「ぶつかる直前まで気付かなかった」(東海テレビ) - Yahoo!ニュース

母の日という幸せな日が、転じて悲しい文脈で文章されることもあるようです。

さらに他の例を見てみましょう。

> "地震"

Emotion Rate
楽しい感情 10.0%
愛する感情 0.0%
悲しい感情 20.0%
恐れの感情 90.0%
怒る感情 10.0%
Sample Size n = 10

"地震" という単語を含む文章は、やはり'恐れの感情'の文脈で使われることが多いようです。

応用例2) 単語比較によるセンチメント分析

感情検知器は複数の単語を比較することで、より深い見地を得ることができます。

今回は、ケーキとアイスに対するツイッター内での印象を比較してみましょう。 どちらもポジティブな文章が多いことが予想されますが、二つの単語のに何か違いはあるのでしょうか?

Keyword ケーキ アイス
Average 感情スコア 74.0% 56.6%
楽しい感情 Rate 75.0% 77.8%
愛する感情 Rate 66.7% 40.7%
悲しい感情 Rate 16.7% 11.1%
恐れの感情 Rate 0.0% 0.0%
怒る感情 Rate 16.7% 3.7%
Sample Size n = 12 n = 27

ケーキを含む文章は12件、アイスは27件見つかりました。 早速比較してみましょう。

ケーキとアイス共に75%ほどの文章から 楽しい感情 という感情が検知されています。 やはり両者とも喜びの文脈で出現するようです。

しかしよく見てみると、二つの似たスイーツに違いが見つかります。 ケーキという単語は愛する感情の文脈で出現することが、アイスと比較して多いようです。 また、ケーキを含む文章の方がアイスを含む文章よりエモ度も高いです。 確かに、ケーキはアイスよりセンチメンタルなものという気はしますね。

分析例は異常になります。 サンプルが増えればよりレアな単語を検索したり、複数の単語を組み合わせて検索したりすることができて、分析の幅が広がりそうです。

3. 精度の検証

CINCの感情検知器の精度を検証してみました。 複数人の被験者に文章を確認してもらい、それぞれの文章の感情をラベル付けしてもらいます。 これらの被験者のラベル付けと感情検知器の結果が一致した割合は以下のようになりました。

楽しい感情 愛する感情 悲しい感情 恐れの感情 怒る感情
0.7380 0.7173 0.7540 0.7723 0.8697

現時点では 愛する感情 の一致率が低く、怒る感情の一致率が高いようです。 全体としての一致率は77%となりました。

現実のところ文章の感情を読み取るのは、人間の目でもしばしば困難です。個人間で意見が食い違うことも多々あります。 R&Dチーム内では出力を確認したところ、極端に誤った出力が出されることはこの数字より少ない印象です。

感情検知器の出力はシグモイド関数となっております。 つまり種強くは 0 から 1 の間で、0 は感情の陽性度が最低で, 1は陽性度が最大であることを示します。

Sigmoid Function

出力値のデフォルトはあのテーターとの判定の一致率を最大化するように決定していますが、閾値を上げることで精度(Precision)を更に高めることもできます。

例: 楽しい感情

threshold 0.10 0.20 0.30 0.40 0.50 0.60 0.70 0.80 0.90
precision 0.6431 0.7228 0.7745 0.8192 0.8567 0.8704 0.8949 0.9351 0.9882

ここでの精度は、感情検知器が感情を検知した時それが実際に個人の予想と一致する確率です。 閾値を上げることで、精度を極限まで高めることができます。

閾値を0.8付近まで上げれば全ての感情の正解率が90%に近くなります。 ただし、閾値をあげるほど陽性と判断する割合が下がるので注意が必要です!

4. 開発余地・今後の展望

今回リリースした感情検知器ですが、上記に挙げたもの以外に様々な応用可能性があります。以下はその一例です。

a) 時系列分析

ビットコインの価格予想

Twitterでのビットコインや株価に対する感情検知を行うことで、価格の下落や上昇を事前に予想することができるかもしれません。 時系列で分析を行うことにより、過去の価格の変動とTwitter内で各時間軸のビットコインに対する感情に何かしら相関が見つかもしれません。

b) 横断面分析

ジェンダー判定・職業判定等によるマーケティング戦略

R&Dチームでは現在、SNSのアカウントごとのプロフィール推定エンジンを研究開発しています。 将来的にはこれらのシステムと感情検知器を合わせることで、商品やサービス等に対するジェンダー・職業・年齢ごとの感情を分析することができることが期待されます。

感情検知器自体もまだ開発の途上で、多くの性能の向上の可能性が秘められています。

第二部: 開発裏ストーリー

機械学習の分野は華々しい成功談や難しい理論の話がもちきりです。 一方で実際に機械学習を作ってプロダクトを作るとなると、普段は語られない泥臭い部分がたくさん現れます。 この第二部では、感情検知器の開発にあたって直面した"機械学習エンジニアリングのリアル"を特別に公開します!

1. 前置き

機械学習理論の主要な目的の一つは、(X_i, Y_i), i = 1,..., n の訓練データから Y = f(X) を推定することにあるでしょう。もっと言ってしまえば、新の関数f(X)と推定した関数fxの差を最小化する問題 

min diff{ f(X) - fX }

を解く最適化問題とすら言えてしまうかもしれません。

記憶にある限りもっとも最初の機械学習アルゴリズムであるFisher's Discrimanation AnalysisやLinear Regression といった基礎的な研究から、Tree-based Method, Support Vector Machine を始め Deep Mindで一躍脚光を浴びたDeep Learning, 機械が自身で学習する Reinforcement Learning といった手法が次々に出現していきました。

機械学習やその背後にある統計科学・最適化理論が着目される一方、機械学習の現実への応用では普段語られない様々な問題や限界に直面します。
今回の感情検知器プロジェクトでは、そのような困難が特に多く見られました。以下では、R&Dチームが現実に直面したリアルな機械学習の難所を限定的に公開します。

2. 本編

- 第一の難関: 問題定義の困難さ

CINCの文章感情検知器プロジェクトは、元々は極性判定から始まりました。マーケティング分析において、あるキーワードがポジティブに受け取られているかネガティブに取られているかを知ることはとても大事になるためです。その一方、キーワードが具体的にどういった意味でネガティブなのか知りたいという要望も多くありました。

例えばカスタマーサービスにおいて、同じネガティブでも悲しみの感情を持たれてるているか恐れの感情を持たれてるかで顧客への対応は変わっていくでしょう。

しかし、感情という主観的な対象を扱うのは時としてとても困難です。例えば、以下のような文章がありました。

すみません。まぐれです。

この文章の5感情の判定を4人に依頼した結果、4人中2人が 悲しい感情 と判定した一方で、他二人はそれぞれ 恐れの感情 と 怒る感情 と判定し、票が大きく割れてしまいました。 文脈により文章の解釈は異なってしまうのです。

こういった状況で感情判定機は 悲しい感情 と 判定しても、もしくは 恐れの感情 や 怒る感情 と判定しても、 そうでない判定をしたユーザーから見ると誤った判定を出したとと捉えられてしまいます。

こういったジレンマを克服するべくたどり着いたのが現状の仕様である感情検知器です。 感情検知器では、文章の感情を判定するのではなく、文章が含む感情を全てリストして出力します。

元々主要5感情は、人の持つ感情を元素のレベルに分解したものです。しかし、実際の文章が一つのみの感情から構成されるとは限りません。

今回開発した検知器は、悲しい感情 + 楽しい感情 (泣き笑い) や、怒る感情 + 愛する感情 (嫉妬心、失望等)といった多様な判定をすることが可能になりました。

CINCが保有する文章のデータベースを分析した上で判明したのは、8割ほどの文章が中庸で無感情であるということです。R&Dチームでは、これら大多数の文章を感情がないものとして個別に解釈するべく、怒る感情, 楽しい感情, 愛する感情, 悲しい感情, 恐れの感情 の他に 中立の感情 という 第六のラベルを導入しました。

この 中立の感情 信号は文章の感情の度合いを推定する第六の指標になりました。 これにより感情検知器は文章のフォーマルといったものさえ測ることができるようになりました。

機械学習プロジェクトでは、理想とする感情判定機はなんであるかを考えた時、最適化問題を解く機械学習の外側にある、プロダクトそのものの性格を考える必要が出てきます。 現場の機械学習プロジェクトは、 Y = f(X) と一括りに表せるほど単純なものではなくなってしまうのです。

- 第二の難関 費用および時間的な限界– データセット取得の困難さ

統計的学習理論において、訓練データ及び教師データが存在することはある意味で普遍的な仮定と言えます。しかし実際には、教師データと訓練データが利用可能であるとは限りません。それは今回の感情判定モデルに関しても例外ではありません。

感情検知器の開発上、感情のラベルがついた文章のデータが多数必要です。R&Dチームでは、文章の感情のアノテーションを外部に委託して取得してます。しかし外部に委託したとしても、一つ一つの文章に人力で感情をアノテーションするため、時間と費用がかかります。更にR&Dチームでは、ラベルの質を保証するために一つの文章に複数のアノテーターによるアノテーションを行なっています。これは文章の異なる解釈の違いによる感情ラベルを把握する目的もあります。

一方で自然言語処理で必要になる文章数は膨大であると予想されます。例えば、広辞苑に含まれる日本語の単語数は25万語ほどあります。この内の多くの単語は使われる頻度が少ないかもしれませんが、逆に一部の単語は複数の意味を持ち合わせています。これら全ての単語に感情が割り振られたとします。例えば、'悲壮感'という単語には強い 悲しい感情 が、'有頂天'という単語には強い 楽しい感情 の感情があるといった感じです。

一方で単語は、文章構成により単語が皮肉的に使われてしまうことも大いにあります。単語ごとの特性に反応するルールベースの感情判定機に必要な単語数が25万語であったとしても、最低で25万ほどラベル付きの文章必要になってしまいます。判定機に文脈といったものを理解させるには、それぞれの単語が状況に応じて複数回使用される必要があるため、100万件ほどラベル付き文章が欲しいところです。一方で、一つの文章を人間が読み解きその文章の感情の判定するのに10秒間かかるとします。今回のように複数人、例えば4人のアノテーターからのアノテーションを取得することを考えると、単純に考えて

100万 (文章) * 4人 (アノテーター) * 10 (秒) ≒ 10000 (時間)

ほどかかる計算になります。一人のアノテーターの時給を1000円と仮定すると、1000万円の費用と100日以上の実稼働日数が必要になってしまうため、現実的ではありません。この膨大なコストを抑えるために、CINCでは様々な工夫を行いました。その多くは残念ながらこの場で公開ができませんが、話題性の高かったテキストの前処理プロジェクトというものをご紹介します。

前処理プロジェクトその1— 文章の水増し

囲碁のAIとして注目されたAlphaZeroでは、板状の対称性を利用し、一つのAIによって考案された戦略を攻守逆さまにすることで2倍の学習量にしました。この対称性を日本語に応用したのが、類義語の利用による文章の水増しです。

文章の水増しでは、文章の単語が類義語に置き換えられたとしても、全体の文意が変わらない言葉の性質を利用しました。例えば、

チョコレートアイスにカフェラテ入れるヤツ、めっちゃ美味しい

という文章のラベルが 愛する感情 だったとすると、カフェラテをコーヒーに置き換えたり、チョコレートをバニラに置き換えたりしても、ラベルは 愛する感情 のままです。

一つの文章中の全ての単語を類義語に置き換えれば、同ラベルの異なる文章を量産することができるかもしれません。これが文章の水増し作業です。

前処理プロジェクト2. 文章の名寄せ

ラベル付きのデータを増やすという発想の逆で、必要な文章量を減らすという試みも行ないました。 例えば、

元文章: 原田龍二やばすぎ笑笑

という文章は文中の原田龍二という単語が直接文章の全体の感情に影響を与えるとは考えにくいでしょう。 文章の名寄せプロジェクトでは、こういった感情に無関係な単語を以下のように概念化することを試みました。

名寄せ処理後文章:【人名】やばすぎ笑笑

これにより、複数の単語が一つの概念としてまとめられ、判定機が不必要な単語を学習する負担を縮小できることが期待されます。

残念ながらテキストの水増し・名寄せプロジェクトは実装と理論の構築に想定した以上に時間がかかり、現時点での導入を見送っています。

第三の難関. 独立した第三者からのモデルの精度検証

モデルの開発者が自身でモデルの精度を検証した場合、開発者としての認識のバイアスが介在し正しく精度を検証することは思いの外難しいです。f1スコア や Kullback-Leibler指標 は機械学習モデルを定量的に評価できますが、数字に囚われ過ぎると実際のUXと乖離が生じることがあります。

Googleの検索エンジンは、ユーザーの満足度を人の目で逐一精密に調査しています。 R&Dチームではこれに習い、感情判定機の第三者機関を開発と独立して設置し、モデルの精度の評価を客観的に行いました。 これにより、高推定精度にも関わらず使い勝手の悪い、悲劇の機械学習プロジェクトが生まれることを防ぎ、ユーザーが真に利用したいと思える感情検知器に近づけることができました。

第四の難関. アノテーションデータの精度の限界

有名な機械学習のプロジェクトは、課題設定が明確なものが多いです。例えばAIが'猫'を判定して一躍有名になったDeep Mindは、大量の写真を読み込み猫という概念を学習しました。画像に映り込む動物が猫であるかどうかを判断する課題は単純明快です。猫の画像はどなたが見ても猫なのです。

しかし、文章の感情判定はトリッキーです。文章の感情は文脈や背景に依存し、文章そのものでは感情が特定することができません。推定精度が7割を超えたあたりから、R&Dチームではアノテーターの出力と感情判定機の出力が食い違った時、どちらが誤りであるかわからない状況にしばしば遭遇しました。

推定精度が75%を超えた付近で、これ以上の精度の向上によるアノテーターの判定に過学習してしまうことを防ぐため、この段階でモデルのファーストverを完成としました。

3. 終わりに

現場での機械学習は、研究機関で扱われる理論的な側面とは異なる様々な難題に直面します。

それらの中には、綺麗な理論では片つかない様々な課題もあります。R&Dチームでは、数学的理論だけでなく、機械学習を現実のサービスとして実現できるタフなデータサイエンティストを募集しています。

www.cinc-j.co.jp