分享

基于ChatGPT实现电影推荐小程序

本帖最后由 nettman 于 2023-4-21 17:46 编辑


问题导读:

1、怎样利用上ChatGPT的推荐功能?
2、怎样使用Python调用ChatGPT API?
3、怎样实现电影信息的爬取?






** 效果预览 **
1、根据电影明星推荐





2、根据兴趣标签推荐



3、根据电影名推荐



一、需求背景

在我们日常想看电影的时候,经常会遇到一些问题:

1. 闲来无事想看个电影,打开电影列表,感觉都是看过的,一下子不知道该如何去发现新大陆?
2. 喜欢某个演员,想看与他风格类似的电影,可惜电影网站的影片推荐总是那么不尽人意!
3. 在不同的电影网站,填入自己的感兴趣的标签,结果推荐出来的电影题材并不是自己想要的效果!

既然说起推荐系统,这就刚好踩中了我那研究三年推荐系统的读研苦逼时光了。稍微介绍一下时下主流的推荐系统的架构和算法:

截屏2023-04-07 17.44.13.png

df4e45d13b014b4cb9e8fd3c27ccda57.png

在如此庞大的数据体量和计算引擎的支持下,现如今的推荐系统仍然没有以完美的姿态来解决用户的冷启动问题,所以说时下,推荐系统在学术界的研究已经达到了一种登峰造极的状态,你我都知道可能多引入一些高性能的模型去加强,多跑几轮模型去调参优化,从而实现更美丽的推荐效果!这样我们可能可以得到一篇优秀的论文!但是在工业应用领域,对于推荐算法的优化,新投入的算力跟人工成本,通常并不会由于更准推荐效果从而产生更丰厚的营收,可以说投入跟产出完全不成正比!这对于时下资本退却的互联网来说,这是最要命的!

于是乎,我们可以转换一下思路,有没有什么模型和算法可以实现推荐效果最优化,不惧怕因为用户数据量少而导致的冷启动问题 ------ 那么这个时候ChatGPT获取可以申请一战,他有超海量的全人类用户数据、连续产生内容及记忆理解上下文功能!

好那么,基于此,让我们来用ChatGPT做一个电影推荐小程序! 做一个可以满住你的任意无理要求的电影小程序。

二、项目原理及架构

2.1 实现原理

1. 要利用上ChatGPT的推荐功能,首先构造好目标明确的问题是成功的关键。

2. 在获取到GPT的推荐数据之后,我们需要将推荐结果中的电影内容获取并展示在小程序端,这里我们需要采用Python爬虫对豆瓣电影网进行爬取!

截屏2023-04-07 17.45.35.png

这里我们构造了三类推荐类目: 兴趣标签、电影主题、电影明星

(1)根据用户的兴趣标签

通过用户输入的兴趣标签进行电影的匹配

截屏2023-04-07 17.46.41.png

8f5d334d980248559fb71ad5f234458a.gif

(2)根据关联类似主题的题材

截屏2023-04-07 17.47.51.png

a875667ea29d4f02b294cd0db1881969.gif

(3)根据特定的电影明星

截屏2023-04-07 17.49.16.png

8ee6d331323a4c44b0f67ab25f7543e5.gif

2.2 技术架构

5aa913d4508d4799a7e51ef4c19bb068.png

2.3 技术栈

截屏2023-04-07 17.51.14.png

三、项目功能的实现

3.1 小程序端设计与实现

首页

b2ef8cb592794c0a82e5ef60ddac313b.gif

标签选择

ee87fb7af7954cdc9361e7da7f66e15e.gif

推荐电影列表页



电影详情页

缺图

3.2 数据后端设计与实现

截屏2023-04-07 17.54.10.png

注重介绍后端服务接入 ChatGPT API,需要按照以下步骤进行操作:

注册一个账号并登录到OpenAI的官网:https://openai.com/
在Dashboard页面上,创建一个API密钥。在“API Keys”选项卡下,点击“Generate New Key”按钮。将生成的密钥保存好,以备后续使用。
选择所需的API服务,例如“Completion” API,以使用OpenAI的文本生成功能。

468752dcad8e4d2c9dcadbb63ac58845.png

使用Python调用ChatGPT API实现代码如下:

