*NatĂŒrlich nur, um maschinelles Lernen zu erlernen. Unter den leicht unzufriedenen Blicken seiner geliebten Frau.
Es gibt wahrscheinlich keine Anwendung, die so einfach auf die Ebene der WirbelsÀulenreflexe einwirkt wie Tinder. Um es zu nutzen, brauchen Sie nur einen Finger zum Wischen und ein paar Neuronen, um die MÀdchen oder MÀnner auszuwÀhlen, die Ihnen am besten gefallen. Eine ideale Implementierung von Brute Force bei der Paarauswahl.
Ich entschied, dass dies eine gute Möglichkeit wĂ€re, ein wenig GefĂŒhl fĂŒr maschinelles Lernen auf einer neuen Grafikkarte zu bekommen. Jetzt muss ich meiner Frau nur noch erklĂ€ren, dass ich keine neue, dickere Frau brauche und nur neuronale Netze trainiere.

Was ist das Problem mit Dating-Netzwerken?
Es gab so eine Ressource â Ashley Madison. Konkret, mit dem Slogan âDas Leben ist kurz. Eine AffĂ€re haben." Das Hauptpublikum sind verheiratete MĂ€nner, die nebenbei eine AffĂ€re suchen. Auch die Monetarisierung macht SpaĂ â zusĂ€tzlich zum Standard âPunkte zum Liken und Schreiben ausgebenâ verlangten sie 19 US-Dollar, um das Konto eines Benutzers spurlos zu löschen.
Im Jahr 2015 wurde die Website auf natĂŒrliche Weise geleakt und 60 GB personenbezogener Daten gelangten an die Ăffentlichkeit. Neben vielen zerstörten Familien lieferte dieses Leck den Analysten viele interessante Informationen. Ich habe immer vermutet, dass es auf Dating-Seiten viel mehr MĂ€nner gibt, aber in diesem Fall stellte sich heraus, dass es ziemlich interessant war. Journalistin Annalee Newitz stellte fest, dass von 5 Millionen Nutzern nur 12 echten MĂ€dchenkonten Ă€hnelten und regelmĂ€Ăig genutzt wurden. Der Rest waren nur Bots, die mit mĂ€nnlichen Besuchern chatten.
Ein solches Ăberwiegen mĂ€nnlicher Accounts ist nicht nur fĂŒr diese Ressource typisch, sondern auch fĂŒr die meisten anderen Dating-Sites. Ich bin sicher, dass viele diese zweifellos unfaire Situation erlebt haben, wenn man eine Bekanntschaft sorgfĂ€ltig planen muss, das MĂ€dchen sich aber nur registrieren muss. Lassen wir die QualitĂ€t dieser Fangemeinde auĂer Acht, aber es ist unbestreitbar, dass sich das Gleichgewicht zwischen Angebot und Nachfrage eindeutig zugunsten der MĂ€dchen verschoben hat.
Tinder-Funktion

