Kuinka noutaa 13 tyttöä tunnissa koneoppimisen ja Tinderin avulla

*Tietenkin puhtaasti koneoppimisen oppimisen vuoksi. Hänen rakkaan vaimonsa hieman tyytymättömän katseen alla.

Selkärangan refleksien tasolle ei luultavasti ole yhtä yksinkertaista sovellusta kuin Tinder. Jotta voit käyttää sitä, tarvitset vain yhden sormen pyyhkäisemiseen ja muutaman hermosolun valitaksesi parhaat tytöt tai miehet. Ihanteellinen raakavoiman toteutus parin valinnassa.

Päätin, että tämä olisi hyvä tapa saada hieman kokemusta koneoppimisesta uudella näytönohjaimella. Ei jää muuta kuin selittää vaimolleni, että en tarvitse uutta lihavampaa naista, vaan harjoittelen vain hermoverkkoja.

Kuinka noutaa 13 tyttöä tunnissa koneoppimisen ja Tinderin avulla

Mikä deittailuverkostojen ongelma on?

Siellä oli sellainen resurssi - Ashley Madison. Tarkka, iskulauseella "Elämä on lyhyt. Olla suhteessa." Pääyleisönä ovat naimisissa olevat miehet, jotka etsivät parisuhdetta. Kaupallistaminen on myös hauskaa - tavallisen "kulutta pisteitä tykkäämiseen ja kirjoittamiseen" lisäksi he pyysivät 19 dollaria käyttäjän tilin poistamisesta ilman jälkiä.

Vuonna 2015 sivusto vuoti luonnollisesti ja 60 Gt henkilötietoja vuoti julkisuuteen. Monien tuhoutuneiden perheiden lisäksi tämä vuoto tarjosi paljon mielenkiintoista tietoa analyytikoille. Epäilin aina, että deittailusivustoilla on paljon enemmän miehiä, mutta tässä tapauksessa se osoittautui varsin mielenkiintoiseksi. Toimittaja Annalee Newitz analysoimalla vuotanutta dataa havaitsi, että viidestä miljoonasta käyttäjästä vain 5 12 oli samanlaisia ​​kuin oikeat tyttötilit ja niitä käytettiin säännöllisesti. Loput olivat vain botteja, jotka keskustelivat miespuolisten vierailijoiden kanssa.

Tällainen miesten tilien valtaosa ei ole tyypillistä vain tälle resurssille, vaan myös useimmille muille treffisivustoille. Olen varma, että monet ovat kohdanneet tämän epäilemättä epäreilun tilanteen, kun joutuu suunnittelemaan huolellisesti tutustumista, mutta tytön tarvitsee vain rekisteröityä. Jätetään tämän fanijoukon laatu sivuun, mutta tosiasia on kiistaton, että kysynnän ja tarjonnan tasapaino on siirtynyt selvästi tyttöjen eduksi.

Tinder-ominaisuus

Kuinka noutaa 13 tyttöä tunnissa koneoppimisen ja Tinderin avulla
Ihanteellinen raakavoima sukupuolisuhteissa

Tämän alustan pääominaisuus on alhaiset kustannukset tuttavuutta kohti. Kahden pyyhkäisyn sattuma riittää ja olet jo kommunikoimassa mahdollisesti mielenkiintoisen henkilön kanssa. Ongelmana on, että sama sukupuolten välinen epätasapaino johtaa siihen, että useimmilla tytöillä on kymmeniä otteluita päivässä. Tämä tarkoittaa, että heillä ei todennäköisesti ole aikaa kiinnittää huomiota sinuun muiden ehdokkaiden joukossa.

On aivan selvää, että alustalla ei ole juurikaan mahdollisuutta arvioida ihmisen syvää sisämaailmaa puolentoista sekunnin silmäyksellä valokuvaa uimapuvussa tai muodikkaassa sävytetyssä autossa ajaessa. Siksi, jos et näytä valokuvissasi yksinkertaisesti jumalalliselta, sinulla ei ole muuta vaihtoehtoa kuin lisätä mahdollisuuksiasi adoptoimalla r-strategia joissakin lajeissa. Yksinkertaisesti sanottuna käytämme raakaa voimaa ja otamme volyymia lisätäksemme mahdollisuuksiamme kasvattaa menestystä. Koska ruoka ja uni joutuvat joskus häiritsemään sinua ja pyyhkäisyä on rajoitetusti, pidät luultavasti parempana, että automaatio valitsee tytöt tai miehet, jotka sopivat parhaiten makuusi. Lyhyet punapäät tai pitkät brunetit - se on sinun.

