Saját Instagram felfedező motor felépítése: lépésről lépésre bemutató

Nem nagyszerű, hogy az Instagram „Felfedezés” szakaszában az érdeklődésének megfelelő tartalom jelenik meg? Amikor megnyitja az alkalmazást, a megjelenített tartalom és ajánlások szinte mindig relevánsak az Ön konkrét kedveltségeire, érdeklődésére, kapcsolataira stb. Bár szórakoztató lehet azt gondolni, hogy mi vagyunk a Instagram világegyetem központja, a valóság az, hogy személyre szabott, releváns a tartalom napi 400 millió ember számára egyedülállóan kurátora is. Ha napi 400 millió aktív felhasználót és 80 millió fényképet tesz közzé, hogyan dönt az Instagram, hogy mit tegyen felfedező oldalára? Vizsgáljuk meg azokat a fő tényezőket, amelyeket az Instagram használ az Instagram ütemtervében szereplő hozzászólások pontszámának meghatározásához, és fedezze fel a részt.

Mielőtt belekezdenénk a szemtelen szembe, az alábbiakban felsorolunk néhány olyan funkciót, amelyet az Instagram használ annak meghatározására, hogy melyik tartalmat szolgálja fel:

  • Időzítés: minél újabb a bejegyzés, annál magasabb a pontszám.
  • Elkötelezettség: a tetszés, megjegyzés és / vagy megtekintés számával határozható meg. Ha a felhasználó gyakrabban vesz részt bizonyos címkékkel, például a snowboardozással, akkor a felhasználó számára több kép jelenik meg a snowboardozásról.
  • Korábbi interakciók: Mennyire volt kapcsolatba lépve ezzel a felhasználóval a múltban. Minél inkább kapcsolatba lép bizonyos felhasználókkal, azt jelzi, mennyire relevánsak a hozzászólásaik.
  • Affinitás: hogyan viszonyulsz ehhez a személyhez. Egy barát barátja, olyan barátja, akivel még nem volt kapcsolatban, vagy valakivel, akit még nem ismersz?

Most használjuk ezeket a funkciókat saját Instagram felfedező motorunk felépítéséhez. Az Instagram adatainak lekérdezéséhez a Pasha Lev által írt nagyon hűvös, mégis nem hivatalos Instagram API-t fogom használni. Mac felhasználók számára az alábbiaknak kell felkészülniük és futtatniuk. Az összes többi könyvtár pip telepíthető, és az összes Python kódot a Jupyter notebookon futtattuk.

1. lépés: A Jupyter notebook és a függőségek beállítása

Felkeléshez futtassa a következőket a terminálon:

Ezután futtassa a jupyter notebookot a terminálon, amely megnyílik az alapértelmezett böngészőben. Azt is javasolnám, hogy folytatás előtt ellenőrizze Instagram-telefonszámát. Ez megakadályozza a váratlan átirányításokat.

Most tovább a jó dolgokhoz. Kezdjük a közösségi hálózat felkutatásával és egy kis grafikon elemzéssel.

Ha minden jól megy, akkor kapjon egy „Bejelentkezés sikert!” válasz.

Most valódi közösségi hálózatot építhetünk fel, ha megtalálunk mindenkit, akit követek, valamint mindenkit, akit követek. A szociális háló elemzéséről és a személyre szabott pagerank-ről rövid betekintést nyújt erről a blogbejegyzésről.

Mielőtt belépnénk a kódba, vessünk egy pillantást a saját profilomra, hogy megnézzük, mit akarunk elemezni.

Mint láthatja, 42 embert követek, akiket közvetlen hálózatomnak tartanak, amely nem túl sok. Ha elkezdjük a 2. fokozat kapcsolatait vizsgálni, akkor ez a szám gyorsan növekszik. Az én esetemben, ha a 2. fokú kapcsolatokat vizsgáljuk, a csomópontok száma meghaladja a 24 000-et. Ennek szép megjelenítését a 2. lépésben láthatjuk.

