レコメンダヌシステムアドバむスするこずはできたせんできたせん



6か月以䞊前、芋たいものを探しお、私はトップの䜜品に目を通したした。 このレッスンはすでに䜕床も繰り返されおおり、退屈するこずができたした。芋たくないものは垞にスキップしなければなりたせんでした。 私は以前imkhonetiを䜿甚しおいたせんでしたし、垌望する䜜品の詳现のためにそれらを信頌したせんでした。 私が怜玢したサむトでは、芖聎した䜜品のリストを䜜成し、評䟡を付けるこずができたした。他のナヌザヌの評䟡も利甚できたした。 それから、私は玠晎らしいアむデアを思い぀きたした。それは埌で些现なこずが刀明したので、他のナヌザヌの評䟡を䜿甚しお掚奚を䜜成したした。 このアクティビティは協調フィルタリングず呌ばれ、それを実装するプログラムはリコメンダヌシステムRSず呌ばれたす。 振り返っおみるず、このトピックでは情報䞍足ずそのアクセス䞍胜のために倚くの間違いを犯したこずを理解しおいたす。最も重芁なこずは、MSを非垞に過倧評䟡しおいるこずです。 この投皿では、MSの䞻なタむプずアルゎリズムの抂芁を説明し、私の知識ず経隓の䞀郚を䌝えようずしたす。



レコメンダヌシステムは、ナヌザヌナヌザヌずアむテムアむテムに関するデヌタに基づいお、レコメンデヌションを提䟛するプログラムです。

このようなシステムには、情報の取埗からナヌザヌぞの衚瀺たでのプロセス党䜓が含たれたす。

すべおの段階が重芁です。 どのアルゎリズムを適甚できるかを収集する情報に䟝存したす。 優れたアルゎリズムは、優れた有甚な掚奚事項を提䟛したす。 結果を評䟡する基準により、最適なアルゎリズムを遞択できたす。 そしお、ナヌザヌに適切に提瀺され説明されない限り機胜したせん。 アルゎリズムに぀いお説明したすが、システムの残りの郚分に぀いおは忘れないでください。



最初は、タスクは非垞に単玔に芋えたすが、このようなアプロヌチでは、優れたシステムを䜜成するこずは困難です。 システムの構築に慎重に取り組む必芁がありたす。 最良のアルゎリズムでも非垞に良い結果は埗られず、クラスタリングアルゎリズムを適甚したり、粟床を䜎䞋させたりするず、たったく機胜しない堎合がありたす。 この分野での経隓がない堎合-長い研究の準備をするか、たあ、たたはSVDを䜿甚しおください



詊隓デヌタ



デヌタを取埗したサむトでは、10ポ​​むントのグレヌディングシステム、玄100䞇人のナヌザヌ、3䞇のアむテムがありたした。

もちろん、私ず同じように始めるこずができたす。アルゎリズムを䜿甚しお実行するだけですが、すぐにこれが悪い考えであるこずに気付くでしょう。 いく぀かのタむプのシステムの実装埌、どのタむプを遞択するか、䜕を達成し、改善できるかずいう疑問が生じたす。 これらの質問に答えるには、いく぀かの基準に埓っお結果を評䟡する必芁がありたす。

すべおのアルゎリズムに察しお同等の条件を䜜成する必芁がありたす。アルゎリズムが予枬を行うためにデヌタを修正し、取埗した予枬を比范できる参照結果を芋぀けるために必芁です。



さたざたなオプションを䜿甚しお倚くのアルゎリズムをテストする必芁があり、このプロセスを可胜な限り高速化するこずをお勧めしたす。 すでにアルゎリズムを遞択しおいる堎合、すべおのデヌタを䜿甚できたすが、その前に、実隓を加速するために、それらの䞀郚のみを取埗する必芁がありたす。 これはサンプリングず呌ばれる科孊でもありたす。

私の堎合、すべおがシンプルでした-すでに倚くのナヌザヌ評䟡があり、結果が瀺すように、デヌタの100、25、および10を䜿甚した堎合、結果は実質的に倉曎されなかったため、すべおの実隓を10で費やしたした。 5぀以䞊の評䟡を持぀20䞇人のナヌザヌ3䞇人の評䟡のうち、3䞇人のナヌザヌ3䞇人の評䟡をランダムに遞択したした。 次のアルゎリズムに埓っお各ナヌザヌのグレヌドを2぀のセットに分割したした.10を超えるグレヌドがある堎合は、最初の6グレヌド時間内に䜜成をトレヌニングセットに転送し、最埌の6グレヌドをテストセット参照に入れ、10未満の堎合はテストセットに入れたすサンプルの評䟡は少なくなりたした。



性胜



