写点什么

闲鱼亿级商品结构化背后的思考和演进

2019 年 8 月 20 日

闲鱼亿级商品结构化背后的思考和演进

背景

闲鱼是一个典型的 C2C 场景的闲置交易平台,每个在闲鱼的用户都能享受到自由交易的乐趣,只要简单的输入商品名,商品价格,库存等信息就能完成一个商品的发布。充分的自由是闲鱼活力的来源,但是这对于一个电商平台来说是一个挑战。本文要说的商品结构化就是痛点之一。


C2C 平台的商品结构化之所以难,是因为用户完成结构化的动力不足。怎样让用户以最小的成本来完成结构化,我们不能寄希望于商家后台这样很重的解决方案,我们需要的是一个简单高效灵活的解法。


方案选型

怎么解决?首先我们从整个 C2C 商品发布的全周期做一个方案的对比分析。



思路一 离线式方案


改方案包括算法关联 &社会化方案。算法关联方案是通过技术手段对用户发布的商品进行分析,从而进行同款的关联或是属性打标。社会化方案核心是将商品结构化包装成一个活动。这样能通过用户参与答题的方式,进行商品结构化的关联。离线方案核心的缺点是关联链路太长,数据回流慢。更为重要的问题是分析出的数据没有用户确认,无法在显示域中使用。


思路二 手动关联方案


这个是发布中的处理方案。这个方案可能是最为直观的方案。发布过程中,引导用户做属性打标或者同款商品的关联。这个方案的优点是简单直观。缺点同样明显:完全将成本转嫁给用户。对 C 卖家来说,每增加一个发布选择项,都可能导致用户流失。这个方案可以做为结构化的补充,却不是我们寻找的最优解。


我们的思考:我们能否在保障实时性的前提下,实现一个高效低成本的方案呢?


答案就是本文给出的方案——智能发布方案。如果闲鱼用户在发布阶段就能将准备发布的商品自动关联上手淘的商品库中的某个商品。该商品就能使用同款商品的若干结构化信息,商品结构的化的问题不就迎刃而解了么?


方案对比



可见智能发布方案是一个成本和效果最为均衡的方案。


业务逻辑

先从通过下图,了解一下产品核心逻辑(以视频发布为例)



简单拆解:


  1. 主体对焦


作为智能识别的开始。我们需要通过 AI 算法识别出端侧的拍摄的主体对象。这样做的目的是跟用户对识别物体目标保持一致。


  1. 智能识别 &引导


我们会在用户拍摄过程中对被拍摄物体进行实时识别。同时我们引导用户拍摄目标对象的核心信息放大算法的效果。


  1. 结果反馈 &用户确认


当用户拍摄完成,我们会以同款的方式,让用户进行一个简单的选择。


架构设计

技术挑战


综上智能发布的核心解法是将商品结构化的产品问题,转变成同款商品匹配这样的技术问题。


所以我们的核心技术挑战:


  • 在发布阶段进行商品识别的实时性保障

  • 怎样通过压榨 AI 的能力从而最大化同款商品的匹配成功率


从闲鱼角度解这个问题,我们有三大技术优势:


  • 以 AliNN 为代表的移动 AI 解决方案使得端侧 AI 计算成为可能

  • 我们有这个星球上可能最大的商品信息库(淘宝 &天猫)

  • 阿里达摩院雄厚的 AI 能力


我们可以通过前置部分 AI 能力到端侧,大幅度提升链路的实时性。同时我们将 AI 识别能力和淘系商品库做结合,完成同款商品匹配的功能。


为了做到上面的能力,我们构建了完整的智能发布技术架构。


整体架构


首先介绍我们的逻辑架构



整体设计上面分为三层:


  • UI 展示和交互层。核心是处理用户输入和结果反馈。

  • 逻辑处理层。主要是控制智能识别管线的运作逻辑和子模块处理结果的分发

  • 框架层主要是各个核心处理子模块


架构细节


细节来说,我们通过协同 flutter,java/Oc 和 C++三层逻辑来构建高效的识别能力。如下图所示:



主要设计考量:


  1. 充分利用不同的技术,最大化研发效能。


我们充分利 Flutter 多端一致性的优势在 UI 层使用 Flutter 进行开发。同时我们将部分共同的算法下沉到 C++层。这样能大幅提升两端逻辑的复用率和一致性。


  1. 充分利用端侧的计算能力


模糊检测,相似度检测,主体识别,tracking 这些算法都是在端侧实现的。除了充分利用端侧的计算能力外,更重要的是提升拍摄过程中的处理效率。最大化降低对网络请求的依赖。


通过极致的压缩算法,将最终上传的图片大小控制在 10K 左右。即便是 4 次请求也不过 40K。可以说对用户流量不会构成压力。


  1. 管线编排系统


考虑到后期系统的持续优化,对子模块的处理逻辑的调整不可避免。因此我们设计了一个灵活的管线来管理所有的处理逻辑。该管线能灵活组合 java/Oc 和 C++的能力。并且可以方便做到子功能的顺序调整和功能增减。架构设计如下所示(以 android 为例):



  1. 用户隐私的保护


用作识别的图片会做加密处理,将用户隐私泄露的风险降低到最小。出现在公域中的图片地址都是无法直接访问的。即便泄漏用户的隐私也可以保全。


