*Puur ter wille van het leren van Machine Learning natuurlijk. Onder de lichtelijk ontevreden blik van zijn geliefde vrouw.
Er is waarschijnlijk geen toepassing die zo eenvoudig is op het niveau van de wervelkolomreflexen als Tinder. Om het te gebruiken, heb je maar één vinger nodig om te vegen en een paar neuronen om de meisjes of mannen te kiezen die je het leukst vindt. Een ideale implementatie van brute kracht bij paarselectie.
Ik besloot dat dit een goede manier zou zijn om een beetje gevoel te krijgen voor machine learning op een nieuwe grafische kaart. Het enige dat overblijft is om aan mijn vrouw uit te leggen dat ik geen nieuwe, dikkere vrouw nodig heb, en dat ik alleen maar neurale netwerken train.
Wat is het probleem met datingnetwerken?
Er was zo'n hulpbron: Ashley Madison. Specifiek, met de slogan “Het leven is kort. Heb een affaire." Het belangrijkste publiek bestaat uit getrouwde mannen die op zoek zijn naar een affaire. Inkomsten genereren is ook leuk - naast de standaard 'punten uitgeven om leuk te vinden en te schrijven' vroegen ze $ 19 om het account van een gebruiker spoorloos te verwijderen.
In 2015 lekte de site natuurlijk en lekte 60 GB aan persoonlijke gegevens in het publieke domein. Naast veel verwoeste gezinnen leverde dit lek analisten veel interessante informatie op. Ik had altijd het vermoeden dat er veel meer mannen op datingsites zaten, maar in dit geval bleek het best interessant. Journalist Annalee Newitz
Een dergelijk overwicht op mannelijke accounts is niet alleen typerend voor deze bron, maar ook voor de meeste andere datingsites. Ik ben er zeker van dat velen deze ongetwijfeld oneerlijke situatie zijn tegengekomen, wanneer je een kennismaking zorgvuldig moet plannen, maar het meisje zich gewoon moet registreren. Laten we de kwaliteit van deze schare fans buiten beschouwing laten, maar het valt niet te ontkennen dat de balans tussen vraag en aanbod duidelijk in het voordeel van de meisjes is verschoven.
Tinder-functie
De ideale brute force in genderverhoudingen
Het belangrijkste kenmerk van dit platform zijn de lage kosten per kennis. Een samenloop van twee swipes is voldoende en je communiceert al met een potentieel interessant persoon. Het probleem is dat dezelfde ongelijkheid tussen mannen en vrouwen ertoe leidt dat de meeste meisjes tientallen wedstrijden per dag hebben. Dit betekent dat ze waarschijnlijk geen tijd zullen hebben om aandacht aan jou te besteden tussen andere kandidaten.
Het is vrij duidelijk dat het platform weinig mogelijkheden biedt om de diepe innerlijke wereld van een persoon te beoordelen vanuit een blik van anderhalve seconde op een foto in een zwempak of het besturen van een modieuze getinte auto. Daarom, als je er niet simpelweg goddelijk uitziet op je foto's, heb je geen andere keuze dan je kansen te vergroten door te adopteren
Gegevens verzamelen
Allereerst heb je voor een normale nauwkeurigheid veel gegevens nodig. Iedereen die wel eens met machine learning te maken heeft gehad, weet hoe moeilijk het kan zijn om een correct verzamelde en gelabelde dataset te produceren. Theoretisch zal elke soortgelijke bron geschikt zijn als gegevensbron, of het nu Instagram of andere sociale netwerken zijn. Maar het is het beste om te trainen op die voorbeelden waarop het netwerk in de toekomst zal werken.
Laten we de repository als basis nemen
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)
Hiermee kunt u de dataset zo snel mogelijk markeren met slechts twee knoppen. De belangrijkste valkuil ligt in het feit dat de werkzeugbibliotheek de achterwaartse compatibiliteit heeft verbroken en gedwongen zal moeten worden deze te downgraden. Anders wordt deze fout gegenereerd.
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'
Daarom moet je in requirements.txt Werkzeug==0.16.1 schrijven. Dan zal het opstijgen.
Het tweede probleem is om dit symbool te bemachtigen. De standaardmethode uit de repository werkte niet voor mij, maar ik slaagde erin deze van de ontwikkelaarsconsole te halen. Ga hiervoor naar
Vereisten voor gegevenssets
Er zijn verschillende belangrijke vereisten voor machine learning-datasets:
- Geschiktheid
- Uniformiteit
- Verscheidenheid
Om in dit geval voldoende te zijn, zijn minstens 10000 foto's nodig om een adequaat model te bouwen. Ja, dat is veel. Dit is eigenlijk de reden waarom diensten zoals
Er zijn geen bijzondere problemen met de variatie; alle foto's worden vanuit verschillende hoeken en belichting gepresenteerd. In brillen, jurken, zwemkleding en skipakken. Er kan een probleem ontstaan met de uniformiteit van de dataset. Als we ons monster labelen, zou het idealiter uit ongeveer gelijke delen moeten bestaan. Als je een ‘scheve’ dataset krijgt, zul je deze moeten verdunnen met foto’s uit andere bronnen. U zult aantrekkelijkere moeten toevoegen, of omgekeerd, u zult ze bepalen op basis van het opmaakresultaat. Ik heb iets dat ongeveer 60% mooi is. Ofwel ben ik niet zo kieskeurig, ofwel heb ik gewoon geluk en zijn er veel mooie meisjes in de buurt.
Ik sluit ook de hypothese niet uit dat er veel bots onder zitten. We trainen een bot die andere bots leuk zal vinden. Er zit enige ironie in.
Gegevensverwerking
We hebben een aantal getagde foto's, maar ze zijn erg gemengd. Overdag, 's nachts, van achteren en anderen. Tot mijn spijt begrijp ik dat lesgeven op basis van foto's vanuit een omgekeerde hoek niet bijzonder effectief zal zijn, omdat de steekproef zeer ongelijkmatig zal zijn. Daarom zou de beste optie zijn om gezichten te gebruiken als referentieteken van ‘schattigheid’. Toch is dit voor ons, net als voor andere primaten, een sleutelparameter.
Laten we daarom gebruiken
In de handleiding wordt dit uitgebreider beschreven
In de volgende fase, nadat alleen gezichten in het monster voorkomen, is het zinvol om kleur te verwijderen. Sterker nog, je hoeft nauwelijks te kiezen tussen de prachtige blauwe bewoner van Pandora of de schoonheid met een groene huid.
Bij Hue-mensen levert huidskleur geen significante bijdrage aan de beoordeling van aantrekkelijkheid.
Daarom is het de moeite waard om het werk van het neurale netwerk te vereenvoudigen en alleen grijswaarden over te laten.
Model gebouw
Ik wil meteen zeggen dat je zonder een goede videokaart en CUDA hoogstwaarschijnlijk niet binnen voldoende tijd een getraind model zult krijgen. Richt daarom onmiddellijk op berekeningen in gespecialiseerde clouds of met behulp van python-CUDA.
Ik nam een basisvoorbeeld met drie lagen van de auteur van de repository en verrassend genoeg vertoonde het een nauwkeurigheid van ongeveer 72%, wat een behoorlijk goed resultaat is.
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'])
Als er een goed monster is, kan dit voldoende zijn om een werkbaar model te verkrijgen.
Laten we de bot lanceren
Met dank aan de auteur van de repository voor een kant-en-klare optie om het idee snel te testen. Sterker nog, het werkt vrij goed in de basisversie en kan in principe op onze worden gelanceerd
Bevindingen
Ik denk dat ik heel schattig ben. En ik heb een rijke innerlijke wereld. Ik kreeg binnen een uur ongeveer 13 lucifers. Bovendien schreven de meisjes verschillende keren eerst.
Het resultaat was dat we hele mooie dialogen kregen, waarin ik zei dat ik alleen kwam om te spelen met machine learning en datalabeling. Een van de meisjes was enorm geïnteresseerd, aangezien zij zelf ontwikkelaar is. Er is een sterk gevoel dat ze dit bericht op Habré uiteindelijk zal lezen. Ik hoop echt dat Oksana mijn anonimiteit zal behouden. 🙂
*zwaait met zijn poot en zegt hallo
Nog even over de ethische kant van de kwestie
Eerlijk gezegd hou ik niet van het hele idee van het robotiseren van relaties tussen mannen en meisjes. Er is iets heel goeds aan het over de schouders gooien van een koude vreemdeling die alleen staat. Of benader een mooi meisje in een zomercafé en drink samen koffie. Kom al achter de monitoren vandaan.
De zomer is overal. Het is tijd om kennis te maken.
Bron: www.habr.com