如何使用机器学习和 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 个女孩

来源: habr.com

添加评论