版权声明:本文为博主原创文章,转载请注明出处:https://twocups.cn/index.php/2023/08/31/55/

一、背景

今年二月份,Chat GPT 突然迎来爆火,让我深切感知到时代真的在飞速变革。当我还在感慨人工智能时代来临很迅猛的时候,各类 AI 模型及其应用都已经不断推陈出新,诸如备受瞩目的 AIGC 等。我这几天在 ATA 中读到一篇文章,深入探讨了如何将大型语言模型(LLM)与手淘首猜推荐相融合,以优化手淘推荐机制的效果。这让我很感慨,现在各种AI模型的蓬勃发展愈发显著。

我自己在人工智能领域的实际应用是很有限的,主要局限于利用 Chat GPT 协助思路整理。我之前也玩过一段时间 AIGC,然而由于其生成图片涉及版权问题,所以我也只能用来自我消遣一下。最近在研究 Arduino,这玩意儿属实有趣,感觉是 AI 的天然载体,但是一般的板子算力太弱,也只能玩玩。在工程侧,我一直没有找到合适的场景来深入探究人工智能。

人工智能的优势,是在替代人类在某些规律性工作中建立思维方式,以此解决问题。因此,我策划了一个以提升团队效率为目标的AI提效计划,分为三个阶段:请求定位、问题诊断、故障预测。

作为工程侧的开发,虽然上手复杂的算法有些困难,但是在一般算法的实际落地和简单优化方面,我还是有很多经验的。第一阶段的请求定位功能已经实现,本文的后续内容将会对其进行全面的介绍。第二阶段的问题诊断功能分为请求诊断和现象诊断,请求诊断目前已经完成一部分了。我们可以通过全链路日志直接获取整理好的日志中的问题,例如短视频没召回、商品卡主图重复等。现象诊断更为复杂,它需要在巨多的监控和变更中挑出可能导致问题的原因。第三阶段的故障预测目前还在摸索中。

二、技术策略

2.1 数据流程

Source:在DOSA等业务应用中部署信息采集组件,负责数据的上报。

Channel:在倒排索引存储库中为各个业务应用存储相应的数据。

Sink:数据处理后台会从存储库中进行数据召回、混排、解析和阶段。

2.2 技术架构

展现层

“请求定位”服务可以通过钉钉机器人“一定灵”直接访问。未来也会开通 Web 渠道,但是集团内的话肯定还是直接与机器人交互更加便捷。

服务层

请求定位服务的配置存储在 Diamond 中,权限系统由ACL负责。同时配有日志系统,用户可向“一定灵”发送指令“log”,机器人就会返回最近一次用户访问功能的日志。

图像识别和分类服务由“一定灵”的算法服务应用 taobao-vrobot 负责,目前可通过 Vipserver 访问。容器目前两两一组,未来流量大的情况下可设置集群计算。同时,“一定灵”会将用户发送的图片上传至OSS,将用户反馈结果上报至 taobao-vrobot,完成闭环训练,不断自优化模型,只需要少许的管理员介入即可。

“一定灵”和 taobao-vrobo t都是 Aone 应用,有集群监控及告警保证。同时在 Aone 本身优秀的负载均衡下,也能保证部分机器故障后,整体服务仍能正常运行。Vipserver 的健康监控保证了 taobao-vrobot 中的图像识别和分类服务接口的正常访问。当“一定灵”无法正常访问 taobao-vrobot,或 taobao-vrobot 返回结果不满足预期时,“一定灵”会使用本地备用的图像识别和定位算法服务。 关于“一定灵”的请求定位服务的本地备用的图像识别和定位算法服务,我之前也写过一篇博客介绍:https://twocups.cn/index.php/2023/08/05/54/

数据层

阿里日志服务SLS负责存储业务数据,对象存储服务OSS负责存储图像数据集及其数据标注信息。用户查询的图片也都会被保存在OSS中,作为下一次迭代训练的正/负反馈数据。

三、方案实现

步骤1:手淘首页的有效信息上报

采集组件vrobot-collection

在DOSA层直接用采集组件对子容器中卡片的有效信息进行采集和上报。

import com.taobao.vrobot.collection.controller.VCClient; 
@Autowired
VCClient vrobotCollectionClient; 
public void workerFunc() { 
    ...
    vrobotCollectionClient.report(info, Project.DOSA);
}

