Sådan henter du 13 piger i timen ved hjælp af maskinlæring og Tinder

*Rent for at lære Machine Learning, selvfølgelig. Under hans elskede kones lidt utilfredse blik.

Der er sandsynligvis ingen anvendelse så simpel til niveauet af spinale reflekser som Tinder. For at bruge det behøver du kun en finger til at swipe og et par neuroner for at vælge de piger eller mænd, du bedst kan lide. En ideel implementering af brute force i parvalg.

Jeg besluttede, at dette ville være en god måde at få en lille fornemmelse for maskinlæring på et nyt grafikkort. Tilbage er kun at forklare min kone, at jeg ikke har brug for en ny federe kvinde, og jeg træner bare neurale netværk.

Sådan henter du 13 piger i timen ved hjælp af maskinlæring og Tinder

Hvad er problemet med datingnetværk?

Der var sådan en ressource - Ashley Madison. Specifikt, med sloganet "Livet er kort. Hav en affære." Hovedpublikummet er gifte mænd, der leder efter en affære ved siden af. Indtægtsgenerering er også sjovt - ud over standarden "brug point for at like og skrive", bad de om $19 for at slette en brugers konto uden spor.

I 2015 lækket siden naturligt, og 60 GB personlige data lækket til det offentlige domæne. Ud over mange ødelagte familier gav denne læk en masse interessant information til analytikere. Jeg har altid haft mistanke om, at der var mange flere mænd på datingsider, men i dette tilfælde viste det sig at være ret interessant. Journalist Annalee Newitz analysere lækkede data fandt ud af, at kun 5 ud af 12 millioner brugere lignede rigtige pigekonti og blev brugt regelmæssigt. Resten var bare bots, der chattede med mandlige besøgende.

En sådan overvægt over for mandlige konti er typisk ikke kun for denne ressource, men også for de fleste andre datingsider. Jeg er sikker på, at mange er stødt på denne utvivlsomt uretfærdige situation, hvor man nøje skal planlægge et bekendtskab, men pigen skal bare tilmelde sig. Lad os forlade kvaliteten af ​​denne skare af fans til side, men faktum er ubestrideligt, at balancen mellem udbud og efterspørgsel tydeligvis er flyttet til fordel for pigerne.

Tinder-funktion

Sådan henter du 13 piger i timen ved hjælp af maskinlæring og Tinder
Den ideelle brute force i kønsrelationer

Hovedtræk ved denne platform er den lave pris pr. bekendtskab. Et sammenfald af to swipes er nok, og du kommunikerer allerede med en potentielt interessant person. Problemet er, at den samme ubalance mellem kønnene fører til, at de fleste piger vil have snesevis af kampe om dagen. Det betyder, at de højst sandsynligt ikke har tid til at være opmærksomme på dig blandt andre kandidater.

Det er helt klart, at platformen indebærer ringe mulighed for at vurdere en persons dybe indre verden fra et halvandet sekunds blik på et foto i en badedragt eller at køre en fashionabel tonet bil. Derfor, hvis du ikke bare ser guddommelig ud på dine fotografier, har du intet andet valg end at øge dine chancer ved at adoptere r-strategi hos nogle arter. Kort sagt vil vi brute force og tage i volumen for at øge vores chancer for avlssucces. Da du nogle gange har brug for at blive distraheret af mad og søvn, og swipes er begrænsede, vil du sandsynligvis foretrække, at automatisering vælger de piger eller mænd, der passer bedst til din smag. Korte rødhårede eller høje brunetter - det er op til dig.

Indsamling af data

Først og fremmest har du brug for en masse data for normal nøjagtighed. Enhver, der har stødt på maskinlæring, ved, hvor svært det kan være at producere et korrekt indsamlet og mærket datasæt. Teoretisk set vil enhver lignende ressource være egnet som datakilde, det være sig Instagram eller andre sociale netværk. Men det er bedst at træne på de prøver, som netværket vil arbejde på i fremtiden.

Lad os tage depotet som grundlag Tinder automatisering. Tinders billeder er altid offentligt tilgængelige, men "synes godt om"-funktionen er allerede begrænset. Derfor er det nødvendigt at udtrække alle levende ting inden for radius og omhyggeligt markere dem. Først skal du bruge et ret simpelt script:

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 giver dig mulighed for at markere datasættet så hurtigt som muligt med kun to knapper. Den vigtigste faldgrube ligger i, at werkzeug-biblioteket har brudt bagudkompatibiliteten og skal tvinges til at nedgradere det. Ellers giver den denne fejl.

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 skal du i requirements.txt skrive Werkzeug==0.16.1. Så vil det tage fart.
Det andet problem er at få netop dette token. Standardmetoden fra depotet virkede ikke for mig, men det lykkedes mig at få den fra udviklerkonsollen. For at gøre dette, gå til link og udtræk svaret på POST-anmodningen i www.facebook.com/v2.6/dialog/oauth/confirm?dpr=1. Indeni leder vi efter 'access_token'. Af en eller anden grund virkede det ikke første gang, men så fandt jeg det og hårdkodede det ind i scriptet.

Datasæt krav

Der er flere nøglekrav til maskinlæringsdatasæt:

  1. Tilstrækkelighed
  2. Ensartethed
  3. mangfoldighed

