Kako pokupiti 13 djevojaka na sat pomoću strojnog učenja i Tindera

*Čisto zbog učenja strojnog učenja, naravno. Pod pomalo nezadovoljnim pogledom voljene supruge.

Vjerojatno ne postoji tako jednostavna aplikacija na razini spinalnih refleksa kao što je Tinder. Da biste ga koristili, potreban vam je samo jedan prst za prevlačenje i nekoliko neurona za odabir djevojaka ili muškaraca koji vam se najviše sviđaju. Idealna implementacija grube sile u odabiru para.

Odlučio sam da bi ovo bio dobar način da malo osjetim strojno učenje na novoj grafičkoj kartici. Preostaje samo objasniti ženi da mi ne treba nova deblja žena i da samo treniram neuronske mreže.

Kako pokupiti 13 djevojaka na sat pomoću strojnog učenja i Tindera

Koji je problem s mrežama za upoznavanje?

Postojao je takav izvor - Ashley Madison. Specifičan, sa sloganom “Život je kratak. Imati aferu." Glavna publika su oženjeni muškarci koji traže aferu sa strane. Monetizacija je također zabavna - uz standardno "potrošite bodove na lajkanje i pisanje", tražili su 19 dolara za brisanje korisničkog računa bez traga.

2015. stranica je prirodno procurila i 60 GB osobnih podataka procurilo je u javnu domenu. Osim brojnih uništenih obitelji, ovo curenje je analitičarima dalo i mnogo zanimljivih informacija. Uvijek sam sumnjala da na stranicama za upoznavanje ima puno više muškaraca, ali u ovom slučaju ispalo je prilično zanimljivo. Novinarka Annalee Newitz analiziranje procurjelih podataka otkrili da je od 5 milijuna korisnika samo 12 000 bilo slično računima pravih djevojaka i redovito su se koristili. Ostali su bili samo botovi koji su razgovarali s muškim posjetiteljima.

Takva prevaga prema muškim računima tipična je ne samo za ovaj resurs, već i za većinu drugih stranica za upoznavanje. Siguran sam da su se mnogi susreli s ovom nesumnjivo nepravednom situacijom, kada morate pažljivo planirati poznanstvo, ali djevojka se samo treba registrirati. Ostavimo kvalitetu ove gomile obožavateljica po strani, ali nepobitna je činjenica da je odnos ponude i potražnje očito pomaknut u korist djevojaka.

Značajka Tinder

Kako pokupiti 13 djevojaka na sat pomoću strojnog učenja i Tindera
Idealan bruteforcer u rodnim odnosima

Glavna značajka ove platforme je niska cijena po poznanstvu. Dovoljna su slučajna dva poteza i već komunicirate s potencijalno zanimljivom osobom. Problem je što ista rodna neravnoteža dovodi do toga da će većina djevojaka imati desetke utakmica dnevno. To znači da najvjerojatnije neće imati vremena obratiti pozornost na vas među ostalim kandidatima.

Sasvim je jasno da platforma podrazumijeva malo mogućnosti za procjenu dubokog unutarnjeg svijeta osobe iz sekunde i pol pogleda na fotografiju u kupaćem kostimu ili vožnju modernog zatamnjenog automobila. Stoga, ako na svojim fotografijama ne izgledate jednostavno božanstveno, ne preostaje vam ništa drugo nego povećati svoje šanse usvajanjem r-strategija kod nekih vrsta. Jednostavno rečeno, primijenit ćemo grubu silu i uzeti volumen kako bismo povećali svoje šanse za uspjeh uzgoja. Budući da vas ponekad treba omesti hrana i spavanje, a brisanje je ograničeno, vjerojatno ćete više voljeti da automatizirani odabir djevojaka ili muškaraca koji najbolje odgovaraju vašem ukusu. Niske crvenokose ili visoke brinete - na vama je.

Prikupljanje podataka

Prije svega, za normalnu točnost treba vam puno podataka. Svatko tko se susreo sa strojnim učenjem zna koliko teško može biti proizvesti pravilno prikupljen i označen skup podataka. Teoretski, bilo koji sličan resurs bit će prikladan kao izvor podataka, bilo da se radi o Instagramu ili drugim društvenim mrežama. Ali najbolje je trenirati na onim uzorcima na kojima će mreža raditi u budućnosti.

Uzmimo spremište kao osnovu Tinder automatizacija. Tinderove fotografije su uvijek javno dostupne, ali je funkcija "like" već ograničena. Stoga je potrebno izvući sva živa bića unutar radijusa i pažljivo ih označiti. Prvo morate upotrijebiti prilično jednostavnu skriptu:

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)

Omogućit će vam označavanje skupa podataka što je brže moguće sa samo dva gumba. Ključna zamka leži u činjenici da je biblioteka werkzeug pokvarila kompatibilnost sa prethodnim verzijama i morat će se morati vratiti na stariju verziju. Inače izbacuje ovu pogrešku.

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'

Stoga u requirements.txt trebate napisati Werkzeug==0.16.1. Tada će poletjeti.
Drugi problem je nabaviti upravo ovaj token. Standardna metoda iz repozitorija mi nije radila, ali sam je uspio nabaviti iz konzole za razvojne programere. Da biste to učinili, idite na link i izdvojiti odgovor na POST zahtjev u www.facebook.com/v2.6/dialog/oauth/confirm?dpr=1. Unutra tražimo 'access_token'. Iz nekog razloga nije uspjelo prvi put, ali onda sam ga pronašao i upisao u skriptu.

Zahtjevi za skup podataka

