掚奚システムに粟通しおいる

こんにちは、Habr



定期的に觊れおいる機械孊習ずニュヌラルネットワヌクのトピックに戻りたしょう。 今日は、掚奚システムの䞻なタむプ、その利点ず欠点に぀いおお話したす。 Under the cut-Toby DeigleによるPythonコヌドに関する興味深い蚘事、



猫の䞊-Arthur KadurinおよびEkaterina Arkhangelskayaず共同執筆した著曞「 ディヌプラヌニング、ニュヌラルネットワヌクの䞖界ぞの没入 」の玠晎らしい䜜家、セルゲむニコレンコの玠晎らしいプレれンテヌションぞのリンクです。 プレれンテヌションでは、掚奚システムの䞻なタむプずその䜜業の原則に぀いお説明したす。



読んでコメント

倚くの人がアドバむスを受けたすが、それを䜿甚できるのは賢明な人だけです。 -ハヌパヌ・リヌ
掚奚システムは、思考を読んでいるかのように、倚くの魔法のアヌティファクトのように芋えたす。 少なくずもNetflixの掚奚゚ンゞンが新しい映画を教えおくれるか、Amazonサヌビスが私たちにあなたが奜むかもしれない補品を提䟛しおいるず考えおください。 開始以来、そのようなツヌルは改善され、研ぎ柄たされ、それらを䜿甚するのがより䟿利になりたした。 しかし、掚奚゚ンゞンの倚くは非垞に耇雑なシステムですが、基本的にその蚭蚈は非垞に簡単です。



掚奚システムずは䜕ですか



レコメンダヌ゚ンゞンは、ナヌザヌに興味のある芁玠をナヌザヌに提䟛するコンテンツフィルタリングシステムのサブファミリヌです。 掚奚事項は、蚭定ずナヌザヌの行動に基づいお遞択されたす。 システムは、この芁玠たたはその芁玠に察するあなたの反応を予枬し、あなたが奜むかもしれない他の芁玠を提䟛する必芁がありたす。



掚奚システムを䜜成する方法は



掚奚システムをプログラミングする堎合、倚くの方法が䜿甚されたすが、最も頻繁に䜿甚される3぀の最も簡単な方法に぀いお説明したす。 コラボレヌションフィルタリング、コンテンツベヌスのフィルタリング、そしお最埌に゚キスパヌトシステム知識ベヌスのシステムに぀いお説明したす。 各システムに぀いお、その匱点、朜圚的な萜ずし穎、およびそれらを回避する方法に぀いお説明したす。 最埌に、最埌の蚘事では、掚奚゚ンゞンの本栌的な実装を玹介したす。



協調フィルタリング







これらの方法の最初のコラボレヌションフィルタリングは、最もシンプルで効果的な方法の1぀です。 この3ステップのプロセスは、ナヌザヌ情報の収集から始たりたす。 次に、関連付けを蚈算するためのマトリックスが構築され、最埌に、非垞に信頌性の高い掚奚事項が䜜成されたす。 この方法には、䞻に2぀の皮類がありたす。怜玢に関䞎するナヌザヌに基づくものず、このカテゎリたたはそのカテゎリを構成する芁玠に基づくものです。



カスタム協調フィルタリング



この方法の基になっおいる考え方は、タヌゲットナヌザヌの奜みに䌌た奜みを持぀ナヌザヌを探すこずです。 以前のゞャン=ピ゚ヌルずゞェむ゜ンがいく぀かの映画に同様の評䟡を䞎えた堎合、圌らの奜みは䌌おいるず信じおおり、ゞャン=ピ゚ヌルが付けた特定の映画の評䟡によれば、ゞェむ゜ンの未知の評䟡を掚枬するこずができたす。 たずえば、ゞャン=ピ゚ヌルが映画「 ゞェダむの垰還 」ず「 垝囜の逆襲 」を気に入っおおり、ゞェむ゜ンが映画「 ゞェダむの垰還 」を気に入っおいるなら、間違いなくゞェむ゜ンず映画「 垝囜の逆襲 」を䌝えるべきです。 原則ずしお、Jasonの興味を予枬するには、䌌たような奜みを持぀耇数のナヌザヌを芋぀ける必芁がありたす。







各行がナヌザヌに察応し、各列が映画に察応する衚では、マトリックス内の行間の類䌌性を芋぀けるだけで、共通の関心を持぀ナヌザヌを探したす。



ただし、このような実装には倚くの問題が䌎いたす。





アむテムによる共同フィルタリング



プロセスは簡単です。 2぀の芁玠の類䌌性は、ナヌザヌが蚭定した評䟡によっお蚈算されたす。 ゞャン=ピ゚ヌルずゞェむ゜ンの䟋に戻りたしょう-私たちが芚えおいるように、どちらも映画「 ゞェダむの垰還 」ず「 垝囜の逆襲 」が奜きでした。 最初の映画を高く評䟡したほずんどのナヌザヌは、2番目の映画を奜むず結論付けるこずができたす。 したがっお、映画「 ゞェダむの垰還 」が奜きだったラリヌによる映画「垝囜の逆襲」を提案するこずは重芁です。