Kerätä dataa

Ensinnäkin tarvitset paljon dataa normaalia tarkkuutta varten. Jokainen, joka on kohdannut koneoppimisen, tietää, kuinka vaikeaa voi olla tuottaa oikein kerätty ja merkitty tietojoukko. Teoriassa mikä tahansa vastaava resurssi soveltuu tietolähteeksi, oli se sitten Instagram tai muut sosiaaliset verkostot. Mutta parasta on harjoitella niillä näytteillä, joilla verkko toimii tulevaisuudessa.

Otetaan arkisto pohjaksi Tinder-automaatio. Tinderin kuvat ovat aina julkisesti saatavilla, mutta "tykkää"-toiminto on jo rajoitettu. Siksi on tarpeen poimia kaikki elävät asiat säteen sisällä ja merkitä ne huolellisesti. Ensin sinun on käytettävä melko yksinkertaista komentosarjaa:

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)

Sen avulla voit merkitä tietojoukon mahdollisimman nopeasti vain kahdella painikkeella. Keskeinen sudenkuoppa on siinä, että werkzeug-kirjaston yhteensopivuus on katkennut ja se on pakotettava alentamaan sitä. Muuten se antaa tämän virheen.

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'

Siksi tiedostonvaatimukset.txt-tiedostoon tulee kirjoittaa Werkzeug==0.16.1. Sitten se lähtee.
Toinen ongelma on saada juuri tämä merkki. Vakiomenetelmä arkistosta ei toiminut minulle, mutta onnistuin saamaan sen kehittäjäkonsolista. Voit tehdä tämän siirtymällä kohtaan linkki ja pura vastaus POST-pyyntöön www.facebook.com/v2.6/dialog/oauth/confirm?dpr=1. Sisältä etsimme 'access_token'. Jostain syystä se ei toiminut ensimmäisellä kerralla, mutta sitten löysin sen ja koodasin sen käsikirjoitukseen.

Tietojoukon vaatimukset

Koneoppimistietojoukoille on useita keskeisiä vaatimuksia:

  1. Riittävyys
  2. Yhdenmukaisuus
  3. monimuotoisuus

Riittävyys vaatii tässä tapauksessa vähintään 10000 XNUMX valokuvaa sopivan mallin rakentamiseksi. Kyllä, se on paljon. Tästä syystä palvelut pitävät Amazon Mechanical Turk, jossa voit maksua vastaan ​​siirtää tietojoukkosi merkinnän muille ihmisille. Toisaalta, haluatko todella, että bottisi pitää upeista kuukasvoisista aasialaisista tytöistä tai yhtä kauniista intialaisista tytöistä? Silti mallin tulee heijastaa makuasi.

Lajittelussa ei ole erityisiä ongelmia, kaikki valokuvat esitetään eri kuvakulmista ja valaistuksista. Laseissa, mekoissa, uima-asuissa ja hiihtopuvuissa. Ongelma saattaa syntyä tietojoukon yhdenmukaisuudessa. Ihannetapauksessa, kun merkitsemme näytteemme, sen tulisi koostua suunnilleen yhtä suuresta osasta. Jos päädyt "vinolliseen" tietojoukkoon, sinun on laimennettava se muista lähteistä peräisin olevilla valokuvilla. Sinun on lisättävä houkuttelevampia, tai päinvastoin, määrität ne merkintätuloksen perusteella. Minulla on jotain noin 60% kaunista. Joko en ole liian nirso, tai olen vain onnekas ja ympärilläni on paljon kauniita tyttöjä.

En myöskään hylkää hypoteesia, että niiden joukossa on monia botteja. Koulutamme botin, joka pitää muista boteista. Tässä on jonkin verran ironiaa.

Tietojenkäsittely

