Jak vyzvednout 13 dívek za hodinu pomocí strojového učení a Tinderu

*Čistě kvůli výuce strojového učení, samozřejmě. Pod lehce nespokojeným pohledem své milované ženy.

Pravděpodobně neexistuje žádná tak jednoduchá aplikace na úrovni míšních reflexů jako Tinder. Abyste ji mohli používat, potřebujete pouze jeden prst k přejetí a několik neuronů k výběru dívek nebo mužů, kteří se vám nejvíce líbí. Ideální implementace hrubé síly při výběru páru.

Rozhodl jsem se, že by to byl dobrý způsob, jak si trochu vyzkoušet strojové učení na nové grafické kartě. Zbývá jen vysvětlit své ženě, že nepotřebuji novou tlustší ženu a jen trénuji neuronové sítě.

Jak vyzvednout 13 dívek za hodinu pomocí strojového učení a Tinderu

Jaký je problém seznamovacích sítí?

Takový zdroj existoval - Ashley Madison. Specifický, se sloganem „Život je krátký. Mít poměr." Hlavním publikem jsou ženatí muži, kteří hledají poměr na straně. Zpeněžování je také zábavné – kromě standardního „utrácení bodů za lajkování a psaní“ požádali o 19 dolarů za smazání uživatelského účtu beze stopy.

V roce 2015 stránka přirozeně unikla a 60 GB osobních údajů uniklo do veřejné sféry. Kromě mnoha zničených rodin poskytl tento únik analytikům mnoho zajímavých informací. Vždycky jsem tušila, že na seznamkách je mnohem víc mužů, ale v tomto případě to dopadlo docela zajímavě. Novinářka Annalee Newitz analýzu uniklých dat zjistili, že z 5 milionů uživatelů bylo pouze 12 000 podobných skutečným dívčím účtům a byly používány pravidelně. Zbytek byli jen roboti, kteří si povídali s mužskými návštěvníky.

Taková převaha mužských účtů je typická nejen pro tento zdroj, ale i pro většinu ostatních seznamovacích webů. Jsem si jist, že mnozí se setkali s touto bezesporu neférovou situací, kdy si musíte pečlivě naplánovat seznámení, ale dívka se stačí zaregistrovat. Kvalitu tohoto zástupu fanoušků nechme stranou, ale fakt je nepopiratelný, že rovnováha mezi nabídkou a poptávkou je jednoznačně posunuta ve prospěch dívek.

Funkce Tinder

Jak vyzvednout 13 dívek za hodinu pomocí strojového učení a Tinderu
Ideální hrubá síla v genderových vztazích

Hlavním rysem této platformy je nízká cena za seznámení. Stačí náhoda dvou tahů a už komunikujete s potenciálně zajímavou osobou. Problém je, že stejná genderová nevyváženost vede k tomu, že většina dívek bude mít desítky zápasů denně. To znamená, že s největší pravděpodobností nebudou mít čas se vám mezi ostatními kandidáty věnovat.

Je zcela jasné, že platforma implikuje malou příležitost posoudit hluboký vnitřní svět člověka z jednoho a půl vteřinového pohledu na fotku v plavkách nebo řízení módního tónovaného auta. Pokud tedy na svých fotografiích nevypadáte prostě božsky, nezbývá vám, než zvýšit své šance adopcí r-strategie u některých druhů. Jednoduše řečeno, použijeme hrubou sílu a nabereme objem, abychom zvýšili naše šance na chovatelský úspěch. Vzhledem k tomu, že se občas potřebujete rozptýlit jídlem a spánkem, a tahy jsou omezené, budete pravděpodobně preferovat automatizaci výběru dívek nebo mužů, kteří nejlépe vyhovují vašemu vkusu. Krátké zrzky nebo vysoké brunetky – je to na vás.

Sbírat data

Pro normální přesnost potřebujete v první řadě hodně dat. Každý, kdo se setkal se strojovým učením, ví, jak obtížné může být vytvořit správně shromážděný a označený soubor dat. Teoreticky bude jako zdroj dat vhodný jakýkoli podobný zdroj, ať už je to Instagram nebo jiné sociální sítě. Nejlepší je ale trénovat na těch vzorcích, na kterých bude síť v budoucnu fungovat.

Vezměme si jako základ úložiště Automatizace Tinder. Fotografie Tinderu jsou vždy veřejně dostupné, ale funkce „like“ je již omezena. Proto je nutné vytěžit všechny živé věci v okruhu a pečlivě je označit. Nejprve musíte použít poměrně jednoduchý skript:

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)

Umožní vám to označit datovou sadu co nejrychleji pomocí pouhých dvou tlačítek. Klíčové úskalí spočívá ve skutečnosti, že knihovna werkzeug prolomila zpětnou kompatibilitu a bude muset být nucena přejít na nižší verzi. Jinak vyhodí tuto chybu.

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'

Proto je třeba v souboru requirements.txt napsat Werkzeug==0.16.1. Pak to vzlétne.
Druhým problémem je získat právě tento token. Standardní metoda z úložiště mi nefungovala, ale podařilo se mi ji získat z vývojářské konzole. Chcete-li to provést, přejděte na stránku odkaz a extrahujte odpověď na požadavek POST do www.facebook.com/v2.6/dialog/oauth/confirm?dpr=1. Uvnitř hledáme 'access_token'. Z nějakého důvodu to napoprvé nefungovalo, ale pak jsem to našel a napevno zakódoval do skriptu.