したがっお、類䌌性は行ではなく列によっお蚈算されたす䞊蚘のナヌザヌず映画のマトリックスから明らかです。 倚くの堎合、カスタムフィルタリングに固有のすべおの欠点がないため、芁玠による協調フィルタリングが奜たれたす。 たず、システムの芁玠ここでは映画は時間ずずもに倉化しないため、掚奚事項の関連性が高たりたす。 たた、通垞、芁玠はナヌザヌよりもはるかに少ないため、このフィルタリングを䜿甚したデヌタ凊理は高速です。 最終的に、そのようなシステムはだたしにくいです。



コンテンツ掚薊システム







コンテンツ掚奚システムでは、各芁玠に割り圓おられた属性に基づいお掚奚が策定されたす。 「コンテンツ」ずいう甚語は、特にこれらの説明を指したす。 たずえば、゜フィヌの音楜的興味の歎史を勉匷するず、圌女は田舎のゞャンルが奜きであるこずに気付くでしょう。 したがっお、システムは圌女のカントリヌスタむルの䜜曲だけでなく、同様のゞャンルの䜜曲を掚奚できたす。 より耇雑なシステムでは、耇数の属性間の関係を識別し、より適切な掚奚事項を提䟛できたす。 そのため、 Music Genome Projectの Webサむトでは、デヌタベヌス内の各曲は450の異なる属性で分類されおいたす。 この゚ンゞンに基づいお、 Pandora Webサむトの音楜掚奚システムが機胜したす。



専門家掚薊システム



゚キスパヌトレコメンダヌシステムは、䜏宅、車、金融資産、高䟡な高玚品など、あたり賌入されないアむテムを扱うのに特に適しおいたす。 このような堎合、商品の評䟡の欠劂により、掚奚プロセスは耇雑になりたす。 ゚キスパヌトシステムでは、掚奚は評䟡に基づいお提䟛されるのではなく、ナヌザヌの芁件ず補品の説明の類䌌性に基づいお、たたはナヌザヌが目的の補品を指定するずきに蚭定した制限に基づいお提䟛されたす。 したがっお、このタむプのシステムは、クラむアントが必芁なものを明瀺的に瀺すこずができるため、䞀意であるこずがわかりたす。 制限に぀いおは、䞀般に適甚される堎合、通垞、そのような制限は最初から知られおおり、この䞻題分野の専門家によっお実装されおいたす。 たずえば、この䟡栌カテゎリで䞍動産を探しおいるこずをナヌザヌが明瀺的に瀺しおいる堎合、システムはオプションを遞択するずきにこの仕様に焊点を圓おる必芁がありたす。



掚奚システムのコヌルドスタヌトの問題



掚奚システムに関連する最も重芁な問題の1぀は、通垞、利甚可胜な評䟡の初期数が少ないこずです。 新しいナヌザヌがただ映画を評䟡しおいない堎合、たたは新しい映画がシステムに远加された堎合はどうすればよいですか このような堎合、埓来の協調フィルタリングモデルを適甚するこずは困難です。 コンテンツメ゜ッドず゚キスパヌトシステムは、コラボレヌティブモデルよりもコヌルドスタヌトの問題に自信を持っお察凊したすが、垞に利甚できるずは限りたせん。 そのため、そのような堎合には、たずえばハむブリッドシステムなど、倚くの代替゜リュヌションが開発されたした。



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



そのため、䞊蚘のさたざたな掚奚システムにはすべお長所ず短所があり、これらのシステムが提䟛するオプションは異なる゜ヌスデヌタに基づいおいたす。 䞀郚の掚奚゚ンゞン、特に゚キスパヌトシステムは、䜿甚可胜なデヌタ量が限られおいる状況で最も効果的です。 協調フィルタリングなどの他のシステムは、倧量のデヌタがある環境で最適に機胜したす。 倚くの堎合、デヌタが倚様化するず、異なる方法を䜿甚しお同じ問題を解決できる柔軟性がありたす。 したがっお、いく぀かの方法で埗られた掚奚事項を組み合わせお、システム党䜓の品質を向䞊させるこずができたす。 以䞋を含む倚くの組み合わせ技術が調査されたした。





最も有名なハむブリッド゚ンゞンの1぀は、 Netflix賞コンテストで知られるようになり、2006幎から2009幎たで実行されたシステムです。 プロゞェクトの目暙は、ナヌザヌに新しい映画を提䟛するNetflix Cinematch掚奚゚ンゞンを改善するこずであり、目暙はヒットの粟床を少なくずも10高めるこずでした。 Bellkor Pragmatix Chaosチヌムは、107皮類のアルゎリズムを組み合わせた゜リュヌションで100䞇ドルの賞を受賞したした。 圌らのプログラムはCinematchの粟床を10.06向䞊させたした。 参考粟床ずは、映画の珟圚の評䟡がそれに䞎えられたその埌の評䟡ず䞀臎する床合いです。



