未経験からの自然言語処理(NLP) 実践入門

Javaで簡単に感情分析する方法

  • このエントリーをはてなブックマークに追加
  • Pocket
感情分析方法

近年、AIの技術の活用分野は多岐に渡り、その中でも特に、人間の言葉を解釈する技術であるNLP(自然言語処理)が進歩してきています。

テキストマイニングや、対話システム等多岐に渡って使用され、人間のコミュニケーションを一部、チャットボットが代行するという所まで来ています。

今回は、そのNLPの一分野の感情分析と言われる分野で、テキストから人間の感情を読み取る技術について紹介をします。

この技術は、例えば、テキストに未成年に不適切な内容がある場合に、それをブロックするポルノフィルターや、暴力やヘイトスピーチを含んだ内容を検知する、オフェンシブフィルター等、実用的な活用が進んでいる分野です。

使用した環境

  • Windows or Macを仮定
  • Eclipse(Neon3)を使用
  • Java8.X(最新バージョン)を使用

1.形態素解析機器(Kuromoji)の準備

以下参照
Kuromoji(形態素解析)を2分で使えるようにする方法(Java)

2.評価極性辞書の使用

各単語を p = positive、e = neutral、n = negative の三つの評価に分類し、それを細かく、頻出単語毎にタグ付を人手で行った辞書の事を指しています。

この辞書の情報を元に、テキストの感情を特定する作業を行います。

今回の実習では、東北大学の乾・岡崎研究室が無料で配布している、日本語評価極性辞書 を使用する事とします。(pn.csv.m3.120408.trimをダウンロード)

中身を見て頂くと、以下のような構成になっており、p e nのタグ付がしてあります。

お礼 e ~する(行為)
お話 e ~する(行為)
お咎め n ~がある・高まる(存在・性質)
お洒落 p ~する(行為)
かい性 e ~がある・高まる(存在・性質)
・・・

この辞書を用いながら、実際にテキストの感情分析を行っていきましょう。

3.最速でJavaで感情分析を実装する方法

以下に、とりあえず、余り細かい事を気にしないで、最速でJavaで感情分析を実装する大まかな流れを示します。

  1. 評価極性辞書の読み込み
  2. テキストの形態素解析によるトークン化
  3. 感情スコアの算出

このような感じで、感情分析を行っていきます。それでは、以下、具体的な実装コードを見ていきましょう。

3-1.評価極性辞書の取り込み

以下のように、Mapに、単語をキーにして、その単語がpositiveの場合は+1、neutralの場合は0、negativeの場合は-1をスコアとして格納します。

File file = new File("pn.csv.m3.120408.trim"); // 評価極性辞書のロード
BufferedReader br = new BufferedReader(new FileReader(file));
Map<String, Integer> sentiMap = new HashMap<>(); // 評価極性辞書から読み込み、単語とスコアを保持したマップ

String str = br.readLine();
while (str != null) {
	String[] split = str.split("\t"); // タブで分割
	if (split.length > 1) {
		String emotion = split[1].trim(); // p or e or n
		int sentiScore = 0;
		if (emotion.equals("p")) {
			sentiScore = 1; // pの場合+1
		} else if (emotion.equals("n")) {
			sentiScore = -1; // nの場合-1
		}
		sentiMap.put(split[0].trim(), sentiScore); // 単語とスコアの格納
	}
	str = br.readLine();
}
br.close();

3-2.テキストの形態素解析によるトークン化

Kuromojiを用いて形態素解析を行い、トークンの表層情報を取得します。

String text = "好調で、アイデアが沸いてくる"; // 感情分析対象テキスト
Tokenizer tokenizer = Tokenizer.builder().build(); // Kuromojiオブジェクト作成
List tokens = tokenizer.tokenize(text); // Tokenize

for (Token token : tokens) {
	String surfaec = token.getSurfaceForm(); // トークンの表層取得
}

3-3.感情スコアの算出

トークンの表層情報が評価極性辞書に存在している場合、スコアを加算し、感情スコアを算出します。

感情スコアは、+1以上ならばPositive、0ならばneutral、-1以下ならばnegative

int sentiScore = 0; // 感情スコア、+1以上ならばPositive、0ならばneutral、-1以下ならばnegative

for (Token token : tokens) {
	String surfaec = token.getSurfaceForm(); // トークンの表層取得

	if (sentiMap.containsKey(surfaec)) {
		sentiScore += sentiMap.get(surfaec); // 評価極性辞書に単語が存在する場合、スコア加算
	}
}

