Ako vyzdvihnúť 13 dievčat za hodinu pomocou strojového učenia a Tinder

*Samozrejme, čisto z dôvodu učenia sa strojového učenia. Pod mierne nespokojným pohľadom milovanej manželky.

Pravdepodobne neexistuje taká jednoduchá aplikácia na úroveň miechových reflexov ako Tinder. Na to, aby ste ho mohli používať, vám stačí jeden prst na potiahnutie a niekoľko neurónov na výber dievčat alebo mužov, ktorí sa vám najviac páčia. Ideálna implementácia hrubej sily pri výbere páru.

Rozhodol som sa, že by to bol dobrý spôsob, ako si trochu priblížiť strojové učenie na novej grafickej karte. Zostáva len vysvetliť manželke, že nepotrebujem novú tučnejšiu ženu a len trénujem neurónové siete.

Ako vyzdvihnúť 13 dievčat za hodinu pomocou strojového učenia a Tinder

Aký je problém zoznamovacích sietí?

Existoval taký zdroj - Ashley Madison. Konkrétne so sloganom „Život je krátky. Mať aféru." Hlavným publikom sú ženatí muži, ktorí hľadajú pomer na boku. Speňaženie je tiež zábavné - okrem štandardného „utrácania bodov za lajkovanie a písanie“ požiadali o 19 dolárov za odstránenie účtu používateľa bez stopy.

V roku 2015 stránka prirodzene unikla a 60 GB osobných údajov uniklo do verejnej sféry. Okrem mnohých zničených rodín tento únik poskytol analytikom množstvo zaujímavých informácií. Vždy som tušila, že na zoznamkách je oveľa viac mužov, no v tomto prípade to dopadlo celkom zaujímavo. Novinárka Annalee Newitz analýzu uniknutých údajov zistili, že z 5 miliónov používateľov bolo iba 12 000 podobných skutočným dievčenským účtom a boli používané pravidelne. Zvyšok boli len roboti, ktorí četovali s mužskými návštevníkmi.

Takáto prevaha mužských účtov je typická nielen pre tento zdroj, ale aj pre väčšinu iných zoznamovacích lokalít. Som si istý, že mnohí sa stretli s touto nepochybne neférovou situáciou, keď si musíte dôkladne naplánovať zoznámenie, ale dievča sa musí len zaregistrovať. Kvalitu tohto davu fanúšikov nechajme bokom, no fakt je nepopierateľný, že rovnováha ponuky a dopytu sa jednoznačne posúva v prospech dievčat.

Funkcia Tinder

Ako vyzdvihnúť 13 dievčat za hodinu pomocou strojového učenia a Tinder
Ideálna hrubá sila v rodových vzťahoch

Hlavnou črtou tejto platformy sú nízke náklady na zoznámenie. Stačí náhoda dvoch švihnutí a už komunikujete s potenciálne zaujímavou osobou. Problém je, že rovnaká rodová nerovnováha vedie k tomu, že väčšina dievčat bude mať desiatky zápasov denne. To znamená, že s najväčšou pravdepodobnosťou nebudú mať čas venovať sa vám spomedzi ostatných kandidátov.

Je celkom jasné, že platforma implikuje malú príležitosť posúdiť hlboký vnútorný svet človeka z jeden a pol sekundového pohľadu na fotografiu v plavkách alebo pri jazde v módnom tónovanom aute. Ak teda na fotografiách nevyzeráte jednoducho božsky, nezostáva vám nič iné, ako zvýšiť svoje šance adopciou r-stratégiu u niektorých druhov. Jednoducho povedané, budeme hrubou silou a naberať objem, aby sme zvýšili naše šance na úspech v chove. Keďže vás niekedy potrebuje rozptyľovať jedlo a spánok a sťahovanie je obmedzené, pravdepodobne uprednostníte automatizáciu výberu dievčat alebo mužov, ktorí najlepšie vyhovujú vášmu vkusu. Nízke ryšavky alebo vysoké brunetky – je to na vás.

Zhromažďovanie údajov

V prvom rade potrebujete veľa údajov na normálnu presnosť. Každý, kto sa stretol so strojovým učením, vie, aké ťažké môže byť vytvoriť správne zozbieraný a označený súbor údajov. Teoreticky bude ako zdroj údajov vhodný akýkoľvek podobný zdroj, či už je to Instagram alebo iné sociálne siete. Najlepšie je však trénovať na tých vzorkách, na ktorých bude sieť v budúcnosti fungovať.

