Come rimorchiare 13 ragazze all'ora utilizzando l'apprendimento automatico e Tinder

*Semplicemente per motivi di apprendimento del Machine Learning, ovviamente. Sotto lo sguardo un po' insoddisfatto della sua amata moglie.

Probabilmente non esiste un'applicazione così semplice a livello dei riflessi spinali come Tinder. Per usarlo ti basta un dito per scorrere e qualche neurone per scegliere le ragazze o gli uomini che ti piacciono di più. Un'implementazione ideale della forza bruta nella selezione della coppia.

Ho deciso che questo sarebbe stato un buon modo per avere un'idea dell'apprendimento automatico su una nuova scheda grafica. Non resta che spiegare a mia moglie che non ho bisogno di una nuova donna più grassa e sto solo allenando le reti neurali.

Come rimorchiare 13 ragazze all'ora utilizzando l'apprendimento automatico e Tinder

Qual è il problema con le reti di incontri?

C'era una tale risorsa: Ashley Madison. Specifico, con lo slogan “La vita è breve. Avere una relazione." Il pubblico principale è costituito da uomini sposati che cercano una relazione secondaria. Anche la monetizzazione è divertente: oltre allo standard "spendere punti per mettere mi piace e scrivere", hanno chiesto 19 dollari per eliminare l'account di un utente senza lasciare traccia.

Nel 2015, naturalmente, il sito è trapelato e 60 GB di dati personali sono diventati di pubblico dominio. Oltre a molte famiglie distrutte, questa fuga di notizie ha fornito agli analisti molte informazioni interessanti. Ho sempre sospettato che ci fossero molti più uomini sui siti di incontri, ma in questo caso la cosa si è rivelata piuttosto interessante. La giornalista Annalee Newitz analizzare i dati trapelati ha scoperto che su 5 milioni di utenti, solo 12 erano simili ad account di ragazze reali e venivano utilizzati regolarmente. Il resto erano solo robot che chiacchieravano con i visitatori uomini.

Una tale preponderanza verso gli account maschili è tipica non solo di questa risorsa, ma anche della maggior parte degli altri siti di incontri. Sono sicuro che molti si sono imbattuti in questa situazione indubbiamente ingiusta, quando devi pianificare attentamente una conoscenza, ma la ragazza deve solo registrarsi. Lasciamo da parte la qualità di questa folla di fan, ma è innegabile il fatto che l’equilibrio tra domanda e offerta sia nettamente spostato a favore delle ragazze.

Funzionalità esca

Come rimorchiare 13 ragazze all'ora utilizzando l'apprendimento automatico e Tinder
Il brute forcer ideale nelle relazioni di genere

La caratteristica principale di questa piattaforma è il basso costo per conoscenza. Basta una coincidenza di due passaggi e stai già comunicando con una persona potenzialmente interessante. Il problema è che lo stesso squilibrio di genere porta al fatto che la maggior parte delle ragazze avrà dozzine di partite al giorno. Ciò significa che molto probabilmente non avranno tempo per prestarti attenzione tra gli altri candidati.

È abbastanza chiaro che la piattaforma implica poche opportunità di valutare il profondo mondo interiore di una persona da uno sguardo di un secondo e mezzo a una foto in costume da bagno o alla guida di un'auto colorata alla moda. Pertanto, se non sembri semplicemente divino nelle tue fotografie, non hai altra scelta che aumentare le tue possibilità adottando strategia r in alcune specie. In poche parole, useremo la forza bruta e prenderemo volume per aumentare le nostre possibilità di successo riproduttivo. Dato che a volte hai bisogno di essere distratto dal cibo e dal sonno, e i passaggi sono limitati, probabilmente preferirai che l'automazione selezioni le ragazze o gli uomini che meglio si adattano ai tuoi gusti. Rosse basse o brune alte: dipende da te.

Raccolta dati

Prima di tutto, sono necessari molti dati per una precisione normale. Chiunque abbia avuto a che fare con il machine learning sa quanto possa essere difficile produrre un set di dati correttamente raccolto ed etichettato. In teoria, qualsiasi risorsa simile sarà adatta come fonte di dati, sia essa Instagram o altri social network. Ma è meglio formarsi su quei campioni su cui la rete lavorerà in futuro.

Prendiamo come base il repository Automazione di Tinder. Le foto di Tinder sono sempre disponibili al pubblico, ma la funzione "mi piace" è già limitata. Pertanto, è necessario estrarre tutti gli esseri viventi nel raggio e contrassegnarli attentamente. Per prima cosa devi utilizzare uno script abbastanza semplice:

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)

Ti consentirà di contrassegnare il set di dati il ​​più rapidamente possibile con solo due pulsanti. La trappola principale sta nel fatto che la libreria werkzeug ha rotto la compatibilità con le versioni precedenti e dovrà essere costretto a eseguirne il downgrade. Altrimenti genera questo errore.

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'

Pertanto nel file require.txt è necessario scrivere Werkzeug==0.16.1. Poi decollerà.
Il secondo problema è ottenere proprio questo token. Il metodo standard del repository non ha funzionato per me, ma sono riuscito a ottenerlo dalla console degli sviluppatori. Per fare questo, vai a collegamento ed estrarre la risposta alla richiesta POST in www.facebook.com/v2.6/dialog/oauth/confirm?dpr=1. All'interno cerchiamo 'access_token'. Per qualche motivo non ha funzionato la prima volta, ma poi l'ho trovato e l'ho inserito nella sceneggiatura.

Requisiti del set di dati