方法一:使用request库

  1. import requests
  2. import json
  3. # 构建API请求
  4. url = "https://api.openai.com/v1/engines/davinci-codex/completions"
  5. headers = {"Content-Type": "application/json",
  6.            "Authorization": "Bearer YOUR_API_KEY"}
  7. data = {
  8.     "prompt": "Hello, my name is",
  9.     "max_tokens": 5
  10. }
  11. # 发送API请求
  12. response = requests.post(url, headers=headers, data=json.dumps(data))
  13. # 解析API响应
  14. response_data = json.loads(response.text)
  15. generated_text = response_data["choices"][0]["text"]
  16. print(generated_text)
复制代码
方式二:使用openAI库

  1. from flask import Flask, request
  2. import openai
  3. app = Flask(__name__)
  4. openai.api_key = "YOUR_API_KEY_HERE"
  5. @app.route("/")
  6. def home():
  7.     return "Hello, World!"
  8. @app.route("/chat", methods=["POST"])
  9. def chat():
  10.     data = request.json
  11.     response = openai.Completion.create(
  12.         engine="davinci",
  13.         prompt=data["message"],
  14.         max_tokens=60
  15.     )
  16.     return response.choices[0].text
  17. if __name__ == "__main__":
  18.     app.run()
复制代码

3.3 数据智能获取功能设计与实现

定义一个函数来实现电影信息的爬取,该函数的输入参数为电影名,输出为该电影的名称、导演、主演、类型、上映时间、评分等信息。具体实现步骤如下:

构造请求 URL,其中电影名需要进行 URL 编码。

发送 HTTP 请求,获取豆瓣电影页面的 HTML 内容。

使用 lxml 库解析 HTML 文档,提取电影信息。

  1. import requests
  2. from lxml import etree
  3. def crawl_movie_info(movie_name):
  4.     # 1. 构造请求 URL
  5.     url = f'https://www.douban.com/search?q={movie_name}'
  6.     # 2. 发送 HTTP 请求,获取 HTML 内容
  7.     response = requests.get(url)
  8.     html = response.content.decode()
  9.     # 3. 解析 HTML 文档,提取电影信息
  10.     tree = etree.HTML(html)
  11.     # 获取搜索结果列表中的第一个电影条目
  12.     movie_link = tree.xpath('//div[@class="result"]/div[@class="content"]/h3/a/@href')[0]
  13.     response = requests.get(movie_link)
  14.     html = response.content.decode()
  15.     # 解析电影页面 HTML 文档,提取电影信息
  16.     tree = etree.HTML(html)
  17.     # 电影名称
  18.     movie_title = tree.xpath('//span[@property="v:itemreviewed"]/text()')[0]
  19.     # 导演
  20.     directors = tree.xpath('//a[@rel="v:directedBy"]/text()')
  21.     director = ' / '.join(directors)
  22.     # 主演
  23.     actors = tree.xpath('//span[@class="actor"]/span[@class="attrs"]/a/text()')
  24.     actor = ' / '.join(actors)
  25.     # 类型
  26.     genres = tree.xpath('//span[@property="v:genre"]/text()')
  27.     genre = ' / '.join(genres)
  28.     # 上映日期
  29.     release_date = tree.xpath('//span[@property="v:initialReleaseDate"]/text()')[0]
  30.     # 评分
  31.     rating = tree.xpath('//strong[@class="ll rating_num"]/text()')[0]
  32.     # 返回电影信息
  33.     return {
  34.         '电影名称': movie_title,
  35.         '导演': director,
  36.         '主演': actor,
  37.         '类型': genre,
  38.         '上映时间': release_date,
  39.         '评分': rating,
  40.     }
复制代码


我们可以通过调用该函数,传入电影名参数来获取电影信息。例如:

  1. Copy code
  2. movie_name = '大赢家'
  3. movie_info = crawl_movie_info(movie_name)
  4. print(movie_info)
复制代码

输出结果如下:

  1. {'电影名称': '大赢家', '导演': '李伟 / 黄伟明', '主演': '赵本山 / 贾玲 / 小沈阳 / 张子枫 / 李春
复制代码







最新经典文章,欢迎关注公众号



---------------------

作者:陶人超有料
来源:csdn
原文:微信小程序 | 基于ChatGPT实现电影推荐小程序



没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条