Hoe je 13 meisjes per uur kunt oppikken met machine learning en Tinder

*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.

Hoe je 13 meisjes per uur kunt oppikken met machine learning en Tinder

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 het analyseren van gelekte gegevens ontdekte dat van de 5 miljoen gebruikers er slechts 12 vergelijkbaar waren met echte meisjesaccounts en regelmatig werden gebruikt. De rest waren gewoon bots die met mannelijke bezoekers praatten.

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

Hoe je 13 meisjes per uur kunt oppikken met machine learning en Tinder
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 r-strategie bij sommige soorten. Simpel gezegd, we zullen bruut geweld gebruiken en volume innemen om onze kansen op kweeksucces te vergroten. Omdat je soms afgeleid moet worden door eten en slapen, en swipes beperkt zijn, zul je er waarschijnlijk de voorkeur aan geven dat automatisering de meisjes of mannen selecteert die het beste bij jouw smaak passen. Kleine roodharigen of lange brunettes - het is aan jou.

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 Tinder-automatisering. De foto's van Tinder zijn altijd openbaar beschikbaar, maar de 'like'-functie is al beperkt. Daarom is het noodzakelijk om alle levende wezens binnen de straal eruit te halen en zorgvuldig te markeren. Eerst moet je een vrij eenvoudig script gebruiken:

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 link en extraheer het antwoord op het POST-verzoek in www.facebook.com/v2.6/dialog/oauth/confirm?dpr=1. Binnenin zoeken we naar 'access_token'. Om de een of andere reden werkte het de eerste keer niet, maar toen vond ik het en codeerde het hard in het script.

Vereisten voor gegevenssets

Er zijn verschillende belangrijke vereisten voor machine learning-datasets:

  1. Geschiktheid
  2. Uniformiteit
  3. 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 Amazon Mechanical Turk, waar u tegen betaling de opmaak van uw dataset aan andere mensen kunt delegeren. Aan de andere kant, wil je echt dat je bot van prachtige Aziatische meisjes met een maangezicht houdt of van even mooie meisjes met Indiase roots? Toch moet het model jouw smaak weerspiegelen.

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 Haarcascades. Dit is een uitstekend algoritme waarmee je gezichten kunt vinden in afbeeldingen met een laag percentage fout-positieve fouten.

Hoe je 13 meisjes per uur kunt oppikken met machine learning en Tinder
In de handleiding wordt dit uitgebreider beschreven OpenCV

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.

Hoe je 13 meisjes per uur kunt oppikken met machine learning en Tinder
Bron

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

Hoe je 13 meisjes per uur kunt oppikken met machine learning en Tinder

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 kant-en-klare gehuurde server. Trainen kan nog niet; op dit moment bieden we geen virtuele machines met CUDA-ondersteuning voor berekeningen, maar je kunt wel 24/7 zonder problemen iets draaien. De bot is vrij licht van gewicht, dus het zou winstgevender zijn om een ​​tarief te hanteren dat betaalt voor de gebruikte bronnen.

Bevindingen

Hoe je 13 meisjes per uur kunt oppikken met machine learning en Tinder
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.

Hoe je 13 meisjes per uur kunt oppikken met machine learning en Tinder

Hoe je 13 meisjes per uur kunt oppikken met machine learning en Tinder

Bron: www.habr.com

Voeg een reactie