龙空技术网

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

回响之橙 203

前言:

现时兄弟们对“pythonprepare”大体比较注重,姐妹们都需要分析一些“pythonprepare”的相关内容。那么小编在网上汇集了一些对于“pythonprepare””的相关知识,希望各位老铁们能喜欢,同学们一起来了解一下吧!

原公众号链接是 DocArray 和 Redis 联手,让推荐系统飞起来 看着挺有趣的,就决定动手试一试。

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

这个小项目主要是用[Jina AI: MLOps for Multimodal AI, Neural Search, Generative AI, Creative AI]来完成简单的推荐系统搭建。

总体过程分为以下5步。

将数据集加载成 DocArray 格式。使用 CLIP-as-service 编码商品图像,以此建立商品模型。计算最近 K 次浏览商品的 embedding 的加权平均数,以此来建立用户画像。索引 Redis 中的商品数据。用 Redis 向量相似性搜索来推荐和用户浏览历史中最相似的商品,同时根据用户的偏好过滤这些结果。一步步来:安装Redis Server

如果本地已经有redis server了可能要检查一下是否支持RedisSearch,如果版本较老不支持的话,需要安装最新版。 为了避免麻烦,直接使用docker来部署一个新的redis server即可。

docker run -d -p 6380:6379 redis/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 

即可把相关的依赖都安装好。

一键准备

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

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

启动本地clip_server:

python3 -m clip_server

这里需要注意,如果你的server是M1/M2芯片的MacBook,可能会有问题,表现状态是能够正常启动,c.profile()也能正常显示,但是在embedding的时候会异常,没有深究,建议使用x86 CPU的电脑或者服务器。

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

Jina auth loginpython3 prepare.py
运行和体验

最后一步直接运行就可以了,代码量很少

streamlit run main.py

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

主要修改

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

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

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

n_dim = len(da[0].embedding)
总结

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

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

标签: #pythonprepare