Der ideale Brutal Forcer im GeschlechterverhÀltnis
Das Hauptmerkmal dieser Plattform sind die geringen Kosten pro Bekanntschaft. Ein Zufall von zwei Wischbewegungen genĂŒgt und schon kommuniziert man mit einer potenziell interessanten Person. Das Problem besteht darin, dass das gleiche Ungleichgewicht zwischen den Geschlechtern dazu fĂŒhrt, dass die meisten MĂ€dchen Dutzende Matches pro Tag haben. Das bedeutet, dass sie höchstwahrscheinlich keine Zeit haben werden, Ihnen im Kreise der anderen Kandidaten Aufmerksamkeit zu schenken.
Es ist ganz klar, dass die Plattform wenig Möglichkeiten bietet, die tiefe innere Welt einer Person anhand eines anderthalb Sekunden langen Blicks auf ein Foto im Badeanzug oder beim Fahren eines modisch getönten Autos zu beurteilen. Wenn Sie also auf Ihren Fotos nicht einfach göttlich aussehen, haben Sie keine andere Wahl, als Ihre Chancen durch eine Adoption zu erhöhen bei einigen Arten. Einfach ausgedrĂŒckt: Wir werden rohe Gewalt anwenden und Volumen aufnehmen, um unsere Chancen auf einen Zuchterfolg zu erhöhen. Da Sie manchmal durch Essen und Schlafen abgelenkt werden mĂŒssen und die Anzahl der Wischbewegungen begrenzt ist, werden Sie es wahrscheinlich vorziehen, dass automatisch die MĂ€dchen oder MĂ€nner ausgewĂ€hlt werden, die Ihrem Geschmack am besten entsprechen. Kleine Rothaarige oder groĂe BrĂŒnette â es liegt ganz bei Ihnen.
Daten sammeln
ZunĂ€chst einmal benötigt man fĂŒr eine normale Genauigkeit viele Daten. Jeder, der schon einmal mit maschinellem Lernen in BerĂŒhrung gekommen ist, weiĂ, wie schwierig es sein kann, einen korrekt erfassten und gekennzeichneten Datensatz zu erstellen. Als Datenquelle eignet sich theoretisch jede Ă€hnliche Ressource, sei es Instagram oder andere soziale Netzwerke. Am besten ist es jedoch, an den Beispielen zu trainieren, an denen das Netzwerk in Zukunft arbeiten wird.
Nehmen wir das Repository als Grundlage . Die Fotos von Tinder sind immer öffentlich zugĂ€nglich, die âGefĂ€llt mirâ-Funktion ist jedoch bereits eingeschrĂ€nkt. Daher ist es notwendig, alle Lebewesen im Umkreis zu extrahieren und sorgfĂ€ltig zu markieren. Zuerst mĂŒssen Sie ein ziemlich einfaches Skript verwenden:
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)
Damit können Sie den Datensatz schnellstmöglich mit nur zwei SchaltflĂ€chen markieren. Die gröĂte Gefahr besteht darin, dass die Werkzeug-Bibliothek keine AbwĂ€rtskompatibilitĂ€t aufweist und zu einem Downgrade gezwungen werden muss. Andernfalls wird dieser Fehler ausgegeben.
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' Daher mĂŒssen Sie in ârequirements.txtâ Werkzeug==0.16.1 schreiben. Dann wird es losgehen.
Das zweite Problem besteht darin, genau diesen Token zu bekommen. Die Standardmethode aus dem Repository hat bei mir nicht funktioniert, aber ich habe es geschafft, sie von der Entwicklerkonsole abzurufen. Gehen Sie dazu zu und extrahieren Sie die Antwort auf die POST-Anfrage in . Darin suchen wir nach âaccess_tokenâ. Aus irgendeinem Grund hat es beim ersten Mal nicht funktioniert, aber dann habe ich es gefunden und fest in das Skript einprogrammiert.
Anforderungen an den Datensatz
Es gibt mehrere wichtige Anforderungen an DatensĂ€tze fĂŒr maschinelles Lernen:
- Ausreichend
- GleichmĂ€Ăigkeit
- Vielfalt
In diesem Fall sind mindestens 10000 Fotos erforderlich, um ein adĂ€quates Modell zu erstellen. Ja, das ist eine Menge. Das ist eigentlich der Grund, warum Dienste so beliebt sind Hier können Sie gegen eine GebĂŒhr das Markup Ihres Datensatzes an andere Personen delegieren. Möchten Sie andererseits wirklich, dass Ihr Bot wundervolle asiatische MĂ€dchen mit Mondgesicht oder ebenso schöne MĂ€dchen mit indischen Wurzeln mag? Dennoch sollte das Modell Ihren Geschmack widerspiegeln.
Es gibt keine besonderen Probleme mit der Abwechslung; alle Fotos werden aus verschiedenen Blickwinkeln und mit unterschiedlicher Beleuchtung prĂ€sentiert. In Brillen, Kleidern, BadeanzĂŒgen und SkianzĂŒgen. Es kann zu Problemen mit der Einheitlichkeit des Datensatzes kommen. Wenn wir unsere Probe beschriften, sollte sie idealerweise aus ungefĂ€hr gleichen Teilen bestehen. Wenn Sie am Ende einen âverzerrtenâ Datensatz erhalten, mĂŒssen Sie ihn mit Fotos aus anderen Quellen verwĂ€ssern. Sie mĂŒssen attraktivere hinzufĂŒgen oder umgekehrt, Sie bestimmen sie anhand des Markup-Ergebnisses. Ich habe etwas bekommen, das zu etwa 60 % hĂŒbsch ist. Entweder bin ich nicht zu wĂ€hlerisch, oder ich habe einfach GlĂŒck und es sind viele hĂŒbsche MĂ€dchen da.
Auch die Hypothese, dass es unter ihnen viele Bots gibt, schlieĂe ich nicht aus. Wir trainieren einen Bot, der andere Bots mögen wird. Darin liegt eine gewisse Ironie.
Datenverarbeitung
Wir haben eine Menge markierter Fotos, aber sie sind sehr gemischt. TagsĂŒber, nachts, von hinten und andere. Mit Bedauern verstehe ich, dass das Unterrichten anhand von Fotos aus einem umgekehrten Winkel nicht besonders effektiv sein wird, da die Probe sehr uneben sein wird. Daher wĂ€re es die beste Option, Gesichter als Referenzzeichen fĂŒr âNiedlichkeitâ zu verwenden. Dennoch ist dies fĂŒr uns, wie auch fĂŒr andere Primaten, ein SchlĂŒsselparameter.
Deshalb verwenden wir . Dies ist ein hervorragender Algorithmus, der es Ihnen ermöglicht, Gesichter in Bildern mit einem geringen Prozentsatz falsch positiver Fehler zu finden.

