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 は日本語の漢字、平仮名に対しては程よく分割してくれそうだけど、カタカナは酷いことになりそうだ。
[ツッコミを入れる]