レビュー9章 推薦システム―統計的機械学習の理論と実践 -

 

前回の続き

レビュー8章 推薦システム―統計的機械学習の理論と実践 - - tiruka’s blog

 

9章は潜在ディレクレ分配分析(fLDA)である。

これは、アイテムごとにワード(言葉)を抽出、テキスト分析をして共通のテーマを見つけ、グルーピングすることで、レコメンドの性能向上を図っている。

特にニュースサイトなどで使われているらしい。

例えば、ニューストピックを政治、芸能、スポーツなどに振り分けることができ、かつユーザーがそれぞれどのテーマに興味があるかを確率で表すことができたなら、ユーザーに適切な記事を配信することができる。

 

例としては、政治、芸能、スポーツのカテゴリーといったが、このような既知のグルーピンではなく、fLDAはより潜在的なグルーピングをする。グループが10個あったらなら、各グループに属する単語を抽出する。次の表のようなイメージである。

 

Group 1 bonus, america, international, motor, govern, ...

Group 2 team, gam, start, high, ...

Group 3 economy, resession, job, bank ...

...

 

単語をクラスタリンググルーピングするので結果を見れば,それぞれのグループに名前をつけたりするのは比較的容易である。Group1はアメリカ政治、Group2は人気スポーツ、Group3は経済、などなどである。

上記のは、アイテムのグルーピングであった。それに対して、ユーザはどのグループに属するかを、確率で表せば、レコメンドの性能が向上する。「Group1への関心は0.2, Group2は0.7、Group3は0.05だから、Group2に属するものを多くだそう!」という形である。もちろん、ユーザーがどのグループに属するかは、求める必要がある。

fLDAは、テキストを用いるのにはうまくいく(もともとその用途で開発された手法だし)。しかし、テキストではなく、数値データだと、難しい。fLDAと似た手法のPLSA(確率的潜在意味解析方)により、数値データ(年齢、購入履歴、いくつかのダミーデータなど)でグルーピングしたことがあるが、使いにくくてボツになった。グルーピングはまだできたが、そのグループが何を意味しているかが、さっぱりわからなかった。数値データなので、解釈が難しかった。

レビュー8章 推薦システム―統計的機械学習の理論と実践 -

前回の続き

レビュー7章 推薦システム―統計的機械学習の理論と実践 - - tiruka’s blog

8章は、7章を発展させ両方を使ってレコメンドシステムを作るテーマである。かなり難しい内容である。数式として理解するのは、なかなか骨が折れる。

さて、概要だけ言うと、「7章を発展させて、コールドスタート問題に対処しよう!」である。 つまり、 オンライン・オフラインでそれぞれモデルを作った。

モデルは既存ユーザや過去のデータに基づいて作っていて、既存ユーザと既存アイテムにしか適用してなかった なんとかして、新規ユーザ・アイテムにも適用できないかな?ということである。

もちろん、モデルをそのまま新規ユーザ・アイテムに適用することは可能であるが、精度が悪くなりがちである。その精度をあげるために、モデルを柔軟に変更できるようにするための手法が述べられている。

モデルを柔軟にするための新しい言葉が、「潜在因子(latent factor)」である。モデルをさらに抽象化して、より本質的なものを探すのである。

例えば

Aさんは、ティファニーが好きで、よく銀座で買い物をしている。好きな音楽はEdsheeranだ。

Bさんは、ヴィトンが好きで、買い物をする場所はよくわからないけど、好きな音楽は洋楽だ。

 

という情報があった時に、「AさんとBさんの共通点は?」と聞かれたら、「20女性で、東京に住んでいそう」という潜在的な共通点が導き出せると思います。

この共通点が分かっていれば、「Bさんが買い物をしそうなところは、どこ?」と質問が来たら、「銀座かな」と想像がつきやすいと思います。 このようなイメージで、潜在因子を求める。

実際は、たくさんのデータをインプットとして使い、潜在因子も数式・ベクトルである。 概念としては以上ですが、この潜在因子を求めるには、高度な方法が必要である。

基本的に、抽象化するのは人間でも大変なので、機械でも大変なのである。 様々な手法が試されているので 詳細は本を見てください。とても説明しきれません。

