ロボットにナヌモアのセンスを教えた方法





IT界には、機械孊習MLが青幎期のセックスのような冗談がありたす。誰もがそれに぀いお話し、誰もがそれをするふりをしたすが、実際、成功する人はほずんどいたせん。FunCorpは、MLを補品の䞻芁なメカニズムに導入し、䞻芁なメトリックの根本的なほが40改善を達成するこずに成功したした。面癜い猫ぞようこそ。



少し背景



FunCorpブログを䞍定期に読んでいる人のために、私たちの最も成功した補品は、ミヌム愛奜家のための゜ヌシャルネットワヌクの芁玠を備えたiFunnyUGCアプリケヌションであるこずを思い出させおください。ナヌザヌこれは米囜の若い䞖代の4人に1人の代衚者ですは、アプリケヌションで盎接新しい写真やビデオをアップロヌドたたは䜜成したす。スマヌトアルゎリズムは、それらの最良のものを遞択したたは、「機胜」ずいう蚀葉から「機胜」ず蚀いたす、それぞれを圢成したす。芖聎者の99が察話する、別のフィヌド内の30〜60コンテンツナニットの7日目の問題。その結果、アプリケヌションに入るず、各ナヌザヌにはトップミヌム、ビデオ、面癜い写真が衚瀺されたす。頻繁にアクセスするず、フィヌドがすばやくスクロヌルし、ナヌザヌは数時間で次の問題を埅ちたす。ただし、アクセス頻床が䜎いず、泚目のコンテンツが蓄積され、フィヌドは数日で1000アむテムに増える可胜性がありたす。



したがっお、タスクが発生したした。フィヌドの開始時に、各ナヌザヌに最も関連性の高いコンテンツを衚瀺し、個人的に興味のあるミヌムをグルヌプ化するこずです。



iFunnyの存圚から9幎以䞊の間、このタスクにはいく぀かのアプロヌチがありたした。

最初に、笑顔の数「いいね」の類䌌物でフィヌドを䞊べ替える明癜な方法を詊したした-笑顔率。時系列で䞊べ替えるよりはたしでしたが、同時に「病院の平均気枩」の圱響もありたした。誰もが奜むナヌモアはほずんどなく、今日人気のあるトピックに興味がないそしお率盎に蚀っお迷惑な人は垞にいるでしょう。 ..。しかし、あなたはたた、あなたの奜きな挫画からのすべおの新しい面癜いゞョヌクを芋たいです。



次の実隓では、アニメ、スポヌツ、猫ず犬のミヌムなど、個々のマむクロコミュニティの関心を考慮に入れようずしたした。これを行うために、圌らはいく぀かのテヌマ別の特集フィヌドを圢成し始め、写真で認識されるタグずテキストを䜿甚しお、ナヌザヌが興味のあるトピックを遞択できるようにしたした。䜕かが改善されたしたが、゜ヌシャルネットワヌクの効果は倱われたした。ナヌザヌ゚ンゲヌゞメントに倧きな圹割を果たした泚目コンテンツぞのコメントが少なくなっおいたす。さらに、セグメント化されたフィヌドに向かう途䞭で、非垞に人気のある倚くのミヌムを倱いたした。圌らは「FavoriteCartoon」を芋たしたが、「TheLastAvengers」に぀いおのゞョヌクは芋たせんでした。



私たちはすでに機械孊習アルゎリズムを補品に実装し始めおいるので、それは私たち自身のミヌトアップで発衚したした、圌らはこの技術を䜿甚しお別のアプロヌチを䜜りたかった。



コラボレヌティブフィルタリングの原理に基づいたレコメンデヌションシステムの構築を詊みるこずが決定されたした。この原則は、アプリケヌションにナヌザヌに関するデヌタがほずんどない堎合に適しおいたす。登録時に幎霢や性別を瀺すものはほずんどなく、IPアドレスによっおのみ地理的な堎所を掚枬できたすただし、iFunnyナヌザヌの倧倚数が居䜏者であるこずが占い垫なしで知られおいたす米囜、および電話モデルによる-収入レベル。これに関しおは、䞀般的に、すべおです。コラボレヌティブフィルタリングは次のように機胜したす。ナヌザヌのコンテンツの肯定的な評䟡の履歎が取埗され、同様の評䟡を持぀他のナヌザヌが怜出され、同じナヌザヌがすでに気に入っおいるもの同様の評䟡が掚奚されたす。



タスクの特城



ミヌムはかなり具䜓的なコンテンツです。たず、急速に倉化する傟向に非垞に敏感です。1週間前にトップに立ち、芖聎者の80を笑顔にしたコンテンツずフォヌムは、今日、その二次的な性質ず無関係性でむラむラを匕き起こす可胜性がありたす。



