如何使用機器學習和 Tinder 每小時約 13 個女孩

*當然,純粹是為了學習機器學習。 在愛妻略顯不滿的目光下。

對於脊髓反射水平而言,可能沒有任何應用程式能像 Tinder 一樣簡單。 為了使用它,你只需要一根手指滑動和一些神經元來選擇你最喜歡的女孩或男人。 配對選擇中暴力破解的理想實現。

我認為這將是在新顯示卡上體驗機器學習的好方法。 剩下的就是向我的妻子解釋,我不需要一個新的更胖的女人,我只是在訓練神經網路。

如何使用機器學習和 Tinder 每小時約 13 個女孩

約會網路有什麼問題?

有這樣一個資源——阿什利·麥迪遜。 具體來說,口號是「生命短暫。 有外遇。” 主要受眾是尋求外遇的已婚男性。 獲利也很有趣——除了標準的「花點讚和寫文章」之外,他們還要求支付 19 美元才能不留痕跡地刪除用戶的帳戶。

2015年,該網站自然洩露,60GB個人資料洩露到公共領域。 除了許多被摧毀的家庭之外,這次洩密事件還為分析人士提供了許多有趣的資訊。 我一直懷疑約會網站上有更多的男人,但在這個例子中,事實證明它非常有趣。 記者安娜莉·紐維茨 分析外洩的數據 發現在 5 萬用戶中,只有 12 個與真實女孩帳戶相似且經常使用。 其餘的只是與男性訪客聊天的機器人。

男性帳戶的這種優勢不僅對於該資源來說是典型的,對於大多數其他約會網站也是如此。 相信很多人都遇到過這種無疑不公平的情況,你必須精心策劃相識,但女孩只需註冊即可。 且不說這群粉絲的素質如何,但不可否認的是,供需平衡明顯地向有利於女孩的方向傾斜。

火種功能

如何使用機器學習和 Tinder 每小時約 13 個女孩
性別關係中理想的蠻力

該平台的主要特點是人均熟人成本低。 兩次滑動的巧合就足夠了,您已經在與一個可能有趣的人進行交流。 問題在於,同樣的性別失衡導致大多數女孩每天都會有數十場比賽。 這意味著他們很可能沒有時間在其他候選人中關注你。

很明顯,該平台幾乎沒有機會通過看一眼穿泳衣的照片或駕駛一輛時尚的有色汽車的一秒半來評估一個人內心深處的世界。 因此,如果你的照片看起來不那麼神聖,你別無選擇,只能透過採用 r策略 在某些物種中。 簡而言之,我們將透過暴力和數量來增加繁殖成功的機會。 由於您有時需要透過食物和睡眠來分散注意力,並且滑動次數有限,因此您可能更喜歡自動選擇最適合您口味的女孩或男人。 短的紅髮或高的黑髮 - 這取決於你。

收集數據

首先,您需要大量數據才能達到正常的準確性。 任何接觸過機器學習的人都知道產生正確收集和標記的資料集是多麼困難。 理論上,任何類似的資源都適合作為資料來源,無論是 Instagram 還是其他社群網路。 但最好是對網路將來可以運行的樣本進行訓練。

讓我們以儲存庫為基礎 火種自動化。 Tinder 的照片始終是公開的,但「按讚」功能已經受到限制。 因此,需要將半徑範圍內的所有生物提取出來,並仔細標記。 首先,您需要使用一個相當簡單的腳本:

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)

它將允許您僅用兩個按鈕盡快標記資料集。 關鍵的陷阱在於,werkzeug 函式庫已經破壞了向後相容性,因此必須被迫降級。 否則會拋出此錯誤。

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'

因此,在requirements.txt中您需要編寫Werkzeug==0.16.1。 然後它就會起飛。
第二個問題是取得這個令牌。 存儲庫中的標準方法對我不起作用,但我設法從開發人員控制台獲取它。 若要執行此操作,請轉至 鏈接 並提取對 POST 請求的回應 www.facebook.com/v2.6/dialog/oauth/confirm?dpr=1。 在裡面我們尋找「access_token」。 由於某種原因,它第一次不起作用,但後來我找到了它並將其硬編碼到腳本中。

數據集要求

機器學習資料集有幾個關鍵要求:

  1. 充分性
  2. 均勻度
  3. 多樣

