头图

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

我们每天都在接触推荐系统,短视频、电商、外卖、演出、广告……

今天,我们将演示 Jina AI 社区用户 Achintya 的项目,他用 Jina 搭建了一个电影推荐系统。

电影推荐系统原理概览

在这个 Demo 中,作者将电影推荐转换成了文本搜索问题。

系统将用户输入作为文本 query,并在数据库中搜索与查找类似电影。

注:开始前需要向模型提供电影的名称、描述和类型等字段。

技术栈: Jina,Rest API,Dart

数据库: IMDB 电影数据集

图片

电影推荐系统架构图

具体过程如下:

1、从 Kaggle 下载 IMDB 电影数据集

2、将数据添加至 DocumentArray 中,以便进一步预处理和索引。

3、将 DocumentArray 发送至 Flow,用 Jina Hub 上的 Executor 对数据进行索引。

4、搜索 Flow 将对输入查询进行编码,并在索引数据中搜索最匹配的选项。

5、找到最佳匹配后,发送 Rest API 作为输出数据(该 API 适用于各种前端框架)。

代码演示:3 个关键步骤打造电影推荐系统

本 Demo 的核心步骤包括:构建 Flow、索引以及和搜索功能。

1、创建 Flow

这里会用到两个 Executor: SimpleIndexer 及 TransformerTorchEncoder

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'};
 var  final_data = [];
 Map<String, dynamic> 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 = jsonDecode(responseBody);
 final_data = convertedData['data'][0]['matches'];
 for (var item in final_data) {
    print(item['tags']['Title']);
  }
} 
void main(List<String> arguments) {
  print("Starting"); 
  makePostRequest();
}

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

图片

电影推荐系统的效果展示

关于作者 Achintya:

Jina AI 社区成员,计算机科学专业大二学生,专注于机器学习及应用开发。

本文涉及的学习资料

Learning Bootcamp

DocArray 文档

Jina 文档

加入社区

阅读原 blog


技术分享实录
Jina 是一个基于云原生的神经搜索框架,目前已在 GitHub 开源。 了解 Jina 及相关 Doc、Examples 请访问...

Jina 是一个基于云原生的神经搜索框架,目前已在 GitHub 开源。

16 声望
6 粉丝
0 条评论
推荐阅读
分享回顾|新岁序开,2023 和Jina AI共同码梦
在坚持开放协作精神、具备全球影响力的 Jina AI 开源社区,每天都有来自世界各地的开发者来到这里,因为技术产生联结,因为联结产生共创。一直以来,我们都为拥有这样一个全球化、多元化和高速发展的社区而感到自...

JinaAI阅读 680

Vue 实现人机五子棋
预览效果github源码核心代码 {代码...} 原文地址:[链接]

jigsaw4阅读 3.2k

视频清晰度优化指南
随着移动互联网的深入发展,视频消费场景逐渐变成主流,早期由于手机硬件的限制问题,导致生产出来的视频画质、清晰度存在较大的问题,用户体验不太好,当时的网络也处于4G的发展阶段,网络的限制也无法持续支持...

得物技术2阅读 884

2022 星策 Summit 峰会首批嘉宾确认,火热报名中!
Start Together, Star Together ,一起开始,一起闪耀!星策社区年度最大峰会来 啦!2022 星策 Summit 是由星策开源社区主办、思否社区协办,面向企业管理层、CTO、CEO、AI 工程师、开发者的线上直播活动。本次...

MissD阅读 9.7k

「2022 中国开源创新大赛」报名进入倒计时!还没上车的小伙伴抓紧时间啦
2022 年中国开源创新大赛,是在中央网信办指导下,由中国互联网发展基金会、中国网络空间研究院、中国互联网投资基金联合主办,北京长风信息技术产业联盟承办。

MissD阅读 6.5k

封面图
预告|2022 星策 Summit FeatureStore 分论坛议程公布!
由星策开源社区主办、思否社区协办的首届“ 星策 Summit ” 即将来袭!本次大会主要面向企业管理层、CTO、CEO、AI 工程师、开发者,共涉及企业智能化转型、MLOps、FeatureStore 等多个领域,现场将特邀星策社区成员...

MissD阅读 6k

第十六届中国大数据技术大会五大分论坛顺利举办!
1 月 8 日下午,由苏州市人民政府指导、中国计算机学会主办、苏州市吴江区人民政府支持,CCF 大数据专家委员会、苏州市吴江区工信局、吴江区东太湖度假区管委会、苏州市吴江区科技局、苏州大学未来科学与工程学院...

MissD阅读 5.7k

Jina 是一个基于云原生的神经搜索框架,目前已在 GitHub 开源。

16 声望
6 粉丝
宣传栏