社区项目分享|社区项目分享 | 用 Jina 搭建一个电影推荐系统

我们每天都在接触推荐系统,短视频、电商、外卖、演出、广告……
今天,我们将演示 Jina AI 社区用户 Achintya 的项目,他用 Jina 搭建了一个电影推荐系统。
电影推荐系统原理概览 在这个 Demo 中,作者将电影推荐转换成了文本搜索问题。
系统将用户输入作为文本 query,并在数据库中搜索与查找类似电影。
注:开始前需要向模型提供电影的名称、描述和类型等字段。
技术栈: Jina,Rest API,Dart
数据库: IMDB 电影数据集
社区项目分享|社区项目分享 | 用 Jina 搭建一个电影推荐系统
文章图片

电影推荐系统架构图
具体过程如下:
1、从 Kaggle 下载 IMDB 电影数据集。
2、将数据添加至 DocumentArray 中,以便进一步预处理和索引。
3、将 DocumentArray 发送至 Flow,用 Jina Hub 上的 Executor 对数据进行索引。
4、搜索 Flow 将对输入查询进行编码,并在索引数据中搜索最匹配的选项。
5、找到最佳匹配后,发送 Rest API 作为输出数据(该 API 适用于各种前端框架)。
代码演示:3 个关键步骤打造电影推荐系统 本 Demo 的核心步骤包括:构建 Flow、索引以及和搜索功能。
1、创建 Flow
这里会用到两个 Executor: SimpleIndexerTransformerTorchEncoder

from jina import Flow flow = ( Flow(port_expose='12345', protocol='http').add( uses="jinahub://TransformerTorchEncoder", uses_with={ "pretrained_model_name_or_path": "sentence-transformers/paraphrase-distilroberta-base-v1" }, name="encoder", install_requirements=True ) .add( uses="jinahub://SimpleIndexer/latest", uses_metas={"workspace": "workspace"}, volumes="./workspace:/workspace/workspace", name="indexer" ) )

2、创建 Index 函数
Index 函数获取文本格式的图像数据集,并将其转换为 Jina 原生的 DocumentArray,发送至 Flow 进行索引和搜索。
with flow as f: f.post(on="/index", inputs=movies, show_progress=True) f.post(on="/", show_progress=True) f.cors = True f.block()

3、创建搜索函数
搜索函数接收文本输入,并发出 HTTP post 请求,从 Jina 后端获取类似的电影片名。
import 'dart:convert'; import 'package:http/http.dart'; makePostRequest() async { final uri = Uri.parse('http://192.168.1.9:12345/search'); final headers = {'Content-Type': 'application/json'}; varfinal_data = https://www.it610.com/article/[]; Map body = {"data": [ {"text": "comedy"} ], "parameters": {"limit": 10} }; String jsonBody = json.encode(body); final encoding = Encoding.getByName('utf-8'); Response response = await post( uri, headers: headers, body: jsonBody, encoding: encoding, ); int statusCode = response.statusCode; String responseBody = response.body; print(statusCode); var convertedData = https://www.it610.com/article/jsonDecode(responseBody); final_data = convertedData['data'][0]['matches']; for (var item in final_data) { print(item['tags']['Title']); } } void main(List arguments) { print("Starting"); makePostRequest(); }

以上就是用 Jina 创建电影推荐系统的全部过程,完整代码请访问 GitHub Repo

电影推荐系统的效果展示
关于作者 Achintya:
Jina AI 社区成员,计算机科学专业大二学生,专注于机器学习及应用开发。
本文涉及的学习资料
Learning Bootcamp
DocArray 文档
Jina 文档
加入社区
【社区项目分享|社区项目分享 | 用 Jina 搭建一个电影推荐系统】阅读原 blog

    推荐阅读