Giants2019-09-22推薦システム入門(その1:古典的手法)推薦システム最近こちらの本を購入しました。見るレコメンデーションの勉強で、推薦システムとは何ぞやという基礎の基礎から勉強することにしました。この本、確かにちゃんと書いてあるので非常におすすめなんですが、めちゃくそ難しかったので全部頭で理解するには時間かかりそうです。ゆるーく勉強していくので、ゆっくりなのは許してくださいな。何?この本でいう推薦システムはこんなふうに紹介されてます。推薦システムはさまざまな文脈においてユーザに「最良」のアイテムを推薦するコンピュータプログラムである。何をもって良い推薦とするかは、総クリック数、総収益、売り上げ総計などの最適化の目的に依存する。統計的機械学習の理論と実践わかりやすい例としては、やはりECサイトやWebページの端についているような広告がこれらに該当します。このようなシステムの最もシンプルな構成としてはこんな感じになるかと思います。ブラウザでの操作を蓄積し、それを学習してモデルを更新します。更新されたモデルを推薦システムに適用し、実際のWebページ配信ときに推薦システムを呼び出して推薦するアイテムを決定します。アイテムの寿命などの特性によって、モデルの更新頻度は考慮する必要があります。頻繁にアイテムが変更される場合には、数分単位でモデルの更新が必要になったりするようです。推薦システム内部でやっていることじゃあ内部的にはどんなことしてるかって言うと、ざっくりとはこんな感じになってます。推薦システムを作ったら、システム自体を評価して改善していくことが求められます。オフライン評価ユーザーに使用して貰う前に、過去の実績を元にしたシステムの評価オンライン評価ユーザーに使用してもらった、実際の評価スコアリングの評価スコアリングが期待通りに行われているかの評価ランキングの評価ランキングが期待通りに行われているかの評価この辺を行うので、目的関数は事前に注意して決めておく必要がありますよって話です。古典的手法まずは、古典的な推薦システムの中心となる考え方を確認します。アイテムの表現まず、アイテムを数値として表現することを考えます。アイテムが何をさすかによって、素性は画像だったり単語だったりいろいろですが、それらを組み合わせて、アイテムを、ベクトル表現していきます。対象領域に含まれる事物について、その性質や特性の違いによって異同を定め、領域全体を体系的に分類・秩序立てていくこと。そのような分類を行う方法や規準を考察する研究分野、ないし結果として得られる分類体系をいう。エンタープライズだそうです。要するに、人間がカテゴリを決めてあげて、アイテムをそのカテゴリにマッピングしてあげることでone-hot的にアイテムをベクトル表現化するみたいですね。細かい技法はあるようですが、アイテムをカテゴライズすることでベクトル化してくようです。(BoW)BoWは「アイテムはそのアイテムに含まれる単語によって特徴づけられる」という予想に基づいたやり方になります。コーパス内の単語をすべてベクトル表現し、アイテムはそれらの単語の分散表現で識別します。単語ベクトルはどうやって取るんじゃい?ってなるかと思いますが、ベースは単語にIDを降ってあげてるようです。それをone-hotにしたものを単語ベクトルとして使うようです。単純な方法ではですけどね。作った単語ベクトルは2値表現tftf-idfらへんから選んでBoW化していくようです。その他、one-hot表現だと次元がとんでもないことになるので、次元圧縮等がポイントになります。イメージは、w2vの分散表現にして、バカみたいに大きい次元をそこそこ大きい次元の空間に落とし込んでいくんだと思っていただければ。今だと学習済みのw2vモデルがあったりするのでそのへんもうまいこと使っていくんだと予想してます。www.nogawanogawa.comトピックモデルトピックモデルとは、文書が複数の潜在的なトピックから確率的に生成されると仮定したモデルです。www.albert2005.co.jpトピックモデルでは、アイテムは複数のトピックから生成されると考えます。含まれる単語が各トピック内で出現する確率分布をもち、それらを合算すると、アイテムとしてどのようなトピックで構成してるかを表現できるようになります。これにより、確率の高い上位数件のトピックがアイテムを強く表現してると推測できます。ユーザーの表現ユーザーの表現には、プロファイルの利用アイテムとの相互作用の記録をもとに算出などが考えられます。扱うデータの種類こそ違えど、あとはアイテムの表現と似たような感じでベクトル表現にしたりします。上で、アイテムとユーザーをそれぞれベクトル化できたので、これらを使って推薦する仕組みについて見ていきます。教師なしアイテムとユーザーの素性ベクトルが得られれば、それを多次元空間にマッピングする事で教師なしとして推薦が可能です。この場合、アイテムとユーザーは同一ベクトル空間の点で表すことになります。アイテムとユーザーが同じbowで表現されることでこれが実現できます。教師ありユーザーとアイテム間のレイティングを教師データとし、未知のレイティングを予想します。例として、バイナリレイティングユーザーがアイテムに与える影響を0,1で表現する(クリックの有無など)数値型レイティングユーザーがアイテムに与える影響を数値で表現する(ユーザーからの点数評価など)順序レイティングユーザーがアイテムに与える影響を順序で表現する(人気上位何位に位置するかなど)共起嗜好性スコアユーザーがアイテムAをアイテムBより好む度合いなどがこれらのレイティングは正則化すると過学習の恐れが低下するらしい。何?協調フィルタリングのモチベーションはこんな感じです。似たユーザーは同じものを欲しがる同じユーザーは似たアイテムを欲しがるという期待を元に推薦していくことになります。ユーザーが未知のアイテムに対して影響があるかどうかは、似たユーザーの既知の影響結果の荷重平均で表現できると言います。似たユーザーがどんな振る舞いを起こしたかから、未知のアイテムに対する影響を予想します。このとき、"似たユーザー"や"似たアイテム"の度合いの数値化には類似度関数が使われる。ユーザー間の類似度関数は、この本ではピアソン相関が一般的だそうです。近傍をどこまでにするかは、実証的評価が必要だとしています。加重平均の係数は、類似度関数の出力に応じて重み付けしてあげます。して、全ユーザーと全アイテムの影響を表したマトリクスが出来上がります。この行列の要素のうちいくつかは既知であるので、それを教師データとしてロスを最小化するように学習させることで最終的な影響の確率を得ます。根っこにある基本的なアイデアについてはすでに書いたので、推薦システムを構築するということに頭を傾けてると、一つ問題が出てくるのでそれを見ていきます。いわゆる多腕バンディット問題と呼ばれるやつです。何?多腕バンディット問題は強化学習関係の話でよく出てくるテーマですね。広告Aと広告Bの2つがあって、それらのどちらを推薦するか悩んでるとします。たくさんのクリックを集めることが目的関数となっていますが、AとBの広告がどれだけの確率でクリックされるかわかりません。(←ココ重要)今、10回試行してAが6回クリックされてBが2回クリックされたとします。ところが、実際にはBは2回に1回クリックされる品質の広告で、Aは10回に1回クリックされる品質の広告でした。この状況で正直にやると、広告会社は試行の上では優秀そうに見える品質の低いAの広告を打ち続ける問題があります。(多腕バンディット問題)これを防ぐためには、すべての広告を全体的に引く必要があり、予測者は良いアルゴリズムに従って情報の活用と探索をバランスする必要があります。(参考)www.ai-gakkai.or.jpということで、実際には多腕バンディット問題を解くために、一見よくなさそうなアイテムであっても一定のアルゴリズムに則って推薦されないといけないってことになります。ベイジアンアプローチ事前分布と事後分布を踏まえた上で最適解を求めるらしいです(←イマイチ実感が湧いてないです)min-maxアプローチ最良の手を引き続けたときと実際の差分(リグレット)をもとに、最悪の手を引き続けたときのパフォーマンスを最小にするヒューリスティックなバンディット戦略この辺が、戦略として有望らしいです。感想むっっっっっっっっず。いやはや、レベルが違いました。数式出てくるし、わけわかんないっすね。数式使わない記事にまとめようとおもいました。20:26推薦システム入門(その1:古典的手法)Tweet関連記事2019-07-18SudachiPyでユーザー辞書を使う気がついたら、前回のブログからだいぶ空いてしまいました。こ...2019-02-17自然言語処理で遊んでみる(その2:テキストデータの解析)この前はこんなことをやっていました。(1)月別アーカイブはてなブログをはじめよう!nogawanogawaさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。