头图

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

JinaAI

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

今天,我们将演示 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

阅读 667

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

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

16 声望
0 粉丝
0 条评论

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

16 声望
6 粉丝
宣传栏