流媒体平台内容爆炸,面对海量的电影,我们常常陷入“电影太多,时间太少”的困境。本文介绍的 MovieRag,正是一个基于 GraphRAG (Graph Retrieval-Augmented Generation,图检索增强生成)的智能电影推荐聊天机器人,旨在帮助用户根据心情、兴趣、以及偏爱的类型、演员或导演,发现真正合意的电影。它巧妙地利用 大模型 (LLM)技术,化解流媒体时代的电影选择难题。
GraphRAG:超越传统向量检索的智能推荐基石
GraphRAG 是 MovieRag 的核心驱动力。传统的电影推荐系统往往依赖于向量检索(VectorRAG),通过计算用户画像与电影特征向量之间的相似度来进行推荐。虽然向量检索在语义相似度方面表现出色,但它缺乏明确的、可解释的关系。MovieRag 则另辟蹊径,采用 Neo4j 图数据库,构建电影、类型、演员、导演和关键词之间的复杂关系图。这意味着 MovieRag 可以:
- 将电影与类型、演员、导演和关键词等元素紧密连接。
- 利用 Cypher 查询语言,高效检索深度相关的电影节点。
- 支持多跳关系查询,例如,查找通过演员和类型都相关的电影。
例如,用户输入 “我想看一部克里斯托弗·诺兰导演,科幻题材的电影”,传统的向量检索可能仅仅返回几部科幻电影,而 MovieRag 则可以通过 (User)-[:LIKES]->(Director {name: "克里斯托弗·诺兰"})-[:DIRECTED]->(Movie)-[:HAS_GENRE]->(Genre {name: "科幻"})
这样的图查询路径,精准地找到《星际穿越》、《盗梦空间》等符合要求的影片。
此外,GraphRAG 的优势还体现在知识图谱的可解释性上。它可以清晰地展现电影之间的关联关系,让用户更好地理解推荐结果背后的逻辑。相比之下,向量检索的推荐结果往往缺乏透明度,用户难以了解推荐的原因。
数据集构建:打造电影知识图谱的基石
MovieRag 的强大功能建立在丰富的数据集之上。作者结合了 Kaggle 电影数据和 TMDB API 获取的元数据,清洗并转换成包含约 20,000 部电影的 CSV 文件,其中包含了 movie_id、title、director、cast、genres、keywords、overview、vote_average 和 image_path 等关键信息。
这些数据被进一步转换成 Neo4j 图数据库中的节点和关系,形成了以下几种关键的关联:
(Movie)-[:ACTED_IN]->(Actor)
:电影与演员之间的参演关系。(Movie)-[:DIRECTED]->(Director)
:电影与导演之间的执导关系。(Movie)<-[:HAS_GENRE]-(Genre)
:电影与类型之间的归属关系。(Movie)<-[:HAS_KEYWORD]-(Keyword)
:电影与关键词之间的关联关系。
通过这种方式,MovieRag 构建了一个拥有超过 2 万部电影、5 万多个关系的庞大电影知识图谱。这个知识图谱为 MovieRag 提供了强大的查询能力和推荐基础。举例来说,想要找到“由莱昂纳多·迪卡普里奥主演的、剧情评分超过8.0的电影”,MovieRag 能够迅速在图谱中定位符合条件的电影,例如《盗梦空间》、《华尔街之狼》等。
系统架构:LangChain GraphRAG 的巧妙应用
MovieRag 的系统架构遵循 LangChain GraphRAG 的范式,主要包含三个核心步骤:
-
类别检测 (Category Detection) via LLM: 首先,利用 大模型 分析用户的输入,提取关键类别信息。例如,对于用户输入 “我想看一部马特·达蒙主演的科幻电影”,该步骤会提取出 “genre: 科幻” 和 “actor: 马特·达蒙” 两个类别。为了实现这一点,可以利用 大模型 的文本理解能力,结合预定义的类别词汇表,识别用户输入中的关键信息。例如,可以训练一个专门用于电影类别识别的 大模型,或者使用现有的通用 大模型,并辅以适当的提示工程(Prompt Engineering)。
-
Neo4j 图查询 (Neo4j Graph Querying): 根据提取出的类别信息,动态生成 Cypher 查询语句,从 Neo4j 图数据库中检索最相关的电影。例如,对于上面的例子,生成的 Cypher 查询语句可能是:
MATCH (a:Actor {name: "马特·达蒙"})-[:ACTED_IN]->(m:Movie)-[:HAS_GENRE]->(g:Genre {name: "科幻"}) RETURN m
这条查询语句会在图数据库中查找所有由马特·达蒙主演的、属于科幻类型的电影。为了提高查询效率,可以对图数据库进行索引优化,并采用合适的查询策略。
-
上下文推荐 (Contextual Recommendation) via LLM: 将检索到的电影列表反馈给 大模型 (Gemini 或 GPT-3.5),生成具有同理心和基于心情的推荐。这一步是 MovieRag 的关键创新点。传统的推荐系统往往只是简单地将检索到的电影列表呈现给用户,而 MovieRag 则会利用 大模型 的生成能力,为每部电影生成个性化的推荐理由,并结合用户的心情进行推荐。例如,如果用户说 “我今天感觉有点沮丧”,MovieRag 可能会回复说:
“很抱歉你今天心情不好 😔 — 要不要看一些能让你心情愉悦的电影呢?”
然后提供:
- 🎥 《白日梦想家》:导演:本·斯蒂勒,主演:本·斯蒂勒、克里斯汀·韦格。讲述了一个平凡的杂志社员工通过想象力改变人生的故事,充满正能量。
- 🎬 《心灵奇旅》:导演:彼特·道格特、肯普·鲍尔斯。皮克斯动画,探讨生命的意义,温暖治愈。
- 🎞️ 《阳光小美女》:导演:乔纳森·戴顿、维莱莉·法瑞斯。讲述一个古怪家庭为了支持女儿参加选美比赛而展开公路旅行的故事,温馨感人。
每部电影都配有导演、演员、简短剧情介绍,以及推荐理由。MovieRag 还会推荐一部“星选影片”,也就是作者认为最适合用户当前心情的电影。这个过程充分利用了 大模型 的文本生成能力,为用户提供了更具个性化和情感化的推荐体验。
技术栈:打造智能电影推荐的利器
MovieRag 的技术栈简洁而高效:
- Neo4j: 图数据库,用于存储和查询电影知识图谱。
- LangChain: LLM 应用开发框架,简化了 大模型 的集成和调用。
- FastAPI: 轻量级的 Python Web 框架,用于构建 API 接口。
- Streamlit: 用于快速构建交互式 Web 应用。
- Firebase: 用于用户认证和聊天记录存储。
- Gemini / GPT-3.5: 大模型,用于类别检测和上下文推荐。
这个技术栈的选择充分考虑了开发效率、性能和可扩展性。Neo4j 提供了强大的图查询能力,LangChain 简化了 大模型 的应用,FastAPI 保证了 API 的稳定性和高性能,Streamlit 提供了便捷的 Web 界面,Firebase 简化了用户管理,大模型 则为 MovieRag 赋予了智能和个性化的能力。
功能亮点:提升用户体验的细节设计
MovieRag 不仅在核心算法上有所创新,还在用户体验方面做了很多细节设计:
- 智能 NLP (Smart NLP): 从用户的消息中解析类型、心情、导演、演员或电影名称。例如,用户可以说 “我想看一部轻松的喜剧”,MovieRag 能够准确地提取出 “genre: 喜剧” 和 “mood: 轻松” 两个信息。
- 图驱动的相关性 (Graph-Driven Relevance): 通过深层连接查询精确匹配和相似的电影。例如,用户搜索 “Tom Cruise”,MovieRag 不仅会返回 Tom Cruise 主演的电影,还会推荐与 Tom Cruise 合作过的演员主演的电影,或者与 Tom Cruise 主演的电影类型相似的电影。
- 聊天记录和身份验证 (Chat History & Auth): 用户可以通过 Firebase 查看/删除过去的聊天记录。这增强了用户的隐私保护和数据控制能力。
- 语音输入 (Voice Input): 支持土耳其语语音输入,让用户可以用语音的方式查找电影。这体现了 MovieRag 的国际化视野和对不同语言的支持。
- 海报预览 (Poster Previews): 直接从图数据库中提取电影海报。这提升了用户界面的美观性和吸引力。
这些细节设计都旨在提升用户体验,让用户在使用 MovieRag 的过程中感到更加便捷、舒适和愉悦。
未来展望:打造更智能的电影推荐助手
MovieRag 仍然有很大的发展潜力。作者提出了以下几个未来的发展方向:
- 加入基于文本/语音的情感检测,实现更深层次的共情。这意味着 MovieRag 将能够更准确地理解用户的情绪,并提供更贴合用户需求的推荐。例如,如果用户在语音中表现出疲惫,MovieRag 可能会推荐一些轻松愉悦的电影。
- 支持多类别过滤 (例如,由汤姆·克鲁斯主演的动作电影)。这将进一步提升 MovieRag 的查询能力,让用户能够更精确地定位到自己想看的电影。
- 微调 Gemini 或 GPT-4 模型,以获得更好的对话语气。这将提升 MovieRag 的对话能力,让用户感觉像是在与一个真正的电影专家交流。
总而言之,MovieRag 不仅仅是一个电影机器人,更是你的电影伙伴,帮你摆脱选择困难,发现适合任何心情的完美电影。 如果你对 AI、图数据库或 大模型 驱动的应用程序感兴趣,这个项目是一个很棒的全栈展示。它的巧妙之处在于将 GraphRAG 的知识图谱能力与 大模型 的理解和生成能力相结合,打造了一个既智能又个性化的电影推荐系统,代表了 大模型 技术在电影推荐领域的创新应用。