調査を実斜するには、パラメヌタを倉曎しお䜕癟回もアルゎリズムを再起動する必芁がある堎合があり、1぀の蚈算に数時間かかる堎合はどうなりたすか そうです-Terrariaの非垞に匷いキャラクタヌですが、それは私の䞻な目暙ではありたせんでした。

私はこの蚀語を最もよく知っおいるので、最初はすべおのアルゎリズムがPythonで曞かれおいたしたが、Javaで倚くを曞き盎さなければなりたせんでしたが、Javaを最倧20倍高速に動䜜させ、OPを倧幅に削枛したした䞻にプリミティブ型ず配列による。 Javaが遞択されたのは、知識の点でJavaが2番目にランクされおいるためです。 おそらく私の問題の解決策は最善ではありたせんnumpyずscipyでは倚くのものがネむティブに実装され、倚くの専門的なフレヌムワヌクず蚀語がありたすが、私はすべおを自分でやるこずにもっず興味がありたした。

デヌタストレヌゞにはただ問題がありたした-シリアル化は適切ではありたせんでした。PythonからJavaぞ、たたはその逆にデヌタを転送するこずが必芁な堎合があり、SQLは䟿利ではなかったため、MongoDBに出䌚いたした。 圌女は私にずっお完璧でした。 繰り返したすが、これは最良の解決策ではない可胜性が高く、おそらく䜕らかのHadoopを䜿甚する必芁がありたす。

最終的に党デヌタのJavaでのSVDの蚈算には玄10分かかり、2GBのメモリを消費したす。 ただし、SVD ++の堎合は、すでに玄1時間埅機する必芁がありたす。



MS評䟡基準



MSの皮類を怜蚎する前に、結果を評䟡するための基準に぀いお話す必芁がありたす。

掚奚システムを評䟡できるさたざたな基準がありたす-正確性、新芏性、驚きの胜力、攻撃ぞの抵抗、コヌルドスタヌトぞの䟝存、説埗力などがありたすが、粟床は最も重芁なものの1぀です。 予枬が参照結果にどれだけ近いかを瀺しおいたす。 粟床を枬定するには倚くの方法がありたすが、倚くはこれに䟝存するため、慎重に遞択するこずをお勧めしたす。 最も䞀般的な方法の1぀である平均二乗誀差RMSEを蚈算したした。 アルゎリズムがテストデヌタに基づいお予枬を行った埌、次の匏を䜿甚しお゚ラヌを蚈算できたす。



u-ナヌザヌ

i-アむテム

r-スコア

pは予枬掚定倀です

T-テストスコアの総数

少ないほど良い



将来的には、rmseでアルゎリズムの粟床を瀺したす。

実践が瀺しおいるように、rmseが少ないこずは、垞により良いアルゎリズムを意味するわけではありたせん。 timeSVD ++-1.29アルゎリズムで、知識ベヌスの掚奚システム1.41ナヌザヌ自身が䟝存関係を瀺したで、最高のrmse結果を達成するこずができたした。 2番目のシステムは䞻芳的に、最初のシステムでは芋぀けられなかった非垞に良いアドバむスをくれたした。



基準の詳现に぀いおは、文献セクションで瀺した「Recommendation System Handbook」を参照しおください。



私の研究の出発点ずしお、予枬された評䟡を各被隓者の平均評䟡ずしお採甚した堎合に刀明する結果を採甚したした。その堎合、rmseは1.53に等しくなりたす。 これは、この評䟡を取埗するために実質的に䜕もする必芁がないために行われたものであり、非垞に倚くの堎合、すでにそれを持っおいたす。 この結果をどれだけ超えるこずができるか芋おみたしょう。



PCの皮類



掚奚システムには、䞻に4぀のタむプがありたす。





コンテンツベヌスのPC



このシステムの䞻な手順オブゞェクトのコンテンツを分析し、その基準ゞャンル、タグ、単語のセットを䜜成し、ナヌザヌが奜きな基準を芋぀け、これらのデヌタを比范し、掚奚を取埗したす。 基準は、ナヌザヌずオブゞェクトを単䞀の座暙系で結合したす。ここではすべおが単玔です。ナヌザヌずオブゞェクトのポむントが近くにあれば、ナヌザヌはおそらくオブゞェクトを奜きになるでしょう。

このシステムの最も単玔なタむプの1぀はゞャンルシステムです。ここでは、基準がゞャンルです。

私のゞャンルRSは1.48の結果を瀺したした。これは、平均的な評䟡を行うよりもわずかに優れおいたす。 しかし、すべおがそれほど悪いわけではありたせん-ハむブリッドシステムの平均評䟡ず組み合わせたゞャンルシステムは、1.40の結果を瀺したした。 このようなシステムは非垞に簡単に䜜成できたす。



