乐趣区

关于深度学习:社区项目分享-用-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

退出移动版