Esistono diversi requisiti chiave per i set di dati di machine learning:

  1. Adeguatezza
  2. Uniformità
  3. Diversità

La sufficienza in questo caso richiede almeno 10000 fotografie per costruire un modello adeguato. Sì, è molto. Questo è in realtà il motivo per cui i servizi piacciono Amazon Mechanical Turk, dove a pagamento puoi delegare il markup del tuo set di dati ad altre persone. D'altra parte, vuoi davvero che al tuo bot piacciano le meravigliose ragazze asiatiche con la faccia da luna o le ragazze altrettanto belle con radici indiane? Tuttavia, il modello dovrebbe riflettere i tuoi gusti.

Non ci sono particolari problemi di varietà; tutte le fotografie sono presentate da diverse angolazioni e illuminazioni. Negli occhiali, nei vestiti, nei costumi da bagno e nelle tute da sci. Potrebbe sorgere un problema con l’uniformità del set di dati. Idealmente, quando etichettiamo il nostro campione, dovrebbe essere composto da parti approssimativamente uguali. Se ti ritroverai con un set di dati “distorto”, dovrai diluirlo con fotografie provenienti da altre fonti. Dovrai aggiungerne di più attraenti o viceversa, li determinerai in base al risultato del markup. Ho qualcosa di carino intorno al 60%. O non sono troppo esigente, oppure sono semplicemente fortunato e ci sono un sacco di belle ragazze in giro.

Inoltre non scarto l’ipotesi che tra loro ci siano molti bot. Addestriamo un bot che piacerà ad altri bot. C'è una certa ironia in questo.

Elaborazione dati

Abbiamo un sacco di foto taggate, ma sono molto contrastanti. Di giorno, di notte, da dietro e altri. Con rammarico, capisco che insegnare dalle fotografie da un angolo inverso non sarà particolarmente efficace, poiché il campione sarà molto irregolare. Pertanto, l’opzione migliore sarebbe quella di utilizzare i volti come segno di riferimento di “carineria”. Eppure per noi, come per gli altri primati, questo è un parametro fondamentale.

Pertanto, usiamo Cascate Haar. Si tratta di un ottimo algoritmo che permette di trovare volti nelle immagini con una bassa percentuale di errori falsi positivi.

Come rimorchiare 13 ragazze all'ora utilizzando l'apprendimento automatico e Tinder
Questo è descritto più dettagliatamente nel manuale OpenCV

Nella fase successiva, quando nel campione sono presenti solo i volti, è opportuno rimuovere il colore. In effetti, difficilmente dovrai scegliere tra il bellissimo abitante blu di Pandora o la bellezza dalla pelle verde.

Come rimorchiare 13 ragazze all'ora utilizzando l'apprendimento automatico e Tinder
Fonte

Nelle persone Hue, il colore della pelle non fornisce un contributo significativo alle valutazioni di attrattiva.
Pertanto, vale la pena semplificare il lavoro della rete neurale e lasciare solo la scala di grigi.

Costruzione di modelli

Voglio dire subito che senza una buona scheda video e CUDA, molto probabilmente semplicemente non otterrai un modello addestrato in tempo adeguato. Pertanto, punta immediatamente ai calcoli in cloud specializzati o utilizzando python-CUDA.

Ho preso un esempio base a tre livelli dall'autore del repository e, sorprendentemente, ha mostrato una precisione di circa il 72%, che è un risultato abbastanza buono.

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

Se esiste un buon campione, potrebbe essere sufficiente per ottenere un modello realizzabile.

Lanciamo il bot

Come rimorchiare 13 ragazze all'ora utilizzando l'apprendimento automatico e Tinder

Grazie all'autore del repository per un'opzione già pronta per testare rapidamente l'idea. In effetti, funziona abbastanza bene nella versione base e, in linea di principio, può essere lanciato sulla nostra server noleggiato già pronto. Non sarà ancora possibile allenarsi; al momento non forniamo macchine virtuali con supporto CUDA per i calcoli, ma puoi eseguire qualcosa 24 ore su 7, XNUMX giorni su XNUMX senza problemi. Il bot è abbastanza leggero, quindi sarebbe più redditizio prendere una tariffa che paghi le risorse utilizzate.

Giudizio

Come rimorchiare 13 ragazze all'ora utilizzando l'apprendimento automatico e Tinder
Immagino di essere molto carino. E ho un mondo interiore ricco. Ho ottenuto qualcosa come 13 partite in un'ora. Inoltre, più volte le ragazze hanno scritto per prime.
Di conseguenza, ci siamo ritrovati con dialoghi molto carini, in cui ho detto che ero venuto esclusivamente per giocare con l'apprendimento automatico e l'etichettatura dei dati. Una delle ragazze era estremamente interessata, dato che lei stessa è una sviluppatrice. C'è la forte sensazione che prima o poi leggerà questo post su Habré. Spero davvero che Oksana mantenga il mio anonimato. 🙂
*agita la zampa e saluta

Un po 'sul lato etico della questione

Ad essere sincero, non mi piace l’idea di robotizzare le relazioni tra uomini e ragazze. C'è qualcosa di molto giusto nel gettare la giacca sulle spalle di un estraneo infreddolito che sta in piedi da solo. Oppure avvicinati a una bella ragazza in un bar estivo e bevi un caffè insieme. Esci già da dietro i monitor.

L'estate è ovunque. È tempo di fare conoscenza.

Come rimorchiare 13 ragazze all'ora utilizzando l'apprendimento automatico e Tinder

Come rimorchiare 13 ragazze all'ora utilizzando l'apprendimento automatico e Tinder

Fonte: habr.com

Aggiungi un commento