原大众号链接是[这儿](DocArray 和 Redis 联手,让引荐体系飞起来 (qq.com)) 看着挺风趣的,就决议着手试一试。

原文介绍了一些引荐体系的基础知识,像ItemCF、UserCF这种都有提到。

这个小项目主要是用[Jina AI](Jina AI: MLOps for Multimodal AI, Neural Search, Generative AI, Creative AI) 的 [DocArray](DocArray | Jina AI: MLOps for Multimodal AI, Neural Search, Generative AI, Creative AI) 来完结简单的引荐体系搭建。

总体过程分为以下5步。

  1. 将数据集加载成 DocArray 格式。
  2. 运用 CLIP-as-service 编码产品图像,以此建立产品模型。
  3. 计算最近 K 次浏览产品的 embedding 的加权平均数,以此来建立用户画像。
  4. 索引 Redis 中的产品数据。
  5. 用 Redis 向量相似性查找来引荐和用户浏览历史中最相似的产品,同时依据用户的偏好过滤这些成果。

一步步来:

装置Redis Server

假如本地现已有redis server了或许要检查一下是否支撑RedisSearch,假如版别较老不支撑的话,需求装置最新版。 为了防止麻烦,直接运用docker来布置一个新的redis server即可。

dockerrun-d-p6380:6379redis/redis-stack:latest

由于我本地现已有一个老版别的redis server占用了6379端口,这儿docker运转的选用6380 端口。

装置python依靠库

requirements.txt文件在[这儿](product-recommendation-redis-docarray/requirements.txt orange/jina_demo – 码云 – 开源我国 (gitee.com)) 直接运转

pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

即可把相关的依靠都装置好。

一键预备

这一步包含了数据集下载、编码、保存等过程。

Jina Cloud供给了数据集的编码和保存功用,但是假如能够在本地完结,比如有些时分公网速度受限或许有网络隔离要求,就很有必要了。

启动本地clip_server:

python3 -m clip_server

这儿需求留意,假如你的server是M1/M2芯片的MacBook,或许会有问题,表现状况是能够正常启动,c.profile()也能正常显现,但是在embedding的时分会异常,没有深究,建议运用x86 CPU的电脑或许服务器

直接运转一键脚本,编辑一下脚本里的几处内容,clip_server的地址等,有详细的中英文双语注释。

Jina auth login
python3 prepare.py

运转和体会

最后一步直接运转就能够了,代码量很少

streamlit run main.py

我把原大众号的代码修改了一下放在了[Gitee](jina_demo: jina ai demo (gitee.com))便利国内下载运用。

主要修改

原大众号文章里有这样一段代码,这儿有些问题,需求修改掉

复现系列-2:DocArray 和 Redis 联手,让推荐系统飞起来

能够看到这儿有一个hardcode的 n_dim,很有或许跟自己clip_server embedding之后的维度不相同。假如不相同导致的结果就是,在用 find(embedding) 进行最近查找的时分会找不到内容。

因而我在讲encoded_da放进redis之前,首先获取一下embedding的dim是多少即可。

n_dim = len(da[0].embedding)

总结

总体来说,Jina AI的大众号、文档质量很高,大部分内容都能够一遍经过,微信群里也有专门的资深工程师进行答疑解惑,氛围很棒。

下一篇《复现》选题现已预备好了,在路上了。