雑記帳(@watagasi_)

「白井博士の未来のゲームデザイン」読了

「白井博士の未来のゲームデザイン」読み終わりました。

 

ゲームデザインの話となると、経験則から構成される本がかなり多いですが、この本はメディアアートや「遊び」の哲学、工学の視点からゲームデザインが語られており、それらの蓄積を踏まえてこれからの未来何をすべきかや、広く汎用的な理論とは何かが非常にわかりやすく書かれていました。

 

ただ全体的に構成が散逸的であり、一つ一つの理屈はしっかりとしていて為になるものばかりでも、それらの繋がりの中で何が言いたいのかというのがイマイチわかりにくかったです。

 

おそらくそう感じるのは、この本の前に読んだ「ゲームプランナー集中講座 ゲーム創りはテンポが9割」が、「ゲームを作る工程」に沿って解説していたのに対して、この本はそういったガイドラインが存在しないからでしょう。

 

さらに言えば、上記に挙げたように様々な分野からの解説がなされていることも一因となっている気がします。

 

それとこの本は「未来のゲームデザイン」に関して、ハードウェア的な提案を多くしていますが、その提案は自分で設計などを行うことを前提としているものが多く、自分はハードウェアに関しては自分で設計したりしようという気がないので、そのあたりもピンとこなかったですね。この辺は単なる相性の問題です。

 

個人的にためになったと感じた部分は、ロジェ・カイヨワの遊びの分類などに見る近現代の「遊び」に関する研究紹介と、ユーザーを想定する際の「動的複合ペルソナ」という考え方の部分ですね。

 

「面白いとは何なのか」ということや「マーケティングの際何を考えるべきか」ということの知識は不足しているところなので勉強になりました。

 

特に「遊び」に関する研究は興味の対象なので、今後この点に関して更に研究していこうと思います。

EMアルゴリズム

EMアルゴリズム、パラメーターの推定に使われたり

yagays.github.io

 

混合ガウス分布の決定に使われたりしていますが

www.slideshare.net

どっちもやってることは同じで、尤度関数を最大化する値を探しているわけですよね。

 

で、今ユーザーのレビュー集合をLDA(のようなもの)に突っ込んで、ユーザーごとにパラメータの推論を行うトピックモデルの論文を読んでいて、ユーザーごとではなく似通ったユーザー集合ごとに推論が出来ないかというのを考えていて。

 

似通ったユーザーごとの確率分布を統合した混合分布をEMアルゴリズムを用いて作成することでそれが実現できないかと考えているんですが、どうやって似通っていると判断するのかとか、そもそもこの考え方が正しいのかとか完全にわからなくなっています。どうしましょう。

LDA全くわからない

LDAがこういったグラフィカルモデルで表現できるというのはだいたい理解できたんですけど。

f:id:watagassy:20171025162147p:plain

各変数が以下のような分布に従うって式があるじゃないですか。

f:id:watagassy:20171025162317p:plain

f:id:watagassy:20171025162326p:plain

でも例えばこのΘってディリクレ分布の確率変数ですよね。これをどうやって多項分布のパラメータとして扱うんですか…。その辺が全くわかってないです(つまり全て理解できていない)。

 

※追記1

理解しました。αを決めたらDir(Θ|α)がf(Θ)の形になって、Θを決めたらMulti(Zn|Θ)がf(Zn)の形になって…と順次パラメータを決定していくわけですね。

 

※追記2

yagays.github.io

このブログを見て殊更理解できました。こういうグラフィカルモデルがあって順次パラメータを決定していけばいいとわかってる時にパラメータを決める方法がEMアルゴリズムだとか崩壊ギブスサンプリングだとかなわけですね。

 

それらの使い分けはこちらのブログである程度紹介されていたものが分かりやすかったです。

qiita.com

LDAの実装

openbook4.me

こちらを参考にLDAを実装してみたら以下のような結果になりました。大体リンク先と同じような結果ですね。(適当)

f:id:watagassy:20170620132717p:plain

 

ここから時間経過を考慮したLDAであるDTM(Dynamic Topic Model)を実装していくつもりですが、pythonで実装した紹介記事があまりないですね。

 

gensimのサイトを見てみると(gensim: models.dtmmodel – Dynamic Topic Models (DTM) and Dynamic Influence Models (DIM)

gensim.models.DtmModel

という関数でDTMをサポートしてるようですが、あんまりコレ使ってる日本語記事無いですね。

 

まあめんどくさがらずに英語読んでちゃんと実装していきたいと思います。

 

ぶっちゃけ中身で何やってるかの理解がまだ70%くらいなのでそれもやっていかないといけないですね…。

 

成果が出たらまた記事を書こうと思います。

トピックモデルにおける生成モデル

いくらか調べてみて

watagassy.hatenablog.com

この件に関してようやく合点がいきました。以下のスライドのおかげです。

www.slideshare.net

 

「生成モデル!?文書を生成するって何!?文書データはもうあるじゃん何でモデル作ってまた文書作るの!!?」とか思ってたんですが、そうではなくて。

 

そういう用意された文書データが、ある分布から確率的に生成されたものなんだと考えましょう、それが生成モデルですよ、ってことだったんですね。つまり回帰分析的な考えですよね(テキトーなこと言うと怒られそう)。

 

とにかく理解が進んで良かったです。トピックモデル、やっていきましょう。

生成モデル is 何

LDAについて勉強していると、トピックモデルに関して出てくるワードの「生成モデル」。

 

「データを生成するモデルが生成モデル~」みたいな説明がありますが、そこでよくわからなくなりました。

 

調べたうちでは、「BOW表現になった単語の集合を用意して、そこから生成モデルを使って文書を生成する~」みたいなことがそこかしこで書かれているんですが。

 

そもそも既に文書データが有って、それをBOW表現にした集合も用意してるのに、なぜまた文書を生成しなきゃいけないのか。それがよくわかりません。

 

BOW表現になっている集合に、なんかバー―ッと計算式当てはめてトピック抽出すればいいのでは…?と思うんですけど(クソ大雑把)、どこか理解が間違っているのでしょうか。

 

このあたり

Amazon CAPTCHA

こういうの読んでも「今やってる作業は何のために何をしているのか」ということについて具体的に書かれてなさすぎてどっと疲れます。理解した暁にはアホの視点から、最も優しいトピックモデル解説をしたいですね。

【Unity】ゲーム制作中

「Unity2日目」とか書いた記事から何も続きがないのでまた三日坊主になったかと自分で(?)思っていましたが、ちゃんとゲーム作ってます。

 

毎日作業してるとブログとか書く暇ないですね。

 

今はこの動画を参考にしながらC#の勉強をしつつUnityでゲーム作って遊んでます。

www.youtube.com

 

この動画の人、全部Javaでコード書いてるので、それをC#に書き直してるんですけど、それが結構いい勉強になっています。

 

今は衝突判定を上手く記述できなくて詰まっています。タイルマップを使った形式のゲームを作ってると、タイル同士が斜めに配置されていても、それぞれの角が接触してるんでそれらが衝突していることになっちゃうんですよね。上手く解決できるんでしょうか。

 

いくらかゲームとして遊べるようになったら、テキトーな素材を貼っつけて公開したいと思います。