Hvordan plukke opp 13 jenter i timen ved hjelp av maskinlæring og Tinder

*Rent for å lære Machine Learning, selvfølgelig. Under det litt misfornøyde blikket til sin elskede kone.

Det er sannsynligvis ingen applikasjon som er så enkel på nivået av spinalreflekser som Tinder. For å bruke den trenger du bare én finger for å sveipe og noen få nevroner for å velge de jentene eller mennene du liker best. En ideell implementering av brute force i parvalg.

Jeg bestemte meg for at dette ville være en god måte å få litt følelse for maskinlæring på et nytt grafikkort. Alt som gjenstår er å forklare kona mi at jeg ikke trenger en ny fetere kvinne, og jeg trener bare nevrale nettverk.

Hvordan plukke opp 13 jenter i timen ved hjelp av maskinlæring og Tinder

Hva er problemet med datingnettverk?

Det var en slik ressurs - Ashley Madison. Spesifikt, med slagordet «Livet er kort. Ha en affære." Hovedpublikummet er gifte menn som leter etter en affære ved siden av. Inntektsgenerering er også morsomt - i tillegg til standard "bruk poeng for å like og skrive," ba de om $19 for å slette en brukers konto uten spor.

I 2015 lekket nettstedet naturlig og 60 GB med personlige data lekket inn i det offentlige domene. I tillegg til mange ødelagte familier ga denne lekkasjen mye interessant informasjon til analytikere. Jeg har alltid mistenkt at det var mange flere menn på datingsider, men i dette tilfellet viste det seg å være ganske interessant. Journalist Annalee Newitz analysere lekkede data fant ut at av 5 millioner brukere var det bare 12 000 som lignet ekte jentekontoer og ble brukt regelmessig. Resten var bare roboter som chattet med mannlige besøkende.

En slik overvekt overfor mannlige kontoer er typisk ikke bare for denne ressursen, men også for de fleste andre datingsider. Jeg er sikker på at mange har støtt på denne utvilsomt urettferdige situasjonen, når du nøye må planlegge et bekjentskap, men jenta trenger bare å registrere seg. La oss legge kvaliteten til denne mengden av fans til side, men faktum er ubestridelig at balansen mellom tilbud og etterspørsel tydelig er endret til fordel for jentene.

Tinder-funksjon

Hvordan plukke opp 13 jenter i timen ved hjelp av maskinlæring og Tinder
Den ideelle brute forceren i kjønnsrelasjoner

Hovedtrekket til denne plattformen er den lave kostnaden per bekjentskap. Et sammentreff av to sveip er nok, og du kommuniserer allerede med en potensielt interessant person. Problemet er at den samme kjønnsubalansen fører til at de fleste jenter vil ha dusinvis av kamper per dag. Dette betyr at de mest sannsynlig ikke har tid til å ta hensyn til deg blant andre kandidater.

Det er helt klart at plattformen innebærer liten mulighet til å vurdere den dype indre verdenen til en person fra et halvannet sekunds blikk på et bilde i en badedrakt eller kjøre en moteriktig tonet bil. Derfor, hvis du ikke ser bare guddommelig ut på bildene dine, har du ikke noe annet valg enn å øke sjansene dine ved å adoptere r-strategi hos noen arter. Enkelt sagt vil vi brute force og ta i volum for å øke sjansene våre for avlsuksess. Siden du noen ganger trenger å bli distrahert av mat og søvn, og sveiping er begrenset, vil du sannsynligvis foretrekke at automatisering velger jentene eller mennene som passer best for din smak. Korte rødhårede eller høye brunetter - det er opp til deg.

Samle data

Først av alt trenger du mye data for normal nøyaktighet. Alle som har vært borti maskinlæring vet hvor vanskelig det kan være å produsere et korrekt innsamlet og merket datasett. Teoretisk sett vil enhver lignende ressurs være egnet som datakilde, enten det er Instagram eller andre sosiale nettverk. Men det er best å trene på de prøvene som nettverket skal jobbe med i fremtiden.

La oss ta depotet som grunnlag Tinder automatisering. Tinders bilder er alltid offentlig tilgjengelig, men «liker»-funksjonen er allerede begrenset. Derfor er det nødvendig å trekke ut alle levende ting innenfor radiusen og merke dem nøye. Først må du bruke et ganske enkelt 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)

Det vil tillate deg å merke opp datasettet så raskt som mulig med bare to knapper. Den viktigste fallgruven ligger i det faktum at werkzeug-biblioteket har brutt bakoverkompatibilitet og må tvinges til å nedgradere det. Ellers gir den denne feilen.

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'

Derfor, i requirements.txt må du skrive Werkzeug==0.16.1. Da vil det ta av.
Det andre problemet er å få dette tokenet. Standardmetoden fra depotet fungerte ikke for meg, men jeg klarte å få den fra utviklerkonsollen. For å gjøre dette, gå til link og trekke ut svaret på POST-forespørselen i www.facebook.com/v2.6/dialog/oauth/confirm?dpr=1. Inne ser vi etter 'access_token'. Av en eller annen grunn fungerte det ikke første gang, men så fant jeg det og hardkodet det inn i manuset.

Datasettkrav

Det er flere nøkkelkrav for datasett for maskinlæring:

  1. Tilstrekkelighet
  2. Ensartethet
  3. mangfold