Postoji nekoliko ključnih zahtjeva za skupove podataka strojnog učenja:

  1. Adekvatnost
  2. Ujednačenost
  3. raznovrsnost

Dovoljnost u ovom slučaju zahtijeva najmanje 10000 fotografija za izradu adekvatnog modela. Da, to je puno. To je zapravo razlog zašto usluge poput Amazon Mechanical Turk, gdje uz naknadu možete delegirati označavanje svog skupa podataka drugim osobama. S druge strane, želite li da se vašem botu doista sviđaju divne Azijatke mjesečevih lica ili jednako lijepe djevojke indijskih korijena? Ipak, model bi trebao odražavati vaš ukus.

S raznolikošću nema posebnih problema, sve su fotografije prikazane iz različitih kutova i svjetla. U naočalama, haljinama, kupaćim i skijaškim kostimima. Problem može nastati s ujednačenošću skupa podataka. U idealnom slučaju, kada označavamo naš uzorak, on bi se trebao sastojati od približno jednakih dijelova. Ako završite s "iskrivljenim" skupom podataka, morat ćete ga razrijediti fotografijama iz drugih izvora. Morat ćete dodati još atraktivnih, ili obrnuto, odredit ćete ih na temelju rezultata označavanja. Imam nešto oko 60% lijepo. Ili nisam previše izbirljiv, ili jednostavno imam sreće i ima puno lijepih djevojaka u blizini.

Također ne odbacujem hipotezu da među njima ima mnogo botova. Treniramo bota koji će se svidjeti ostalim botovima. Ima neke ironije u ovome.

Obrada podataka

Imamo hrpu označenih fotografija, ali su vrlo izmiješane. Danju, noću, s leđa i druge. Sa žaljenjem razumijem da poučavanje iz fotografija iz obrnutog kuta neće biti posebno učinkovito, jer će uzorak biti vrlo neujednačen. Stoga bi najbolja opcija bila koristiti lica kao referentni znak "ljupkosti". Ipak, za nas, kao i za druge primate, ovo je ključni parametar.

Stoga, koristimo se Haarove kaskade. Ovo je izvrstan algoritam koji vam omogućuje pronalaženje lica na slikama s niskim postotkom lažno pozitivnih pogrešaka.

Kako pokupiti 13 djevojaka na sat pomoću strojnog učenja i Tindera
To je detaljnije opisano u priručniku OpenCV

U sljedećoj fazi, nakon što su u uzorku samo lica, ima smisla ukloniti boju. Zapravo, teško da ćete morati birati između Pandorine prekrasne plave stanovnice ili ljepotice zelene kože.

Kako pokupiti 13 djevojaka na sat pomoću strojnog učenja i Tindera
Источник

Kod Hue ljudi, boja kože ne daje značajan doprinos ocjenama privlačnosti.
Stoga je vrijedno pojednostaviti rad neuronske mreže i ostaviti samo sive tonove.

Izgradnja modela

Želim odmah reći da bez dobre video kartice i CUDA-e najvjerojatnije jednostavno nećete dobiti obučeni model u odgovarajuće vrijeme. Stoga, odmah ciljajte na izračune u specijaliziranim oblacima ili pomoću python-CUDA.

Uzeo sam osnovni troslojni primjer od autora repozitorija i, iznenađujuće, pokazao je točnost od oko 72%, što je prilično dobar rezultat.

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'])

Ako postoji dobar uzorak, on bi mogao biti dovoljan za dobivanje funkcionalnog modela.

Pokrenimo bot

Kako pokupiti 13 djevojaka na sat pomoću strojnog učenja i Tindera

Hvala autoru repozitorija za gotovu opciju za brzo testiranje ideje. Zapravo, radi prilično dobro u osnovnoj verziji i u načelu se može pokrenuti na našem gotovi iznajmljeni server. Neće još biti moguće trenirati; trenutno ne nudimo virtualne strojeve s CUDA podrškom za izračune, ali možete pokrenuti nešto 24/7 bez ikakvih problema. Bot je prilično lagan, pa bi bilo isplativije uzeti tarifu koja plaća za korištene resurse.

Nalazi

Kako pokupiti 13 djevojaka na sat pomoću strojnog učenja i Tindera
Pretpostavljam da sam jako sladak. A ja imam bogat unutarnji svijet. Dobio sam oko 13 poklapanja unutar sat vremena. Štoviše, nekoliko su puta djevojke prve pisale.
Kao rezultat toga, završili smo s vrlo lijepim dijalozima, gdje sam rekao da sam došao samo da se igram sa strojnim učenjem i označavanjem podataka. Jedna od djevojaka bila je izuzetno zainteresirana, budući da je i sama programer. Postoji snažan osjećaj da će ona na kraju pročitati ovaj post na Habréu. Stvarno se nadam da će Oksana zadržati moju anonimnost. 🙂
*maše šapom i pozdravlja

Malo o etičkoj strani problema

Da budem iskren, ne sviđa mi se cijela ideja o robotizaciji odnosa između muškaraca i djevojaka. Ima nešto vrlo ispravno u tome da svoju jaknu prebacite preko ramena hladnog stranca koji stoji sam. Ili priđite zgodnoj djevojci u ljetnom kafiću i zajedno popijte kavu. Već izađite iza monitora.

Ljeto je posvuda. Vrijeme je za upoznavanje.

Kako pokupiti 13 djevojaka na sat pomoću strojnog učenja i Tindera

Kako pokupiti 13 djevojaka na sat pomoću strojnog učenja i Tindera

Izvor: www.habr.com

Dodajte komentar