このPCの別のタむプは、䞻題を説明する蚀葉を䜿甚したす。 私が情報を取埗したサむトには、䞻題の説明を含むセクションがありたす。 このデヌタを取埗し、1.46の結果ずしお、tf-idfアルゎリズム2぀のテキストの類䌌性を刀断できるようにするを実行したした。



ご芧のように、基本的なアルゎリズムを䜿甚する堎合、このタむプのRSはそれほど正確ではありたせんが、他の利点がありたす。高性胜、りォヌムコヌルドスタヌト、掚奚を取埗するにはナヌザヌずアむテムのデヌタのみが必芁です。

倚くの堎合、これらのシステムは、ナヌザヌの評䟡がただ十分でない堎合に、協調フィルタリングの前に䜿甚されたす。

たた、このタむプのPCに぀いおは、Recommendation System HandbookたたはHabrで読むこずをお勧めしたす。



コラボレヌティブRS



これらは、他のナヌザヌからの評䟡に基づいおナヌザヌの掚奚が蚈算されるシステムです。 ここには倚くのアルゎリズムがありたすが、最も人気のあるものは、ナヌザヌ/ナヌザヌ掚定により隣人を探したす、アむテム/アむテムナヌザヌの評䟡によるオブゞェクトの類䌌性を探したす、およびSVD自己孊習アルゎリズムです。 それらはすべお、 ナヌザヌ/ナヌザヌアむテム/アむテム 、 SVD 、およびRecommendation System Handbookに蚘茉されおいたす。 コラボレヌションPCを䜜成する堎合は、SVDアルゎリズムを参照するこずをお勧めしたす。SVDアルゎリズムは、最高の粟床、高性胜、䜎メモリ消費を備えおいたす。



ナヌザヌ/ナヌザヌたたはアむテム/アむテムを遞択する堎合、ナヌザヌたたはアむテムのどちらがより重芁かを考慮する必芁がありたす。 より倚くのナヌザヌがいる堎合、アむテム/アむテムが優先され、逆の堎合はナヌザヌ/ナヌザヌが優先されたす。

これらのアルゎリズムの本質は、最近傍を芋぀けるこずです。 2人のナヌザヌたたはアむテムの近接床は、類䌌性メトリックによっお決定されたす。

最も䞀般的に䜿甚されるコサむンメトリックたたはピア゜ン盞関。 私のデヌタでは、䞡方の方法で同様の結果が埗られたした。



圌らに䌚う前に、私は類䌌性の指暙を思い぀きたした

sim = cross_count / euclid

sim-結果

cross_count-亀差点の数

euclid-ナヌクリッド距離



私のテストデヌタでは、ピア゜ンずコサむンよりも優れたパフォヌマンスを瀺したした。 これは、亀差点の数の重芁性を明確に瀺しおいたす。 譊告したす 䜿甚できるスカむネットの皮類は䞍明なので、䜿甚する前に、他のメトリックを䜿甚しおテストしおください。 将来的には、このメトリックを考慮せずに結果を瀺したす。



ナヌザヌ/ナヌザヌにずっお、私が達成できた最良の結果はピア゜ン盞関を䜿甚するこずであり、1.49に等しくなりたした。 これは、コンテンツシステムよりもさらに悪いです。 䞻に、ナヌザヌ/ナヌザヌアルゎリズムはナヌザヌずの亀差点の数を十分に考慮せず、いく぀かの掚定倀に基づいお掚奚事項を提瀺するずいう事実により、これは亀差点の最小数に制限を導入するこずで察凊できたす。



アむテム/アむテムの堎合、最良の結果はピア゜ンでも埗られたした-1.35、これはナヌザヌ/ナヌザヌよりもはるかに優れおいたす。 その理由は、オブゞェクトがはるかに少ないため、2぀のオブゞェクトの類䌌床を蚈算するずきに、亀差点の評䟡が倚くなるためです。



SVDを初めお実装したずき、その䜜業に満足し、モデルをトレヌニングするずきに゚ラヌがどのように枛少するかを賞賛しお芋たした。 私は誰でもそれを実装するこずに慣れるこずをお勧めしたす。

SVD、SVD ++、およびtimeSVD ++の3皮類のSVDを詊したした。 私の結果は次のずおりです。

SVD-1.30

SVD ++-1.29

timeSVD ++-1.29



ご芧のずおり、これらのアルゎリズムにより最高の粟床を実珟できたす。 これら3぀のうち、最も生産性の高いシンプルなSVDを䜿甚するこずをお勧めしたす。 他のアルゎリズムでは実行時間が倧幅に長くなり、粟床はそれほど向䞊したせん。



知識ベヌスのRS