其中用到的采集组件是vrobot-collection,是我写的一个简易的信息上报库。vrobot-collection采用的是典型的工厂模式,会在用户进行信息上报之前从工厂中获取相应的上报客户端。如果发现没有注册则会立即进行客户端生成和注册。如果注册失败,那么直接用空客户端占位,防止线上业务高并发下重复注册带来的影响。

存储格式协议

在消息的上报之初就应该考虑消息的存储格式协议了,因为步骤3中是需要基于相同的协议来进行索引的,两者必须保持一致。

SLS在我用过的公司项目中已经是属于好用的那一类了,但是在我们的这个项目中还存在着两个问题:

  1. SLS的全文索引最多支持前16kb的内容,超过的部分将不会被视作需要建立索引的内容。
  2. SLS的中文分词逻辑是针对完整词义的。

对于前者,如果我们把DOSA中子容器内容直接上报,那么内容中的有效信息极大概率是不会被建立索引的。对于后者,我们之后是基于截图来获取有效信息的,这意味着我们获取的有效信息往往是残缺的。再加上SLS基于ES的倒排索引机制,让我们很难搜索到相应的内容。(举个简单的例子,在SLS中以“下班”为索引进行搜索有3000条,那么搜索“下班了”可能只有200条,如果不了解倒排索引和分词的话可能觉得这是反直觉的。)

基于此,我自己搞了套简易的数据存储格式协议(被作为工具类写在了vrobot-collection里),主要是为了和后面的查询逻辑对应上。

import com.taobao.vrobot.collection.utils.EncodeUtil;
String encodedReportContent = EncodeUtil.vRobotEncode(reportContent);

步骤2:截图中有效信息的定位和分类

钉钉机器人“一定灵”

钉钉机器人“一定灵”是淘宝首页逛信息流团队的稳定性机器人,日常会帮助我们做问题排查,各位可以在钉钉中直接搜到它。对它说“帮助”,它会告诉你它的使用说明。

“一定灵”作为单聊机器人可以接受富文本信息。当用户发送给他图片时,它会将其保存在OSS中,并且将链接发送给后台。后台需要调用图片时,只需要从OSS中下载即可。

图像识别与分类模型与备用算法服务

当“一定灵”接收到用户图片时,会先请求一定灵算法服务应用 taobao-vrobot 中的图像识别与分类服务。正常情况下,该服务会返回图像中识别对象的类型和坐标。若服务超时、空结果、或返回结果不满足预期,则会使用本地备用的图像识别和定位算法服务。你可以通过“一定灵”的“log”指令查看你最近一次的功能调用日志,其中就包括你用的模型名称。本地备用算法服务就不再多说了,上面已经给出了我之前的文章链接,其中的原理、源码和效果都已经描述清楚了。

Yolo模型

一定灵算法服务应用 taobao-vrobot 中的图像识别与分类服务主要是采用 Yolo v8 作为基础模型。我前期通过 LabelImg 对数据集做了数据标注,之后经过 Yolo 多轮训练,也挑选出了最优模型。

以下是模型预测效果图:

box_loss(边界框损失,越低越好):该损失用于衡量模型预测的边界框与真实边界框之间的差异,这有助于确保模型能够准确地定位对象。

obj_loss(置信度损失,越低越好):该损失用于衡量模型预测的框(即包含对象的矩形)与真实框之间的差异。

cls_loss(分类损失,越低越好):该损失用于判断模型是否能够准确地识别出图像中的对象,并将其分类到正确的类别中。

precision(精确度,越高越好):召回正确的正类和所有正类的比例。

recall(召回率,越高越好):召回正确的正类和召回样本确实是正类的比例。

精确度和召回率是图像识别最经典的两个指标,需要结合着看。举个例子,一个人群中共有5男5女,且识别目标是男性。假设我全部召回,那么精确度是50%,而召回率是100%;假设我召回了1男,那么精确度是100%,而召回率是20%。

之前我还加了 Multi-headed Self-attention(MHSA,多头自注意力机制),但由于手淘首页的场景相对简单,所以原先的模型就已经有很优秀的效果了。MHSA是Transformer及BERT模型中经常用到的一种机制,感兴趣的话可以去搜一下。通俗点来说,一般模型在对当前位置的信息进行编码时,会过度地将注意力集中于自身的位置。多头注意力机制其实就是将一个大的高维单头拆分成了多个多头。一般来说,这个多头的数量越多,模型的表达能力就越强,模型对注意力权重的分配就越合理。

其实 Yolo 的卷积也可以调整,等以后有更复杂的场景再考虑。

“一定灵”与算法服务的通信