Zoberme si úložisko ako základ Automatizácia Tinder. Fotografie Tinderu sú vždy verejne dostupné, no funkcia „páči sa mi“ je už obmedzená. Preto je potrebné extrahovať všetky živé veci v okruhu a starostlivo ich označiť. Najprv musíte použiť pomerne jednoduchý skript:

from skimage.io import imread, imsave, imshow, show
import matplotlib.pyplot as plt
import pynder
from helpers import get_access_token, get_login_credentials
from io_helper import save_image

email, password, FBID = get_login_credentials()
FBTOKEN = get_access_token(email, password)
session = pynder.Session(facebook_token=FBTOKEN)

while True:
    users = session.nearby_users()
    for user in users:
        photos = user.get_photos()
        print("Fetched user photos..")
        for photo in photos:
            print(photo)
            image = imread(photo)
            imshow(image)
            show()

            input_string = "Write 1 to like. Write 2 to dislike."
            ans = str(input(input_string)).lower()

            if ans == "1":
                save_image(image, photo, True)
            else:
                save_image(image, photo, False)

Umožní vám to čo najrýchlejšie označiť súbor údajov iba dvoma tlačidlami. Kľúčové úskalie spočíva v tom, že knižnica werkzeug porušila spätnú kompatibilitu a bude musieť byť nútená prejsť na nižšiu verziu. V opačnom prípade vyhodí túto chybu.

Traceback (most recent call last):
  File "img_scrape.py", line 4, in <module>
    from helpers import get_access_token, get_login_credentials
  File "/home/someone/tmp/TinderAutomation/helpers.py", line 1, in <module>
    import robobrowser
  File "/home/someone/tmp/TinderAutomation/venv/lib/python3.6/site-packages/robobrowser/__init__.py", line 3, in <module>
    from .browser import RoboBrowser
  File "/home/someone/tmp/TinderAutomation/venv/lib/python3.6/site-packages/robobrowser/browser.py", line 8, in <module>
    from werkzeug import cached_property
ImportError: cannot import name 'cached_property'

Preto je potrebné v súbore requirements.txt napísať Werkzeug==0.16.1. Potom to vzlietne.
Druhým problémom je získať práve tento token. Štandardná metóda z úložiska mi nefungovala, ale podarilo sa mi ju získať z konzoly pre vývojárov. Ak to chcete urobiť, prejdite na stránku odkaz a extrahujte odpoveď na požiadavku POST www.facebook.com/v2.6/dialog/oauth/confirm?dpr=1. Vo vnútri hľadáme 'access_token'. Z nejakého dôvodu to na prvýkrát nefungovalo, ale potom som to našiel a napevno zakódoval do skriptu.

Požiadavky na súbor údajov

Existuje niekoľko kľúčových požiadaviek na množiny údajov strojového učenia:

  1. Primeranosť
  2. Jednotnosť
  3. rozmanitosť

Dostatočnosť v tomto prípade vyžaduje aspoň 10000 XNUMX fotografií na zostavenie adekvátneho modelu. Áno, to je veľa. To je vlastne dôvod, prečo sa služby páčia Amazon Mechanical Turk, kde môžete za poplatok delegovať označenie svojho datasetu na iných ľudí. Na druhej strane, naozaj chcete, aby sa vášmu robotovi páčili nádherné ázijské dievčatá s tvárou mesiaca alebo rovnako krásne dievčatá s indickými koreňmi? Napriek tomu by mal model odrážať váš vkus.

S rozmanitosťou nie sú žiadne zvláštne problémy, všetky fotografie sú prezentované z rôznych uhlov a osvetlenia. V okuliaroch, šatách, plavkách a lyžiarskych súpravách. Problém môže nastať s jednotnosťou súboru údajov. V ideálnom prípade, keď našu vzorku označíme, mala by pozostávať z približne rovnakých častí. Ak skončíte so „skresleným“ súborom údajov, budete ho musieť zriediť fotografiami z iných zdrojov. Budete musieť pridať atraktívnejšie, alebo naopak, určíte ich na základe výsledku označenia. Mám niečo okolo 60% pekné. Buď nie som príliš vyberavý, alebo mám jednoducho šťastie a okolo je veľa pekných dievčat.

Neznevažujem ani hypotézu, že medzi nimi je veľa robotov. Trénujeme robota, ktorý bude mať rád iných robotov. Je v tom istá irónia.

Spracovanie dát

