Cara menjemput 13 gadis per jam menggunakan pembelajaran mesin dan Tinder

*Tentu saja murni demi mempelajari Machine Learning. Di bawah tatapan sedikit tidak puas dari istri tercintanya.

Mungkin tidak ada aplikasi sederhana pada tingkat refleks tulang belakang seperti Tinder. Untuk menggunakannya, Anda hanya perlu satu jari untuk menggesek dan beberapa neuron untuk memilih perempuan atau laki-laki yang paling Anda sukai. Implementasi ideal dari brute force dalam pemilihan pasangan.

Saya memutuskan bahwa ini akan menjadi cara yang baik untuk sedikit merasakan pembelajaran mesin pada kartu grafis baru. Yang tersisa hanyalah menjelaskan kepada istri saya bahwa saya tidak membutuhkan wanita baru yang lebih gemuk, dan saya hanya melatih jaringan saraf.

Cara menjemput 13 gadis per jam menggunakan pembelajaran mesin dan Tinder

Apa masalahnya dengan jaringan kencan?

Ada sumber daya seperti itu - Ashley Madison. Spesifik, dengan slogan β€œHidup ini singkat. Berselingkuhlah." Penonton utamanya adalah pria menikah yang mencari perselingkuhan. Monetisasi juga menyenangkan - selain standar β€œmenghabiskan poin untuk menyukai dan menulis”, mereka meminta $19 untuk menghapus akun pengguna tanpa jejak.

Pada tahun 2015, situs tersebut secara alami bocor dan 60 GB data pribadi bocor ke domain publik. Selain banyaknya keluarga yang hancur, bocoran ini memberikan banyak informasi menarik bagi para analis. Saya selalu curiga ada lebih banyak pria di situs kencan, tapi dalam kasus ini ternyata cukup menarik. Jurnalis Annalee Newitz menganalisis data yang bocor menemukan bahwa dari 5 juta pengguna, hanya 12 yang mirip dengan akun cewek asli dan digunakan secara rutin. Selebihnya hanyalah bot yang mengobrol dengan pengunjung laki-laki.

Jumlah akun laki-laki yang lebih banyak merupakan hal yang biasa tidak hanya untuk sumber ini, tetapi juga untuk sebagian besar situs kencan lainnya. Saya yakin banyak yang pernah menghadapi situasi yang tidak adil ini, ketika Anda harus merencanakan kenalan dengan hati-hati, tetapi gadis itu hanya perlu mendaftar. Mari kita kesampingkan kualitas dari kelompok penggemar ini, namun faktanya tidak dapat disangkal bahwa keseimbangan penawaran dan permintaan jelas-jelas bergeser ke arah yang menguntungkan para gadis.

Fitur Tinder

Cara menjemput 13 gadis per jam menggunakan pembelajaran mesin dan Tinder
Kekuatan kasar yang ideal dalam hubungan gender

Fitur utama platform ini adalah biaya rendah per kenalan. Dua gesekan yang kebetulan sudah cukup dan Anda sudah berkomunikasi dengan orang yang berpotensi menarik. Masalahnya adalah ketidakseimbangan gender yang sama mengarah pada fakta bahwa sebagian besar perempuan akan melakukan lusinan pertandingan setiap hari. Artinya, kemungkinan besar mereka tidak punya waktu untuk memperhatikan Anda di antara kandidat lainnya.

Sangat jelas bahwa platform ini menyiratkan sedikit kesempatan untuk menilai dunia batin seseorang hanya dengan melihat sekilas foto dalam pakaian renang atau mengendarai mobil berwarna yang modis selama satu setengah detik. Oleh karena itu, jika Anda tidak terlihat cantik dalam foto Anda, Anda tidak punya pilihan selain meningkatkan peluang Anda dengan mengadopsi r-strategi pada beberapa spesies. Sederhananya, kami akan melakukan kekerasan dan mengambil volume untuk meningkatkan peluang keberhasilan pembiakan. Karena terkadang Anda perlu terganggu oleh makanan dan tidur, dan gesekannya terbatas, Anda mungkin lebih suka otomatisasi memilih perempuan atau laki-laki yang paling sesuai dengan selera Anda. Berambut merah pendek atau berambut cokelat tinggi - terserah Anda.

