Como pegar 13 garotas por hora usando aprendizado de máquina e Tinder

*Puramente para aprender Machine Learning, é claro. Sob o olhar um pouco insatisfeito de sua amada esposa.

Provavelmente não existe um aplicativo tão simples ao nível dos reflexos espinhais como o Tinder. Para usá-lo, você só precisa deslizar um dedo e alguns neurônios para escolher as meninas ou homens que mais gosta. Uma implementação ideal de força bruta na seleção de pares.

Decidi que essa seria uma boa maneira de ter uma ideia do aprendizado de máquina em uma nova placa gráfica. Só falta explicar à minha esposa que não preciso de uma nova mulher mais gorda e estou apenas treinando redes neurais.

Como pegar 13 garotas por hora usando aprendizado de máquina e Tinder

Qual é o problema das redes de namoro?

Existia tal recurso - Ashley Madison. Específico, com o slogan “A vida é curta. Ter um caso." O público principal são homens casados ​​em busca de um caso paralelo. A monetização também é divertida – além do padrão “gastar pontos para curtir e escrever”, eles pediram US$ 19 para excluir a conta de um usuário sem deixar rastros.

Em 2015, o site vazou naturalmente e 60 GB de dados pessoais vazaram para domínio público. Além de muitas famílias destruídas, esse vazamento forneceu muitas informações interessantes aos analistas. Sempre suspeitei que havia muito mais homens nos sites de namoro, mas neste caso acabou por ser bastante interessante. Jornalista Annalee Newitz analisando dados vazados descobriram que de 5 milhões de usuários, apenas 12 mil eram semelhantes a contas reais de meninas e eram usadas regularmente. O resto eram apenas bots que conversavam com visitantes do sexo masculino.

Essa preponderância em relação às contas masculinas é típica não apenas deste recurso, mas também da maioria dos outros sites de namoro. Tenho certeza que muitos já se depararam com essa situação indubitavelmente injusta, quando é preciso planejar cuidadosamente um relacionamento, mas a garota só precisa se registrar. Deixemos de lado a qualidade dessa multidão de torcedores, mas é inegável o fato de que o equilíbrio entre oferta e demanda está claramente alterado em favor das meninas.

Recurso Tinder

Como pegar 13 garotas por hora usando aprendizado de máquina e Tinder
A força bruta ideal nas relações de gênero

A principal característica desta plataforma é o baixo custo por conhecimento. Basta uma coincidência de dois toques e você já está se comunicando com uma pessoa potencialmente interessante. O problema é que o mesmo desequilíbrio de género leva ao facto de a maioria das raparigas ter dezenas de jogos por dia. Isso significa que eles provavelmente não terão tempo para prestar atenção em você entre outros candidatos.

É bastante claro que a plataforma implica poucas oportunidades de avaliar o mundo interior profundo de uma pessoa a partir de um segundo e meio de olhar para uma foto em um maiô ou dirigindo um carro colorido da moda. Portanto, se você não parece simplesmente divino em suas fotos, você não tem escolha a não ser aumentar suas chances adotando estratégia-r em algumas espécies. Simplificando, usaremos força bruta e aumentaremos o volume para aumentar nossas chances de sucesso reprodutivo. Como às vezes você precisa se distrair com a comida e o sono, e os deslizamentos são limitados, você provavelmente preferirá que a automação selecione as meninas ou os homens que melhor atendem ao seu gosto. Ruivas baixas ou morenas altas - você decide.

Coletando dados

Em primeiro lugar, você precisa de muitos dados para obter uma precisão normal. Qualquer pessoa que já tenha experimentado o aprendizado de máquina sabe como pode ser difícil produzir um conjunto de dados coletado e rotulado corretamente. Teoricamente, qualquer recurso semelhante será adequado como fonte de dados, seja o Instagram ou outras redes sociais. Mas é melhor treinar nas amostras nas quais a rede funcionará no futuro.

Vamos tomar o repositório como base Automação do Tinder. As fotos do Tinder estão sempre disponíveis publicamente, mas a função “curtir” já é limitada. Portanto, é necessário extrair todos os seres vivos dentro do raio e marcá-los cuidadosamente. Primeiro você precisa usar um script bastante simples:

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)

Isso permitirá que você marque o conjunto de dados o mais rápido possível com apenas dois botões. A principal armadilha reside no fato de que a biblioteca werkzeug quebrou a compatibilidade com versões anteriores e terá que ser forçada a fazer downgrade. Caso contrário, isso gerará esse 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'

Portanto, em requisitos.txt você precisa escrever Werkzeug==0.16.1. Então ele irá decolar.
O segundo problema é obter esse mesmo token. O método padrão do repositório não funcionou para mim, mas consegui obtê-lo no console do desenvolvedor. Para fazer isso, vá para link e extraia a resposta à solicitação POST em www.facebook.com/v2.6/dialog/oauth/confirm?dpr=1. Dentro procuramos por 'access_token'. Por alguma razão, não funcionou da primeira vez, mas então eu encontrei e codifiquei no script.

Requisitos do conjunto de dados

