トップ «前の日記(2013-05-04) 最新 次の日記(2013-05-06)» 編集

ヨタの日々

2001|08|09|10|11|12|
2002|01|02|03|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|12|
2024|01|02|03|04|

2013-05-05 :-)

_ 午前

1030 起床

1200 おひる。カルボナーラ

_ 午後

1300 買い物

1400 ビデオ消化

_

1800 昼寝

1930 人工無脳は考える

2130 飯

_ [ruby][ナイーブベイズ][ネガポジ][自然言語処理][nlp][機械学習]ナイーブベイズでネガポジ判定

概要

辞書

ネガポジ辞書として、日本語評価極性辞書 を混ぜて構築しておく。

あがく,-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 は日本語の漢字、平仮名に対しては程よく分割してくれそうだけど、カタカナは酷いことになりそうだ。