“一定灵”后台和 taobao-vrobot 的通信是通过 Vipserver 寻址的。毕竟 taobao-vrobot 只对集团内服务,专门注册一个 DNS 域名用处不大。Vipserver 是集团内的一项很实用的服务,可以将机器分组和 Vipserver 域名继续绑定,后续即时分组内有机器/容器变动,Vipserver 也能正常寻址。同时,Vipserver 提供的健康检查服务很好用,它不但能够检查机器/容器的健康状况,还能定期访问服务接口,检测是否 Active。

图片预处理和OCR

“一定灵”在根据算法返回的图像中对象的分类和坐标信息后,会先做一次图片预处理,生成一张新的图像。该图像除了算法返回的有效对象坐标之外,会将其他所有的色域变白,以此去除多余信息的影响。之后将新图片发送给阿里 OCR 服务,得到图像中有效内容的本文。

闭环训练

图像识别与分类算法服务除了计算当此数据之外,还会将用户请求的图片保存至 OSS,并根据用户反馈将其判定为正向/负向数据。Yolo 模型每周会根据最新的数据集自动重新训练一次,不断优化。

步骤3:基于有效信息的请求定位

“步骤1:手淘首页的有效信息上报”为我们提供了用户请求的数据源,而“步骤2:截图中有效信息的定位和分类”为我们提供了用户查询的目标信息。最后一步就是在数据源中搜索到用户的目标数据。

对于搜索方来说,由于SLS存在中文分词逻辑,所以我们在搜索前需要将搜索数据进行预处理。格式逻辑和步骤1中的数据存储格式协议对的上就行。从SLS得到搜索结果后,我们需要对数据从时间、频次、符合度等方面进行打分和排序,最终得到合适的用户请求排名,并返回给用户。你也可以通过“一定灵”的“log”指令查看这次请求定位服务的日志。如果你得到的用户请求结果非常多,那么有可能是客户端兜底了,或者在手淘预发环境的前几页(预发环境前几页大家的出卡内容都是非常相似的)。

成果

对钉钉机器人“一定灵”发送首页截图,他会把根据截图把相应的用户请求发给你。有时会存在两个请求,是因为首页存在翻页现象,所以两个请求都是正确的。当返回用户请求过多时,说明可能是客户端兜底了,或者预发环境前几页大家的出卡状态是相似的。当然也欢迎反馈各种 Bad Case。

对“一定灵”说“log”,它会把你最后一次请求的功能调用日志打印出来。

写在最后

如果有其他团队也想接入这个服务的话,只需要在业务应用里用vrobot-collection上报数据即可。同时,把训练好的模型提供给我,我来帮你们部署。Yolo模型的话尽量给pt模型,onnx虽然更通用,但需要我再搭一条链路了。当然,这部分的SLS资源和taobao-vrobot中这部分的机器/容器资源也从接入服务的团队资源中提供。

最近我去开了SRE大会,听了若海、裴度等大佬的演讲,发现淘宝虽然是非常典型的业务部门,但是恰恰是为了业务,我们跟需要去关注业务效果之外的事情,例如稳定性、成本、效率,因为它们对业务的效果提升是整体的。同样,AI不是解决所有问题的银弹,但在提效方面的确是一把好手。希望AI能帮助大家从繁杂重复的那部分工作中解放出来,去做一些对团队和业务都更有帮助的事。

林皓伟

《AI提效:基于手淘首页截图进行请求定位能力实现》有 9 条评论
  1. You’re in point of fact a just right webmaster.

    The site loading pace is incredible. It sort of
    feels that you’re doing any distinctive trick. In addition, the contents are masterwork.
    you’ve done a magnificent task on this matter! Similar here: podusia.top and
    also here: Zakupy online

  2. Howdy! Do you know if they make any plugins to help
    with SEO? I’m trying to get my blog to rank for some targeted keywords but I’m not
    seeing very good success. If you know of any please share.
    Kudos! You can read similar article here: Sklep online

  3. Hey there! Do you know if they make any plugins to
    help with SEO? I’m trying to get my blog
    to rank for some targeted keywords but I’m not seeing very
    good success. If you know of any please share. Kudos! You can read similar
    text here: Ecommerce

  4. Hi! Do you know if they make any plugins to help with Search Engine Optimization? I’m trying
    to get my blog to rank for some targeted keywords
    but I’m not seeing very good success. If you know of any please share.
    Thank you! You can read similar art here: Sklep internetowy

发表回复

您的电子邮箱地址不会被公开。