結論としては、モンテカルロを用いたベイズ推定が一番結果が良かった。しかし、計算がとても大変なので、分散による計算が必要に、実際はなってくる。

簡単に言えば分割してそれぞれのグループでモデルを作りそれらの平均を取るなどして合体させて、最終的なモデル作るのである。おそらく合算する手法には、ただ単に平均ではなく色々な方法があるとは推定されるが、特に紹介はされていないです。

レビュー7章 推薦システム―統計的機械学習の理論と実践 -

 

前回の続き

レビュー5・6章 推薦システム―統計的機械学習の理論と実践 - tiruka’s blog

 

7章素性ベクトルベースによる個別化について述べられている。

個別化とは、パーソナナラズ、つまりユーザごとにオススメを変えることである。

ユーザーごとにアイテムを変える方法と、アイテム毎に表示するべきユーザーを変える二つのパターンが考えられる。しかしこれらは、表裏一体の話でどちらか一方ができれば逆も可能である。

基本的にはユーザーごとにアイテムを変えるための手法が求められている。 そのためには2つの係数を求る必要がある。オンライン学習に求めよって求められる回帰係数と、オフライン学習によって求められる回帰係数である。「回帰」とつけているのは、統計的手法によって求めるからである。機械学習も含む。

オフラインで求められる係数は、例えばユーザーの嗜好をある程度過去のデータから分析しておくことで、「この人は、各ブランドを買う確率は、これくらいで、価格帯はこれくらいが好きで、、、、」というものはあらかじめモデルとして作っておくことである。

オンライン学習は、直近のデータをすぐに反映させる必要がある。そのためかなりデータの計算効率を高める必要がある。そのための手段として、次元圧縮の方法がいくつか述べられている。

例えばユーザーのクリック回数、見た商品、移動した先のページなどの項目がいくつもあった場合にそれらを全てオンライン学習に反映させるのは困難なので、モデルを通して、ひとつの値にしたりすることが次元圧縮の方法となる。

つまり、データが100項目あった場合に、それを2項目とかに落とし込むことで、計算を早くする。

この本では、高速オンライン双線形因子モデル(FOBFM, Fast Online Bilinear Factor Model)と言っているが、要は「オフラインでもオンラインでも学習して、両方使ってレコメンドしようね」である。

この7章で説明しているのは、ユーザ(またはアイテム)の「もともと」持つ素性ベクトルを使用する手法、つまり、新しいユーザやアイテムのレコメンド性能は依然として改善しない傾向になる。いわゆるコールドスタート問題。この問題にどう対処するのか?それが、次の章である。

レビュー5・6章 推薦システム―統計的機械学習の理論と実践

前回の続き

レビュー4章 推薦システム―統計的機械学習の理論と実践 - tiruka’s blog

5・6章はあまり書くことがなかったので、まとめて。

 

5章は、システムの環境についていである。これは学習器、システムストレージ、インデックスなどの構成を図解として表したものである。特筆すべき点はない。

 

6章 MostPopular推薦の効果を最大化するテーマである。MostPopular推薦は、「一番人気がありそうなアイテムを、オススメする」ことである。肝は、「一番人気がありそうな」を推測するモデルの構築である。

結論としては、ベイジアンベースに行った方が一番結果がいいものとなった。

次章以降のテーマを紹介するための、踏み台としての要素が強いので、これくらいの紹介で。

続く

レビュー4章 推薦システム―統計的機械学習の理論と実践

前回の続き

レビュー3章 推薦システム―統計的機械学習の理論と実践― - tiruka’s blog

 

4章では、推薦システムの評価について、つまり「ちゃんと機能しているの?改善してるの?」について。

結論としては、正確な評価は非常に困難である。

 

実際にシステムを投入して、A/Bテストで以前のシステムと差を測ったり、一部ユーザのみに適用して効果を測る(バケットテスト)は、効果測定が現実的であるが、それでもサンプリング(ユーザの抽出)の取り方が難しい。

