歩苦 求路の備忘録 (旧:奇人な鬼神)

お酒、特にスピリタスについて備忘のためにつらつらと。

DataSmart 第3章 ナイーブベイズとその単純さゆえの驚くべき軽量性

読書前に立てた目標

確実でもなくてもよいので一定の仕組みに伴いツイートを分別する手法を理解する。
上記実行時に、どのような基準を用いれば誤差が減るのかを理解する。
(実は、これがやりたくてこの本を買った節もあります。お酒のスピリタスのツイートだけがほしいのに、バスケチームやFFキャラのツイートも拾うので…)

Bag of Wordsモデル

文章を順不同の単語の集まりとして扱うこと。

ツイートがダミーか否かをベイズ法で判断する方法

本命のツイートに含まれている単語
ダミーのツイートに含まれている単語
を、それぞれの確率で計算する。
が、この方法は全ての単語に関連がないことが前提のため、
単語に依存関係がある場合は差異が発生。
が、一般的にその際は無視できる程度で使用に値することが多い。
(もちろん、誤差の許容度は要件次第だと思うのでその都度検証はいるかな?)

ナイーブベイズの実行に伴う課題とその解消法

以下の課題に対応する必要あり。
・まれにしか出力されない単語
→当該単語を含み、すべての単語に1を追加することで対応
浮動小数点のアンダーフロー(ex…エクセルでは値が小さすぎて処理できない)
→対数にすることでオフの数値として表示させる。

自然言語処理 …ノイズ算出のための順序

・単語をトークン化
・無関係な句読点の削除 ツイートの成形
・形成したトークンの条件付確率→自然対数を計算
・作成したモデルで計算
トークンごとに、対象の単語か、そうでないかの確率を出力し、
その確率の合計を比較する
確率が高い方=自然対数としての値が大きい方を判定結果とする

その他単語

ストップワード自然言語処理において語彙的な意味をあまり含まない単語
(接続詞等々)
自然対数…ネイピアの数(2.718…)を底とする対数
→10の底の常用対数よりも使いやすいらしい(理由は割愛)

私見

…これ、日本語を判定対象としてやるの、大変そうですねぇ…
いや、全部英語に翻訳してからやった方がよさげか。
そこまで厳密性を求めないなら…
何はともあれ、目的に対する見解は得られたのでやってよかった。

備考:実際に日本語のツイートでやってみた

実際に、以下の手順で実施したところ、
すべての判定がお酒以外のスピリタスという判定を出す始末…

原因は、辞書が少なすぎて0判定が多かったこと(特にお酒以外のスピリタスは10件程度しか元データがなく…)
辞書の状況によって判定方法を工夫する必要がありそうですね。