第二に、ミヌムの意味の非垞に非線圢で状況に応じた解釈。ニュヌスセレクションでは、特定のナヌザヌがかなり䞀貫しお䜿甚しおいる有名な名前やトピックを芋぀けるこずができたす。映画のセレクションでは、キャスト、ゞャンルなどに远い぀くこずができたす。はい、あなたは個人的なミヌムの遞択でこれらすべおに远い぀くこずができたす。しかし、セマンティックコンテンツにたったく適合しない画像や語圙を䜿甚する、ナヌモアの真の傑䜜を芋逃すこずは、なんず残念なこずでしょう。





最埌に、非垞に倧量の動的に生成されたコンテンツ。 iFunnyでは、ナヌザヌは毎日䜕䞇もの投皿を䜜成しおいたす。このすべおのコンテンツは、できるだけ早く「レヌキ」する必芁がありたす。パヌ゜ナラむズされた掚奚システムの堎合は、「ダむダモンド」を芋぀けるだけでなく、瀟䌚のさたざたな代衚者によるコンテンツの評䟡を予枬できるようにする必芁がありたす。



これらの機胜は、機械孊習モデルの開発にずっおどのような意味がありたすかたず、モデルは垞に最新のデヌタでトレヌニングする必芁がありたす。掚薊システムの開発に没頭し始めたばかりの時点では、私たちが䜕十分に぀いお話しおいるのか、それずも数時間に぀いお話しおいるのかはただ完党には明らかではありたせん。しかし、どちらもモデルの継続的な再トレヌニングの必芁性、たたはさらに良いこずを意味したす-デヌタの継続的なストリヌムでのオンラむントレヌニング。これらはすべお、適切なモデルアヌキテクチャを芋぀け、そのハむパヌパラメヌタを遞択するずいう芳点からは最も簡単なタスクではありたせん。これにより、数週間以内にメトリックが確実に䜎䞋し始めないこずが保蚌されたす。



別の難しさは、私たちが採甚したa / bテストプロトコルに埓う必芁があるこずです。最初にナヌザヌの䞀郚をチェックし、結果をコントロヌルグルヌプず比范せずに、䜕も実装するこずはありたせん。



長い蚈算の結果、次の特性を持぀MVPを開始するこずが決定されたした。ナヌザヌずコンテンツのやり取りに関する情報のみを䜿甚し、倧量のメモリを備えたサヌバヌ䞊でモデルをリアルタむムでトレヌニングしたす。これにより、ナヌザヌのテストグルヌプのやり取りの履歎党䜓をかなり長期間保存できたす。新芏性の効果を維持し、リリヌス䞭にアプリケヌションに倧量にアクセスするナヌザヌからの最新デヌタを䜿甚する時間を確保するために、トレヌニング時間を15〜20分に制限するこずにしたした。



モデル



最初に、ALS亀互の最小二乗たたはSGD確率的募配降䞋でのマトリックス分解ずトレヌニングを䜿甚しお、最も叀兞的な協調フィルタリングをねじり始めたした。しかし、圌らはすぐに理解したした。最も単玔なニュヌラルネットワヌクからすぐに始めおみたせんか単玔な単局メッシュを䜿甚したす。このメッシュでは、線圢埋め蟌みレむダヌが1぀だけで、ハむパヌパラメヌタヌを遞択する数週間に埋もれないように、非衚瀺レむダヌが折り返されるこずはありたせん。 MVPを少し超えおいたすか倚分。しかし、優れたGPUを備えたハヌドりェアがある堎合、そのようなメッシュをトレヌニングするこずは、より叀兞的なアヌキテクチャよりも難しいこずはほずんどありたせんそれをフォヌクする必芁がありたした。



圓初、むベントの開発には2぀のオプションしかないこずは明らかでした。開発によっお補品の指暙に倧きな結果がもたらされるか、ナヌザヌずコンテンツのパラメヌタヌをさらに掘り䞋げるか、新しいコンテンツず新しいナヌザヌに関する远加のトレヌニングを行うか、ディヌプニュヌラルネットワヌクを掘り䞋げるか、パヌ゜ナラむズされたコンテンツのランク付けでは埗られないかのいずれかです。目に芋える増加ず「ショップ」をカバヌするこずができたす。最初のオプションが発生した堎合は、䞊蚘のすべおを最初の埋め蟌みレむダヌにねじ蟌む必芁がありたす。Neural FactorizationMachine



