bbf00 2019-09-16
Tinder:国外知名约会类 APP
当朋友和家人问我对机器学习Tinder【相当于国外版陌陌】冒险的感受时,我告诉他们我有点尴尬,但也有点自豪。 毕竟,它有效,不是吗?
当我使用Tinder时,它的一个方面让我比其他任何东西都更加不舒服:无尽的滑动让我感觉如何。我不倾向于相信一个人可以真正被描述,即使是在一个很长的总结(或Q&A,OkCupid风格),特别是一个自我创建的摘要。所以我已经对大多数Tinder配置文件的非代表性感到有些不安。
如果你曾经使用过约会应用程序,我相信你们大多数人都经历过这样的事情:你继续约会并意识到在阅读他们的个人资料后,另一个人并不是你所期望的。你不觉得自己被故意哄骗;它更像是Tinder的配置文件是为了他们的同卵双胞胎(通常是更酷,更运动的人,一直有一只狗和微笑)。知道这件事发生的时间和它一样多,根据这些资料判断人们已经感到很奇怪,知道我是基于错误的“数据”谴责一些人。
我自己的个人资料就是一个很好的例子:我的未婚妻(我们在Tinder上见过面)告诉我她认为我根据我的照片更加“红头发”(不知道怎么样),而且我的生物根本没有对我说太多(它从Wendy的“关于我们”页面被盗。我不明白为什么,但这似乎让我的比赛比一个更具描述性的生物多一倍。幸运的是,很少有人误以为我是Wendy的首席执行官。
即使知道您是根据有限且可能具有误导性的信息进行刷卡,Tinder也会强迫您参与此过程。在Tinder黑客中,众所周知,如果你总是向右滑动,你就会因为没有向他人展示你的个人资料而受到惩罚。您做出这些快照决定的时间越长(左,左,右,左,右),就越容易。 Tinder会让你相信这是一场比赛。这很有趣,对吧?但它在我嘴里留下了不好的味道。我觉得自己正在训练自己根据纯粹肤浅的细节判断我不认识的人(因为我是)。我觉得我对这些人非人化,每个人都生活在与我无关的丰富而细致的生活中,通过将他们减少到一些关于可信度和吸引力的数据点和主观感受。
正是机器人正在我正在接触的女人身上滑过。
我想使用Tinder与人们见面并约会,但我不想花那么多时间擦拭和分拣人。我更愿意花更多的时间在应用程序中聊天,试图感受到另一个人的幽默感,并试图与有趣的人约会(喜欢:压抑模因)。所以我心想:如果我训练了A.I.要了解我如何滑动,我有它为我得到所有的比赛?然后,我所要做的就是与人交谈,这是一种更丰富的互动,而不是判断几张照片并阅读办公室的报价。
当我开始这样做时,我对机器学习并没有多少经验。我真正做的最多的是在我的论文工作中实现一些聚类算法,并使用一些风格转移网络为自己设计纹身。这次,我决定使用经过训练的神经网络进行图像分类。我把这个项目视为一个跳入式错误的项目,而不是一个精心策划和推理的项目类型。
通常,在训练神经网络进行图像分类时(它是热狗还是热狗?),您需要数千(或更多)图像才能用于训练。在这种情况下,训练数据必须是我刷过的人的图像,所以我无法获得足够的数据来训练网络来预测我的滑动行为(我不打算刷一个百万张图片,以避免完全滑动)。
幸运的是,我没有必要:我使用了一种称为转移学习的技术。在转移学习中,你采用一个已经在大量数据上训练过的神经网络,你让它“忘记”它学到的最后一点,这个部分允许它进行最后的调用(看起来像个热门狗)。然后,您在新任务上重新训练网络(向右或向左滑动),但您只训练刚刚重置的最后一层。实际上,你并没有教它如何看待这些图像;你只是教它...
幸运的是,我没有必要:我使用了一种称为转移学习的技术。在转移学习中,你采用一个已经在大量数据上训练过的神经网络,你让它“忘记”它学到的最后一点,这个部分允许它进行最后的调用(看起来像个热门狗)。然后,您在新任务上重新训练网络(向右或向左滑动),但您只训练刚刚重置的最后一层。实际上,你并没有教它如何看待这些图像;你只是用不同的方式来教导它所看到的东西。
由于这并不是那么复杂,因此您不需要任何接近标记的训练数据。在这种情况下,我只能拍摄2,000到3,000张图像。所以现在只是标记一些图像的问题,遗憾的是这并不像我希望的那么容易。
在我制作的第一个版本中,我尝试了一些东西,其中大部分完全失败了:
最后,数据标记和清理比我预期的要复杂得多,并且是创建机器人所涉及的任何步骤中最长的一次。事实证明,许多配置文件包含群组,宠物,树木的图片,或者实际上只是令人困惑的东西,我甚至无法标记自己。我最终需要的是三个不同的标签:
喜欢,不喜欢,中立,动物,群体,模糊,NAN,一切为了其他一切。
然后,在对配置文件中的每个图像进行分类之后,与先前看到的配置文件相比,将对整个配置文件进行评分,并且将发送轻扫。我终于完成了我的工作流程。
实际代码可以在这里的GitHub仓库中找到。我的管道看起来像这样:
使用pynder(Tinder API的Python客户端),从我的位置获取足够的配置文件以用作训练数据(需要~3,000个图像),并将它们放入“未排序”的文件夹中。
随机播放所有图像。此步骤对消除串联偏差至关重要。基本上,我不想仅仅因为我认为图像中的人是我以前喜欢或不喜欢的人而喜欢或不喜欢照片。
全屏加载图像,然后按箭头键将其自动排序到一个名为“喜欢”,“不喜欢”或“中立”的文件夹中。这一步很重要,因为如果不容易快速排序本能的方式,我的无聊或沮丧会开始影响我的判断,我的标签也不会那么一致。
在第一个版本中,我们重复此过程,但使用中性图像。每个中性图像要么保持中性,要么被标记为“动物”(图像中只有动物或大多数是动物),“群组”(图像中不止一个人),“模糊”(非常小,或者脸部模糊,或一些疯狂的Instagram过滤器应用),或NAN(字面意思只是一个纯色,或树或模因或其他东西)。大警告:最后,这似乎并不那么重要,而且真的很乏味,所以我废除了额外的标签,并将它们全部保留在“中性”标签下(也就是说,我完全跳过了这一步) 。
接下来,我们可以使用TensorFlow开发人员提供的retrain.py脚本作为教程重新训练,这将允许我们使用Google训练的Inception网络,并使用我们特定图像和标签上的转移学习进行重新训练(例如,不喜欢,中性)。
最后,我们需要一个评分函数来决定是否在配置文件上向左或向右滑动。每个图像将由A.I.给出相似的分数,不喜欢的分数和中性分数。我会使用这个评分函数将这些值组合成一个数字:score =(like - dislike²)/ neutral。
对这些分数求和,您就得到了个人资料的最终分数。通过反复试验,我发现如果我告诉机器人如果最终得分大于0.5则向右滑动,我可以获得~30%左右滑动率,如果它低于,则向左滑动。如果分数大于250,我还告诉它发送一个超级,因为为什么不呢?
是时候把它放松了(告诉它减速以避免被标记为类似于僵尸的行为)。
代码看看 他还活着
是的,它奏效了。嗯,在某些方面。
当它运行时,通常每天会刷大约4,000人。可能是1300左右是向右滑动。在1,300个中,平均可能有16个会产生匹配。在那16个中,我会手动取消大约四个(对不起)。在剩下的12个中,可能有6个左右会在我给他们发消息后作出回应。最后,少数人会对约会感兴趣。 (是的,我确实告诉过他们关于机器人的事。)
在高峰期(和我的最低点),我在七天内设置了八个日期。这和你想象的一样好。一方面,这令人筋疲力尽。另一方面,拥有如此多的比赛真是太棒了,而且非常有趣。
我认为这是成功的两个主要原因:首先,我实现了不再刷卡的愿望(实际上只是聊天和与人交谈更有趣);第二,正是机器人在我现在订婚的女人身上滑过,非常爱上了。机器人向右滑,但正是我们对表情符号的讨论明确表示我需要了解这个人。
事实证明,机器人对我的士气更重要,而不是实际让我获得比赛。
在这一点上,bot和Tinder的主要目的或多或少地完成了,但事实证明机器人有更多的东西可以教我。
最后,对于直女而言,Tinder与直男相比是非常不同的,互联网上的人需要表现得更好。
最后,我认为这个Tinder机器人体验取得了成功。也就是说,如果我还单身,我不会再这样做了。
我真的花了很多时间和精力在机器人上工作,因为我在第一时间刷卡和约会。然后,我也花了相同的努力约会。
这是一种有趣的体验和教育,但代码令人尴尬的糟糕(和天真)。有很多更好的方法,我敢肯定,这可以做到。
最后,机器人对我的士气更重要,而不是让我得到比赛。除了那个激烈的一周,我还没有比机器人之前更多或更少的约会。我对此感觉更好,就像我对自己的命运有更多的控制权一样。如果我能及时回过头来给年轻的自己提供建议,我会告诉他,“只要放慢脚步,放松一下:在你了解他们之前,你不会知道自己喜欢和谁在一起,你可以从一个简介,一些戏弄,以及他们最喜欢的表情符号(......除非?)中认识一个人。“
不过,我会很高兴;我欠我的老机器人,把我介绍给我生命中最重要的人。它赢得了它,现在我希望它能够退休。
本文译自 | Medium 作者 | OneZero 编译 | Yafei
转载请提前联系小编获取授权,否则会按照对应平台规则投诉处理,谢谢配合。