构建更好的AI推荐引擎

您是否注意到推荐引擎并不是那么聪明? “烂番茄”的影评很好地传达了评论家和其他观众的看法,但他们评出的高分电影也许并不一定合我的口味。反倒是有些低分的“烂片”,您反而可能会看得津津有味。人工智能可以解决这种矛盾吗?

人工智能 (AI) 系统需要高质量的输入来让它们“学习”。Pandora的音乐推荐引擎根据数千亿条用户反馈,人工标注了每首曲目的流派、节奏与进行, 然后借助这些标注信息,通过70多种不同的算法向用户进行推荐。这真是了不起的黑科技……吗?  反正在点了不知多少次“跳过”后,我还是不知道该怎么评价它。我提出了一个更简单的AI系统(图1),来帮助大家确定接下来想看的电影。下面,就来介绍下我使用的设计流程。


图1:通过几个简单的步骤构建更好的AI推荐(图源:贸泽电子)

从一个问题开始

首先,我要用一个问题来概括本文所要解决的问题: “更聪明、更准确的电影推荐引擎是什么样的?”

接下来,我要概括出用户希望得到的结果:“系统将准确预测用户是否喜欢某一部电影。”

当然,两者之间依然有很多空白地带,但是用户得到的结果必须要解决上面提出的问题。如果没有解决,或者我可以想象到其他呈现给用户的结果也可以解决前面的问题,那么我将会返回并简化这个问题或用户结果,直到它们互相匹配。

现在,我有了起点和终点,我从用户希望得到的结果反向回推到开头的问题,在这一过程中将两者加以简化,确保过程中的每一点都有助于回答开头提出的问题。

我记下了我对当前解决方案不满意的地方。“烂番茄”上的短评需要阅读并加以分析, 这真是太烧脑了! 我希望系统能为我做出决定, 判断出我会喜欢还是不喜欢这部电影; 或者,更好(更简单)的方法是机器仅向我显示它认为我会喜欢的电影。

为了让机器采取机器的方法思考,我们必须使其非人化,将情绪从数据中剥离。电影评论家的意见主观性太强,不适合让机器采用。我们需要的只是“赞”或“踩”, 对应到“1”或“0”,因为没有什么比二进制对象更简单了。

在搭建系统的大体框架时,我喜欢概括。“我不信任电影评论家的意见,因为他们跟我想的不一样。系统需要把我和其他与我想法一样的人归到一起。”

在这里似乎要回答的关键问题是“什么使一个人的意见值得信赖?”

许多系统严重依赖于“1”(人们喜欢的电影)而忽略“0”(人们不喜欢的电影),但是我相信这是一个错误。“0”可以帮助我们极大地提高机器的准确度。

例如:芝加哥的Jeremy喜欢《教父3》,而不喜欢《壮志凌云2:独行侠》。我们对这两部电影的感受是一样的。接下来,Jeremy对《节奏组》评了分,这部片子我还没看过。他赞了这部电影。借助这条信息,系统推荐我观看《节奏组》(图2)。如果看完电影后,我也“赞”了这部电影,Jeremy推荐的权重就会增加,他的意见也会变得更加值得信赖一些。


图2:向系统中添加更多意见后,推荐的准确性将会提高。(图源:贸泽电子)

就这么简单。设计得宜的系统应该仅使用几个数据点即可实现目标,并以此为基础进行构建。在我们的案例中,我们的机器可以通过收集越来越多的用户对越来越多电影的“赞”和“踩”,来继续提高准确性。

简化

设计好机器的运行机制后,我接下来要问:“系统还可以简化吗?”

我发现我并不需要知道“来自芝加哥的Jeremy”是谁。我不需要看他的个人资料照片或推荐的其他电影。我甚至不需要看到他的名字(实际上匿名系统可能更可取)。我关心的只是机器会以越来越高的精度来推荐电影,这样就可以摆脱系统中的所有社交负担。我可以想象一个干净的用户界面,它只显示机器认为我会喜欢的一部电影的海报。

我看到过系统因为设计人员未能一直简化下去而失败,所以我想提醒自己,只要仍能达到预期的目标,解决方案越简单就越精巧。

扩展

我的电影推荐引擎现在可以通过每部电影仅收集一个数据点而进一步变得“更聪明”。10,000个用户中,每个用户只要评价50部电影,就可以实现可接受的准确度。当然,在数据自身足够可靠,并且机器可以准确地预测我接下来应该看哪部电影之前,一切都还是猜测。但这才是重点。我们刚刚设计了一个非常简单的系统,当我们将模型扩展到更大的用户群时,可以轻松地进行准确性测试。

机器之美就在于其中。当您设计简单而有效的AI系统时……先提出问题, 加以简化, 然后再进行扩展。


文章
作者简介:Stephen经常受邀为《财富》100强企业提供总体产品战略和架构设计方面的建议,尤其是在涉及工作流管理、电子商务、人工智能和机器学习的领域,他对当前流程有着客观的看法。他建议在战略上进行小幅调整,以产生长期重大收益以及快速的投资回报。

作为首席技术官/首席系统架构师,Stephen深刻了解搭建成功的“软件即服务”平台所需的一切。一般是通过基于云的可扩展架构,将多个旧系统组合在一起,让复杂数据集能够以安全、统一的视图呈现给用户。