2014/01/17(金)感情心理学・入門 読了

自然言語理解と機械学習の研究室にいるけど計算機上で感情を扱いたいので読みました。感情を扱う自然言語処理の論文読んでいても、参考文献に心理学系の文献がないことが多いけど、自分はそれに強烈な違和感を感じます。

今まで発達心理学の本は読んだことがあるけど、感情心理学の本を読んだのは初めてです。論文は「感情心理学研究」を少し読んでいました。

「感情心理学・入門」は、国内外の学会・学術誌は紹介されてるし、各章の終わりには学習文献案内があり、最後の引用・参照文献も章ごとに分かれていて見やすく、入門書としてグッドでした。

一番知りたかったのは感情をラベルありで上手く分類できるかということ。結論をいうと現代の心理学でも感情が比較的固定された構成要素の組み合わせとして定義できるのか結論が出ていないということでした。

それ以外でもいろいろ知識は得られたし、読んでおくべき論文も発見できたので、心理学が専門外の自分でも読む価値は十分にありました。

2014/01/11(土)Directional Formatting Characters に関するメモ

大部分の言語ではテキストを左から右へ表示するけど、アラビア語やヘブライ語は右から左に表示するらしいです。しかしながら、それらの言語のテキスト中に数字や英語などの左から右へ表示されるテキストが含まれると、テキストが「左から右」と「右から左」の双方向性を持つことになってしまいます。そのため、双方向性を持つテキストをどう表示したら良いか曖昧性が生じます。(恐らくレンダリングエンジンが)よしなに表示してくれることもあるけど、それだけでは十分でないケースがあるため、方向性を制御できるように「Directional Formatting Characters」が必要になるっちゅうこっちゃ。

「Directional Formatting Characters」の一覧は以下の通り。

U+061C  ARABIC LETTER MARK
U+2066  LEFT-TO-RIGHT ISOLATE
U+2067  RIGHT-TO-LEFT ISOLATE
U+2068  FIRST STRONG ISOLATE
U+2069  POP DIRECTIONAL ISOLATE
U+200E  LEFT-TO-RIGHT MARK
U+200F  RIGHT-TO-LEFT MARK
U+202A  LEFT-TO-RIGHT EMBEDDING
U+202B  RIGHT-TO-LEFT EMBEDDING
U+202C  POP DIRECTIONAL FORMATTING
U+202D  LEFT-TO-RIGHT OVERRIDE
U+202E  RIGHT-TO-LEFT OVERRIDE

恐らく、99.9%ぐらいの日本語がメインのテキストではこれらのフォーマット文字は不要であると考えられるので、拙作のPerlモジュール「Lingua::JA::NormalizeText」ではこれらの文字を削除するオプションを用意しています。(Webアプリケーションでこられの文字を埋め込んでイタズラされちゃうおそれがあるため)

さらに詳しい情報は↓を参照されたし。 Unicode Standard Annex #9

2014/01/01(水)PerlのUnicode::Numberによる数値漢数字,大字 変換メモ

コード:

#!/usr/bin/env perl

use strict;
use warnings;
use utf8;
use open qw/:utf8 :std/;
use feature qw/say/;
use Unicode::Number;

my $u = Unicode::Number->new;

my @number_system_list = qw/
Japanese_Regular_Simplified
Japanese_Regular_Traditional
Japanese_Legal_Simplified
Japanese_Legal_Traditional
Japanese_Western_Mixed
/;

for my $number_system (@number_system_list)
{
    say $u->number_to_string($number_system, '1234567890');
}

say "\n";

for my $number_system (@number_system_list)
{
    say $u->string_to_number($number_system, '壹拾貳億參仟肆百伍拾陸萬柒仟捌百玖拾')->to_string;
}

# segmentation fault が発生する
#say $u->string_to_number('Japanese_Regular_Simplified', '123');

say $u->number_to_string('Japanese_Regular_Simplified', '123');

say "Yay!";

実行結果:

十二億三千四百五十六万七千八百九十
十二億三千四百五十六萬七千八百九十
壱十弐億参仟四百五十六萬七仟八百九十
壹拾貳億參仟肆百伍拾陸萬柒仟捌百玖拾
12億3,456万7,890


