Cómo ligar 13 chicas por hora usando aprendizaje automático y Tinder

*Por supuesto, únicamente por aprender Machine Learning. Bajo la mirada ligeramente insatisfecha de su amada esposa.

Probablemente no exista una aplicación tan sencilla a nivel de reflejos espinales como Tinder. Para poder utilizarlo sólo necesitas deslizar un dedo y unas cuantas neuronas para elegir a las chicas u hombres que más te gusten. Una implementación ideal de la fuerza bruta en la selección de parejas.

Decidí que esta sería una buena manera de tener una idea del aprendizaje automático en una nueva tarjeta gráfica. Todo lo que queda es explicarle a mi esposa que no necesito una nueva mujer más gorda y que solo estoy entrenando redes neuronales.

Cómo ligar 13 chicas por hora usando aprendizaje automático y Tinder

¿Cuál es el problema con las redes de citas?

Existía tal recurso: Ashley Madison. En concreto, con el lema “La vida es corta. Tener una aventura." El público principal son hombres casados ​​que buscan una aventura paralela. La monetización también es divertida: además del estándar "gastar puntos para dar me gusta y escribir", pidieron $19 para eliminar la cuenta de un usuario sin dejar rastro.

En 2015, el sitio se filtró naturalmente y 60 GB de datos personales se filtraron al dominio público. Además de muchas familias destruidas, esta filtración proporcionó mucha información interesante a los analistas. Siempre sospeché que había muchos más hombres en los sitios de citas, pero en este caso resultó bastante interesante. Periodista Annalee Newitz analizando datos filtrados descubrió que de 5 millones de usuarios, sólo 12 eran similares a cuentas de chicas reales y se utilizaban con regularidad. El resto eran sólo robots que charlaban con visitantes masculinos.

Esta preponderancia hacia las cuentas masculinas es típica no sólo de este recurso, sino también de la mayoría de los demás sitios de citas. Estoy seguro de que muchos se han encontrado con esta situación indudablemente injusta, cuando hay que planificar cuidadosamente una cita, pero la chica solo necesita registrarse. Dejemos de lado la calidad de esta multitud de fans, pero lo cierto es que el equilibrio entre la oferta y la demanda se inclina claramente a favor de las chicas.

Función de yesca

Cómo ligar 13 chicas por hora usando aprendizaje automático y Tinder
La fuerza bruta ideal en las relaciones de género

La característica principal de esta plataforma es el bajo costo por conocido. Basta con una coincidencia de dos golpes y ya te estás comunicando con una persona potencialmente interesante. El problema es que el mismo desequilibrio de género lleva a que la mayoría de las chicas tengan decenas de partidos al día. Esto significa que lo más probable es que no tengan tiempo de prestarle atención a usted entre otros candidatos.

Está bastante claro que la plataforma implica pocas oportunidades para evaluar el profundo mundo interior de una persona con un vistazo de un segundo y medio a una fotografía en traje de baño o al volante de un coche tintado a la moda. Por eso, si no luces simplemente divina en tus fotografías, no te queda más remedio que aumentar tus posibilidades adoptando estrategia r en algunas especies. En pocas palabras, utilizaremos la fuerza bruta y capturaremos volumen para aumentar nuestras posibilidades de éxito reproductivo. Como a veces necesitas distraerte con la comida y el sueño, y los deslizamientos son limitados, probablemente preferirás que la automatización seleccione a las chicas u hombres que mejor se adapten a tus gustos. Pelirrojas bajas o morenas altas, tú decides.

Recolectando datos

En primer lugar, se necesitan muchos datos para una precisión normal. Cualquiera que se haya encontrado con el aprendizaje automático sabe lo difícil que puede ser producir un conjunto de datos recopilados y etiquetados correctamente. En teoría, cualquier recurso similar será adecuado como fuente de datos, ya sea Instagram u otras redes sociales. Pero es mejor entrenar con aquellas muestras en las que funcionará la red en el futuro.

Tomemos el repositorio como base. Automatización de yesca. Las fotos de Tinder siempre están disponibles públicamente, pero la función "me gusta" ya es limitada. Por lo tanto, es necesario extraer todos los seres vivos dentro del radio y marcarlos cuidadosamente. Primero necesitas usar un script bastante simple:

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)

Le permitirá marcar el conjunto de datos lo más rápido posible con solo dos botones. El principal problema radica en el hecho de que la biblioteca werkzeug ha roto la compatibilidad con versiones anteriores y tendrá que verse obligada a degradarla. De lo contrario arroja este error.

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'

Por lo tanto, en requisitos.txt debes escribir Werkzeug==0.16.1. Entonces despegará.
El segundo problema es conseguir esta misma ficha. El método estándar del repositorio no me funcionó, pero logré obtenerlo desde la consola del desarrollador. Para hacer esto, vaya a enlace y extraer la respuesta a la solicitud POST en www.facebook.com/v2.6/dialog/oauth/confirm?dpr=1. Dentro buscamos 'access_token'. Por alguna razón no funcionó la primera vez, pero luego lo encontré y lo codifiqué en el script.

Requisitos del conjunto de datos