Požadavky na datovou sadu

Existuje několik klíčových požadavků na datové sady strojového učení:

  1. Přiměřenost
  2. Jednotnost
  3. Odrůda

Dostatek v tomto případě vyžaduje alespoň 10000 XNUMX fotografií pro stavbu adekvátního modelu. Ano, to je hodně. To je vlastně důvod, proč se služby líbí Amazon Mechanical Turk, kde můžete za poplatek delegovat označení vašeho datasetu na další osoby. Na druhou stranu, opravdu chcete, aby se vašemu robotovi líbily nádherné asijské dívky s měsíční tváří nebo stejně krásné dívky s indickými kořeny? Přesto by model měl odrážet váš vkus.

S rozmanitostí nejsou žádné zvláštní problémy, všechny fotografie jsou prezentovány z různých úhlů a osvětlení. V brýlích, šatech, plavkách i lyžařských oblecích. Problém může nastat s jednotností datové sady. V ideálním případě, když náš vzorek označíme, měl by se skládat z přibližně stejných částí. Pokud skončíte se „zkresleným“ souborem dat, budete jej muset naředit fotografiemi z jiných zdrojů. Budete muset přidat atraktivnější, nebo naopak, určíte je na základě výsledku označení. Mám něco kolem 60% krásné. Buď nejsem moc vybíravý, nebo mám prostě štěstí a kolem je spousta hezkých holek.

Nezpochybňuji ani hypotézu, že je mezi nimi mnoho botů. Trénujeme robota, který bude mít rád ostatní roboty. Je v tom jistá ironie.

Zpracování dat

Máme spoustu označených fotografií, ale jsou velmi smíšené. Denní, noční, zezadu a další. S lítostí chápu, že výuka z fotografií z opačného úhlu nebude zvláště účinná, protože vzorek bude velmi nerovnoměrný. Nejlepší možností by proto bylo použít tváře jako referenční znak „roztomilost“. Přesto je to pro nás, stejně jako pro ostatní primáty, klíčový parametr.

Proto použijme Haarovy kaskády. Jedná se o vynikající algoritmus, který vám umožňuje najít tváře na snímcích s nízkým procentem falešně pozitivních chyb.

Jak vyzvednout 13 dívek za hodinu pomocí strojového učení a Tinderu
Toto je podrobněji popsáno v návodu OpenCV

V další fázi, poté, co jsou ve vzorku pouze tváře, má smysl odstranit barvu. Ve skutečnosti si sotva budete muset vybrat mezi krásným modrým obyvatelem Pandory nebo kráskou se zelenou pletí.

Jak vyzvednout 13 dívek za hodinu pomocí strojového učení a Tinderu
Zdroj

U lidí Hue barva pleti významně nepřispívá k hodnocení atraktivity.
Proto se vyplatí práci neuronové sítě zjednodušit a ponechat pouze odstíny šedi.

Vytváření modelu

Chci hned říci, že bez dobré grafické karty a CUDA s největší pravděpodobností jednoduše nezískáte trénovaný model v odpovídajícím čase. Proto okamžitě zamiřte na výpočty ve specializovaných cloudech nebo pomocí python-CUDA.

Vzal jsem základní třívrstvý příklad od autora úložiště a překvapivě ukázal přesnost kolem 72 %, což je docela dobrý výsledek.

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'])

Pokud existuje dobrý vzorek, může být dostačující k získání funkčního modelu.

Spustíme robota

Jak vyzvednout 13 dívek za hodinu pomocí strojového učení a Tinderu

Děkuji autorovi úložiště za hotovou možnost rychlého otestování nápadu. Ve skutečnosti to v základní verzi funguje docela dobře a lze ji v zásadě spustit na našem hotový pronajatý server. Trénovat zatím nepůjde, v tuto chvíli neposkytujeme virtuální stroje s podporou CUDA pro výpočty, ale můžete něco provozovat 24/7 bez problémů. Bot je poměrně lehký, takže by bylo výhodnější použít tarif, který platí za použité zdroje.

výsledky

Jak vyzvednout 13 dívek za hodinu pomocí strojového učení a Tinderu
Asi jsem moc roztomilý. A mám bohatý vnitřní svět. Dostal jsem něco jako 13 zápasů během hodiny. Navíc dívky několikrát psaly jako první.
Výsledkem bylo, že jsme skončili s velmi pěknými dialogy, kde jsem řekl, že jsem si přišel pouze pohrát se strojovým učením a označováním dat. Jedna z dívek měla mimořádný zájem, protože sama je vývojářkou. Je tu silný pocit, že si nakonec přečte tento příspěvek na Habrého. Opravdu doufám, že Oksana zachová mou anonymitu. 🙂
*mává tlapou a říká ahoj

Něco málo o etické stránce problému

Abych byl upřímný, nelíbí se mi celá myšlenka robotizace vztahů mezi muži a dívkami. Přehodit sako přes ramena chladnému cizinci, který stojí sám, je něco velmi správného. Nebo oslovte hezkou dívku v letní kavárně a vypijte spolu kávu. Už vypadněte zpoza monitorů.

Léto je všude kolem. Je čas se seznámit.

Jak vyzvednout 13 dívek za hodinu pomocí strojového učení a Tinderu

Jak vyzvednout 13 dívek za hodinu pomocí strojového učení a Tinderu

Zdroj: www.habr.com

Přidat komentář