アラカン"BOKU"のITな日常

文系システムエンジニアの”BOKU”が勉強したこと、経験したこと、日々思うことを書いてます。

試行錯誤その4:自然言語のネガポジ判断・・だんだん、難しさがわかってきたぞ。^^;

正直な話・・、甘く考えてました。

 

ポジティブ・ネガティブの文章や単語をたくさん集めて、教師付き学習させて、学習結果を保存して辞書にする。

 

文章単位でポジティブ・ネガティブのラベルをつけたものを学習させていけば、そこに登場する単語のポジティブ・ネガティブスコアのバランスが、自然と調整されて、それらしいものになっていく。

 

そうすれば、そこそこの精度くネガポジ判断ができるようになるんじゃないか・・。

 

実に偶然まかせのざっくりしたプランではありました。

 

これでうまくいけば・・楽勝なんですが・・そんなに甘いことはないですね。

 

やればやるほど、難しさが顔をだしてくる。

 

そんな感じです。

 

なので、今回はこんな所で苦労してます・・話です。

 

学習データの作り方の方針がそもそもまずかった!

 

つまづきに気づいた最初のきっかけは、ある時期から、学習すればするほど精度が下がるようになってきたことです。

 

途中まで、学習をすすめると、どんどん正解率があがってきてたんですけどね。

 

調べたら、原因はすぐわかりました。

 

辞書がおかしくなってました。

 

学習データのチョイスがまずかったみたいです。

 

そもそも、今回は、「人間が過度に介入しないで辞書を作る」ことができないか?をテーマにしてます。

 

辞書に学習させるデータもネガポジの判断はするけど、学習しやすいように形を整えるとか・・あまり考えずにデータを集めるゆるーいやり方が裏目にでましたね。

 

途中から、こんなデータが学習データに紛れ込むようになってました。

幸せになることに躊躇してはいけない,P(ポジティブ)
幸せになることに躊躇してしまう,N(ネガティブ)

 

一見よさげですが、これがjanomeで分解されて、処理対象の品詞だけが抜き出されると以下みたいになるわけです。

 

「幸せになることに躊躇してはいけない」

幸せ
なる
こと
躊躇

いけ

 

「幸せになることに躊躇してしまう」

幸せ
なる
こと
躊躇

しまう

 

ほとんど同じです。

 

しかも、本来誰が考えてもポジティブな「幸せ」と、ネガティブな「躊躇」が同じようにカウントされてしまうという具合の悪いことがおきてます。

 

だから、どんどん学習させていくと、いままでOKだったものが正しい判断ができなくなってきて、知らぬ間に「幸せ」のスコアがネガティブに変わってる・・みたいなバカなことになります。

 

潰れた状態の辞書はそうなってました。

 

あたりまえですね。

 

気付かずとはいえ、そうなるデータで学習してしまったわけですから。

 

こうやって書いていると、この可能性に気づかない自分の馬鹿さ加減に嫌になります。

 

しかし、気づけないものですね・・・。

 

やっぱり、やってみるというのは大事です。

 

ということで、一度作った約65000件の辞書を捨てて、一から作り直しです。

 

ヤレヤレ。

 

辞書だけに頼るのは不可能だと思い知った

 

これも結論としては当たり前です。

 

やって、わかってみれば・・ですが。

 

いちおう、対策はしたつもりです。

 

こちらの記事の中で書いたみたいに、不合格の「不」とかをきちんと学習させたり、ネガポジの反転語を導入したり、後半に登場した単語の方が勝つようにウエイトをかけたりとか。

arakan-pgm-ai.hatenablog.com

 

でも、全然不足でしたね。

 

今のところ・・ですが。

 

以下のような、判断が難しいと思っていた文章は結構正解してます。

優れていないわけではない → ポジティブ

頭ごなしにダメというのではなくちゃんと理由を話しましょう →ポジティブ

親のため息を聞かされて育った子どもは大人って大変なんだろうなと思い大人になんかなりたくないと未来の希望を失ってしまいます。→ネガティブ

何か頼みごとをした相手にできないという返事をもらったらチャレンジ精神のない人なんだな・・と思いませんか→ネガティブ

 

これだけ見ると、自分の想定よりも機能しているなと思えます。

 

ところが、以下のようなシンプルな短い文章でよく間違います

失敗しない → ポジティブなのにネガティブと判断

不合格です → ネガティブなのにポジティブと判断

不幸せだ → ネガティブなのにポジティブと判断

躊躇しない → ポジティブなのに、ネガティブに判断

好き嫌いがない → ポジティブなのにネガティブに判断

 

正解率はだいたい平均して90%前後ですし、結構、難しそうな文章も良い感じに正解をだしてるのですが、こういう短い文章での間違いがあると、かなり印象が悪くなってしまいます。

 

不一致の原因は大きく分けて2つのパターンになってます。

 

ネガティブな文に登場する頻度が高い「ない」はスコア的にはネガティブ寄りですので、それによってポジティブに変わるパターン。

 

これはスコアだけでなんとかするのは、どう考えても無理そうです。

 

前にくる単語がポジティブかネガティブかで、「ない」のスコアを逆転させられないですからね。

 

反転語の対応もしたのですが、やりすぎると全体的におかしくなるし、丁度いい塩梅がまだ見えません。

 

あと、「不」という接頭詞で、合格とかのポジティブなスコアを持つ単語を反転させてネガティブにするパターン。

 

これは文章が長くなると、なんとなく紛れてうまくいく時もあるのですが、短い文章で1:1になると打ち消し切れない場合があるみたいです。

 

このあたり、しっかり「不合格」「不幸せ」みたいに「不」を含んだ単語で辞書を作らないといけないな・・と思います。

 

一番てっとり早いのは、janome形態素分解する時に「不合格」「不幸せ」と出力されるように辞書を整備することなんですが、それだけに頼るのはどうかなあ・・と、いうのが悩みどころです。

 

難しいですね。面白いけど・・

 

などなど・・。

 

ここ数日は、ずっとこんな試行錯誤をやってました。

 

そのおかげで。

 

やっと自然言語で「日本語」を扱う難しさが、実際にわかってきた気がします。

 

当分、退屈はしそうもないですねえ(笑)