背景
闲鱼是一个典型的C2C场景的闲置交易平台,每个在闲鱼的用户都能享受到自由交易的乐趣,只要简单的输入商品名,商品价格,库存等信息就能完成一个商品的发布。充分的自由是闲鱼活力的来源,但是这对于一个电商平台来说是一个挑战。本文要说的商品结构化就是痛点之一。
C2C平台的商品结构化之所以难,是因为用户完成结构化的动力不足。怎样让用户以最小的成本来完成结构化,我们不能寄希望于商家后台这样很重的解决方案,我们需要的是一个简单高效灵活的解法。
方案选型
怎么解决?首先我们从整个C2C商品发布的全周期做一个方案的对比分析。
思路一 离线式方案
改方案包括算法关联&社会化方案。算法关联方案是通过技术手段对用户发布的商品进行分析,从而进行同款的关联或是属性打标。社会化方案核心是将商品结构化包装成一个活动。这样能通过用户参与答题的方式,进行商品结构化的关联。离线方案核心的缺点是关联链路太长,数据回流慢。更为重要的问题是分析出的数据没有用户确认,无法在显示域中使用。
思路二 手动关联方案
这个是发布中的处理方案。这个方案可能是最为直观的方案。发布过程中,引导用户做属性打标或者同款商品的关联。这个方案的优点是简单直观。缺点同样明显:完全将成本转嫁给用户。对C卖家来说,每增加一个发布选择项,都可能导致用户流失。这个方案可以做为结构化的补充,却不是我们寻找的最优解。
我们的思考:我们能否在保障实时性的前提下,实现一个高效低成本的方案呢?
答案就是本文给出的方案——
智能发布方案
。如果闲鱼用户在发布阶段就能将准备发布的商品自动关联上手淘的商品库中的某个商品。该商品就能使用
同款商品的若干结构化信息
,商品结构的化的问题不就迎刃而解了么?
方案对比
可见智能发布方案是一个成本和效果最为均衡的方案。
业务逻辑
先从通过下图,了解一下产品核心逻辑(以视频发布为例)
简单拆解:
1. 主体对焦
作为智能识别的开始。我们需要通过AI算法识别出端侧的拍摄的主体对象。这样做的目的是跟用户对识别物体目标保持一致。
2. 智能识别&引导
我们会在用户拍摄过程中对被拍摄物体进行实时识别。同时我们引导用户拍摄目标对象的
核心信息
放大算法的效果。
3. 结果反馈&用户确认
当用户拍摄完成,我们会以同款的方式,让用户进行一个简单的选择。
架构设计
技术挑战
综上智能发布的核心解法是将商品结构化的产品问题,转变成同款商品匹配这样的技术问题。
所以我们的核心技术挑战:
从闲鱼角度解这个问题,我们有三大技术优势:
我们可以通过前置部分AI能力到端侧,大幅度提升链路的实时性。同时我们将AI识别能力和淘系商品库做结合,完成同款商品匹配的功能。
为了做到上面的能力,我们构建了完整的智能发布技术架构。
整体架构
首先介绍我们的逻辑架构
整体设计上面分为三层:
架构细节
细节来说,我们通过协同flutter,java/Oc和C++三层逻辑来构建高效的识别能力。如下图所示:
主要设计考量:
1.充分利用不同的技术,最大化研发效能。
我们充分利Flutter多端一致性的优势在UI层使用Flutter进行开发。同时我们将部分共同的算法下沉到C++层。这样能大幅提升两端逻辑的复用率和一致性。
2.充分利用端侧的计算能力
模糊检测,相似度检测,主体识别,tracking这些算法都是在端侧实现的。除了充分利用端侧的计算能力外,更重要的是提升拍摄过程中的处理效率。最大化降低对网络请求的依赖。
通过极致的压缩算法,将最终上传的图片大小控制在10K左右。即便是4次请求也不过40K。可以说对用户流量不会构成压力。
3. 管线编排系统
考虑到后期系统的持续优化,对子模块的处理逻辑的调整不可避免。因此我们设计了一个灵活的管线来管理所有的处理逻辑。该管线能灵活组合java/Oc和C++的能力。并且可以方便做到子功能的顺序调整和功能增减。架构设计如下所示(以android为例):
4. 用户隐私的保护
用作识别的图片会做加密处理,将用户隐私泄露的风险降低到最小。出现在公域中的图片地址都是无法直接访问的。即便泄漏用户的隐私也可以保全。
算法架构
算法侧的我们也做了大量的优化。