*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.
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
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
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
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
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
Datasettkrav
Det er flere nøkkelkrav for datasett for maskinlæring:
- Tilstrekkelighet
- Ensartethet
- 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
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
Dette er beskrevet mer detaljert i manualen
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.
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
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
Funn
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.
Kilde: www.habr.com