本回答将不可避免地包含以下内容:
当然可以,我现在的女朋友 @知言 能找到我就多亏了知乎的“人工智能”~
嘛你可能觉这个听起来很扯,但不妨先听一下我们的故事:
“诶薰风你怎么这么快就脱单啦?”“薰风你天天蹲实验室从哪里认识的妹子?”“薰风你前段时间不是还跟我说不发论文不谈恋爱的吗喂?”
前段时间,我的微信消息列表充斥着如上的问题。对这类问题,我一概用如下回答搪塞过去:
“我也不知道,天上掉下来的……”
但实际上,我知道我能有现在这么适合我这么可爱这么善良这么懂我的女朋友,全靠以互联网与人工智能算法代表的信息科技的进步。
实际上,让我们结缘的是下面我写的这个回答。我写这个回答的时候是万万没有想到这个沙雕段子都能让我找到女朋友的。
而对我女朋友来说,这就是一个曲折的故事了(以下为她的第一视角):
那天在实习公司里,离下班前一小时的我正在享受着惯例的摸鱼时光。我一如往常打开知乎,刷着推送的信息流,其中有一个平平无奇的标题映入眼帘……
我:不是吧阿sir真的有人能和导师谈笑风生吗?让我来看看傻吊网友又说了什么. jpg
结果我看了大概十秒,开始精神恍惚:这个回答怎么感觉跟我写的弱智日常一样…我做梦的时候有了导师还写了知乎吗????
一直到我把这篇回答读完,心里始终有种奇怪的感觉,好像是我认识了很久的人面对自己讲故事一样。
这时,我社恐的内心有一点点动摇了。
理论上,我很想现在立刻认识这个人,但是我的手控制住了我自己...于是我从私信界面退了出去,在工位上干坐了一个小时……
又到了愉快的下班时间,我混在一群憔悴的社畜中往地铁站走,常年社恐让我没有关注也没有收藏,但我还是鬼使神差从浏览记录里找出了这个怎么看都不应该印象很深的段子答案。我觉得,如果在这个时候把它关掉,我普通的日常一定不会有任何改变……
但是,我一定会很后悔。
即使不是现在,未来的某一天,如果不主动抓住这点渺茫的感觉的话,我会后悔的。
结果,想了半天之后鼓起我一生一次勇气的成果就是……虚弱地在评论区夸了一句您真可爱…
结果我这次还是没能发出去私信。但我没想到的是过了不到两分钟我被回复了,在???您也25h高强度冲浪???(薰风:实际上的确是凑巧……可能这就是所谓的缘分?)
然后我吓得立刻关掉了知乎,不愧是我啊()
但是心里还是有挺开心的,有一种顺着网线打到人的感觉!(薰风:?????)
我就怀着这样的心情走进了地铁站,在等车的间隙冷静了一下,又开始想这件事。此时地铁站沉重的空气让我的思维发生了一些变化。
简单来说就是:
大脑:在,发个私信?
手:不是吧阿sir为什么
大脑:我叫你发就发(按住)
于是,反应过来的时候我已经站在地铁里了,手里是一条没发出去的:我能求个好友位吗?
之后,我们的故事就真的开始了……果然我的预感没错,这个人和我太像了,像到我好像可以直接猜到下一秒他要说什么,我那天还约了人,真就是一边吃饭一边忍不住笑的打字,幸好对面和我关系很好没有直接揍我。
Ok,狗粮发够了,该写正文了(不是)
那么,这段故事和“人工智能”有什么关系呢?
这就要说经常被妖魔化的人工智能黑科技——推荐系统了!
以摸鱼的女朋友如何刷到我的沙雕段子为例,让我们从头分析人工智能如何联系我们彼此。上图是对我们结缘流程的示意图,我们能够相遇全都仰仗知乎本身的推荐系统。
推荐系统(Recommender system)[1]旨在通过用户过往的行为预测用户未来对某些未知内容的偏好,这是人工智能应用中一个很重要的子领域。不论是知乎微博的信息流,b站首页的视频推荐,还是最近被推上风口浪尖的抖音……它们让人一刷几小时的秘诀就在于自身成熟的推荐系统。当我们在为又浪费人生中宝贵的几小时而懊悔不已时,实际上侧面就反映出了推荐系统对我们喜好的成功把握。
而推荐系统分为两大流派:
事实上,这两大流派不是相互孤立的,配合食用可以得到更好的效果。
协同过滤基于一个非常简单的思想,那就是臭味相投,换句话说就是和你口味差不多的人,他们喜欢的东西你也应该差不多。
下面这个动图就是一个典型的协同过滤的示意图!在这里,有5个不愿意透露姓名的网友对四种内容分别做出了自己的评价(这里为了简化,只有四种内容且只有喜欢/讨厌两个选项)。
当所有人都对大部分物体做出了自己的反馈时,系统就会通过已经记录好的表格(在数学上我们叫他“矩阵”)。
现在,如果我们想知道第5个用户对视频(第三列)的喜好,就首找已知的评价寻找出与用户5有相似爱好的人(用户2和3)。最终用相似爱好的那些人,对视频的评价作为用户5的预测评价。
以此类推,当这个表格中所有的空格都被我们用这种简单的方法填满,那么系统就可以向所有用户推荐他们“可能喜欢”的内容啦!
但是,上面这是一个很理想化的情况。因为所有人都对大部分内容做出了评价,但这在现实世界是显然不合理的……(毕竟我们都不会每天25小时网上冲浪hhh)
协同过滤算法绕不开的问题就在于其稀疏性,换人话说,就是相对于茫茫多待推荐的内容,真实用户的反馈肯定是很少的,反映在这个表格中就是只有极少的格子被打上了喜欢/讨厌的标签。再想想,这个世界上会有多少与我们喜好100%一致的人呢?
在内容相对于人数很少而有大量反馈的情况时,我们也许可以通过对大量的事实中查表去看喜好一致的人对未知内容的反应。但事实上由于真实数据的稀疏性,我们必须想办法通过极少数的事实去反推大量未知的喜好。这才是协同过滤的难点所在。
解决这个问题的很多,这里就介绍其中的一种。
矩阵分解流派认为,既然我们已经把这个问题抽象成了把一个稀疏的矩阵(表格)填满的问题,那么为啥不直接从矩阵论(即进阶版的线性代数)中寻找一些数学工具呢?
现在最受青睐的数学工具就是以奇异值分解(SVD)及其变体为代表的矩阵分解法[2]。
PS: 事实情况中,已有的用户反馈可能不是一个二维的矩阵,而是很多二维的矩阵拼在一起(比如根据你朋友在微信里喜欢的视频主题,推送你在知乎的有关内容就涉及了微信和知乎的两个矩阵)。这种矩阵拼起来的三维结构我们叫做张量(Tensor),不过这里还是先介绍简单的矩阵分解。
矩阵分解法的核心思路在于:现在假设这个所有用户的评分矩阵本来应该可以填的满满的(是一个满秩矩阵),而现在我们看到的矩阵实际上是“真实”的满秩矩阵的一部分。那么,我们可以寻找对“真实”矩阵的分解,让这个分解再次组合出来的结果,与已知的数据的差别足够小。
额这么说太抽象了,那么我们直接上数学公式吧!(亿点点公式警告)
现在,假设:
现在利用 R 中已知的那些评分,训练一组小矩阵 P 和 Q , 使得 P 和 Q 相乘的结果中与已知评分的那部分能很好地拟合。那么,拟合好的 PxQ 结果中剩下的的元素就是未知评分!也就是
接下来的问题是,我们应该如何计算 P 和 Q?聪明的小朋友就知道要用最小二乘法拟合啦!
现在呢,假设已知的每项评分为 (第u个人对第i个内容的评分),而预测的评分为 。由奇异值分解的定义,预测的评分可以由奇异值 P 和 Q 元素的相乘求和得到:
那么,对于所有已知的得分和预测的得分,我们就有了误差
最后,我们的目标就是让所有的误差的平方和加起来最小(所谓的最小二乘法):
求解上述最优化问题,我们就可以得出最优的拟合结果,求出最终补全的矩阵并给用户推荐啦~
当然,如果只通过减小误差往往会陷入机器学习常见的过拟合问题,即人工智能模型过于关注已知的内容却忽略了未知结果的合理性。因此,现在的主流方法在最小化拟合误差的同时,还会引入所谓的隐语义矩阵的正则项。
好了,以上就是最基础的基于矩阵分解的协同过滤,是不是很简单呢?
最后,我们回到我和女朋友结缘的例子:
怎么样,是不是瞬间就合理了起来,我们这些搞科研的就是喜欢把三句话就能讲完的东西强行写三十行还带一堆乱七八糟的公式!(理直气壮
而因为这是最基础的方法,所以后续还有很多改进的地方。最有意思也最合理的改进就是,除了单纯考虑用户对内容的反馈,内容和内容,以及用户与用户之间的联系本身也是值得注意的。
那么,这些联系如何求得呢?其实这就是基于内容的个性化推荐啦~
Personas are a concrete representation of target users.(用户画像是目标用户的具体表示)——Alan Cooper(现代交互设计之父)
首先,在与平台互动时,我们就早已被人工智能算法抽象成了一组数据,这组数据学名叫做"用户画像(Persona 也是女神异闻录的英文名)"。它可以通过我们在互联网上的种种行为抽象出属于我们自己的一组数字。
在过去,这组画像主要是我们的年龄,我们的消费水平,购买过的物品,等等一系列我们视作隐私的东西。我至今认为这些是我们需要捍卫的不可随意染指的自留地。
但是,现在随着自然语言处理(Natural Language Processing)技术的发展,代表我们的那组数字,逐渐从控制我们推送广告的那些粗糙的规则(比如给年轻的女性推送综艺节目广告,即使她可能并不感兴趣),转向了我们真正感兴趣的内容本身。
那么,如果我们可以将每个人的喜好和每个内容,都通过某种方法抽象为空间中的一个向量(不好意思我又不说人话了),就像有一张地图,系统在知道每个人所处位置的同时,还知道每个内容(有点像地图中的“景点”)的位置,它自然就会对每个人推荐离他们最近的内容。
那么,我们从哪里才能找到这个地图呢,谁又能知道我们身处何方?
OK,我们先看看如何对我的沙雕段子进行定位。
首先,我们写的内容虽然很难用一句话完整概括,但总结出几个关键词应该是没有大碍的。
现实情况中也是,对全篇所有内容都进行定位和综合十分耗时耗力,但如果先将最代表本文的几个关键词抽取出来再进行定位那当然就事半功倍了~这个道理在另外一个大领域——搜索引擎中也是这样。
关键词抽取就属于自然语言处理和信息检索的入门本领之一啦,最简单高效的方法就是“词频-逆文本频率(TF-IDF)”[3]法。
其中,对于第 i 个文档Di,单词 w 的词频 TF 为该文章中单词 w 出现的次数(并处以文档Di的总长度)。
而逆文本频率 IDF 则反应某个单词本身的大众脸程度,即对于所有的N篇文章里,到底有多少个文章包含了单词 w 呢?
上式中, 是一个常见的示性函数,即当文档 Di 中包含单词 w 时,该值为1,否则该值为0;对所有文档的示性函数求和,结果就是包含了这个单词的文档个数。而为了避免出现除以0的情况,这里的分母还加了个1。
最后,将词频 TF 与逆文本频率 IDF 相乘,我就得到了最终的结果
简单地说,这条简单的规则将本文中比较普遍存在的且在其他文章中较为稀有的单词作为关键词。
现在,知乎就提取了我沙雕段子的关键词——“导师”。
但是,我的关键词“导师”和女朋友搜索的“考研”是两个单词,虽然他们的含义十分相关。而基于简单的规则即使可以找到概括性很强的单词,却不足以计算出单词之间的联系。更不要提在地图上标记出我的沙雕段子和女朋友的浏览兴趣的位置了……
让推荐系统能够从“考研”联想到“导师”,就相当于让它和人类一样真正理解文本的意思,从而产生联想。那么,人工智能如何理解我们的文本,又如何判断内容之间的匹配程度呢?
我们首先思考一个问题“计算机该如何存储我们的语言呢?”
最直接的办法当然是列一个长串,给每个词一个独特的编号。但是缺点也很明显,我们无法从给定的编号反推词语的含义。因此,我们想要做到的是将所有单词的编号“嵌入”到一个能够象征单词语义的高维空间中。
就仿佛在一张地图上,相似含义的词在相近的位置。这就是传说中的“词嵌入(Word-embedding)”。更宽泛的说,这也是语言模型的一个重要组成部分。最近AI界出圈的那个传说中可以生成一切的GPT-3实际上就是一种语言模型。
那么,这种嵌入是怎么做的呢,其实也很简单。
首先,我们有茫茫多的文本,我们只知道他们每个单词的编号却不知道意思。
之后,我们将文本中的单词随机挖掉几个,让人工智能通过还能看到的单词,去猜被挖去的是哪个单词。在这个预测的过程中,他们就会发现一些单词的上下文非常类似,导致判断是这些单词之中的哪一个十分困难。这个时候,人工智能就会认为他们之间的语义是十分相似的。举个例子,下面有个相同长度(单词个数)的两个句子:
现在,把“刘昊然”和“薰风”挖掉。人工智能发现上下文都是“大家 都说 (?) 很 可爱”。
因为上下文完全一样,所以对人工智能来说,此时此刻 薰风=刘昊然。
这就是人工智能的企业级理解。
最终,在纷繁复杂的文本进行训练之后除了我=刘昊然这种不太靠谱的极端情况,大部分情况下人工智能都会得到所有单词之间的近似关系。而它最终的效果则是让被训练出的神经网络做到从毫无意义的编号映射到一个更加紧凑的一组数字中,他们放在空间里就是一组“向量”。相当于地图里的某个坐标。
之后,问题就是这些坐标之间的“距离”或者“相似程度”如何判别了。
回到我和女朋友结缘的这个例子上,假设我的沙雕段子,在词嵌入之后的向量是 x,而女朋友喜欢看的关键词向量是y。那么,他们的相似程度可以看作是空间中两个向量之间的夹角,即余弦相似度
在空间中,两个向量间的余弦值可以通过使用欧几里得点积公式求出
给定两个属性向量,x 和y ,其余弦相似性 θ 由点积和向量长度给出,如下所示:
其中 是两个向量中各项的分量。
大概是什么意思呢,就是说如果我的沙雕段子和女朋友的常看的关键词,在地图中属于“心往一处想,劲往一处使”,那么这个相似度的度量就会比较高。因此系统就会推荐。
而还有一种可能性是,单纯从欧几里得距离出发:
若两个向量之间的距离比较小,系统就会自动推荐。
最后,通过女朋友兴趣抽取出的画像中那一串向量,系统给她匹配了最相似的内容,就是我的沙雕段子。因此这段故事才得以开始。
PS:我并不是知乎的算法工程师,且我的主要研究方向为教会人工智能看东西的计算机视觉。因此有关推荐系统与自然语言处理的知识可能不甚了解,我只能保证大概的正确性,不过看懂这些你对人工智能的理解应该就能打败90%的同龄人了(不是)。
我在去年有幸旁听了上海交大媒体与传播学院举办的一次学术研讨会,其主旨在于探究当今时代下我们所接触的信息与人工智能的关系。
听之前,我其实也大概能猜到,总有几个词他们是绕不开的:“推荐系统,乌合之众,信息茧房……”。那些老师对于媒体与人文的理解自然在我这种理工男之上,我不该对他们多年的研究成果妄加评论。
但一提到大数据人工智能,必然就是推荐系统让乌合之众住进了“信息茧房”,让我们失去了独立思考的能力而固步自封,认知退化。在他们眼里,或许这是传统媒体,甚至是传统媒体代表的新闻职业性和种种道德准则的沦丧,因此这是个最坏的时代。这种观点我听了很不舒服。
我一直认为,科学技术的发展和人文社科的发展是相辅相成的,科技并不在人文的对立面。
诚然,现在我们看到的情况是人们天天盯着手机而忽视了身边的亲朋,但这并不妨碍我和女朋友拜其所赐而相遇。我相信,在这个世界上还有千千万万的人,他们如天空的星星发出微弱的光,努力地照耀着自己,也梦想这有一天能照耀别人。但囿于那年的车马慢,这种梦想也只是梦想而已。但现在,互联网让远隔千里的人有了沟通的可能,而人工智能的发展让我们更容易地找到与自己志同道合的人。今天还是沙雕段子,明天可能就是某个天才的构想的诞生,某个救命药物的传递,是变革这个世界……而没有技术,这些也无从谈起。
因此,就像我最喜欢的那个清华帅哥教授(实在不好意思,我忘了他叫啥了)说的,面对新技术带来的变革,与其恐惧、害怕、批判,不如勇敢地面对它。新技术是否能够对我们的生活带来好的影响,永远取决于使用它的人。而认识,了解了新技术之后,我们就能走在这个世界的最前端。
对于愿意学习的人来说,现在就是最好的时代。
最后,感谢缘分和算法让我遇到这么好的女朋友。
感谢老婆大人对本次回答素材的大力支持
人工智能可以为人类找寻他们心目中的另一半吗?
我不知道。
但是我知道人工智能可以根据照片,帮助找到有夫妻相的“潜在对象”。
我们经常看到共同生活多年的夫妻,在眉目神色间显得神似,我们就说他们有“夫妻相”[1]。
@527号小怪兽 在 什么只喜欢跟自己有「夫妻相」的人 问题中提到:
从心理学的角度,喜欢跟自己长得像的人(所谓的夫妻相)是非常科学也非常正常的!
再放宽一点说呢,人际交往存在一个大前提:「人喜欢与自己相似的事物」。
实验结果可以证明这个发现:
1. 心理学家Newcomb在1956年的一个实验中,将17个男生放在一个模拟宿舍里一起生活。共同生活了一段时间之后,Newcomb发现这17个男生普遍更喜欢与自己在家庭、政治、以及性等话题上,观点相似的人。
2. 心理学家Botwin, Buss, Shackelford在1997的实验中,发现人们普遍愿意与同自己性格相似的人交往。
3. 就连完全没有见过面的人,如果恰好与我们同名(甚至是英文名的首字母相同),我们也会对他们产生比路人更多的好感!
4. 现在是不是可以理解同星座的抱团现象了?
5. 毫不意外的,从1974年开始,心理学家们就提出了“长得像的人相互吸引”的理论啦。比如说,心理学家Penton-Voak, Perrett, Peirce在1999年的实验中,把参加实验者们的脸经过电脑处理和其他一些路人的脸混合在一起,心理学家们发现大家都会觉得包含自己脸的那一些更加好看。
为什么我们会喜欢与自己相似的事物?
很简单,因为我们都喜欢自己,或是希望变得更喜欢自己。我们希望受到肯定,而观念相似的人更容易肯定我们。我们希望与他人好好相处,习惯与自己相处的我们,遇到性格相近的他人,相处起来便也是自然而然。我们足够了解自己,所以看到与自己相似的事物(包括长得相似的人),会更加有安全感,更容易产生信任。
「夫妻相」不仅仅指长得像的人容易互相吸引,有时候还用来形容两个结婚多年的人越长越像。
两个结婚多年的人会越长越像这件事,并不只是都市传说。Little, Burt, Perrett在2006年的实验中,用数据证明了结婚25年的夫妻比结婚1年的夫妻长得更像、也更容易被路人判定成夫妻。
那么人工智能是否可以根据我们给的照片,寻找出和我们有“夫妻相”的照片呢?
这个完全能够做到。
早在2015年,微软就推出了一款应用 TwinsOrNot[2][3][4],用于查询两张人脸的相似性有多高。
只要上传两张照片,就能根据相关算法算出这两张照片有多相似。
想自己实现类似功能,也可以参考 @LucasX 有没有夫妻相?刷一下脸就知道!
利用Python+深度学习+计算机视觉,帮你10分钟打造一个“刷脸测试夫妻相”Demo出来。
进一步地,同年(2015年)七夕节,百度[5]也推出了一个类似的应用,你上传自己的照片,算法会给出你的Ta,然后进行“撞脸交友”。(现在这个功能好像下线了)
据了解,本次上线的“撞脸交友”功能是在百度图片搜索中实现的。
进入百度图片首页(http://image.baidu.com/),点击搜索栏右侧的相机按钮,就可以进入相机或图库,上传正脸自拍照至服务器进行人脸比对。
用户上传照片之后,系统会首先对用户的需求进行预判(找夫妻脸还是找明星相似脸),即将用户上传的照片与互联网照片进行比对,如果用户上传的是明星照片或者互联网照片,则系统就会自动进行同性搜索,反馈类似的照片给用户;如果用户上传的的是自己的自拍照片,系统则会给用户推荐来自世纪佳缘等网站、长相接近的异性会员。
“撞脸交友”功能整合了当前主流的婚恋网站会员数据,通过近百万的会员头像匹配,无论是明星脸还是自拍照,都能精确找到心目中的那个Ta。
这个听上去有点玄乎,其实实现起来并不是特别难,回想一下现在各大商店里刷脸支付的应用,其实背后原理和这个也有很多相似的地方。
具体可以参照另一个问题:支付宝是怎么做到快速从数亿张脸中找到我的脸的?
那么,现在这些应用都已经下线了,有什么方法可用来找到有夫妻相的另一半呢?
今年初(2020年),有个报道火到了人工智能圈外,在朋友圈刷屏了。
一位博士生使用 pix2pix 实现风格迁移,训练了一个“夫妻相”生成器(CoupleGenerator)[6][7]。
这个生成器只要输入你自己的人脸图片,就可自动生成与你最匹配的未来伴侣人脸图片, 让你在茫茫人海中,发现与你最般配的那张“夫妻脸”,或许可以助你尽早脱单。
上面是训练迭代8800次的结果,比较粗糙,但是可以通过修改训练方法和时间改进效果。
果然还是生成的二次元老婆比较好看~ 实现过程可参考下面教程。
人脸图像处理还有其他很有趣的应用,我另一篇回答就介绍了有趣的人脸识别应用
有没有动心呢,想找自己的另一半了?
那就从参考文献找到文中提到的项目去试试吧~
祝你找到另一半~ 啾咪~