Existen varios requisitos clave para los conjuntos de datos de aprendizaje automático:

  1. Adecuación
  2. Uniformidad
  3. diversidad

La suficiencia en este caso requiere al menos 10000 fotografías para construir un modelo adecuado. Sí, eso es mucho. En realidad, esta es la razón por la que servicios como Amazon Mechanical Turk, donde por una tarifa puedes delegar el marcado de tu conjunto de datos a otras personas. Por otro lado, ¿realmente quieres que a tu bot le gusten las maravillosas chicas asiáticas con cara de luna o las chicas igualmente hermosas con raíces indias? Aún así, el modelo debe reflejar tu gusto.

No hay problemas especiales con la variedad, todas las fotografías se presentan desde distintos ángulos e iluminación. En gafas, vestidos, bañadores y monos de esquí. Puede surgir un problema con la uniformidad del conjunto de datos. Idealmente, cuando etiquetamos nuestra muestra, debería constar de partes aproximadamente iguales. Si termina con un conjunto de datos "sesgado", tendrá que diluirlo con fotografías de otras fuentes. Deberá agregar otros más atractivos, o viceversa, los determinará en función del resultado del marcado. Obtuve algo alrededor del 60% bonito. O no soy demasiado exigente o simplemente tengo suerte y hay muchas chicas guapas por ahí.

Tampoco descarto la hipótesis de que entre ellos haya muchos bots. Entrenamos un bot al que le gustarán otros bots. Hay algo de ironía en esto.

Procesamiento de datos

Tenemos un montón de fotos etiquetadas, pero están muy mezcladas. De día, de noche, de espaldas y otros. Lamentablemente, entiendo que enseñar a partir de fotografías desde un ángulo inverso no será especialmente eficaz, ya que la muestra quedará muy desigual. Por lo tanto, la mejor opción sería utilizar caras como signo de referencia de “ternura”. Aún así, para nosotros, como para otros primates, este es un parámetro clave.

Por lo tanto, usemos cascadas de pelo. Este es un excelente algoritmo que le permite encontrar rostros en imágenes con un bajo porcentaje de errores de falsos positivos.

Cómo ligar 13 chicas por hora usando aprendizaje automático y Tinder
Esto se describe con más detalle en el manual. OpenCV

En la siguiente etapa, después de que solo haya caras en la muestra, tiene sentido eliminar el color. De hecho, difícilmente tendrás que elegir entre la hermosa habitante azul de Pandora o la belleza de piel verde.

Cómo ligar 13 chicas por hora usando aprendizaje automático y Tinder
fuente

En la gente de Hue, el color de la piel no contribuye significativamente a las calificaciones de atractivo.
Por lo tanto, vale la pena simplificar el trabajo de la red neuronal y dejar solo la escala de grises.

Construcción del modelo

Quiero decir de inmediato que sin una buena tarjeta de video y CUDA, lo más probable es que simplemente no obtenga un modelo entrenado en el tiempo adecuado. Por lo tanto, busque inmediatamente realizar cálculos en nubes especializadas o utilizando Python-CUDA.

Tomé un ejemplo básico de tres capas del autor del repositorio y, sorprendentemente, mostró una precisión de alrededor del 72%, lo cual es un resultado bastante bueno.

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

Si hay una buena muestra, entonces puede ser suficiente para obtener un modelo viable.

Lanzamos el bot

Cómo ligar 13 chicas por hora usando aprendizaje automático y Tinder

Gracias al autor del repositorio por una opción preparada para probar rápidamente la idea. De hecho, funciona bastante bien en la versión básica y, en principio, puede ejecutarse en nuestro servidor alquilado listo para usar. No será posible entrenar todavía; por el momento no proporcionamos máquinas virtuales con soporte CUDA para cálculos, pero puedes ejecutar algo las 24 horas del día, los 7 días de la semana sin ningún problema. El robot es bastante liviano, por lo que sería más rentable aceptar una tarifa que pague por los recursos utilizados.

resultados

Cómo ligar 13 chicas por hora usando aprendizaje automático y Tinder
Supongo que soy muy lindo. Y tengo un rico mundo interior. Obtuve algo así como 13 partidos en una hora. Además, varias veces las chicas escribieron primero.
Como resultado, terminamos con diálogos muy agradables, donde dije que había venido únicamente para jugar con el aprendizaje automático y el etiquetado de datos. Una de las chicas estaba muy interesada, ya que ella misma es desarrolladora. Existe un fuerte sentimiento de que eventualmente leerá esta publicación sobre Habré. Realmente espero que Oksana mantenga mi anonimato. 🙂
*mueve la pata y saluda

Un poco sobre el lado ético del tema.

Para ser honesto, no me gusta la idea de robotizar las relaciones entre hombres y niñas. Hay algo muy correcto en arrojar la chaqueta sobre los hombros de un extraño frío que está solo. O acercarse a una chica guapa en un café de verano y tomar café juntos. Sal ya de detrás de los monitores.

El verano está por todas partes. Es hora de conocerse.

Cómo ligar 13 chicas por hora usando aprendizaje automático y Tinder

Cómo ligar 13 chicas por hora usando aprendizaje automático y Tinder

Fuente: habr.com

Añadir un comentario