1234567890
1234567890
1234567890
1234567890
1234567890
Not a decimal number: must contain 0-9 at /home/***/Unicode/Number.pm line 43.

という感じで想定外の入力を渡すと死ぬようです。(Unicode::Number Ver. 0.005)

ちなみに「Japanese_Regular_Simplified」みたいなのは「Unicode::Number::System」のSYNOPSISのコードを実行させると出ます。

2013/11/20(水)clamav-milter.sock : Permission denied の直し方(postfixを使っている場合)

アップデートしてこのエラーログが出たら↓のやり方で直るかも。

ユーザ「clam」(clamav-milter.sockの所有者)をグループpostfixに追加。

「clamav-milter.conf」を以下のように編集。

MilterSocketGroup postfix
MilterSocketMode 660
AllowSupplementaryGroups yes

clamav-milter を再起動。

いろいろ条件変えて試したけど、MilterSocketMode以外は必ずこのようにしないと動きませんでした。(clamav-milter.sock のパーミッションが勝手に000にセットされる)

2013/09/25(水)感情の分類を考える

趣味で人工知能のために会話文の感情分類がしたいなぁっと思ったので、ちょいと調べていました。そもそも感情は明確に分類できるものなのか怪しいのですが・・・。

ちょろっと自然言語処理関連の論文を調べた限りでは、

  • 「感情表現辞典」という辞典の分類:「喜」「怒」「哀」「怖」「恥」「好」「厭」「昂」「安」「驚」
  • Ekmanの分類:「怒り」「嫌悪」「恐れ」「幸福感」「悲しみ」「驚き」
  • Plutchikの分類:「喜び」「悲しみ」「受容」「嫌悪」「恐れ」「怒り」「驚き」「期待」とこれらの合成 (日本語訳は 山口大学工学部研究報告第53巻第1号pp.85-90 を参考にしました:http://memoirs.lib-e.yamaguchi-u.ac.jp/531/11.pdf

という分類がよく使われているようです。

自分がしたいのは会話文の感情分類。

Ekmanの分類は表情から読み取れる感情とのことなので、除外。残りは Plutchik の分類か「感情表現辞典」の分類。

Plutchik の混合感情の考え方とかはよく出来ていると思うんだけど、自分以外の人に混合感情を意識させて妥当な感情を選ばせるのはあまりに負担がかかり過ぎるように思えます。かといって混合感情を意識させない場合、ドンピシャに純粋感情を過不足なく複数選択させるのが困難。

一人で感情分類作業する場合は、Plutchik の分類でもいいけど、誰かに手伝ってもらう場合はPlutchikの分類はキツい。

というわけで、「感情表現辞典」の10分類をベースにすることにしました。

今日、注文していた「感情表現辞典」が来たのでちょろっと読みました。

この10分類は実際の表現例から「喜」「怒」「苛」「悲」「淋」「鬱」「悄(ショウ:しょんぼりする)」「苦」「安」「悔」「昂」「感動」「好」「嫌」「憎」「驚」「怖」「恥」「惑」の19感情を抽出して境界線の引きにくさを理由に以下のように圧縮したもののようです。

  • 「哀」={「悲」,「淋」}
  • 「厭」={「鬱」,「悄」,「苦」,「悔」,「嫌」,「憎」,「惑」}
  • 「昂」={「苛」,「昂」,「感動」}

これでほぼ自分の直感にも反しないのですが、いくらか拡張しました。

人工知能を考えると、

  • 友達としての好き
  • 恋人としての好き
  • 慕う(目上の人への)の好き
  • 憧れの好き はそれぞれ分けるべきと考えて、

「好」ー>「友情」,「恋愛」,「忠誠(忠義)」,「欲」

に拡張しました。

これで「喜」「怒」「哀」「怖」「恥」「厭」「昂」「安」「驚」「欲」「友情」「恋愛」「忠誠」の13感情。

これらの13種のうちのどれかか、これらのうちの組み合わせで会話文に表れるほとんどの感情は網羅できるかな?

-追記-
研究レベルなら、「An Argument For Basic Emotions」とか読んでおいたほうがいいです。これによると、愛はemotional attitudeで感情(情動)と区別されています。 Plutchikの3次元モデルは「The Nature of Emotions」を読んだけど根拠が不明でした。