Tilstrekkelighet i dette tilfellet krever minst 10000 XNUMX fotografier for å bygge en tilstrekkelig modell. Ja, det er mye. Dette er faktisk grunnen til at tjenester som Amazon Mekanisk Turk, hvor du mot en avgift kan delegere markeringen av datasettet ditt til andre personer. På den annen side, vil du virkelig at boten din skal like fantastiske asiatiske jenter med måneansikt eller like vakre jenter med indiske røtter? Likevel skal modellen gjenspeile din smak.

Det er ingen spesielle problemer med variasjon; alle fotografier presenteres fra ulike vinkler og lyssetting. I briller, kjoler, badedrakter og skidresser. Det kan oppstå et problem med ensartetheten til datasettet. Ideelt sett, når vi merker prøven vår, bør den bestå av omtrent like deler. Hvis du ender opp med et "skjevt" datasett, må du fortynne det med fotografier fra andre kilder. Du må legge til mer attraktive, eller omvendt, du vil bestemme dem basert på oppslagsresultatet. Jeg fikk noe rundt 60% pent. Enten er jeg ikke for kresen, eller så er jeg bare heldig og det er mange pene jenter rundt.

Jeg avviser heller ikke hypotesen om at det er mange roboter blant dem. Vi trener en bot som vil like andre roboter. Det er en viss ironi i dette.

Databehandling

Vi har en haug med taggede bilder, men de er veldig blandede. Dagtid, natt, bakfra og andre. Med beklagelse forstår jeg at undervisning fra fotografier fra en omvendt vinkel ikke vil være spesielt effektiv, siden prøven vil være veldig ujevn. Derfor vil det beste alternativet være å bruke ansikter som et referansetegn på "søthet." Likevel, for oss, som for andre primater, er dette en nøkkelparameter.

Derfor, la oss bruke Haar kaskader. Dette er en utmerket algoritme som lar deg finne ansikter i bilder med en lav prosentandel av falske positive feil.

Hvordan plukke opp 13 jenter i timen ved hjelp av maskinlæring og Tinder
Dette er beskrevet mer detaljert i manualen OpenCV

På neste trinn, etter at bare ansikter er i prøven, er det fornuftig å fjerne farge. Faktisk trenger du neppe å velge mellom Pandoras vakre blå denizen eller den grønnskinnede skjønnheten.

Hvordan plukke opp 13 jenter i timen ved hjelp av maskinlæring og Tinder
Kilde

Hos Hue-mennesker gir ikke hudfarge et vesentlig bidrag til vurderinger av attraktivitet.
Derfor er det verdt å forenkle arbeidet med det nevrale nettverket og bare la gråtoner være igjen.

Modellbygg

Jeg vil si med en gang at uten et godt skjermkort og CUDA, vil du mest sannsynlig rett og slett ikke få en trent modell i tilstrekkelig tid. Mål derfor umiddelbart etter beregninger i spesialiserte skyer eller bruk python-CUDA.

Jeg tok et grunnleggende trelagseksempel fra forfatteren av depotet, og overraskende nok viste det en nøyaktighet på rundt 72 %, noe som er et ganske godt resultat.

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

Hvis det er et godt utvalg, kan det godt være tilstrekkelig for å få en brukbar modell.

La oss starte boten

Hvordan plukke opp 13 jenter i timen ved hjelp av maskinlæring og Tinder

Takk til forfatteren av depotet for et ferdig alternativ for raskt å teste ideen. Den fungerer faktisk ganske bra i basisversjonen og kan i prinsippet lanseres på vår ferdig leid server. Det vil ikke være mulig å trene ennå; for øyeblikket gir vi ikke virtuelle maskiner med CUDA-støtte for beregninger, men du kan kjøre noe 24/7 uten problemer. Boten er ganske lett, så det ville vært mer lønnsomt å ta en tariff som betaler for ressursene som brukes.

Funn

Hvordan plukke opp 13 jenter i timen ved hjelp av maskinlæring og Tinder
Jeg er vel veldig søt. Og jeg har en rik indre verden. Jeg fikk noe sånt som 13 kamper i løpet av en time. Dessuten skrev jentene flere ganger først.
Det resulterte i at vi endte opp med veldig fine dialoger, der jeg sa at jeg kom inn utelukkende for å leke med maskinlæring og datamerking. En av jentene var ekstremt interessert, siden hun selv er utvikler. Det er en sterk følelse av at hun etter hvert vil lese dette innlegget på Habré. Jeg håper virkelig at Oksana vil opprettholde min anonymitet. 🙂
*vinker med labben og sier hei

Litt om den etiske siden av saken

For å være ærlig liker jeg ikke hele ideen om å robotisere forhold mellom menn og jenter. Det er noe helt riktig med å kaste jakken over skuldrene til en kald fremmed som står alene. Eller gå til en pen jente på en sommerkafé og drikk kaffe sammen. Kom deg ut bak skjermene allerede.

Sommeren er rundt. Det er på tide å bli kjent.

Hvordan plukke opp 13 jenter i timen ved hjelp av maskinlæring og Tinder

Hvordan plukke opp 13 jenter i timen ved hjelp av maskinlæring og Tinder

Kilde: www.habr.com

Legg til en kommentar