原大众号链接是[这儿](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步。
- 将数据集加载成 DocArray 格式。
- 运用 CLIP-as-service 编码产品图像,以此建立产品模型。
- 计算最近 K 次浏览产品的 embedding 的加权平均数,以此来建立用户画像。
- 索引 Redis 中的产品数据。
- 用 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))便利国内下载运用。
主要修改
原大众号文章里有这样一段代码,这儿有些问题,需求修改掉
能够看到这儿有一个hardcode的 n_dim,很有或许跟自己clip_server embedding之后的维度不相同。假如不相同导致的结果就是,在用 find(embedding) 进行最近查找的时分会找不到内容。
因而我在讲encoded_da放进redis之前,首先获取一下embedding的dim是多少即可。
n_dim = len(da[0].embedding)
总结
总体来说,Jina AI的大众号、文档质量很高,大部分内容都能够一遍经过,微信群里也有专门的资深工程师进行答疑解惑,氛围很棒。
下一篇《复现》选题现已预备好了,在路上了。