算法架构


算法侧的我们也做了大量的优化。


智能发布的最核心算法是同款商品的匹配算法。我们将单帧的预测算法改进为多帧预测。并且我们创新性地将算法和交互做深度融合,极限压榨算法的极限能力。过程如下所示:


如果算法发现当前帧若不足以作出较为准确的算法预测,则将图像信息向后传递。在传递过程中,及时通过文案引导用户拍摄算法所需要的信息。依次迭代直到完整预测出商品信息。算法处理逻辑如下图所示。



效果

实时性处理性能:经过我们的测试,识别过程除主动提示外对用户无明显感知。用户的正常拍摄过程无掉帧等性能问题。


同款商品识别效果方面:总体上基于多帧识别准确度相比单帧提升约 20%


通过该项目我们不仅构建了闲鱼完整的对商品的实时识别能力。同时也沉淀了图片预处理,tracking 等一批端计算核心算法。基于此,我们完全可以将更加实时的 AI 的能力赋能给更多场景(例如扫指定商品或者 logo 参加特定活动等)。


展望

智能发布将在 9 月的版本中跟大家见面,欢迎大家试用、反馈。首先上线的是视频发布的部分,后续还会增加图片,活动等场景。通过智能识别的项目,我们相信一定可以不断提升闲鱼商品结构化率。


我们畅想的未来发布是一个高度智能化的发布。基于摄像头对商品做深层次理解,系统直接给出商品信息,结构化标签,推荐价格,甚至新旧程度等发布要素。用户所要做的仅仅就是一个确认。今天的智能发布只是我们伟大征程的第一步,我们会向着目标不断努力!


本文转载自公众号闲鱼技术(ID:XYtech_Alibaba)


原文链接


https://mp.weixin.qq.com/s/PuslaiyDG5XBIPwHRjssig


2019 年 8 月 20 日 08:008706

评论

发布
暂无评论
发现更多内容

废掉一个人最好的办法是让他忙到没有时间思考

熊斌

程序员人生 职场 思考

五、Docker 数据持久化存储与性能调优

悟尘

Docker 容器 k8s Compose kubernet

长假将至,推荐两个好东西

池建强

算法 视觉笔记

Netty 源码解析(二):Netty 的 Channel

猿灯塔

Netty

程序员陪娃漫画系列——排队问题

孙苏勇

程序员 生活 程序员人生 陪伴 漫画

web集群架构

桥哥技术之路

附录4、Docker-compose 配置文件编写指南

悟尘

Docker Docker-compose

Hexo-deployer-cos-cdn 插件安装使用指南

悟尘

Hexo COS CDN Hexo-deployer-cos-cdn

四、Docker 网络原理、分类及容器互联配置

悟尘

Docker Kubernetes 容器 k8s Compose

H5功能足够强大,为什么还要微信小程序?

顾强

微信小程序 移动应用

附录1、Docker 常用命令及示例

悟尘

Docker 容器

最通俗易懂的H264基本原理

音视频专家-李超

音视频 WebRTC ffmpeg H264

我认为“写作平台”还缺少读者

小天同学

产品 反馈 写作平台 建议

六、基于多阶段构建减小镜像体积降低复杂度

悟尘

Docker Kubernetes 容器 k8s Compose

使用Typora + PicGo 图床 + jsDelivr CDN实现高效 Markdown 创作

悟尘

Typora PicGo iPic jsDelivr CDN

Flink Weekly | 每周社区动态更新

Apache Flink

大数据 flink 流计算 实时计算 大数据处理

一、Docker基础入门及架构介绍

悟尘

Docker Kubernetes 容器 k8s Compose

二、基于 Dockerfile 构建并运行镜像

悟尘

Docker Kubernetes 容器 k8s Compose

附录2、Dockerfile 参考及最佳实践

悟尘

Docker Dockerfile

Node.js 必知必会(安装配置、应用实例及同步控制)

悟尘

node.js

Java并发编程系列——Fork-Join

孙苏勇

Java Java并发 并发编程 线程

Netty系列之源码解析(一)

猿灯塔

Netty

三、基于 Docker-registry/Nexus3 搭建本地仓库

悟尘

Docker Kubernetes 容器 k8s Compose

八、Kubernetes 入门实践

悟尘

Docker Kubernetes 容器 k8s Compose

附录3、Docker-compose 命令使用指南

悟尘

Docker Docker-compose

写在开头

杨友峰

Java 期现

源码分析 Vector 和 ArrayList

张sir

Java 源码 collection

VSCode-aliyun-oss-paste-image 插件安装使用指南

悟尘

vscode Paste-image

七、Docker Compose 入门实践

悟尘

Docker Kubernetes 容器 k8s Compose

Hexo-admonition 插件安装使用指南

悟尘

Hexo Hexo-admonition Admonition

为什么说此前的WiFi安全方案都是小弟?

石君

wifi 无线网络 无线网络安全 Wi-Fi安全

技术为帆,纵横四海- Lazada技术东南亚探索和成长之旅

技术为帆,纵横四海- Lazada技术东南亚探索和成长之旅

闲鱼亿级商品结构化背后的思考和演进-InfoQ