Mengumpulkan data

Pertama-tama, Anda memerlukan banyak data untuk akurasi normal. Siapa pun yang pernah mempelajari pembelajaran mesin tahu betapa sulitnya menghasilkan kumpulan data yang dikumpulkan dan diberi label dengan benar. Secara teoritis, sumber daya serupa apa pun akan cocok sebagai sumber data, baik itu Instagram atau jejaring sosial lainnya. Namun yang terbaik adalah melatih sampel yang akan digunakan jaringan di masa depan.

Mari kita ambil repositori sebagai dasar Otomatisasi Tinder. Foto Tinder selalu tersedia untuk umum, namun fungsi "suka" sudah terbatas. Oleh karena itu, penting untuk mengekstraksi semua makhluk hidup dalam radius tersebut dan menandainya dengan hati-hati. Pertama, Anda perlu menggunakan skrip yang cukup sederhana:

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)

Ini akan memungkinkan Anda menandai kumpulan data secepat mungkin hanya dengan dua tombol. Kendala utamanya terletak pada kenyataan bahwa perpustakaan werkzeug telah merusak kompatibilitas ke belakang dan terpaksa harus menurunkan versinya. Kalau tidak, itu akan menimbulkan kesalahan ini.

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'

Oleh karena itu, di persyaratan.txt Anda perlu menulis Werkzeug==0.16.1. Kemudian akan lepas landas.
Masalah kedua adalah mendapatkan token ini. Metode standar dari repositori tidak berfungsi untuk saya, tetapi saya berhasil mendapatkannya dari konsol pengembang. Untuk melakukan ini, buka link dan ekstrak respons terhadap permintaan POST di www.facebook.com/v2.6/dialog/oauth/confirm?dpr=1. Di dalamnya kita mencari 'access_token'. Untuk beberapa alasan ini tidak berhasil pertama kali, tetapi kemudian saya menemukannya dan mengkodekannya ke dalam skrip.

Persyaratan kumpulan data

Ada beberapa persyaratan utama untuk kumpulan data pembelajaran mesin:

  1. Kecukupan
  2. Keseragaman
  3. Ragam

Kecukupan dalam hal ini memerlukan setidaknya 10000 foto untuk membangun model yang memadai. Ya, itu banyak. Inilah sebabnya mengapa layanan seperti itu Amazon Mechanical Turk, yang mana dengan biaya tertentu Anda dapat mendelegasikan markup kumpulan data Anda kepada orang lain. Di sisi lain, apakah Anda benar-benar ingin bot Anda menyukai gadis-gadis Asia berwajah bulan yang cantik atau gadis-gadis cantik yang sama-sama berasal dari India? Meski begitu, modelnya harus mencerminkan selera Anda.

Tidak ada masalah khusus dengan variasi, semua foto disajikan dari berbagai sudut dan pencahayaan. Dengan kacamata, gaun, pakaian renang, dan pakaian ski. Masalah mungkin timbul dengan keseragaman kumpulan data. Idealnya, ketika kita memberi label pada sampel kita, sampel tersebut harus terdiri dari bagian-bagian yang kira-kira sama. Jika Anda mendapatkan kumpulan data yang β€œmiring”, Anda harus mencairkannya dengan foto dari sumber lain. Anda perlu menambahkan yang lebih menarik, atau sebaliknya, Anda menentukannya berdasarkan hasil markup. Saya mendapatkan sesuatu yang sekitar 60% cantik. Entah aku tidak terlalu pilih-pilih, atau aku hanya beruntung dan ada banyak gadis cantik disekitarku.

Saya juga tidak mengabaikan hipotesis bahwa ada banyak bot di antara mereka. Kami melatih bot yang akan menyukai bot lainnya. Ada ironi dalam hal ini.

Pengolahan data

Kami memiliki banyak foto yang diberi tag, tetapi sangat tercampur. Siang hari, malam hari, dari belakang dan lain-lain. Dengan menyesal, saya memahami bahwa pengajaran dari foto dari sudut terbalik tidak akan efektif, karena sampelnya akan sangat tidak merata. Oleh karena itu, pilihan terbaik adalah menggunakan wajah sebagai tanda referensi β€œkelucuan”. Namun, bagi kami, seperti halnya primata lainnya, ini adalah parameter kunci.