Meillä on joukko merkittyjä kuvia, mutta ne ovat hyvin sekalaisia. Päivällä, yöllä, takaa ja muut. Valitettavasti ymmärrän, että valokuvien opettaminen käänteisestä kulmasta ei ole erityisen tehokasta, koska näyte on erittäin epätasainen. Siksi paras vaihtoehto olisi käyttää kasvoja "söpöuden" viitemerkkinä. Silti meille, kuten muillekin kädellisille, tämä on keskeinen parametri.

Käytetään siis Haar-kaskadit. Tämä on erinomainen algoritmi, jonka avulla voit löytää kasvoja kuvista, joissa on pieni prosenttiosuus vääriä positiivisia virheitä.

Kuinka noutaa 13 tyttöä tunnissa koneoppimisen ja Tinderin avulla
Tämä on kuvattu tarkemmin käsikirjassa OpenCV

Seuraavassa vaiheessa, kun näytteessä on vain kasvot, on järkevää poistaa väri. Itse asiassa sinun tuskin tarvitsee valita Pandoran kauniin sinisen asukkaan tai vihreäihoisen kauneuden välillä.

Kuinka noutaa 13 tyttöä tunnissa koneoppimisen ja Tinderin avulla
Lähde

Hue-ihmisissä ihonväri ei vaikuta merkittävästi houkuttelevuuden luokitukseen.
Siksi hermoverkon työtä kannattaa yksinkertaistaa ja jättää vain harmaasävyt.

Mallirakennus

Haluan sanoa heti, että ilman hyvää näytönohjainta ja CUDAa et todennäköisesti yksinkertaisesti saa koulutettua mallia riittävän ajoissa. Pyri siis heti laskelmiin erikoistuneissa pilvissä tai käyttämällä python-CUDAa.

Otin perusesimerkin kolmikerroksisesta arkiston kirjoittajalta ja yllättäen se osoitti noin 72 %:n tarkkuutta, mikä on varsin hyvä tulos.

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'])

Jos on hyvä näyte, se voi hyvinkin riittää toimivan mallin saamiseksi.

Käynnistetään botti

Kuinka noutaa 13 tyttöä tunnissa koneoppimisen ja Tinderin avulla

Kiitos arkiston kirjoittajalle valmiista vaihtoehdosta idean nopeaan testaamiseen. Itse asiassa se toimii melko hyvin perusversiossa ja voidaan periaatteessa käynnistää meillä valmis vuokrapalvelin. Harjoittelu ei ole vielä mahdollista, tällä hetkellä emme tarjoa virtuaalikoneita CUDA-tuella laskelmiin, mutta voit ajaa jotain 24/7 ilman ongelmia. Botti on melko kevyt, joten olisi kannattavampaa ottaa tariffi, joka maksaa käytetyistä resursseista.

Tulokset

Kuinka noutaa 13 tyttöä tunnissa koneoppimisen ja Tinderin avulla
Taidan olla erittäin söpö. Ja minulla on rikas sisäinen maailma. Sain noin 13 ottelua tunnin sisällä. Lisäksi tytöt kirjoittivat useita kertoja ensin.
Tuloksena päädyimme erittäin mukaviin dialogeihin, joissa sanoin, että tulin vain leikkimään koneoppimisen ja datamerkinnän kanssa. Yksi tytöistä oli erittäin kiinnostunut, koska hän itse on kehittäjä. On vahva tunne, että hän lopulta lukee tämän Habrén postauksen. Toivon todella, että Oksana säilyttää nimettömyyteni. 🙂
*heiluttaa tassuaan ja sanoo moi

Hieman asian eettisestä puolesta

Ollakseni rehellinen, en pidä koko ajatuksesta robotisoida miesten ja tyttöjen välisiä suhteita. Takkisi heittämisessä yksin seisovan kylmän vieraan olkapäille on jotain aivan oikein. Tai lähesty nättiä tyttöä kesäkahvilassa ja juo kahvia yhdessä. Pois jo monitorien takaa.

Kesä on kaikkialla. On aika tutustua.

Kuinka noutaa 13 tyttöä tunnissa koneoppimisen ja Tinderin avulla

Kuinka noutaa 13 tyttöä tunnissa koneoppimisen ja Tinderin avulla

Lähde: will.com

Lisää kommentti