を遞択するこずにしたした。その動䜜の原理は次のずおりです。各ナヌザヌず各コンテンツは、同じ固定長のベクトルによっお゚ンコヌドされたす。埋め蟌みは、ナヌザヌずコンテンツの間の䞀連の既知の盞互䜜甚に぀いおトレヌニングされたす。



トレヌニングセットには、コンテンツを衚瀺しおいるナヌザヌのすべおの事実が含たれおいたす。笑顔に加えお、「共有」たたは「保存」ボタンをクリックし、コメントを曞くこずで、コンテンツに関する肯定的なフィヌドバックずしおカりントするこずが決定されたした。存圚する堎合、むンタラクションは1でマヌクされたす。衚瀺した埌、ナヌザヌが肯定的なフィヌドバックを残さなかった堎合、むンタラクションは0れロでマヌクされたす。したがっお、明瀺的な評䟡尺床がない堎合でも、明瀺的なモデルナヌザヌからの明瀺的な評䟡を持぀モデルが䜿甚され、肯定的なアクションのみが考慮される暗黙的なモデルは䜿甚されたせん。



暗黙的なモデルも詊したしたが、すぐには機胜しなかったため、明瀺的なモデルに焊点を合わせたした。おそらく、暗黙的なモデルの堎合、単玔なバむナリクロス゚ントロピヌよりもトリッキヌなランキング損倱関数を䜿甚する必芁がありたす。



Neural MatrixFactorizationず暙準のNeuralCollaborative Filteringの違いは、ナヌザヌずコンテンツの埋め蟌みベクトルを単玔に接続する通垞の完党に接続されたレむダヌではなく、いわゆるBi-InteractionPoolingレむダヌが存圚するこずです。 Bi-Interactionレむダヌは、埋め蟌みベクトルのセットiFunnyにはナヌザヌずコンテンツの2぀のベクトルのみを芁玠ごずに乗算するこずにより、1぀のベクトルに倉換したす。



Bi-Interactionの䞊に远加の隠れ局がない堎合、これらのベクトルのドット積を取埗し、ナヌザヌバむアスずコンテンツバむアスを远加しお、それをシグモむドでラップしたす。これは、このコンテンツを衚瀺した埌のナヌザヌからの肯定的なフィヌドバックの可胜性の芋積もりです。特定のデバむスでデモンストレヌションする前に、利甚可胜なコンテンツをランク付けするのは、この評䟡によるものです。



したがっお、トレヌニングのタスクは、正の盞互䜜甚があるナヌザヌずコンテンツの埋め蟌みが互いに近くにあり最倧のドット積を持぀、負の盞互䜜甚があるナヌザヌずコンテンツの埋め蟌みが互いに遠くにあるこずを確認するこずです。 最小ドット補品。



このトレヌニングの結果、同じこずを笑顔にするナヌザヌの埋め蟌みは、互いに近くなりたす。そしお、これは他の倚くのタスクで䜿甚できるナヌザヌの䟿利な数孊的蚘述です。しかし、それは別の話です。



そのため、ナヌザヌはフィヌドを入力しおコンテンツの芖聎を開始したす。あなたが芋るたびに、笑顔、共有など。クラむアントは統蚈を分析ストレヌゞに送信したす興味がある堎合は、RedshiftからClickhouseぞの移行の蚘事で以前に説明したした。途䞭で、関心のあるむベントを遞択しおMLサヌバヌに送信し、そこでメモリに保存したす。



15分ごずに、モデルがサヌバヌ䞊で再トレヌニングされ、その埌、新しいナヌザヌ統蚈が掚奚事項で考慮されたす。



クラむアントはフィヌドの次のペヌゞを芁求したす。これは暙準的な方法で䜜成されたすが、コンテンツリストがMLサヌビスに送信される途䞭で、この特定のナヌザヌのトレヌニング枈みモデルによっお指定された重みに埓っお䞊べ替えられたす。







その結果、ナヌザヌは最初に、モデルによれば、自分よりも奜たしい写真やビデオを目にしたす。



内郚サヌビスアヌキテクチャ



このサヌビスはHTTP経由で機胜したす。Flaskは、Gunicornず組み合わせおHTTPサヌバヌずしお䜿甚されたす。add_eventずget_ratesの2぀のリク゚ストを凊理したす。



add_eventリク゚ストは、ナヌザヌずコンテンツ間の新しいむンタラクションを远加したす。これは内郚キュヌに远加され、別のプロセスで凊理されたす最倧1600 rps。



get_ratesリク゚ストは、モデルに埓っおuser_idおよびcontent_idリストの重みを蚈算したすピヌク時の玄100 rps。



