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

1. 缘起

闲鱼是一个典型的C2C场景的闲置交易平台。每个在闲鱼的用户都能享受到自由交易的乐趣。在这里,可能你只要简单的输入商品名,商品价格,库存等信息就能完成一个商品的发布。即便是发布以后,你也可以随时修改价格,内容等信息。充分的自由是闲鱼活力的来源,但是这对于一个电商品台来说却有着难言的痛苦。本文要说的商品结构化就是痛点之一。

商品结构化为什么重要?结构化信息是平台认识商品的一个基础。只有平台了解商品的各个属性,才能准确地将适合的商品推荐给适合的用户。这样才能更加高效地为买卖家用户创造价值。

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

2. 技术破题

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

 

  1. 方案一 离线式方案

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

  1. 方案二 手动关联方案

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

我们的思考:我们能否在保障实时性的前提下,实现一个高效低成本的方案呢?答案就是本文给出的方案:智能发布方案。如果闲鱼用户在发布阶段就能将准备发布的商品自动关联上手淘的商品库中的某个商品。该商品就能使用同款商品的若干结构化信息,商品结构的化的问题不就迎刃而解了么?

方案对比

 智能发布手动关联离线方案
用户成本
实时性极高
准确性较高

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

3. 产品逻辑

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

简单拆解:

  1. 主体对焦

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

  1. 智能识别&引导

我们会在用户拍摄过程中对被拍摄物体进行实时识别。并且我们非常创新地通过算法,引导用户拍摄目标对象的核心信息。这里引导的作用是为了放大算法的效果。俗话说巧妇难为无米之炊。如果用户拍摄的内容没有目标的核心信息,算法也很难做出精准的预测。

  1. 结果反馈&用户确认

当用户拍摄完成,我们会以同款的方式,让用户进行一个简单的选择。一旦用户选中某个商品(可以不选)就能完成结构化关联。至此我们将复杂的商品结构化问题,转变成用户手指简单的一点。用户的结构化成本已经微乎其微。

4. 架构设计

4.1 技术挑战

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

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

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

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

那技术上可行么?从闲鱼角度解这个问题,我们有三大技术优势:

  1. 以AliNN为代表的移动AI解决方案使得端侧AI计算成为可能
  2. 我们有这个星球上可能最大的商品信息库(淘宝&天猫)
  3. 阿里达摩院雄厚的AI能力

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

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

4.2 逻辑架构

首先介绍我们的逻辑架构

 

整体设计上面分为三层:

  1. UI 展示和交互层。核心是处理用户输入和结果反馈。
  2. 逻辑处理层。主要是控制智能识别管线的运作逻辑和子模块处理结果的分发
  3. 框架层主要是各个核心处理子模块

4.3 架构细节

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

 

主要设计考量:

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

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

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

    1. 模糊检测,相似度检测,主体识别,tracking这些算法都是在端侧实现的。除了充分利用端侧的计算能力外,更重要的是提升拍摄过程中的处理效率。最大化降低对网络请求的依赖。
    2. 通过极致的压缩算法,将最终上传的图片大小控制在10K左右。即便是4次请求也不过40K。可以说对用户流量不会构成压力。
  3. 管线编排系统

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

 

  1. 用户隐私的保护

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

4.4 算法架构

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

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

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

 

5.效果

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

同款商品识别效果方面:

总体上基于多帧识别准确度相比单帧提升约20%

受限数据披露限制,不方便贴出分类目具体测试数据。给出几个相对明确的结论:

经过我们的试验,我们发现在彩妆/香水/美妆工具、美容仪、玩具等标品类目中识别率比较高。这些商品的核心信息往往容易在物品表面找到,容易识别。

而在非标品或者半标部分,例如童装,运动鞋等识别率相对较低。这些商品的信息往往在外形中透出不足。这时候算法就需要用户配合拍摄例如品牌这样的核心信息。总体来说识别难度更大。

6. 未来

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

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

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


原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/518141.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QingStor NeonSAN跻身四强 新风口下的青云QingCloud正在厚积薄发

人类以日新月异的速度刷新着科技的成果,其中存储的发展历史尤其悠久,堪称万年进化史。自文明诞生以来,我们就一直在寻求能够更有效存储信息的方式,从4万年前的洞穴壁画、6000年前泥板上的楔形文字,到今天正在普及的SSD…

python3-pandas DataFrame 索引、bool索引、pandas 字符串方法

1、DataFrame 索引 1.1 普通索引取值 pandas 取行或者列的注意点: 方括号写数组,表示取行,对行进行操作方括号写字符串,表示取列,对列进行操作 import pandas as pd import numpy as np # pandas 取行或者列的注意…

MySQL8.0.17 - 初探 Clone Plugin

MySQL8.0.17推出了一个重量级的功能:clone plugin。允许用户可以将当前实例进行本地或者远程的clone。这在某些场景尤其想快速搭建复制备份或者在group replication里加入新成员时非常有用。本文主要试玩下该功能,并试图阐述下其实现的机制是什么。 我们…

javascript判断IPV6格式

随着ipv6的普及,在web上添加ip6地址的要求逐渐增多,下面这个函数是我按照ipv6的定义写的判断,可以用来判断正常的,缩写的ipv6格式,同时可以判断ipv6和ipv4混合的格式: //统计 10F: 或者:10B的个数 function cLength(s…