Existem vários requisitos principais para conjuntos de dados de aprendizado de máquina:

  1. Adequação
  2. Uniformidade
  3. Разнообразие

A suficiência neste caso requer pelo menos 10000 fotografias para construir um modelo adequado. Sim, isso é muito. Na verdade, é por isso que serviços como Amazon Mechanical Turk, onde, mediante o pagamento de uma taxa, você pode delegar a marcação do seu conjunto de dados a outras pessoas. Por outro lado, você realmente quer que seu bot goste de garotas asiáticas maravilhosas com cara de lua ou de garotas igualmente bonitas com raízes indianas? Ainda assim, o modelo deve refletir o seu gosto.

Não há problemas particulares de variedade: todas as fotografias são apresentadas de vários ângulos e iluminação. Em óculos, vestidos, trajes de banho e trajes de esqui. Pode surgir um problema com a uniformidade do conjunto de dados. Idealmente, quando rotulamos a nossa amostra, ela deve consistir em partes aproximadamente iguais. Se você acabar com um conjunto de dados “distorcido”, terá que diluí-lo com fotografias de outras fontes. Você precisará adicionar outros mais atraentes, ou vice-versa, você os determinará com base no resultado da marcação. Consegui algo em torno de 60% bonito. Ou não sou muito exigente ou apenas tenho sorte e há muitas garotas bonitas por aí.

Também não descarto a hipótese de que existam muitos bots entre eles. Treinamos um bot que vai gostar de outros bots. Há alguma ironia nisso.

Processamento de dados

Temos um monte de fotos marcadas, mas elas estão muito misturadas. Diurno, noturno, por trás e outros. Com pesar, entendo que ensinar a partir de fotografias em ângulo reverso não será particularmente eficaz, pois a amostra será muito desigual. Portanto, a melhor opção seria usar rostos como sinal de referência de “fofura”. Ainda assim, para nós, como para outros primatas, este é um parâmetro fundamental.

Portanto, vamos usar Cascatas Haar. Este é um excelente algoritmo que permite encontrar rostos em imagens com baixo percentual de erros de falsos positivos.

Como pegar 13 garotas por hora usando aprendizado de máquina e Tinder
Isso é descrito com mais detalhes no manual OpenCV

No próximo estágio, depois que apenas os rostos estiverem na amostra, faz sentido remover a cor. Na verdade, você dificilmente terá que escolher entre a bela habitante azul de Pandora ou a bela de pele verde.

Como pegar 13 garotas por hora usando aprendizado de máquina e Tinder
Fonte

Nas pessoas de Hue, a cor da pele não contribui significativamente para as classificações de atratividade.
Portanto, vale a pena simplificar o trabalho da rede neural e deixar apenas a escala de cinza.

Construção de modelo

Quero dizer desde já que sem uma boa placa de vídeo e CUDA, você provavelmente simplesmente não conseguirá um modelo treinado no tempo adequado. Portanto, busque imediatamente cálculos em nuvens especializadas ou usando python-CUDA.

Peguei um exemplo básico de três camadas do autor do repositório e, surpreendentemente, mostrou uma precisão de cerca de 72%, o que é um resultado bastante bom.

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 houver uma boa amostra, então poderá ser suficiente para obter um modelo viável.

Vamos lançar o bot

Como pegar 13 garotas por hora usando aprendizado de máquina e Tinder

Agradecimentos ao autor do repositório pela opção pronta para testar rapidamente a ideia. Na verdade, funciona muito bem na versão básica e pode, em princípio, ser lançado no nosso servidor alugado pronto. Ainda não será possível treinar; no momento não disponibilizamos máquinas virtuais com suporte CUDA para cálculos, mas você pode executar algo 24 horas por dia, 7 dias por semana, sem problemas. O bot é bastante leve, por isso seria mais lucrativo adotar uma tarifa que pague pelos recursos utilizados.

Descobertas

Como pegar 13 garotas por hora usando aprendizado de máquina e Tinder
Acho que sou muito fofo. E eu tenho um rico mundo interior. Consegui algo em torno de 13 partidas em uma hora. Além disso, várias vezes as meninas escreveram primeiro.
Como resultado, terminamos com diálogos muito legais, onde eu disse que entrei apenas para brincar com aprendizado de máquina e rotulagem de dados. Uma das meninas ficou extremamente interessada, já que ela mesma é desenvolvedora. Há uma forte sensação de que ela acabará lendo este post sobre Habré. Eu realmente espero que Oksana mantenha meu anonimato. 🙂
*acena com a pata e diz oi

Um pouco sobre o lado ético da questão

Para ser sincero, não gosto da ideia de robotizar as relações entre homens e meninas. Há algo de muito certo em jogar sua jaqueta sobre os ombros de um estranho frio que está sozinho. Ou aproxime-se de uma garota bonita em um café de verão e tomem café juntos. Saia já de trás dos monitores.

O verão está por toda parte. É hora de nos conhecer.

Como pegar 13 garotas por hora usando aprendizado de máquina e Tinder

Como pegar 13 garotas por hora usando aprendizado de máquina e Tinder

Fonte: habr.com

Adicionar um comentário