久々にUrusuLambdaLaboratoryを更新しました.
ググってみたのだけど、どうもアキネーターの実装方法がわかったようなわからないような.
でもとりあえず形にはしてみた.
Thothnator : Demo Page
https://urusulambda.github.io/products/thothnator/index.html
色々検索してみて
・ユーザがどういう選択ができるか(Yes, Noだけなのか. たぶんとかつけられるのか)
・YesとNoとみんなが同じように判断できないものがあるか
・ユーザが間違って選ぶ可能性があるのか
等によってアルゴリズムの方針が異なりそう.
基本的な方針
https://urusulambda.github.io/products/thothnator.html 等にもいくらか書きました.
外部仕様
事前にある程度の知識を登録したデータベースを用意する.
なるべく効果的な質問を選択して、ユーザになんども質問を提示していく.(YesまたはNoと答える)
学習は今回は仕様には含んでいません.いつか頑張って作ります.
簡単な仕組み
ネットの書き込みを参考にさせてもらい、ベイズの定理と決定木学習を使用することにしました.
ベイズの定理 : 各クラスの確信具合を更新するときに利用
決定木学習 : 次の質問をするときに最も効果的な質問を行う.
上記二つを用いて以下のようにして全体を通すようにしました.
- 最もエントロピーが低くなりそうな質問を選択
- ユーザにYes or Noを選択させる
- ユーザの過去の回答と質問から尤もらしいクラスをベイズの定理より更新
- もし尤もらしいクラスが閾値を超えるような確率なら終了.そうでないなら1から
その他詳しくは、
https://urusulambda.github.io/products/thothnator.html
に.
Codeはここにおいたけど、びっくりするくらい汚い状態なので、許してほしい.
https://github.com/UrusuLambda/Thothnator
おわりに
いいんだろうか… これで….
改良を入れるとしたら、あいまいな回答ができるようにすること. 学習の過程も実装することとかかな.