Como recoller 13 nenas por hora usando a aprendizaxe automática e Tinder

*Por suposto, para aprender Machine Learning. Baixo a mirada un pouco insatisfeita da súa amada muller.

Probablemente non haxa ningunha aplicación tan sinxela ao nivel de reflexos da columna vertebral como Tinder. Para usalo, só necesitas un dedo para pasar o dedo e algunhas neuronas para escoller as nenas ou homes que máis che gusten. Unha implementación ideal da forza bruta na selección de pares.

Decidín que esta sería unha boa forma de coñecer un pouco a aprendizaxe automática nunha nova tarxeta gráfica. Só me queda explicarlle á miña muller que non necesito unha nova muller máis gorda e que só estou adestrando redes neuronais.

Como recoller 13 nenas por hora usando a aprendizaxe automática e Tinder

Cal é o problema coas redes de citas?

Había tal recurso - Ashley Madison. Concreto, co lema “A vida é curta. Teña unha aventura". O público principal son homes casados ​​que buscan unha aventura ao lado. A monetización tamén é divertida: ademais do estándar "gastar puntos para me gusta e escribir", pediron 19 dólares para eliminar a conta dun usuario sen deixar rastro.

En 2015, o sitio filtrouse naturalmente e 60 GB de datos persoais filtáronse ao dominio público. Ademais de moitas familias destruídas, esta filtración proporcionou moita información interesante aos analistas. Sempre sospeitei que había moitos máis homes nos sitios de citas, pero neste caso resultou bastante interesante. A xornalista Annalee Newitz analizando datos filtrados descubriu que de 5 millóns de usuarios, só 12 eran similares ás contas de nenas reais e usábanse regularmente. O resto eran só bots que conversaban con visitantes masculinos.

Tal preponderancia cara ás contas masculinas é típica non só para este recurso, senón tamén para a maioría dos outros sitios de citas. Estou seguro de que moitos se atoparon con esta situación sen dúbida inxusta, cando tes que planificar coidadosamente un coñecido, pero a rapaza só ten que rexistrarse. Deixemos de lado a calidade desta multitude de afeccionados, pero o feito é innegable de que o equilibrio entre oferta e demanda desprázase claramente a favor das rapazas.

Función Tinder

Como recoller 13 nenas por hora usando a aprendizaxe automática e Tinder
O bruto forzador ideal nas relacións de xénero

A principal característica desta plataforma é o baixo custo por coñecido. Unha coincidencia de dous golpes é suficiente e xa te estás comunicando cunha persoa potencialmente interesante. O problema é que o mesmo desequilibrio de xénero leva a que a maioría das mozas teñan ducias de partidos ao día. Isto significa que probablemente non teñan tempo para prestarlle atención entre outros candidatos.

Está bastante claro que a plataforma implica poucas oportunidades para avaliar o profundo mundo interior dunha persoa a partir dunha ollada de segundo e medio a unha foto en bañador ou conducir un coche tintado de moda. Polo tanto, se non pareces simplemente divino nas túas fotografías, non tes máis remedio que aumentar as túas posibilidades adoptando r-estratexia nalgunhas especies. En pocas palabras, faremos forza bruta e tomaremos volume para aumentar as nosas posibilidades de éxito na reprodución. Dado que ás veces necesitas distraerte coa comida e o sono, e os golpes son limitados, probablemente preferirás que a automatización seleccione as nenas ou os homes que mellor se adapten aos teus gustos. Pelirrojas baixas ou morenas altas - depende de ti.

Recollida de datos

En primeiro lugar, necesitas moitos datos para unha precisión normal. Calquera persoa que se atopou coa aprendizaxe automática sabe o difícil que pode ser producir un conxunto de datos recollido e etiquetado correctamente. Teoricamente, calquera recurso similar será axeitado como fonte de datos, xa sexa Instagram ou outras redes sociais. Pero o mellor é adestrar naquelas mostras nas que a rede traballará no futuro.

Tomemos o repositorio como base Tinder Automation. As fotos de Tinder están sempre dispoñibles publicamente, pero a función "gústame" xa está limitada. Polo tanto, é necesario extraer todos os seres vivos dentro do radio e marcalos coidadosamente. Primeiro cómpre usar un script bastante sinxelo:

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)

Permitirache marcar o conxunto de datos o máis rápido posible con só dous botóns. A principal trampa reside no feito de que a biblioteca werkzeug rompeu a compatibilidade con versións anteriores e terá que verse obrigada a degradala. En caso contrario, xera este erro.

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'

Polo tanto, en requirements.txt cómpre escribir Werkzeug==0.16.1. Despois despegará.
O segundo problema é conseguir este mesmo token. O método estándar do repositorio non funcionou para min, pero conseguín obtelo desde a consola do programador. Para iso, vai a Ligazón e extrae a resposta á solicitude POST en www.facebook.com/v2.6/dialog/oauth/confirm?dpr=1. Dentro buscamos 'access_token'. Por algún motivo non funcionou a primeira vez, pero despois atopeino e codifiqueino no guión.

Requisitos do conxunto de datos

