*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.
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
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
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
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
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
Datasæt krav
Der er flere nøglekrav til maskinlæringsdatasæt:
- Tilstrækkelighed
- Ensartethed
- 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
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
Dette er beskrevet mere detaljeret i manualen
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.
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
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
Fund
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.
Kilde: www.habr.com