Oleh karena itu, mari kita manfaatkan Air terjun Haar. Ini adalah algoritme luar biasa yang memungkinkan Anda menemukan wajah dalam gambar dengan persentase kesalahan positif palsu yang rendah.

Cara menjemput 13 gadis per jam menggunakan pembelajaran mesin dan Tinder
Hal ini dijelaskan secara lebih rinci dalam manual OpenCV

Pada tahap selanjutnya, setelah hanya wajah yang dimasukkan dalam sampel, masuk akal untuk menghilangkan warnanya. Faktanya, Anda tidak perlu memilih antara penghuni Pandora yang cantik berwarna biru atau cantik berkulit hijau.

Cara menjemput 13 gadis per jam menggunakan pembelajaran mesin dan Tinder
Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Pada orang Hue, warna kulit tidak memberikan kontribusi yang signifikan terhadap penilaian daya tarik.
Oleh karena itu, ada baiknya menyederhanakan pekerjaan jaringan saraf dan hanya menyisakan skala abu-abu.

Bangunan model

Saya ingin segera mengatakan bahwa tanpa kartu video dan CUDA yang bagus, kemungkinan besar Anda tidak akan mendapatkan model terlatih dalam waktu yang memadai. Oleh karena itu, segera lakukan penghitungan di cloud khusus atau menggunakan python-CUDA.

Saya mengambil contoh dasar tiga lapis dari pembuat repositori dan, yang mengejutkan, ini menunjukkan akurasi sekitar 72%, yang merupakan hasil yang cukup bagus.

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

Jika terdapat sampel yang baik, maka sampel tersebut mungkin cukup untuk memperoleh model yang bisa diterapkan.

Ayo luncurkan botnya

Cara menjemput 13 gadis per jam menggunakan pembelajaran mesin dan Tinder

Terima kasih kepada penulis repositori untuk opsi siap pakai untuk menguji ide dengan cepat. Faktanya, ini berfungsi cukup baik di versi dasar dan, pada prinsipnya, dapat diluncurkan di versi kami server sewaan siap pakai. Pelatihan belum dapat dilakukan; saat ini kami tidak menyediakan mesin virtual dengan dukungan CUDA untuk perhitungan, namun Anda dapat menjalankan sesuatu 24/7 tanpa masalah. Bot ini cukup ringan, jadi akan lebih menguntungkan jika mengambil tarif yang membayar sumber daya yang digunakan.

Temuan

Cara menjemput 13 gadis per jam menggunakan pembelajaran mesin dan Tinder
Menurutku, aku sangat manis. Dan saya memiliki dunia batin yang kaya. Saya mendapat sekitar 13 pertandingan dalam waktu satu jam. Apalagi beberapa kali gadis-gadis itu menulis lebih dulu.
Hasilnya, kami mendapatkan dialog yang sangat bagus, di mana saya mengatakan bahwa saya datang hanya untuk bermain-main dengan pembelajaran mesin dan pelabelan data. Salah satu gadis itu sangat tertarik, karena dia sendiri adalah seorang pengembang. Ada perasaan kuat bahwa dia pada akhirnya akan membaca postingan di HabrΓ© ini. Saya sangat berharap Oksana akan menjaga anonimitas saya. πŸ™‚
*melambaikan tangan dan menyapa

Sedikit tentang sisi etika dari masalah ini

Sejujurnya, saya tidak menyukai gagasan robotisasi hubungan antara laki-laki dan perempuan. Ada sesuatu yang benar jika Anda melemparkan jaket Anda ke atas bahu orang asing yang dingin dan berdiri sendirian. Atau dekati gadis cantik di kafe musim panas dan minum kopi bersama. Keluar dari balik monitor.

Musim panas sudah tiba. Saatnya berkenalan.

Cara menjemput 13 gadis per jam menggunakan pembelajaran mesin dan Tinder

Cara menjemput 13 gadis per jam menggunakan pembelajaran mesin dan Tinder

Sumber: www.habr.com

Tambah komentar