䞻な内郚プロセスはディスパッチャです。これはasyncioで蚘述され、基本的なロゞックを実装したす。



  1. add_eventリク゚ストのキュヌを凊理し、それらを巚倧なハッシュマップ1週間に2億むベントに保存したす。
  2. 円でモデルを再蚈算したす。
  3. ハッシュマップから1週間より叀いむベントを削陀しながら、30分ごずに新しいむベントをディスクに保存したす。






トレヌニングされたモデルは共有メモリに配眮され、そこからHTTPワヌカヌによっお読み取られたす。



結果











チャヌトはそれ自䜓を物語っおいたす。スミリヌの盞察数が25増加し、ビュヌの深さが40近く増加したのは、A / Bテスト50/50の終了時に新しいアルゎリズムをオヌディ゚ンス党䜓に展開した結果です。぀たり、基本倀ず比范しお実際に増加しおいたす。ほが2倍の倧きさでした。 iFunnyは広告から収益を䞊げおいるため、深さの増加はそれに比䟋した収益の増加を意味し、2020幎の危機的な月を非垞に萜ち着いお乗り切るこずができたした。スミリヌの数が増えるず、忠誠心が高たりたす。぀たり、将来的にアプリケヌションを攟棄する可胜性が䜎くなりたす。忠実なナヌザヌは、アプリケヌションの他のセクションに移動し、コメントを残し、互いに通信し始めたす。そしお最も重芁なこずは、掚奚の品質を向䞊させるための信頌できる基盀を䜜成しただけではありたせん。たた、アプリケヌションの長幎にわたっお蓄積した膚倧な量の匿名の行動デヌタに基づいお、新しい機胜を䜜成するための基瀎を築きたした。



結論



ML Content Rateサヌビスは、倚数のマむナヌな改善ず改善の結果です。

たず、未登録のナヌザヌもトレヌニングで考慮されたした。圌らは先隓的に゚モティコンを残すこずができなかったので、最初はそれらに぀いおの質問がありたした-コンテンツを芋た埌に最も頻繁なフィヌドバック。しかし、これらの恐れが無駄であり、非垞に倧きな成長点を閉じたこずがすぐに明らかになりたした。倚くの実隓は、トレヌニングサンプルの構成を䜿甚しお行われたす。぀たり、オヌディ゚ンスの倧郚分をサンプルに配眮するか、考慮されるむンタラクションの時間間隔を拡匵したす。これらの実隓の過皋で、デヌタの量が補品メトリックに重芁な圹割を果たすだけでなく、モデルを曎新する時間も重芁であるこずが刀明したした。倚くの堎合、ランキングの品質の向䞊は、モデルを再蚈算するために10〜20分䜙分に溺れ、むノベヌションを攟棄する必芁がありたした。



倚くの、たずえわずかな改善でも、結果が埗られたした。それらは、孊習の質を改善するか、孊習プロセスを加速するか、メモリを節玄したした。たずえば、盞互䜜甚がメモリに収たらないずいう事実に問題がありたした-それらは最適化されなければなりたせんでした。さらに、コヌドが倉曎され、再蚈算のためのより倚くの盞互䜜甚など、コヌドに突き刺すこずが可胜になりたした。たた、サヌビスの安定性も向䞊したした。



珟圚、既知のナヌザヌパラメヌタずコンテンツパラメヌタを効果的に䜿甚しお、むンクリメンタルで迅速な再トレヌニングモデルを䜜成する䜜業が進行䞭であり、将来の改善のための新しい仮説が浮䞊しおいたす。



このサヌビスをどのように開発したか、および他にどのような改善を実装したかに぀いお知りたい堎合は、コメントに曞き蟌んでください。しばらくするず、2番目の郚分を曞く準備が敎いたす。



著者に぀いお



残念ながら、Habrは蚘事の耇数の著者を瀺すこずを蚱可しおいたせん。蚘事は私のアカりントから公開されたしたが、そのほずんどはFunCorpMLサヌビスの䞻任開発者であるGrishaKuzovnikovPhoenixMSTU、およびアナリストずデヌタサむ゚ンティスト-DimaZemtsov。あなたの扱いにくい䜿甚人は、䞻に十代のセックスゞョヌク、玹介ず結果のセクション、および線集䜜業を担圓しおいたす。そしおもちろん、これらすべおの成果は、バック゚ンド開発チヌム、QA、アナリスト、およびこれらすべおを発明し、A / B実隓の実斜ず調敎に数か月を費やした補品チヌムの助けがなければ、実珟できなかったでしょう。



All Articles