*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
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
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
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
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
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 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
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