Hűvös, tegyük be ezt egy szépen formázott Pandas Dataframe-be.

2. lépés: Hálózati megjelenítés (opcionális)

Noha a hálózat feltérképezése nem feltétlenül szükséges a saját felfedező motorjának felépítéséhez, ez nagyon érdekes, és segíthet a személyes oldalkönyvek megértésében. Az egyik kedvenc grafikus megjelenítési könyvtárat, a Grafikát fogom használni (néha nézd meg őket). Ha azonban nem akar várni egy API-kulcsra (bár ugyanazon a napon kaptam választ), sok más jó könyvtár létezik, mint például a Lightning és a NetworkX.

Ebben a példában az src_id-re, a dst_id-re pedig megjelenítek egy kis adatvédelmet a barátaimnak, bár nagyon szórakoztató a felhasználónevek megjelenítése (ezt az alábbi kód fogja tenni). Az első grafikon csak azokat a széleket jeleníti meg, amelyeket tőlem szereztem be és szűrtem a grafikában a beépített eszközök segítségével.

A második grafikon az egész kiterjesztett hálózatomat mutatja.

Hát nem jó? Már láthat néhány érdekes funkciót, például a néhány külső centridot és azt, hogy miként lépnek kapcsolatba a szociális hálóm többi részével.

3. lépés: A legjobb képek keresése a közösségi hálózatról

Itt az ideje, hogy megragadja a legfrissebb képeket mindenkitől, és értékelje őket, mennyire relevánsak számomra. Mivel körülbelül 24 000 csomópont van, az összes adat letöltése eltarthat egy ideig.

Csináljunk egy gyors próbafutást, amelyen csak a 44 ember vesz részt, akiket azonnal követek, hogy megbizonyosodjunk arról, hogy jó úton járunk-e. A véleményem szerint, amely meghatározhatja az Instagram-hozzászólások relatív pontszámát, meg kell ragadnunk a kedvelések számát, a hozzászólások számát és a fénykép készítésének idejét az általam követett emberek összes legutóbbi fotójára (ebben a példában a közelmúltban egyenértékűnek tartottam a egy héttel, és vágja le az idősebb fotókat). Hasznos lenne megragadni, hogy hányszor „tetszett” annak a felhasználónak a hozzászólásaihoz, és mennyire kapcsolódik hozzá az a személy. Minden, ami számomra a felhasználó "mennyire kapcsolódik", egyszerű összeg. A „csatlakoztatott” darab kiszámításához egy személyre szabott pagerank-et fogunk használni. Miután összegyűjtöttük ezeket az információkat, meghatározhatunk egy olyan fontos mutatót, mint:

Rendben, most, hogy meghatároztuk ezt, nézzük meg, hogyan működik! Elnézést kérek a nagy kódrészlet megjelenése után, de ne aggódj ... a végén van egy kép az új kölyökkutyámról!

Ami nekem ad:

Ez valójában nagyon hasonlít a személyes idővonalamra - jó! Most, hogy tudjuk, hogy valamivel foglalkozunk, foglalkozzunk a felfedezés szakaszával.

4. lépés: A felhasználói bázis kibővítése

Ugyanazt a megközelítést alkalmazhatjuk, mint korábban, kiszámítva a barátok minden barátjának fényképeinek relatív pontszámát. Ehhez az első kiszámolt társadalmi gráffal kezdjük, de amelynek több mint 24 ezer csomópontja van, és túl lusta vagyok, hogy megvárjam az összes adatot. Ehelyett ragaszkodjunk azoknak a barátoknak a fotóihoz, akiknek a hozzászólásait „kedveltem”. Ez a csomópontok számát alig több mint 1500-ra csökkenti, amely az internet sebességétől függően ideális idő a kávészünethez.

