*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.
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
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
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
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
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
Requisitos do conjunto de dados
Existem vários requisitos principais para conjuntos de dados de aprendizado de máquina:
- Adequação
- Uniformidade
- Разнообразие
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
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
Isso é descrito com mais detalhes no manual
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.
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
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
Descobertas
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.
Fonte: habr.com