随着淘宝的蓬勃发展,网购已经融入日常生活。网购让大家足不出户就能挑选众多品类商品,还能货比N家,但同时网购也会带来一些未知的问题。
相信大家都有线上购买服装的经历吧?在线上挑选的时候,只能根据价格、款式、尺码等信息,选出可能合适的衣服,但是衣服穿上后效果如何?应该怎么搭配更好看?我更适合淑女风还是废土风?毕竟淘宝商家的模特穿啥啥好看。
为了解决上述的痛点,淘宝服饰联合通义实验室XR实验室借助AIGC强大科技力推出了重磅级的产品AI试衣间。
在手机淘宝APP上搜索ifashion,上传自己的照片即可体验AI试衣~
在AI试衣间功能的背后,阿里云瑶池旗下的云原生数据仓库AnalyticDB MySQL提供了高维向量低延时的在线向量召回检索服务,下面将进行介绍。
1. 淘宝AI试衣间-技术揭秘
手淘搜ifashion即可进入线上AI试衣间,由淘宝服饰联合通义实验室XR实验室借助AIGC将人工智能和时尚穿搭相结合。AI试衣间将结合数亿用户的尺码数据和海量的服装图片实现推荐适合自己的穿搭搭配。为了满足要求,从海量的商品素材图片中快速找到需要的图片是一个很重要的基础服务。为了提升召回率,素材图片Embedding后使用多维的向量特征值存储,在线服务需要满足低延时高并发的要求。
云原生数据仓库AnalyticDB MySQL在此场景中提供了以图搜图服务,为试衣间提供满足特定要求的相似性素材图片的服务。AI试衣大模型训练每个模特需要多张不同的模特图,目前用户只供给了一张,我们是把商品详情图文中的图片数据,先通过算法识别把模特上身图抠出来,然后根据用户提供的那一张主图,从商品sku/详情图文库中对抠出的图片集中做相似度检索,按相似度阈值,生成不同的素材图,满足算法模型训练的图片数据供给数量,在满足图片相似度要求的情况下,可能也会有一些其他确定性的条件作为输入。下图简略介绍了处理过程。
AnalyticDB MySQL可以管理和检索图片素材,可以根据商品图片类别,属性或者相似图片做多模检索图片,在支持图片相似性检索的同时,同时支持和结构化数据的标量融合,包括多表的关联查询。例如,检索和输入图片相似,并且满足价格在200-300元之间和3个月内(新款)上架的商品照片。为了方便展示,假设向量的维度使用了8维长度。
1.1 数据模型
云原生数据仓库AnalyticDB MySQL,向量检索功能的使用很简单,使用array数据类型存储向量的特征值,array数据类型支持byte,smallint,int和float四种值类型,如果数据量很大,可以对需要进行向量召回的特征列定义一个向量的索引提升检索的速度。向量特征列和向量索引的管理和普通列和索引的DDL类似,支持在创建表的时候设定,也可以通过ALTER TABLE语句添加。
服饰类素材图片简化后的数据表定义如下。
CREATETABLE products ( product_id BIGINT COMMENT '商品ID', gmt_create DATETIME COMMENT '创建时间', gmt_modified DATETIME COMMENT '修改时间', image_url VARCHAR COMMENT '商品图片地址', price FLOAT COMMENT '商品价格', document JSON COMMENT '知识文档,json结构', status INT COMMENT '文档状态, 1审核通过,0未审核,-1审核不通过', feature ARRAY <float>(8) COMMENT '商品图片向量结果', PRIMARY KEY (product_id, gmt_create), ANN INDEX idx_feature(`feature`)) DISTRIBUTE BY HASH(product_id) PARTITION BY VALUE(`date_format(gmt_create,'%Y%m')`) LIFECYCLE 36 INDEX_ALL ='Y';
1.2 准备数据
数据入库支持实时写入和批量导入,下面的示例使用了insert into插入了1条测试数据。
INSERTINTO products (product_id, gmt_create, price, image_url, feature)VALUES(6, NOW(),288.00,'https://xxx/img6.jpg','[0.83891445,0.50359607,0.9299093,0.19440076,0.5789051,0.12121256,0.6587046,0.86555034]');
1.3 数据检索(向量召回)
AnalyticDB MySQL支持融合查询,需要同时满足下面的条件。
条件1:指定图片相似度前5,并且按照相似度排序,KNN+ Top-K。
条件2:价格在200.00和300.00之间。
条件3:素材的创建时间在最近3天以内。
上述条件2和3是结构化数据标量数值计算,条件1是非机构化相似性计算。业务场景期望3个条件可以在1个引擎同时完成,达到提升效率和降低维护成本的作用。这种场景通过AnalyticDB能够很方便支持,使用也很简单。
SELECT product_id, l2_distance(feature,'[0.83891440,0.50359607,0.9299093,0.19440070,0.5789051,0.12121256,0.6587046,0.86555034]')as dis, image_url, price, document FROM products WHERE l2_distance(feature,'[0.83891445,0.50359607,0.9299093,0.19440076,0.5789051,0.12121256,0.6587046,0.86555034]')<10-- 设定相似性阈值,排除一些差异性太大的结果AND gmt_create > DATE_SUB(NOW(), INTERVAL 90 DAY)-- 最近90天AND price between200.00and300.00-- 价格在200-300之间ORDERBY l2_distance(feature,'[0.83891445,0.50359607,0.9299093,0.19440076,0.5789051,0.12121256,0.6587046,0.86555034]')LIMIT5;-- 最相近的top5
AnalyticDB MySQL除了提供实时OLAP多维分析和检索外,还提供向量召回功能,支持淘宝APP的AI试衣间场景,解决了引擎冗余的问题,把结构化数据和非结构化数据检索能力整合,适用于多模混合负载检索场景,降低了向量的使用和运维成本。
2. 经验和总结
在电商行业,以图搜图让用户所见即所搜,拍张照片可以找到相似的商品;在游戏行业,通过识别玩家的情感状态,更好的理解玩家的感受和态度,进行针对性的优化和改进,增加游戏玩家的趣味性;在智能客服行业,通过结合企业领域知识和大模型语义理解能力构建智能客服。这些智能化应用落地的背后,离不开向量数据库的加持。向量数据库使用场景多且丰富,常常应用在以文搜图、以图搜图、听音识歌等等,技术已经得到了广泛的应用,比如:
- 人脸识别服务,支持高维人脸识别。
- 以图搜图服务,即通过图片检索图片的应用服务。
- 视频检索服务,即通过视频中的某些帧图片进行视频图片检索,来实现视频检索。
- 声纹检索服务,即通过音频匹配音频的应用服务。
- 推荐系统服务,即通过用户特征匹配实现推荐匹配的功能。
- 基于语义的文本检索和推荐,通过文本检索近似文本。
- 问答机器人,通过与大模型结合搭建高效的问答机器人服务。
为了实现特征向量的快速检索,一般都会构建向量索引来实现。通常说的向量索引都属于ANNS(Approximate Nearest Neighbors Search,近似最近邻搜索),它不同于数字的等值或者字符串的term匹配,也不同于like或者全文检索的近似匹配,而是在最大程度上通过非结构化数据的相似度进行检索。
ANNS向量索引可以根据实现方式的不同区分为不同类型的索引,主要分为图索引和量化索引,其中图索引主要是HNSW和RNSW,量化索引主要是PQ、FLAT、SQ8和SQ8H等。为了能使ANNS向量索引能够更加方便地应用到实际的生产环境中,目前业界主要有两种实践方式。一种是单独将ANNS向量索引服务化,以提供向量索引创建和检索的能力,从而使其成为人工智能服务体系中的一部分;另一种就是在传统结构化数据库的基础之上,去融合ANNS向量索引的能力,从而使其能直接使用简单的SQL就能完成复杂的结构化数据检索,也能同时具备结构化与非结构化融合查询的能力。
云原生数据仓库AnalyticDB MySQL是一款阿里云数据库团队自研的云原生数据仓库产品,支持向量和结构化数据的融合检索,在各种条件组合的查询的场景中,达到超过99%的召回率。它的数仓和湖仓提供了非结构化数据的存储和通用数据库检索服务。通过深度学习网络完成推理,可以将非结构化数据转化成向量,提供基于向量的相似性检索。
AnalyticDB MySQL在集成向量检索引擎的同时也做了很多优化,算法的核心思想是把HNSW(Hierarchical Small World Graph)算法和多版本PQ(Product Quantization, 乘积量化)编码算法做一个融合,实现了不同场景下支持向量索引的实时增删查改,使向量检索引擎和数据库本身融为一体,可以非常方便的使用。目前AnalyticDB使用的向量检索引擎技术已经发表在了VLDB上,该文主要讲述了HNSW算法和PQ算法在AnalyticDB中的实现以及相应的优化策略。
3. 未来展望
- 向量服务的Embedding服务可以支持插件式,提供Serverless/Function的向量Embedding服务,支持根据不同的业务场景选择不同的Embedding模型。
- 在相似度的召回率上提供可配置的选项,支持在QPS和召回率之间做一个更自主的灵活配置。例如除了支持人脸,声纹等需要高正确率的检索,也需要支持图片等素材更需要弹性的检索。