機械学習を始めとしたコンピュータサイエンスを主に扱っています。この広告は、90日以上更新していないブログに表示しています。推薦システム前回はユーザーベースの協調型推薦を実装したのですが、このようなシンプルな協調フィルタリングには大きな問題があります。それはスパースな行列に対してうまくレコメンドができないことです。システムを利用しないユーザーが増えていくため、行列が非常にスパースになっていきます。協調的型推薦は主にメモリベースとモデルベースの2つに分類されます。ユーザーが評価した評価値をデータベースとして保持した評価値データベースをすべてのメモリの中に格納し、推薦を行うために直接用いる手法。生のデータをあらかじめオフラインで処理して、推薦実行時にはオフラインで処理した前処理結果や学習済みのモデルを評価値予測のために使用する手法。理論上、メモリベースのように存在するデータをすべて用いるほうが正確ですが、データの規模が大きくなるにつれて計算量と計算コストの問題が出てくると考えられます。いった実務的な要請があるために、モデルベース推薦が注目されてきたと背景があります。モデルベース推薦において、潜在的な"意味"を表現する因子を利用するという考えが一般的です。Google検索などの情報検索においてユーザーが入力したクエリに対して、文書とクエリそれぞれに含まれる単語の重複によって評価するという単純な手法を利用することはもちろん可能です。この手法には問題があって"車"や"自動車"などの同義語や、"モデル"などに複数の意味を表しうる多義語が含まれる場合、うまく機能しません。LSA)という技術が発展してきました。LSAは、すべての文書の背後に意味の構造が存在すると考え、これを行列の形に表現して、分解することが特徴です。行列として表現することにより、多変量海鮮の考えを適用でき、文書や語句を数学的・統計的に分析することが可能になります。LSAでは表現としては豊かすぎる語句・文書を、行列分解という形で除外し、複数の語句の背後に共通して存在する意味構造を抽出することを考えます。生データの情報をできるだけ損なわずに、規模の問題を解決しようとしています。SVD)について考えてみたいと思います。特異値分解は簡略的には以下のように表現されます。これは与えられた行列Mを以下のように3つの行列に分割している操作です。対角成分は特異値といいます。冗長な要素が含まれているといえます。r次元データで表現できるようになります。ユークリッドノルムの大きなベクトル、つまり行列を構成する上で影響力の強いベクトルから順に列ベクトルに割り当てられることです。与える影響も大きくなります。抽出することで、次元を削減します。この手法は低ランク近似と呼ばれます。小さな特異値から削減することで、オリジナルの行列と低ランク近似した行列の各要素の2乗誤差が最小になることが知られています。以下のデータベースにおいてSVDを試してみます。例は以下のサイトから引用しています。1この例だとdocument1にはcarの出現頻度が0であり、この文書でcarを検索してクエリと文書の重複を見ても、重複がないためdocument1を見つけることはできないということが言えます。同様に、automobileで検索してもdocument2を得ることはできないということが言えます。carとautomobileは同義語だと言えるため、検索で見つけられるようになる必要があると考えられます。そこで、特異値分解(SVD)を用いることで、潜在的共起性を抽出します。1]])numpyを用いて特異値分解を行います。full_matrices=True)上位k個を抽出し低ランク近似を行います。最後は結果を解釈しやすいように、小数点第3位で四捨五入しています。2)これによって得られた結果を以下に示します。それぞれが検索として潜在的共起性を抽出できていることがわかります。(NMF)などもあり、今後これらも比較していきたいです。何か間違いなどを発見されましたら、コメントいただけるとありがたいです。16:22情報検索における潜在意味解析Tweet広告を非表示にする関連記事2019-02-21ユーザーベース協調フィルタリングを実装してみたamazonやNetflixのレコメンドに用いられている推薦システムのう...2018-10-14pandasを用いてフラグがついている列が先頭になるように行ごとにシフトするpandasにおいてすべての行でフラグ1が戦闘に来るようにシフト...2018-10-14numpyのarrayで複数の要素が配列内に存在するか判定するnumpyのarrayで複数の要素が配列内に存在するかを判定する。arrayからDataFrameを作る2つの同じ長さのnumpy.arrayを用いてそれらを列に持つpandasのD...2018-09-19PandasのDataFrameから特定の値を持つ行を削除するPandasのDataFrameから特定の値を持つ行を削除する。情報検索における潜在意味解析ユーザーベース協調フィルタリングを実装してみた月別アーカイブはてなブログをはじめよう!leisurelabさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。