查找与另一部电影相似的电影

要查找嵌入与特定电影的嵌入相似的电影,请检索该电影并将其嵌入提供给Cypher®过程db.index.vector.queryNodes

MATCH (m:Movie {title: 'Despicable Me'})
CALL db.index.vector.queryNodes('moviePlots', 5, m.embedding)
YIELD node, score
RETURN node.title AS title, node.plot AS plot, score
表 1. 使用 OpenAI 的嵌入的结果
标题 剧情 得分

“卑鄙的我”

“当一个犯罪策划大师利用三个孤儿女孩作为一项宏伟计划的棋子时,他发现她们的爱正在深刻地改变他,变得更好。”

1.0

“卑鄙的我 2”

“当格鲁,世界上最坏的超级坏蛋变成超级爸爸,被一个官员团队招募来阻止致命肌肉和格鲁自己的一群人时,他必须用新的工具、汽车和更多的米尼恩疯狂进行反击。”

0.940204381942749

“小黄人”

“小黄人斯图尔特、凯文和鲍勃被超级恶棍斯嘉丽·奥弗基尔招募,她与她的发明家丈夫赫伯一起策划了一个接管世界的阴谋。”

0.9329936504364014

“阿拉丁”

“当一个街头恶棍争夺一位美丽公主的爱时,他利用精灵的魔力让自己冒充王子,以便与她结婚。”

0.9291699528694153

“无敌破坏王”

“超级恶棍大坏蛋终于击败了他的宿敌,超级英雄都市超人。但没有英雄,他就失去了所有目标,必须为他的生活找到新的意义。”

0.9292264580726624

表 2. 使用 SentenceTransformers 的嵌入的结果
标题 剧情 得分

“卑鄙的我”

“当一个犯罪策划大师利用三个孤儿女孩作为一项宏伟计划的棋子时,他发现她们的爱正在深刻地改变他,变得更好。”

1.0

“爱上艰难之路”

“一个卑鄙的小偷遇到一个天真年轻的女人,并把她带入他的犯罪世界的故事,而她则教他享受生活和被爱的课程。”

0.7806928157806396

“控制的极限”

“一个神秘的孤独者,一个正在完成犯罪工作的陌生人的故事。”

0.7746935486793518

“半熟”

“三个不太聪明的男人想出的一系列疯狂计划,以帮助他们的朋友出狱的故事。”

0.7708940505981445

“无人知晓”

“一个有着暴力过去的安静典当行老板,为了拯救他唯一的朋友,一个孩子,而与一个贩毒和器官贩卖团伙作斗争。”

0.7698113918304443

检索与搜索提示匹配的节点时,来自 OpenAI 和 SentenceTransformers 的结果差异不大。另一方面,在上面的示例中,它们的执行方式大不相同:OpenAI 能够关联三部小黄人电影,而卑鄙的我 2小黄人没有出现在 SentenceTransformers 的结果中。

为什么卑鄙的我 2没有出现在使用 SentenceTransformers 嵌入的卑鄙的我前五部最接近的电影中?鉴于嵌入是在标题和剧情上生成的,让我们看看这两部电影的剧情是如何相关的。

卑鄙的我剧情

当一个犯罪策划大师利用三个孤儿女孩作为一项宏伟计划的棋子时,他发现她们的爱正在深刻地改变他,变得更好。

卑鄙的我 2剧情

当格鲁,世界上最坏的超级坏蛋变成超级爸爸,被一个官员团队招募来阻止致命肌肉和格鲁自己的一群人时,他必须用新的工具、汽车和更多的米尼恩疯狂进行反击。

这些读起来像是完全不同的电影:曾经的犯罪策划大师现在是格鲁,世界上最坏的超级坏蛋;不再有三个孤儿女孩;第一部电影的剧情中没有小黄人

尽管今天每个人都将卑鄙的我小黄人联系起来,但这并不是这部电影最初上映时对其进行描述和营销的方式。小黄人在公众文化中非常受欢迎,这使得它们后来成为营销的主要中心。嵌入模型根本没有所有这些上下文——这些上下文来自在世界上生活了十年,日复一日。

即使剧情本身看起来不太相似,OpenAI 似乎也能够关联三部小黄人电影。OpenAI 这样做的原因完全在于其模型的训练方式。如果有什么不同的话,那就是 OpenAI 正确地关联它们比 SentenceTransformers 无法看到它们之间的联系更令人惊讶。