*Rent för att lära sig Machine Learning, förstås. Under sin älskade frus lätt missnöjda blick.
Det finns förmodligen ingen tillämpning så enkel på nivån av ryggradsreflexer som Tinder. För att använda det behöver du bara ett finger för att svepa och några nervceller för att välja de tjejer eller män du gillar bäst. En idealisk implementering av brute force i parval.
Jag bestämde mig för att detta skulle vara ett bra sätt att få lite känsla för maskininlärning på ett nytt grafikkort. Allt som återstår är att förklara för min fru att jag inte behöver en ny fetare kvinna, och jag tränar bara neurala nätverk.
Vad är problemet med dejtingnätverk?
Det fanns en sådan resurs - Ashley Madison. Specifikt, med sloganen ”Livet är kort. Ha en affär." Huvudpubliken är gifta män som söker en affär vid sidan av. Intäktsgenerering är också roligt - förutom standarden "spendera poäng för att gilla och skriva" bad de om $19 för att radera en användares konto utan spår.
Under 2015 läckte sajten naturligt och 60 GB personlig data läckte till det offentliga området. Förutom många förstörda familjer gav denna läcka mycket intressant information till analytiker. Jag har alltid misstänkt att det fanns mycket fler män på dejtingsajter, men i det här fallet visade det sig vara ganska intressant. Journalisten Annalee Newitz
En sådan övervikt gentemot manliga konton är typiskt inte bara för denna resurs, utan också för de flesta andra dejtingsajter. Jag är säker på att många har stött på denna otvivelaktigt orättvisa situation, när du måste noggrant planera en bekantskap, men tjejen behöver bara registrera sig. Låt oss lämna kvaliteten på denna skara fans åt sidan, men faktumet är obestridligt att balansen mellan utbud och efterfrågan helt klart förändras till flickornas fördel.
Tinder-funktion
Den ideala brute forceren i könsrelationer
Huvudfunktionen hos denna plattform är den låga kostnaden per bekantskap. Ett sammanträffande av två svep räcker och du kommunicerar redan med en potentiellt intressant person. Problemet är att samma obalans mellan könen leder till att de flesta tjejer kommer att ha dussintals matcher per dag. Det betyder att de sannolikt inte kommer att ha tid att uppmärksamma dig bland andra kandidater.
Det är helt klart att plattformen innebär liten möjlighet att bedöma en persons djupa inre värld från en och en halv sekunds blick på ett foto i en baddräkt eller att köra en fashionabel tonad bil. Därför, om du inte bara ser gudomlig ut på dina fotografier, har du inget annat val än att öka dina chanser genom att adoptera
Samlar in data
Först och främst behöver du mycket data för normal noggrannhet. Alla som har stött på maskininlärning vet hur svårt det kan vara att producera en korrekt insamlad och märkt dataset. Teoretiskt sett kommer alla liknande resurser att vara lämpliga som datakälla, oavsett om det är Instagram eller andra sociala nätverk. Men det är bäst att träna på de prover som nätverket kommer att arbeta med i framtiden.
Låt oss ta förvaret som grund
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 gör att du kan markera datamängden så snabbt som möjligt med bara två knappar. Den viktigaste fallgropen ligger i det faktum att werkzeug-biblioteket har brutit bakåtkompatibilitet och måste tvingas nedgradera det. Annars ger det detta fel.
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'
Därför måste du i requirements.txt skriva Werkzeug==0.16.1. Sedan tar det fart.
Det andra problemet är att få just detta token. Standardmetoden från förvaret fungerade inte för mig, men jag lyckades få den från utvecklarkonsolen. För att göra detta, gå till
Datauppsättningskrav
Det finns flera nyckelkrav för datauppsättningar för maskininlärning:
- Lämplighet
- Enhetlighet
- mångfald
Tillräcklighet i detta fall kräver minst 10000 XNUMX fotografier för att bygga en adekvat modell. Ja, det är mycket. Det är faktiskt därför tjänster som
Det finns inga speciella problem med variation, alla fotografier presenteras från olika vinklar och ljussättning. I glasögon, klänningar, baddräkter och skiddräkter. Ett problem kan uppstå med datauppsättningens enhetlighet. När vi märker vårt prov bör det helst bestå av ungefär lika delar. Om du får en "skev" datauppsättning måste du späda ut den med fotografier från andra källor. Du kommer att behöva lägga till mer attraktiva, eller vice versa, du kommer att bestämma dem baserat på uppmärkningsresultatet. Jag fick något runt 60% snyggt. Antingen är jag inte för kräsen, eller så har jag bara tur och det finns många snygga tjejer runt omkring.
Jag bortser inte heller från hypotesen att det finns många botar bland dem. Vi tränar en bot som kommer att gilla andra botar. Det finns en viss ironi i detta.
Databehandling
Vi har ett gäng taggade bilder, men de är väldigt blandade. Dagtid, nattetid, bakifrån och andra. Med beklagande förstår jag att undervisning från fotografier från en omvänd vinkel inte kommer att vara särskilt effektiv, eftersom provet blir mycket ojämnt. Därför skulle det bästa alternativet vara att använda ansikten som ett referenstecken på "gullighet". Ändå, för oss, liksom för andra primater, är detta en nyckelparameter.
Därför, låt oss använda
Detta beskrivs mer i detalj i manualen
I nästa steg, efter att endast ansikten finns i provet, är det vettigt att ta bort färg. Faktum är att du knappast behöver välja mellan Pandoras vackra blå denizen eller den grönskande skönheten.
Hos Hue-människor ger inte hudfärgen ett betydande bidrag till attraktionsvärden.
Därför är det värt att förenkla arbetet i det neurala nätverket och bara lämna gråskala.
Modellbyggnad
Jag vill genast säga att utan ett bra grafikkort och CUDA kommer du med största sannolikhet helt enkelt inte att få en tränad modell i tillräcklig tid. Sikta därför omedelbart på beräkningar i specialiserade moln eller med python-CUDA.
Jag tog ett grundläggande trelagersexempel från författaren till förvaret och, överraskande nog, visade det en noggrannhet på cirka 72%, vilket är ett ganska bra 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'])
Om det finns ett bra prov kan det mycket väl vara tillräckligt för att få en fungerande modell.
Låt oss starta boten
Tack till författaren av förvaret för ett färdigt alternativ för att snabbt testa idén. Det fungerar faktiskt ganska bra i grundversionen och kan i princip lanseras på vår
Resultat
Jag antar att jag är väldigt söt. Och jag har en rik inre värld. Jag fick ungefär 13 matcher inom en timme. Dessutom skrev flickorna flera gånger först.
Det resulterade i att vi fick väldigt trevliga dialoger, där jag sa att jag kom in enbart för att leka med maskininlärning och datamärkning. En av tjejerna var oerhört intresserad, eftersom hon själv är utvecklare. Det finns en stark känsla av att hon så småningom kommer att läsa det här inlägget på Habré. Jag hoppas verkligen att Oksana kommer att behålla min anonymitet. 🙂
*viftar med tass och säger hej
Lite om den etiska sidan av frågan
För att vara ärlig, jag gillar inte hela idén med att robotisera relationer mellan män och flickor. Det är något väldigt rätt med att kasta jackan över axlarna på en kall främling som står ensam. Eller gå fram till en söt tjej på ett sommarcafé och drick kaffe tillsammans. Gå ut bakom monitorerna redan.
Sommaren är överallt. Det är dags att bekanta sig.
Källa: will.com