*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.
¿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
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
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
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.
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
Requisitos del conjunto de datos
Existen varios requisitos clave para los conjuntos de datos de aprendizaje automático:
- Adecuación
- Uniformidad
- 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
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
Esto se describe con más detalle en el manual.
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.
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
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
resultados
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.
Fuente: habr.com