System.out.println(sentiScore);

今回の対象文章「好調で、アイデアが沸いてくる」は、「好調」「アイデア」がそれぞれ、評価極性辞書上でpositiveと判断されているため、スコアは+2となり、positiveと判断されました。

実際の文章も前向きな内容なので、実感と合っているのではないでしょうか?

今回は、非常に簡単な方法で感情分析を実装する方法を示しましたが、この方法ではまだまだ課題があります。

例えば、以下のような「お役所仕事」というエントリが評価極性辞書にあります。

お役所仕事 n ~である・になる(評価・感情)主観

これに対して、Kuromojiは

お|役所|仕事

と分かち書きを行うので、トークンの表層情報を参照する場合、評価極性辞書にはヒットしません。

感情分析精度を上げていくためには、こういった部分について、改善が必要になってきます。

また、今回使用した評価極性辞書は、名詞にのみ対応しておりますが、その他の品詞に対応した辞書も併用する、等の工夫も必要になってきます。

その辺りの精度改善のテクニック等は、また次回解説をいたします。

ご質問等ございましたら、以下コメント欄よりお気軽にお問合せ下さい!

【動画あり】AI店員(人工知能)が小売業・流通業の接客を可能に!ニュースにも登場!

AI店員

AI関連サービス導入事例

AI導入事例

オージス総研

詳しくはこちら

お知らせ

2018/05/15 【イベント】株式会社アイネット様とSPJが、Japan IT Week(東京ビッグサイト)に共同出展

2018/04/20 【セミナー】【世界最高レベルの精度のAIチャットボットを開発・導入する方法】 2018/05/19(土) 東京 開催

2018/03/12 【プレスリリース】世界初!会話を学習しアナタだけの性格に育つメイド カーナビAIを共同開発

2018/03/03 【セミナー】【世界最高レベルの精度のAIチャットボットを開発・導入する方法】 2018/04/21(土) 東京 開催

2018/02/20 【メディア掲載】Ledge.ai(AI:人工知能特化型メディア)にインタビュー記事が掲載されました

過去のお知らせ一覧

アクセス・ランキング

人気AI記事 月間ランキングTOP25

詳しくはこちら

よく一緒に読まれているAI記事

年末年始休業のお知らせ(2017/12/29-2018/1/3)... 平素は格別のご高配を賜り、誠にありがとうございます。 年末年始の休業期間について、以下お知らせ致します。 ご不便をおかけいたしますが、何卒ご了承いただきますようお願い申し上げます。 休業期間:2017年12月29日(金曜日)~2018年1月3日(水曜日) 1月4日(木)より平常通り営...
レッジ、ウェブライダー、SPJが共同で機械学習を用いた文章校正の共同研究を開始... ■プロジェクトの目的と経緯 株式会社レッジ、株式会社ウェブライダー、株式会社SPJは、12月12日(火)より、推敲・校閲支援ツール『文賢(ブンケン)』への機能追加・サービス向上を目的とした、共同研究プロジェクトを開始いたします。 AI(機械学習やディープラーニングなど)の技術を使用し、文章校...
検索エンジンの3つの仕組みと、アルゴリズムを公開します... あらすじ Googleや、Yahoo検索等は、日常のネットライフには切り離せない存在になり、検索エンジンの存在しないネットサーフィン等、殆ど有り得ないかと思います。 そのくらい、今やすっかり日常に馴染んだ検索エンジンですが、最近では、AI技術と組み合わせる事でより高度になってきています。 ...
少ない画像から画像分類を学習させる方法(kerasで転移学習:fine tuning)... 「フルーツの画像を判別するモデルをを作ってくれませんか?」 と言われた時に、どのようにモデルを作りますか? ディープラーニングで画像分類を行う場合、通常畳み込みニューラルネットワークという学習手法を使いますが、画像の枚数によっては数週間程度がかかってしまいます。 また、学習に使用す...
【AIが人手不足を解消】小売業に特化したAI接客システムを開発、多言語対応で外国人の接客も可能に!... 株式会社SPJ(本社:東京都千代田区、代表取締役CEO:江口 天、以下「当社」)は、小売業に特化した高精度 人工知能 接客システムを2017年12月7日(金)にリリース致します。 通常の対話システムは、雑談等幅広い話題に対応出来るようにすることを目標に開発されています。その結果、意図解釈能力が...

最新の人工知能アルゴリズムをSNSでお届けします

Leave a Reply

*