Hai varios requisitos clave para os conxuntos de datos de aprendizaxe automática:

  1. Adecuación
  2. Uniformidade
  3. Variedade

A suficiencia neste caso require polo menos 10000 fotografías para construír un modelo adecuado. Si, iso é moito. É por iso que os servizos como Amazon mecánica turca, onde por unha taxa podes delegar o marcado do teu conxunto de datos noutras persoas. Por outra banda, realmente queres que o teu bot lle guste ás marabillosas nenas asiáticas con cara de lúa ou ás nenas igualmente fermosas con raíces indias? Aínda así, o modelo debe reflectir o teu gusto.

Non hai problemas especiais coa variedade, todas as fotografías preséntanse desde varios ángulos e iluminación. En lentes, vestidos, bañadores e traxes de esquí. Pode xurdir un problema coa uniformidade do conxunto de datos. Idealmente, cando etiquetamos a nosa mostra, debería constar de partes aproximadamente iguais. Se acabas cun conxunto de datos "sesgado", terás que diluílo con fotografías doutras fontes. Terás que engadir outros máis atractivos, ou viceversa, determinarás en función do resultado do marcado. Teño algo bonito ao redor do 60%. Ou non son moi esixente, ou só teño sorte e hai moitas rapazas bonitas ao redor.

Tampouco descarto a hipótese de que hai moitos bots entre eles. Adestramos un bot que lle gustará a outros bots. Hai algo de ironía nisto.

Tratamento de datos

Temos un montón de fotos etiquetadas, pero son moi mesturadas. De día, de noite, de detrás e outros. Con pesar, entendo que ensinar a partir de fotografías desde un ángulo inverso non será especialmente eficaz, xa que a mostra será moi desigual. Polo tanto, a mellor opción sería usar as caras como un sinal de referencia de "bondade". Aínda así, para nós, como para outros primates, este é un parámetro fundamental.

Polo tanto, usemos Fervenzas de Haar. Este é un excelente algoritmo que permite atopar caras en imaxes cunha porcentaxe baixa de erros falsos positivos.

Como recoller 13 nenas por hora usando a aprendizaxe automática e Tinder
Isto descríbese con máis detalle no manual OpenCV

Na seguinte fase, despois de que só as caras estean na mostra, ten sentido eliminar a cor. De feito, dificilmente terás que escoller entre o fermoso morador azul de Pandora ou a beleza de pel verde.

Como recoller 13 nenas por hora usando a aprendizaxe automática e Tinder
Orixe

Na xente de Hue, a cor da pel non fai unha contribución significativa ás valoracións de atractivo.
Polo tanto, paga a pena simplificar o traballo da rede neuronal e deixar só escala de grises.

Edificio modelo

Quero dicir de inmediato que sen unha boa tarxeta de vídeo e CUDA, o máis probable é que simplemente non teña un modelo adestrado no tempo adecuado. Polo tanto, apunta inmediatamente a cálculos en nubes especializadas ou usando python-CUDA.

Tomei un exemplo básico de tres capas do autor do repositorio e, sorprendentemente, mostrou unha precisión de arredor do 72 %, o que é un bo resultado.

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 hai unha boa mostra, pode ser suficiente para obter un modelo viable.

Imos lanzar o bot

Como recoller 13 nenas por hora usando a aprendizaxe automática e Tinder

Grazas ao autor do repositorio por unha opción preparada para probar rapidamente a idea. De feito, funciona bastante ben na versión básica e, en principio, pódese lanzar no noso servidor alugado listo. Aínda non será posible adestrar; polo momento non ofrecemos máquinas virtuais con soporte CUDA para os cálculos, pero podes executar algo as 24 horas do día, os 7 días de hoxe, sen ningún problema. O bot é bastante lixeiro, polo que sería máis rendible tomar unha tarifa que pague polos recursos empregados.

Descubrimentos

Como recoller 13 nenas por hora usando a aprendizaxe automática e Tinder
Supoño que son moi bonito. E teño un mundo interior rico. Conseguín algo así como 13 partidos nunha hora. Ademais, varias veces as nenas escribiron primeiro.
Como resultado, acabamos con diálogos moi agradables, nos que dixen que entrei unicamente para xogar coa aprendizaxe automática e a etiquetaxe de datos. Unha das mozas estaba moi interesada, xa que ela mesma é unha programadora. Hai unha forte sensación de que acabará por ler esta publicación en Habré. Realmente espero que Oksana manteña o meu anonimato. 🙂
*axita a pata e di ola

Un pouco sobre o lado ético da cuestión

Para ser honesto, non me gusta toda a idea de robotizar as relacións entre homes e nenas. Hai algo moi correcto en botarlle a chaqueta sobre os ombreiros a un estraño frío que está só. Ou achégase a unha rapaza bonita nun café de verán e toma un café xuntos. Saia xa de detrás dos monitores.

O verán está ao redor. É hora de coñecerse.

Como recoller 13 nenas por hora usando a aprendizaxe automática e Tinder

Como recoller 13 nenas por hora usando a aprendizaxe automática e Tinder

Fonte: www.habr.com

Engadir un comentario