阿里毕玄:推荐给Java程序员的7本好书

我主要还是个Java程序员,所以进阶类型的书就推荐Java相关的。 《Java并发编程实战》 并发是高级语言里都需要掌握的稍微高级一些的技巧,这本书尽管是2012年的书了,但我觉得仍然是无比经典,绝对是必读书。《Netty实战》 Netty是Ja…

释放虚拟GPU力量 NVIDIA 加速企业远程办公生产力变革

现在众多的企业拥抱云和AI技术进行着数字化转型。随着企业在信息化建设的加剧,相关从业人员数量增多的同时,也对设备的计算性能要求越来越高。2020年开年的这场疫情,强制性地让企业进入远程办公模式,这个突发的状况也为企业的IT设…

python3-pandas 缺失数据的处理

1、缺失数据的处理 1.1、判断是否为nan isnull: 是nan为true notnull: 不是nan为true import pandas as pd import numpy as npt3 pd.DataFrame(np.arange(12).reshape(3,4), indexlist("abc"), columnslist("wxyz")) print(t3)…

Stream anyMatch查找案例

package com.gblfy.gxts;import lombok.AllArgsConstructor; import lombok.Data; import org.junit.Before; import org.junit.Test;import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;/*** 案例1:* 某班集中有…

记一次Cassandra Java堆外内存排查经历

背景 最近准备上线cassandra这个产品,同事在做一些小规格ECS(8G)的压测。压测时候比较容易触发OOM Killer,把cassandra进程干掉。问题是8G这个规格我配置的heap(Xmx)并不高(约6.5g)已经留出了足够的空间给系统。只有可能是Java堆…

程序员内功修炼系列:10 张图解谈 Linux 物理内存和虚拟内存

来源 | 后端技术学堂责编 | Carol封图 | CSDN 付费下载于视觉中国我们都知道,程序可没这么好骗,任你内存管理把虚拟地址空间玩出花来,到最后还是要给程序实实在在的物理内存,不然程序就要罢工了。所以物理内存这么重要的资源一定要…

阿里高级技术专家方法论:如何写复杂业务代码?

阿里妹导读:张建飞是阿里巴巴高级技术专家,一直在致力于应用架构和代码复杂度的治理。最近,他在看零售通商品域的代码。面对零售通如此复杂的业务场景,如何在架构和代码层面进行应对,是一个新课题。结合实际的业务场景…

Android Studio 安装教程

注意安装之前请配置好java 和 Android SDK 1、下载 官网地址: https://developer.android.google.cn/studio/ 点击下载后,需要同意协议: 2、安装 1、双击程序 2、一路 next,如果想修改路径可自行修改。 3、安装完成点击Fi…

Stream filter过滤案例

package com.gblfy.gxts;import com.google.common.collect.Lists; import lombok.AllArgsConstructor; import lombok.Data; import org.junit.Before; import org.junit.Test;import java.util.List;/*** 案例2:* 标签管理功能模块。允许用户批量添加标签&#xf…

Schedulerx2.0工作流支持数据传输

1. 前言 Schedulerx2.0是阿里中间件自研的基于akka架构的新一代分布式任务调度平台,提供定时、任务编排、分布式跑批等功能,具有高可靠、海量任务、秒级调度等能力。 Schedulerx2.0提供可视化的工作流进行任务编排,该文章将详细介绍如何使用…

应用实时监控 ARMS 上线用户行为回溯功能

随着前端技术日新月异迅猛发展,为了实现更好的前端性能,最大程度提高用户体验,支持单页应用的框架逐渐占领市场,如众所周知的React,Vue等等。但是在单页应用的趋势下,快速定位并解决JS错误却成为一大难题。…

Android Studio 创建第一个Android工程项目

1、打开Android Studio 2、点击 New Project 选择 Empty Activity 3、点击 Next 4、点击 Finish 等待加载完成,取决于网络,第一次加载可能要很久。。。 5、下载完成 可以在右上角切换为 Project 模式 6、创建一个虚拟设备 https://www.bilibili…

我竟然混进了 Python 高级圈子!

现如今,计算机科学、人工智能、数据科学已成为技术发展的主要推动力。无论是要翻阅这些领域的文章,还是要参与相关任务,你马上就会遇到一些拦路虎:想过滤垃圾邮件,不具备概率论中的贝叶斯思维恐怕不行;想试…

Tablestore + Blink实战:交易数据的实时统计

背景 交易数据的实时统计是电商网站一个核心功能,可以帮助用户实时统计网站的整体销售情况,快速验证“新销售策略”的效果。我们今天介绍一个基于表格存储(Tablestore)实现交易数据的实时计算,给大家提供一个新使用方式。 Tablestore作为在…

无标注数据是鸡肋还是宝藏?阿里工程师这样用它

阿里妹导读:针对业务场景中标注数据不足、大量的无标注数据又难以有效利用的问题,我们提出了一种面向行为序列数据的深度学习风控算法 Auto Risk,提出通过代理任务从无标注数据中学习通用的特征表示。这种思想与目前 NLP 领域前沿的 Bert 等预…

Android 控件 - TextView

1、TextView https://www.bilibili.com/video/BV13y4y1E7pF?p3 1.1、layout_width、layout_height match_parent:表示让当前控件的大小和父布局的大小一样,也就是由父布局来决定当前控件的大小 wrap_content:表示让当前的控件大小能够刚好…