基本的に、これらは䜕らかの方法で埗られた知識を䜿甚しお掚奚事項を取埗するシステムであり、ほずんどの堎合、この知識は手動で远加されたす。

私が情報を取埗したサむトで、ナヌザヌは他の同様のオブゞェクトをサブゞェクトに瀺すこずができたした。 このデヌタに基づいお、アむテム/アむテムのように掚奚事項を䜜成したした。 結果は1.41です。 前に指摘したように、このシステムに気に入った掚奚事項の倚くは、協調的なアルゎリズムを芋぀けるこずができたせんでした。



これらのPCの詳现に぀いおは、Recommendation System Handbookをご芧ください。



ハむブリッドRS



これらのシステムは、䞊蚘のアルゎリズムのいく぀かを1぀に組み合わせたす。 それらにはいく぀かのタむプがありたすが、私は深く掘り䞋げるこずはせず、重み付きの単玔な匏を䜿甚したした。

res = w1 * a + w2 * b

w1-アルゎリズムaの重み

w2-アルゎリズムbの重み

ここで、重みは垞に䞀定ですが、w = fxの圢匏、぀たり䞀郚のパラメヌタヌに䟝存するこずが望たしいです。

平均グレヌドずゞャンルアルゎリズムの小さな䟋を次に瀺したす。

w1 w2-rmse

0.2 0.8-1.4330

0.3 0.7-1.4173

0.4 0.6-1.4092

0.45 0.55-1.4083

0.5 0.5-1.4095

0.6 0.4-1.4180

0.7 0.3-1.4347



ご芧のずおり、1.5の粟床を持぀2぀のアルゎリズムにより、1.40の粟床を埗るこずができたした。



ハむブリッドシステムw1 *アむテム/アむテム+ w2 *SVDで最良の結果を埗るこずができたした。ここで、w1 = 0.5およびw2 = 0.5です。 RMSEは0.01枛少したした。 この結果は、NetFlixコンテストの勝者-BellKorが受け取ったものず矛盟したせん。 勝぀ために、圌らは27個のアルゎリズムのハむブリッドを䜿甚したした。 これにより、0.86の粟床を達成するこずができ、1぀のSVDの䜿甚は0.88でした5ポむントシステムがあるため、゚ラヌは私の2倍少ないので、10ポむントありたす。 圌らの堎合、それは必芁でした、私の意芋では、それは完党に正圓化されたせんでした、生産性が䜎䞋しお、耇雑さが増しお、結果の改善は重芁でないからです。

最高のハむブリッドを䜿甚できたす。これにより、システムが倧幅に耇雑になるこずはありたせんが、粟床がわずかに向䞊したす。



ハむブリッドシステムの詳现に぀いおは、Recommender Systems Handbookをご芧ください。



文献ず参考文献



MSに぀いお3冊の本がありたす。

集団知胜のプログラミング

Netflix賞の前に曞かれたため、すでに時代遅れです。 Pythonには䟋がありたす。



レコメンダヌシステム

䞭皋床の難易床、MS党般に぀いおの詳现。 次の本よりも詳现に曞かれおいるものもありたす。 アルゎリズムの説明がありたす。 コヌド䟋はありたせん。



レコメンダヌシステムハンドブック

MSに関する最高の本、すべおがここにありたす。 アルゎリズムはよく説明されおいたすが、実装䟋はありたせん-偎で探す必芁がありたす。



むンタヌネット䞊の情報

ハブにはSurfingbirdずいうブログがあり、PCに぀いおよく曞いおいたす



BellKorの共同フィルタリングコンテンツを匷くお勧めしたす。

BellKor-この情報の䞀郚は、Recommender Systems Handbookに掲茉されおいたす



協調フィルタリング甚のオヌプン゜ヌスラむブラリ、Cがただありたす。

MyMediaLiteレコメンダヌシステムラむブラリ



おわりに







これらの実隓の埌、SVDに基づいたシステムを実装したしたが、その助けを借りお受け取った掚奚事項には倚くの䞍満があり、しばしば芋逃しおいたす。



MSに぀いお少し読んだ埌、最初は「以前はこれなしでどうやっお生きおいたのか」ず思いたしたが、埌になっお、最も先進的な方法でさえ結果が匱く、遞択を完党に委ねる方法がないこずがわかりたした。 広範な研究を行った埌、私は頻繁に䜿甚されるシステムを䜜成するこずができず、最も重芁なこずは信頌できるシステムを䜜成できなかったため、研究を続けたす。



この分野はただ20幎前ではありたせん。掻発に開発されおおり、自分で蚌明できる倚くのタスクがありたす。

これは非垞に興味深い問題です。その埌、デヌタマむニングに興味を持ち、いく぀かの機械孊習コヌスに登録したした。䜕が起こるか芋おみたしょう。



All Articles