Tilstrækkelighed i dette tilfælde kræver mindst 10000 fotografier for at bygge en passende model. Ja, det er meget. Det er faktisk derfor, tjenester som Amazon Mechanical Turk, hvor du mod betaling kan uddelegere markeringen af ​​dit datasæt til andre personer. På den anden side, vil du virkelig have, at din bot kan lide vidunderlige asiatiske piger med måneansigt eller lige så smukke piger med indiske rødder? Alligevel skal modellen afspejle din smag.

Der er ingen særlige problemer med variation; alle fotografier er præsenteret fra forskellige vinkler og belysning. I briller, kjoler, badedragter og skidragter. Der kan opstå et problem med datasættets ensartethed. Ideelt set, når vi mærker vores prøve, bør den bestå af omtrent lige store dele. Hvis du ender med et "skævt" datasæt, bliver du nødt til at fortynde det med fotografier fra andre kilder. Du bliver nødt til at tilføje mere attraktive, eller omvendt bestemmer du dem baseret på opmærkningsresultatet. Jeg fik noget omkring 60% smukt. Enten er jeg ikke for kræsen, eller også er jeg bare heldig, og der er mange smukke piger rundt omkring.

Jeg afviser heller ikke hypotesen om, at der er mange bots blandt dem. Vi træner en bot, der vil kunne lide andre bots. Der er noget ironi i dette.

Databehandling

Vi har en masse taggede billeder, men de er meget blandede. Dagtid, nat, bagfra og andre. Med beklagelse forstår jeg, at undervisning fra fotografier fra en omvendt vinkel ikke vil være særlig effektiv, da prøven vil være meget ujævn. Derfor ville den bedste mulighed være at bruge ansigter som et referencetegn på "nuttelighed". Alligevel, for os, som for andre primater, er dette en nøgleparameter.

Derfor, lad os bruge Haar kaskader. Dette er en fremragende algoritme, der giver dig mulighed for at finde ansigter på billeder med en lav procentdel af falske positive fejl.

Sådan henter du 13 piger i timen ved hjælp af maskinlæring og Tinder
Dette er beskrevet mere detaljeret i manualen OpenCV

På næste trin, efter kun ansigter er i prøven, giver det mening at fjerne farve. Faktisk behøver du næppe vælge mellem Pandoras smukke blå denizen eller den grønhudede skønhed.

Sådan henter du 13 piger i timen ved hjælp af maskinlæring og Tinder
Kilde

Hos Hue-personer yder hudfarve ikke et væsentligt bidrag til vurderinger af attraktivitet.
Derfor er det værd at forenkle arbejdet i det neurale netværk og kun efterlade gråtoner.

Modelbygning

Jeg vil med det samme sige, at uden et godt videokort og CUDA, vil du højst sandsynligt simpelthen ikke få en trænet model i tilstrækkelig tid. Sigt derfor straks efter beregninger i specialiserede skyer eller ved hjælp af python-CUDA.

Jeg tog et grundlæggende tre-lags eksempel fra forfatteren af ​​depotet, og overraskende nok viste det en nøjagtighed på omkring 72%, hvilket 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 der er en god prøve, så kan det godt være tilstrækkeligt at få en brugbar model.

Lad os starte botten

Sådan henter du 13 piger i timen ved hjælp af maskinlæring og Tinder

Tak til forfatteren af ​​depotet for en færdiglavet mulighed for hurtigt at teste ideen. Faktisk fungerer den ret godt i basisversionen og kan i princippet lanceres på vores færdiglavet lejet server. Det vil ikke være muligt at træne endnu; i øjeblikket leverer vi ikke virtuelle maskiner med CUDA-understøttelse til beregninger, men du kan køre noget 24/7 uden problemer. Botten er ret let, så det ville være mere rentabelt at tage en takst, der betaler for de anvendte ressourcer.

Fund

Sådan henter du 13 piger i timen ved hjælp af maskinlæring og Tinder
Jeg er vist meget sød. Og jeg har en rig indre verden. Jeg fik noget i retning af 13 kampe inden for en time. Desuden skrev pigerne flere gange først.
Det resulterede i, at vi endte med meget fine dialoger, hvor jeg sagde, at jeg udelukkende kom ind for at lege med maskinlæring og datamærkning. En af pigerne var meget interesseret, da hun selv er udvikler. Der er en stærk følelse af, at hun med tiden vil læse dette indlæg på Habré. Jeg håber virkelig, at Oksana vil bevare min anonymitet. 🙂
*vinker med pote og siger hej

Lidt om den etiske side af sagen

For at være ærlig kan jeg ikke lide hele ideen om at robotisere forhold mellem mænd og piger. Der er noget meget rigtigt ved at kaste sin jakke over skuldrene på en kold fremmed, der står alene. Eller henvend dig til en smuk pige på en sommercafé og drik kaffe sammen. Kom allerede ud bag skærmene.

Sommeren er overalt. Det er tid til at stifte bekendtskab.

Sådan henter du 13 piger i timen ved hjælp af maskinlæring og Tinder

Sådan henter du 13 piger i timen ved hjælp af maskinlæring og Tinder

Kilde: www.habr.com

Tilføj en kommentar