Van néhány kisebb módosítás a fenti kódhoz, amelyekre szükség van a kibővített felhasználói bázis kezeléséhez, de a kód nagy része ugyanaz.

Az eredmények sok képet jelenítettek meg a National Geographic és a Red Bull részéről, amelyeket jelenleg nem követek, de most már elkezdhetem!

5. lépés: Érdeklődésen alapuló elemzés

Az érdekeket még nem vették figyelembe. Az Instagram egyik vonzó aspektusa a gazdag #hashtag-készlet, amely a képek leírására szolgál. Nézzük meg, hogy felfedezhetjük érdeklődésem az általam kedvelt fotók hashtagjainak és olyan fotóimnak a felhasználásával, amelyekbe becímkéztem őket. Míg az Instagram valószínűleg kattintási adatokat használ a „hasonló” adatok mellett, nem férünk hozzá kattintásokra, tehát csak a kedvelőkkel fogunk ragaszkodni.

Amely megadja:

Most ragadjuk meg a legnépszerűbb képeket mindegyik címkéhez:

Most, hogy az egyes hashtag-hírcsatornákból a legnépszerűbb kép található, megjeleníthetjük azokat.

Most kombináljuk ezt a két technikát.

6. lépés: Mindent összerakva

Lehet, hogy észrevetted, hogy az összes összegyűjtött képadatot a top_graph_img és a images_top_tags fájlba mentem. Kombináljuk őket meglehetősen naiv technikával, véletlenszerű mintavétellel:

Ez nem túl kopott! Személy szerint nagyon jónak találom ezeket a fényképeket, de határozottan jobb is.

A felfedező motor fejlesztésének módjai:

  • A teljes társadalmi gráf elérésével hasonló elemzést végezhetünk a csomópontok közötti súlyokkal, amelyeket a kedvelések és a megjegyzések száma határoz meg.
  • Kombinálja a kattintási adatokat a „hasonló” adatokkal együtt az implicit visszajelzés és az elkötelezettség mutatói előnyeinek kihasználása érdekében. Ez rendkívül hasznos lehet a clickbait stílushoz hasonló olyan bejegyzés leminősítéséhez, amely nem rendelkezik nagyon sok kedveléssel, és bemutatja a felhasználók érdeklődését, akik nem hajlamosak a „kedvelésre” nagyon gyakran.
  • Számítsa ki a kép tulajdonságait a konvolúciós neurális hálók segítségével. Távolítsa el a végső sűrű rétegeket, majd kiszámolja és megjelenítse a felhasználókhoz hasonló képeket, a felhasználói tulajdonságok alapján. Integrálja a Facebook közösségi hálózatát az emberekkel kapcsolatos képek megjelenítéséhez, amelyekkel kapcsolatban áll.
  • A Matrix Factorization segítségével ellenőrizze, hogy ajánlunk-e tartalmat. A képjellemzőket és hashtagokat is felhasználhatja a hibrid technikákhoz tartozó vektorvektorok létrehozására.
  • Használjon természetes nyelvfeldolgozó (NLP) és fürtözési technikákat hasonló hashtagek (még hangulatjelekkel is rendelkező) megkereséséhez. Ez lehetővé teszi a hashtagek (kerékpár vs kerékpározás) és a hasonlósági mutatók (természet vs hegy) normalizálását.

Ez semmiképpen sem kimerítő lista, tehát ha bármilyen ötlete van, kérlek ossza meg nekem!

A felfedező motorokkal kapcsolatos további információkért nézze meg személyre szabási oldalunkat, vagy ütemezze bemutatóját, hogy többet megtudjon a Stream személyre szabott hírcsatornáiról.

Boldog épület!

Ez a GetStream.io csapatának együttműködése, Horanyi Balazs, a GetStream.io adattudósának vezetésével. Az eredeti blogbejegyzés megtalálható a https://getstream.io/blog/building-instagram-discovery-engine-step-step-tutorial/ oldalon.