オフライン評価については、もはや不可能だと思う。オフライン評価では、過去の行動履歴などを用いて、システム評価を行う。イメージとしては、過去のデータに基づいて、買いそうな未来の商品を並べ、それをレコメンドシステムが並べたものと比較して、どのくらいあっているかを計測するのである。「過去のデータに基づいて、買いそうな未来の商品」、ここが不可能である。これが予測できるなら、そもそもレコメンドなどいらない。

なぜなら、買うものがわかっているのだから。これができないから、代替手段としてレコメンドシステムがあるのである。

 

「過去のデータに基づいて、買いそうな未来の商品」を予測するシステムは、精度は横に置いておいて、構築することだけでも難しい。

思いついたのは時系列で、t時点におけるユーザーへのレコメンド 推薦したアイテムのうち、 t+1点でその中から買われたアイテムがあれば、レコメンドシステムはうまくいっていると評価するなと方法かなと思った。

 

過学習になりそうだな。

 

レビュー3章 推薦システム―統計的機械学習の理論と実践―

前回の続き

レビュー2章 推薦システム―統計的機械学習の理論と実践― - tiruka’s blog

 

3章では、探索と活用について。ここは、評価の高いアイテムばかり推薦すること(もっとも簡単なのは、クリック数などが多い順に並べる、Most Popular推薦)は簡単だが、新しいアイテム意味が推薦されなかったり、アイテムの更新頻度が高かったりした場合に、どう対処するかという話をしている。

 

新しいアイテムに対してつくであろう評価を、作成したモデルを通して予測するのが手段である。そのモデル構築には、オフライン・オンラインの問題や、次元削減、最適化問題が付随することが触れられている。

 

まぁ、計算量も時間も有限だから、いかに効率的に計算して、モデルを作成・更新し、適用するかが重要という話になる。SGD(確率的勾配降下方)やEMアルゴリズムなどが紹介されている。

PMって、どんな仕事?

採用の募集要項を見ていると、よく「PM(候補)として採用」みたいな文言があります。

PMは、Project Manager、つまりプロジェクトをまとめて、納期と会社のリソースを計算し、要件(必要な機能や設計)を決め、お客と様々な交渉を繰り広げるアツい仕事です。

 

募集要項はこんな感じですね。

プロジェクトマネジメントの実務経験がある場合、まずはエンジニア(またはサブリーダ)としてプロジェクトにご参画いただき、技術を習得しながら、当社のビジネススタイルを理解して頂きます。その後は、リーダーまたはマネージャとして、プロジェクト運営を担って頂きます。特性やスキルに応じて、大規模プロジェクト運営、あるいは中小規模の複数プロジェクトを運営して頂く等、お仕事の幅を広げて頂く事を想定しています。

 

ITコンサルタント、プリセールス、技術営業として、大規模な最先端プロジェクトに参画することができます。私たちは最新の技術を駆使し、企業や大学など団体のサーバー・ネットワークシステムを設計・構築・保守・運用し、IT活用の基盤作りに携わっています。
そこで今必要としているのが、営業力を活かしてプロジェクトをリードしてくれる人材です。業界経験は問いません。

 

実に様々な仕事内容ですね。PMとうい言葉に加えて、「幹部候補」という言葉が付いてくることもありますが、この仕事をこなせたら幹部も間違いないですね!

 

あぁ、あこがれるわぁ〜〜〜〜〜〜〜〜。

 

 

 

 

 

 

 

とは全く思わない。

日本においては、PM=SEですが、SEが優遇される大企業SIerならまだしも、そうでないと厳しいんじゃないですかね。

うちでは、PMは、雑用、スケジュール調整、苦情受付みたいな感じですね。プログラミングが基本的にはわからないので(しょうがないと思いますが)、エンジニアからするとやっかいな存在ですね。説明をたくさんしないといけなかったり、時には図を書いたりしないといけないこともあります。

大企業PMだったら、その権威(大企業の、個人ではない)を振りかざして、仕事進められるんでしょうね。

しかし、技術がわかってるPMだったら、PM自身も仕事を進めやすいし、エンジニアもいちいち説明しなくて済むだろうから、WIN-WINかなぁ。エンジニアは、納期が締め付けられそうか。

技術の移り変わりは激しいから、一通り技術がわかるPMになっても、すぐにわからなくなるのかな。なるな。5年くらいで。