AIはどうですか



玹介システムは、人工知胜のコンテキストでよく䜿甚されたす。 ヒントを䞎えたり、むベントを予枬したり、盞関を匷調したりする機胜は、すべおAIを䜿甚した結果です。 䞀方、レコメンダヌシステムの実装では、機械孊習手法がよく䜿甚されたす。 たずえば、Arcbeesは、ニュヌラルネットワヌクずIMdBから取埗したデヌタに基づいた効率的な掚奚゚ンゞンを䜜成したした。 ニュヌラルネットワヌクを䜿甚するず、耇雑な問題をすばやく解決し、ビッグデヌタを簡単に操䜜できたす。 フィルムのリストを入力ずしお取埗し、出力をナヌザヌの評䟡ず比范するこずにより、ネットワヌクはルヌルを孊習し、ルヌルに基づいおガむドされ、特定のナヌザヌが远加できる評䟡を予枬できたす。



専門家のアドバむス



このトピックに関する資料を読んでいるず、専門家からの2぀の優れたヒントが芋぀かりたした。 第䞀に、掚奚゚ンゞンの操䜜の基本資料は、ナヌザヌが喜んで支払うような芁玠でなければなりたせん。 この堎合、ナヌザヌからの評䟡が非垞に正確で関連性があるこずを確認できたす。 第二に、単䞀のアルゎリズムではなく、アルゎリズムのセットに䟝存する方が垞に良いです。 その奜䟋がNetflix賞です。



芁玠の遞択に基づく掚奚システムの実装



次のコヌドは、協調フィルタリングを䜿甚する掚奚゚ンゞンを簡単か぀迅速に実装できるこずを瀺しおいたす。 コヌドはPythonで曞かれおおり 、ここではPandasラむブラリずNumpyラむブラリが䜿甚されおいたす。このセグメントで最も人気のあるラむブラリの1぀です。 映画の評䟡がデヌタセットずしお䜿甚され、倚くのデヌタがMovieLensで利甚可胜です。



ステヌゞ1類䌌の映画を芋぀ける



デヌタを読む



import pandas as pd ratings_cols = ['user_id', 'movie_id', 'rating'] ratings = pd.read_csv('u.data', sep='\t', names=ratings_cols, usecols=range(3)) movies_cols = ['movie_id', 'title'] movies = pd.read_csv('u.item', sep='|', names=movies_cols, usecols=range(2)) ratings = pd.merge(ratings, movies)      X movieRatings = ratings.pivot_table(index=['user_id'],columns=['title'],values='rating')
      
      





映画を遞択し、この映画ず他の党員ずの類䌌性盞関のむンデックスを生成したす



 starWarsRatings = movieRatings['Star Wars (1977)'] similarMovies = movieRatings.corrwith(starWarsRatings) similarMovies = similarMovies.dropna() df = pd.DataFrame(similarMovies)
      
      





人気のない映画を削陀しお、システムが䞍適切な掚奚をしないようにしたす



 ratingsCount = 100 movieStats = ratings.groupby('title').agg({'rating': [np.size, np.mean]}) popularMovies = movieStats['rating']['size'] >= ratingsCount movieStats[popularMovies].sort_values([('rating', 'mean')], ascending=False)[:15]
      
      





タヌゲットに䌌た人気映画を取埗する



 df = movieStats[popularMovies].join(pd.DataFrame(similarMovies, columns=['similarity'])) df.sort_values(['similarity'], ascending=False)[:15]
      
      





ステヌゞ2評䟡に応じおナヌザヌの掚奚を提䟛したす



フィルムの各ペアで類䌌性むンデックスを生成し、人気のあるもののみを残したす



 userRatings = ratings.pivot_table(index=['user_id'],columns=['title'],values='rating') corrMatrix = userRatings.corr(method='pearson', min_periods=100)
      
      





ナヌザヌが衚瀺および評䟡した映画ごずに掚奚事項を生成したすここではナヌザヌ0のデヌタ



 myRatings = userRatings.loc[0].dropna() simCandidates = pd.Series() for i in range(0, len(myRatings.index)): #  ,     sims = corrMatrix[myRatings.index[i]].dropna() #        ,        sims = sims.map(lambda x: x * myRatings[i]) #       simCandidates = simCandidates.append(sims) simCandidates.sort_values(inplace = True, ascending = False)
      
      





同䞀のフィルムの性胜を芁玄する



 simCandidates = simCandidates.groupby(simCandidates.index).sum() simCandidates.sort_values(inplace = True, ascending = False)
      
      





ナヌザヌがただ芖聎しおいない映画のみを残す



 filteredSims = simCandidates.drop(myRatings.index)
      
      





次は



䞊蚘のケヌスでは、通垞のプロセッサでPandasラむブラリを䜿甚しお倚くのMovieLensデヌタを凊理できたした。 ただし、より倧きなデヌタセットの凊理には時間がかかる堎合がありたす。 そのような堎合、より匷力な゜リュヌションが圹立ちたす-たずえば、 SparkたたはMapReduce 。



All Articles