2013-05-05 :-)
_ [ruby][ナイーブベイズ][ネガポジ][自然言語処理][nlp][機械学習]ナイーブベイズでネガポジ判定
概要
- 辞書: 日本語評価極性辞書
- 単語分割: N-gram
- 学習データ: Tatoeba: 例文を収集する これをコーパスとして構築する
- 分類方法: ナイーブベイズ ナイーブベイズを用いたテキスト分類 - 人工知能に関する断創録 実装を貰った
辞書
ネガポジ辞書として、日本語評価極性辞書 を混ぜて構築しておく。
あがく,-1 あきらめる,-1 あきる,-1 あきれる,-1 あきれるた,-1 あせる,-1 あなどる,-1 :
学習データ
Tatoeba の Japanese indices にたいし、あらかじめ日本語評価極性辞書でネガポジ判定しておく。0: ニュートラル 1:ポジティブ -1:ネガティブ
ムーリエルは20歳になりました。,0 すぐに戻ります。,0 すぐに諦めて昼寝をするかも知れない。,0 そこで私たちを待っている幸福が、私たちが望むような幸福ではないかもしれない。,1 失礼だが、上記の記事にある3つの誤りを指摘しておきたい。,-1 失礼だが、上記の記事にある3つの誤りを指摘しておきたい。,-1 そんな不当な提案は、拒否すべきだったのに。,-1 そうしたなかで急速な進歩を遂げてきたのが、ITである。,1 考えたんだけど、やっぱりこういうのはよくないから、今日を限りに別れよう。,-1 :
ナイーブベイズ
ナイーブベイズ実装は ナイーブベイズを用いたテキスト分類 - 人工知能に関する断創録 を ruby に移植した。
実行
実際に使ってみる。( 魔法少女まどか☆マギカ WIKI - ネタバレ考察/台詞集 )
# -*- encoding: utf-8 -*-
# ナイーブベイズでネガポジ判定
# 単語分割は N-gram
# 学習にコーパス使用
require './naivebayes'
require './ngram'
include NLP
def get_words(word)
return NLP::ngram(2, word)
end
def build_learning(filepath)
pn = {
0 => "ニュートラル",
1 => "ポジティブ",
-1 => "ネガティブ"
}
lines = File.open(filepath).readlines()
data ||= []
lines.each {|line|
sp = line.split(",")
text = sp[0]
score = sp[1].to_i
words = get_words(text)
cat = pn[score]
data << [cat, *words]
}
return data
end
def classify(nb, text)
words = get_words(text)
cat = nb.classify(words)
return "#{text} => #{cat}"
end
def main(argv)
corpus = argv[0]
data = build_learning(corpus)
nb = NLP::NaiveBayes.new
nb.train(data)
text = "全ての魔女を、生まれる前に消し去りたい。全ての宇宙、過去と未来の全ての魔女を、この手で"
puts classify(nb, text)
text = "これがまどかの望んだ結末だって言うの?こんな終わり方で、まどかは報われるの!?冗談じゃないわ!!"
puts classify(nb, text)
text = "誰かの幸せを祈った分、他の誰かを呪わずにはいられない。私達魔法少女って、そう言う仕組みだったんだね"
puts classify(nb, text)
text = "ソウルジェムが魔女を産むなら、みんな死ぬしかないじゃない!"
puts classify(nb, text)
text = "心配すんなよさやか。一人ぼっちは…寂しいもんな。いいよ、一緒にいてやるよ。さやか"
puts classify(nb, text)
end
main(ARGV)
実行してみる。
全ての魔女を、生まれる前に消し去りたい。全ての宇宙、過去と未来の全ての魔女を、この手で => ポジティブ これがまどかの望んだ結末だって言うの?こんな終わり方で、まどかは報われるの!?冗談じゃないわ!! => ネガティブ 誰かの幸せを祈った分、他の誰かを呪わずにはいられない。私達魔法少女って、そう言う仕組みだったんだね => ニュートラル ソウルジェムが魔女を産むなら、みんな死ぬしかないじゃない! => ネガティブ 心配すんなよさやか。一人ぼっちは…寂しいもんな。いいよ、一緒にいてやるよ。さやか => ポジティブ
うーん。
結局「文章をどのように分割し、どのような学習データを用いて、どのように分類するか」に依るから、あまり煮詰めてもしょうがないか。研究者なら別だけど
N-gram は日本語の漢字、平仮名に対しては程よく分割してくれそうだけど、カタカナは酷いことになりそうだ。
[ツッコミを入れる]