Máme veľa označených fotografií, ale sú veľmi zmiešané. Denné, nočné, zozadu a iné. S poľutovaním chápem, že vyučovanie z fotografií z opačného uhla nebude obzvlášť efektívne, pretože vzorka bude veľmi nerovnomerná. Najlepšou možnosťou by preto bolo použiť tváre ako referenčný znak „roztomilosti“. Napriek tomu je to pre nás, ako aj pre iné primáty, kľúčový parameter.

Preto využívajme Haarove kaskády. Ide o vynikajúci algoritmus, ktorý vám umožňuje nájsť tváre na obrázkoch s nízkym percentom falošne pozitívnych chýb.

Ako vyzdvihnúť 13 dievčat za hodinu pomocou strojového učenia a Tinder
Toto je podrobnejšie popísané v návode OpenCV

V ďalšej fáze, keď sú vo vzorke iba tváre, má zmysel odstrániť farbu. V skutočnosti si sotva budete musieť vybrať medzi krásnym modrým obyvateľom Pandory alebo kráskou so zelenou pokožkou.

Ako vyzdvihnúť 13 dievčat za hodinu pomocou strojového učenia a Tinder
Zdroj

U ľudí Hue farba pleti výrazne neprispieva k hodnoteniam atraktivity.
Preto sa oplatí zjednodušiť prácu neurónovej siete a ponechať len odtiene šedej.

Stavba modelu

Chcem hneď povedať, že bez dobrej grafickej karty a CUDA s najväčšou pravdepodobnosťou jednoducho nedostanete trénovaný model v primeranom čase. Preto sa okamžite zamerajte na výpočty v špecializovaných cloudoch alebo pomocou python-CUDA.

Vzal som si základný trojvrstvový príklad od autora úložiska a prekvapivo ukázal presnosť okolo 72 %, čo je celkom dobrý výsledok.

model = Sequential()
model.add(Convolution2D(32, 3, 3, activation='relu', input_shape=(img_size, img_size, 3)))
model.add(MaxPooling2D(pool_size=(2,2)))

model.add(Convolution2D(32, 3, 3, activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))

model.add(Convolution2D(64, 3, 3, activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
          
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(2, activation='softmax'))

adam = optimizers.SGD(lr=1e-4, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy',
              optimizer= adam,
              metrics=['accuracy'])

Ak existuje dobrá vzorka, potom môže stačiť na získanie funkčného modelu.

Spustíme robota

Ako vyzdvihnúť 13 dievčat za hodinu pomocou strojového učenia a Tinder

Ďakujem autorovi úložiska za hotovú možnosť rýchleho otestovania nápadu. V skutočnosti to v základnej verzii funguje celkom dobre a v zásade sa dá spustiť na našej hotový prenajatý server. Zatiaľ nebude možné trénovať, momentálne neposkytujeme virtuálne stroje s podporou CUDA pre výpočty, ale bez problémov môžete niečo spustiť 24/7. Robot je pomerne ľahký, takže by bolo výhodnejšie použiť tarifu, ktorá platí za použité zdroje.

výsledky

Ako vyzdvihnúť 13 dievčat za hodinu pomocou strojového učenia a Tinder
Asi som veľmi milý. A mám bohatý vnútorný svet. Za hodinu som dostal niečo ako 13 zápasov. Dievčatá navyše niekoľkokrát písali ako prvé.
Výsledkom bolo, že sme skončili s veľmi peknými dialógmi, v ktorých som povedal, že som prišiel len preto, aby som sa pohral so strojovým učením a označovaním údajov. Jedno z dievčat mimoriadne zaujalo, keďže sama je vývojárka. Je tu silný pocit, že si tento príspevok na Habrého nakoniec prečíta. Naozaj dúfam, že Oksana zachová moju anonymitu. 🙂
*máva labkou a hovorí ahoj

Trochu o etickej stránke problému

Úprimne povedané, nepáči sa mi celá myšlienka robotizácie vzťahov medzi mužmi a dievčatami. Prehodiť sako cez plece chladnému cudzincovi, ktorý stojí sám, je niečo veľmi správne. Alebo oslovte pekné dievča v letnej kaviarni a vypite spolu kávu. Vypadnite už spoza monitorov.

Leto je všade naokolo. Je čas sa zoznámiť.

Ako vyzdvihnúť 13 dievčat za hodinu pomocou strojového učenia a Tinder

Ako vyzdvihnúť 13 dievčat za hodinu pomocou strojového učenia a Tinder

Zdroj: hab.com

Pridať komentár