Dies wird im Handbuch genauer beschrieben
Im nĂ€chsten Schritt, wenn nur noch Gesichter in der Probe vorhanden sind, ist es sinnvoll, die Farbe zu entfernen. TatsĂ€chlich mĂŒssen Sie sich kaum zwischen Pandoras wunderschöner blauer Bewohnerin oder der grĂŒnhĂ€utigen Schönheit entscheiden.

Bei Hue-Menschen hat die Hautfarbe keinen wesentlichen Einfluss auf die AttraktivitÀtsbewertung.
Daher lohnt es sich, die Arbeit des neuronalen Netzwerks zu vereinfachen und nur Graustufen zu belassen.
Modellbau
Ich möchte gleich sagen, dass Sie ohne eine gute Grafikkarte und CUDA höchstwahrscheinlich einfach nicht in angemessener Zeit ein trainiertes Modell erhalten werden. Streben Sie daher sofort nach Berechnungen in spezialisierten Clouds oder mit Python-CUDA.
Ich habe ein einfaches dreischichtiges Beispiel vom Autor des Repositorys ĂŒbernommen und ĂŒberraschenderweise zeigte es eine Genauigkeit von etwa 72 %, was ein recht gutes Ergebnis ist.
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'])
Wenn ein gutes Muster vorliegt, kann es durchaus ausreichen, ein funktionsfÀhiges Modell zu erhalten.
Lassen Sie uns den Bot starten

Vielen Dank an den Autor des Repositorys fĂŒr eine vorgefertigte Option zum schnellen Testen der Idee. TatsĂ€chlich funktioniert es in der Basisversion recht gut und kann grundsĂ€tzlich auf unserem gestartet werden . Ein Training wird noch nicht möglich sein; im Moment stellen wir keine virtuellen Maschinen mit CUDA-UnterstĂŒtzung fĂŒr Berechnungen zur VerfĂŒgung, aber Sie können etwas rund um die Uhr ohne Probleme ausfĂŒhren. Der Bot ist recht leichtgewichtig, daher wĂ€re es rentabler, einen Tarif zu wĂ€hlen, der die verbrauchten Ressourcen abdeckt.
Ergebnisse

Ich glaube, ich bin sehr sĂŒĂ. Und ich habe eine reiche innere Welt. Ich habe innerhalb einer Stunde etwa 13 Treffer erzielt. AuĂerdem schrieben die MĂ€dchen mehrmals zuerst.
Das Ergebnis waren sehr schöne Dialoge, in denen ich sagte, dass ich nur gekommen bin, um mit maschinellem Lernen und Datenkennzeichnung herumzuspielen. Eines der MĂ€dchen war Ă€uĂerst interessiert, da sie selbst Entwicklerin ist. Es besteht das starke GefĂŒhl, dass sie diesen Beitrag auf HabrĂ© irgendwann lesen wird. Ich hoffe wirklich, dass Oksana meine AnonymitĂ€t wahrt. đ
*winkt mit der Pfote und sagt Hallo
Ein wenig ĂŒber die ethische Seite des Problems
Ehrlich gesagt gefĂ€llt mir die Idee, die Beziehungen zwischen MĂ€nnern und MĂ€dchen zu robotisieren, nicht. Es ist etwas sehr Richtiges, einem kalten Fremden, der allein steht, die Jacke ĂŒber die Schultern zu werfen. Oder gehen Sie in einem SommercafĂ© auf ein hĂŒbsches MĂ€dchen zu und trinken Sie gemeinsam Kaffee. Kommen Sie schon jetzt hinter den Monitoren hervor.
Der Sommer ist allgegenwÀrtig. Es ist Zeit, sich kennenzulernen.
Source: habr.com