在這種情況下,需要至少 10000 張照片才能建立足夠的模型。 是的,很多。 這實際上就是為什麼像這樣的服務 亞馬遜Mechanical Turk,只要付費,您就可以將資料集的標記委託給其他人。 另一方面,你真的希望你的機器人喜歡漂亮的圓臉亞洲女孩還是同樣美麗的印度裔女孩嗎? 不過,該模型應該反映您的品味。

多樣性沒有什麼特別的問題;所有照片都是從不同的角度和光線呈現的。 適用於眼鏡、洋裝、泳衣和滑雪服。 資料集的一致性可能會出現問題。 理想情況下,當我們標記樣品時,它應該由大致相等的部分組成。 如果你最終得到一個「傾斜」的資料集,你將不得不用其他來源的照片來稀釋它。 您將需要添加更具吸引力的內容,反之亦然,您將根據標記結果來確定它們。 我得到了大約 60% 漂亮的東西。 要嘛是我不太挑剔,要嘛是我運氣好,周圍有很多漂亮女孩。

我也不否認其中有許多機器人的假設。 我們訓練一個會喜歡其他機器人的機器人。 這其中有一些諷刺意味。

資料處理

我們有一堆標籤的照片,但它們非常混雜。 白天,晚上,從後面等等。 遺憾的是,我知道從相反角度拍攝照片進行教學不會特別有效,因為樣本會非常不均勻。 因此,最好的選擇是用臉作為“可愛”的參考標誌。 儘管如此,對於我們和其他靈長類動物來說,這是一個關鍵參數。

因此,我們使用 哈爾級聯。 這是一種出色的演算法,可讓您在誤報率較低的影像中找到人臉。

如何使用機器學習和 Tinder 每小時約 13 個女孩
手冊中有更詳細的描述 OpenCV的

在下一階段,當樣本中只有臉部時,去除顏色就有意義了。 事實上,你幾乎不必在潘朵拉美麗的藍色居民和綠皮膚的美女之間做出選擇。

如何使用機器學習和 Tinder 每小時約 13 個女孩

在順化人中,膚色對吸引力評級沒有顯著影響。
因此,值得簡化神經網路的工作,只留下灰度。

建築模型

我想說的是,如果沒有好的顯示卡和 CUDA,您很可能無法在足夠的時間內獲得經過訓練的模型。 因此,立即瞄準專門的雲端中的運算或使用 python-CUDA。

我從儲存庫的作者那裡獲取了一個基本的三層範例,令人驚訝的是,它的準確率約為 72%,這是一個相當不錯的結果。

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

如果有一個好的樣本,那麼很可能就足以得到一個可行的模型。

讓我們啟動機器人

如何使用機器學習和 Tinder 每小時約 13 個女孩

感謝存儲庫的作者提供了用於快速測試該想法的現成選項。 事實上,它在基本版本中運行得很好,原則上可以在我們的 現成的租用伺服器。 目前還無法進行訓練;目前我們不提供支援 CUDA 計算的虛擬機,但您可以 24/7 運行,不會出現任何問題。 該機器人非常輕量級,因此採取為所使用的資源付費的關稅會更有利可圖。

Результаты

如何使用機器學習和 Tinder 每小時約 13 個女孩
我想我很可愛。 我還有豐富的內心世界。 我在一小時內得到了大約 13 場比賽。 而且,好幾次都是女孩先寫的。
結果,我們進行了非常愉快的對話,我說我進來只是為了玩機器學習和數據標籤。 其中一個女孩非常感興趣,因為她自己就是開發商。 有一種強烈的感覺,她最終會讀到這篇關於哈布雷的文章。 我真的希望奧克薩娜能夠保持我的匿名。 🙂
*揮舞爪子打招呼

關於該問題的道德方面的一些內容

老實說,我不喜歡將男女關係機器人化的整個想法。 把你的夾克搭在一個孤獨站著的冷漠陌生人的肩膀上是非常正確的。 或是在夏日咖啡館接近一位漂亮女孩,一起喝咖啡。 已經從監視器後面出去了。

夏天無處不在。 是時候認識了。

如何使用機器學習和 Tinder 每小時約 13 個女孩

如何使用機器學習和 Tinder 每小時約 13 個女孩

來源: www.habr.com

添加評論