GTLC全球技术领导力峰会·上海站,首批讲师正式上线! 了解详情
写点什么

面向 1.8 亿房源的深度学习模型迭代及算法优化

2019 年 8 月 30 日

面向1.8亿房源的深度学习模型迭代及算法优化

5 月 6 日下午,QCon 北京 2019 全球软件开发大会「算法和人工智能的应用实践」技术专场,来自贝壳找房的四位技术专家分别就“机器学习在贝壳用户画像上的实践与挑战”、“房源质量打分中深度学习应用及算法优化”、“智能客服系统的构建与算法迭代”以及“人工智能在户型图自动生成算法中的应用”主题进行分享。InfoQ 对本专场的精华内容做了部分梳理和总结。


机器学习技术在用户挖掘中的应用与挑战

贝壳找房,以为 2 亿家庭提供全方位服务链接为愿景和使命,目前具备新房、二手、租赁、装修、海外几大业务场景。在提供服务过程当中,贝壳打造了真实房源体系和 ACN 经纪人体系,并凭借其拥有超过 1.8 亿的房源、20 万经纪人,每月为超过 3000 万的用户提供服务。


在如此大体量的服务过程中,用户的决策周期较长,消费行为低频,平台需要精准挖掘用户状态,并预知用户接下来的决策,以提升用户体验。在贝壳找房用户策略部负责人郭凯的演讲中,分享了如何基于海量数据搭建机器学习系统,如何深度挖掘用户状态并预测状态变化及其过程中遇到的挑战。


用户画像

所谓用户画像,实际是对用户行为做一次抽象和提炼之后的标签化和数据化的描述。在贝壳用户画像的标签体系中,分为事实标签、挖掘标签以及预测标签三个维度。


事实标签指对用户发生的行为做一个记录,比如用户线上浏览多少房源、线下看多少房源;挖掘标签指对用户发生的行为,挖掘其背后的动机;预测行为则是结合用户已经发生的行为预测用户接下来可能发生的行为。


在建立了标签体系后,是设计画像系统。如图所示,主要分为三部分:



  • 业务层,主要负责买点记录用户行为,这是做一切算法的基础。

  • 数据层,负责采集收集的买点日志,以及对于买点日志进行解析之后的结构化存储。

  • 计算层,对于数据加工分析,数据建模。


贝壳用户画像实践

在贝壳的标签体系中,事实标签具备简单、易用、合理性强等特点。所以建设任何一个画像都是从事实标签开始,比如用户所在城市、浏览时间等。另外事实标签是偏大数据的数据计算工程,所以在进行数据计算前需要对相同用户不同数据源、不同端的数据进行打拼,以获得同一用户更加丰富的数据,有助于精准刻画用户。


接下来需要对用户行为进行分析,目的是挖掘数据背后潜藏的数据。其中,挖掘用户的位置信息很重要,因为无论是租房还是买房,用户大多考虑工作和居住地的因素,那么,如何从用户行为挖掘两类不同的位置信息呢?


用户在使用贝壳找房产品时,经得用户同意后,APP 会采集当前用户 GPS 的位置信息,根据时段划分两类不同样本,比如上午的 10 点到晚上 6 点之间的位置是用户工作地,晚上的 8 点到早上 8 点的位置是用户居住地。然后基于每一类的样本分别进行聚类,从聚类结果综合得分最高的点判断用户最经常去的区域。


通过挖掘标签获取用户对价格、商圈、户型的偏好,调查用户是否有购房意愿。而后通过预测标签、基于 Smot 采样算法预测用户接下来最偏好的场景,精准 Push 用户信息。


如下图所示为贝壳实现标签体系的整体框架,分为四层。分别是对新房、二手等各产品线和功能点尽可能采集全、准数据的数据采集层;主要做 IdMapping、数据清洗的数据处理层;对数据进行统计分析、抽象和建模的标签计算层以及建模后的数据存储层。



在演讲最后,郭凯老师强调:数据是基础,算法和模型是方法,只有赋能业务才能体现数据价值。


房源质量打分中深度学习应用及算法优化

贝壳是以技术驱动的品质居住服务平台,旨在帮助用户精准挑选优质房源,提高运营与找房效率。因此贝壳推出了 AI 找房功能,基于房源数据,利用深度学习来挑选出用户视角的优质房源。贝壳资深算法工程师周玉驰围绕着 AI 找房场景中的深度学习模型的构建和算法策略的演变,进行了细致的讲解。


AI 选房

AI 选房本质为 TopN 排序问题,属于优选问题。通过对房源质量进行打分,选出分数最高的 N 个房源。


那么该如何进行 AI 选房?如何对房源质量进行打分呢?


首先需要定义目标:什么是好的房子?站在平台、业主和用户的角度,判断标准以成交为导向,近期能够成交的房子就是好房子,近期成交概率越高,房源越好。基于此,贝壳对 AI 选房进行建模:Y=f(x)。目标 Y 表示最近多少天内房源产生的所有行为(例如浏览、关注等),包含房源的静态属性样本。除此之外还要确认 Y、X 以及样本的目标天数。


一般房地产行业作业具有周期性,以周为单位,进行时间选择时以周的倍数,并且经过贝壳的测试,两周是最好的目标天数。


在周玉驰老师简单介绍问题建模以后,他还介绍了贝壳模型演变的历程。


主要分三个阶段:


  • 第一阶段:建立初版模型系统,采用 XGBoost 模型,完成项目从 0 到 1 的过程;

  • 第二阶段:深度学习模型,采用 DNN+RNN 混合模型;

  • 第三阶段:效果持续优化,也是业务需要。


那么完成了项目的 0 到 1,又该如何在 1 到 100 分的路上继续向前走呢?


首先看贝壳建立的初版模型系统,如下图所示。



输入房源特征数据,经过特征处理以及模型预测,得到房源的成交概率值,最后经过分数映射得到经纪人易于理解的房源质量分数,根据这个分数判断房源优质度。期间,由于新房源与库存房源在行为特征上的巨大差异、通过时序特征得到的庞大特征数量等原因,会产生很难兼容新房源以及时序数据特征爆炸的问题。


面对 1.0 存在问题,贝壳探索出 2.0 深度学习模型。采用 DNN+RNN 混合模型,5 层的 DNN+1 层的 LSTM,使得深度模型获得全连接的多层感知机、批归一化、Dropout 正则化等能力。另外在该模型中,可以自动对特征进行提取,捕获特征,在时序性或者交叉性上非线性组合,大大减少特征工程的成本,只需要 21 维特征。


采用深度学习模型后,因为业务需求越来越高,进入长期的模型效果持续优化阶段,这个过程挑战非常大。深度学习可以帮助捕获模型,但是捕获一定是已有特征,而不是没有特征的。那该如何持续完善、补充或者挖掘特征呢?


贝壳通过调研、用户反馈、样本分析等手段判断哪些应该卖掉的房子但是没有被卖掉,应该是高分,但是没有给高分。并最终做了六大维度的特征总结,如下图所示。



AI 选房如何在业务中实践

从以上可以了解到,分数越高,房源越好。那么经纪人就会产生一些疑问,这个分数怎么解释?打分是怎么计算出来的?怎么操作可以提升这个分数?把一般的房子变成次优的房子,把次优的房子变成好的房子,贝壳是怎么做呢?


面对以上问题,贝壳提出雷达图的方法,有点像蚂蚁的信用分,通过雷达图总结打分五大维度,静态属性、业主诚意、性价比、市场热度、客源热度,每个维度展示特征的优缺点,让经纪人知道在哪些地方有优势,哪些地方有劣势。而后引导经纪人做一些积极的操作,提高分数。


以业主诚意为例。通过雷达图可以发现,业主的钥匙没有放在店内,没有经常阅读销售周报、没有写自荐等,通过引导这些行为,利于分数提升。


智能客服系统的构建与算法迭代

NLP(Natural Language Processing,自然语言处理)在近一两年实现了显著的突破,深度学习、迁移学习等技术的成功应用使得 NLP 技术在不同行业领域内的发展不断壮大。


智能客服是企业节流的重要手段。以往大量的人工客服已经解决用户反馈的诸多问题,那么充分利用历史知识积累让用户自助解决问题、降低人工客服成本就是智能客服系统的价值所在。贝壳 NLP 算法工程师崔鸣的现场分享从知识生产闭环构建、智能客服系统与算法迭代、效果评估等角度,剖析了贝壳在智能客服系统构建过程中的探索和经验。


贝壳致力于平台化,经过过去一年的发展,连接了 2.1 万的门店,20 万的经纪人,并且随着平台越来越大,经纪人需要客服解决的问题也就越来越多。在此环境下,为了节约企业成本,减少人工客服的服务方差以及提高人工客服的服务效率,贝壳自研了一套智能客服体系。


流程大致为:生产知识组织知识,通过算法能力将知识应用到业务场景中,最后在结束后将应用产生的问题回流到生产系统。


如下图所示为贝壳智能客服系统架构。该系统需要具备数据积累、问题分布、资源投入以及算法能力的前提条件。



主要包含四大模块:


1)数据模块:主要负责知识库知识的生产、知识图谱数据的生产以及标注数据的产出等;


2)接入层:内部的通用模块,主要做一些纠错,情感分析,疑问句等句型的识别;


3)中控层、任务层是智能客服系统的核心模块;


4)指标体系:指标是衡量一个算法系统的重要模块。


其中,NLU 自然语言理解作为核心模块负责意图识别。将识别的问题经过 DM(对话管理模块)分发给不同的机器人处理问题。这里涉及三类机器人:QABot,处理知识咨询类问题;TaskBot,负责工具使用类需求;ChatBot,负责闲聊类需求。


如下图所示为 QABot 工作流,主要包括以下四个核心模块:三元组提取,把<实体,属性,属性值><实体,关系,实体>线下三元组线上化提取;语义召回模块;意图过滤以及 DSSM 排序。



下面具体解释 QABot 的工作流程:


首先,若基于知识图谱的查询没有得到精准的答案,将会进入检索的逻辑,检索的第一步是召回,召回分为两种类型:第一种是关键词召回,这也是比较常见的做法,主要考虑了分词以及一些 Bigram 特征,通过 BM25 算法进行一些粗排序;第二种是语义召回,在候选中经常会出现一些虽然描述的含义是一致的,但是并没有相同的关键词,这里贝壳把知识的 Title 转换为语义向量,通过 Facebook 开源的 Faiss 索引的方式进行语义召回。


另外只要有召回,就一定有噪声和干扰数据,那该如何把干扰数据去掉,让模型做得事情更为纯粹呢?接下来就是意图过滤。贝壳把用户的信息构建了两层的分类体系,把候选中和用户意图不相关的部分过滤掉,形成最终的候选机集。


形成侯选集之后,需要 DSSM 做深度语义匹配模型,把用户真正想要的东西排在前面。这里分为强相关语意模型和弱相关语意模型,强相关语意模型是两个句子相关,弱相关语意模型表示两个句子相互独立。


人工智能在户型图自动生成算法中的应用

为增加用户对房屋的理解,贝壳基于自研设备采集到房屋的二维和三维信息,对房源进行深度解读;同时使用人工智能技术,全自动生成房屋三维模型和户型图。活动中,贝壳找房如视事业部的首席算法架构师潘慈辉分享了如何借助深度神经网络和 GAN,提升用户对室内空间环境的理解。


FloorNet 算法在生成户型图的应用

FloorNet 是从点云出发构建户型图的自动重建算法。如下图所示为 FloorNet 框架图,包含三个 Branch 融合的深度网络:PointNet Branch 基于三维点云工作;Floorplan Branch,点云从正下方投射的密度图二维图像,基于 FCN 网络框架;Image Branch 基于图像的 Branch。



然而,在真实使用 FloorNet 算法时会发现其与真实数据存在一定差异。原因是过程中造成了数据缺失,没有图像特征数据也没有物品数据。对此,贝壳对 FloorNet 算法进行了改进。将点数从 50000 增加至 200000,边长从 256 增至 512,并且对网络进行简化,只保留 FCN 部分。


经过改进后,发现可以给出比较正确的结果,且模型缩小,训练速度加快,性能并没有降低太多。但还是存在自身问题,例如网络输出结果通过一系列复杂规则转化为矢量的户型图,需要利用 Gurobi 建模 ;代码冗长,维护不便;规则严苛,经常出现重建失败的情况;所有房间必须封闭、无法重建斜向墙面等。


针对这种情况,贝壳团队研究了 GAN 的户型重建算法。


基于 GAN 的户型图重建算法

GAN 的基本原理非常简单,以生成图片为例。假设有两个网络 G 和 D:G 是一个生成图片的网络,它通过一个随机噪声噪声生成图片;D 是一个判别网络,判别一张图片是不是“真实的”。


在训练过程中,生成网络 G 的目标就是尽量生成真实的图片去欺骗判别网络 D。而 D 的目标就是尽量把 G 生成的图片和真实的图片分别开来。这样,G 和 D 构成了一个动态的“博弈过程”。


那么最后博弈的结果是什么?在最理想的状态下,G 可以生成足以“以假乱真”的图片。对于 D 来说,它难以判定 G 生成的图片究竟是不是真实的。这样就得到了一个生成式的模型 G,它可以用来生成图片。


另外,对于应用场景来说,贝壳希望通过俯视点云的密度图生成给到的户型图。基于此,贝壳将点云按照高度(0~0.3、0.3~0.7、0.7~1)划分为 3 份,分别填入 RGB 图像的三个通道中(因为图像数据只有 3 个通道),然后去掉小于 50 的像素以抑制噪声,并且把点云密度图提升了 2 倍。另外墙面使用白色,宽度为 4 像素,墙面直接绘制在点云密度图上,最后做一系列的从 Pix2Pix 框架到矢量化的过程。


从以上可以看到贝壳做了很多工作在 GAN 上面,但是如下图所示最终比出来的结果还不如 FloorNet 的结果。在这里也对两种算法进行了对比:


  • FloorNet 的输入为 [9200000] 的点云,而 GAN 的输入为 [512512*3] 的图片,因此 GAN 的准确率低在情理之中;

  • FloorNet 可能会出现重建失败的情况,而 GAN 无论如何都会输出一些结果;

  • FloorNet 比 GAN 的速度慢;

  • 都无法重建非水平竖直的墙面。


对此,潘慈辉老师也对 FloorNet 以及 GAN 算法提出了改进方向:


FloorNet:


(1)去掉功能间和门窗的 loss;


(2)不使用已有的矢量化代码,自己从网络的输出提取结果以提高重建成功率 ;


(3)后续尝试在网络中补全物品位置和图像特征的信息。


GAN:


(1)增加点云密度切分的层数以增加数据量,或将输入从点云密度图改为模型俯视图 ;


(2)将阈值由像素改为真实距离 ;


(3)不断优化对网络输出矢量化的各种策略。


除此之外,据潘慈辉老师介绍,贝壳在改进以上两种算法的同时,还在做的第三套的一个方案——FloorPlotter,目前这一部分正在研发和探索过程当中。


2019 年 8 月 30 日 17:192083
用户头像
孙春鹭 InfoQ 编辑

发布了 27 篇内容, 共 87587 次阅读, 收获喜欢 16 次。

关注

评论

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

万字带你深入阿里开源的Canal工作原理

大数据老哥

大数据 canal

百度首届智能小程序高校大赛圆满结束:关注学生心理健康小程序获全国一等奖

DT极客

边缘安全 | 正确使用CDN 让你更好规避安全风险

阿里云Edge Plus

安全 CDN

江苏智慧平安社区建设,智慧社区管理平台开发

135深圳3055源中瑞8032

第一周作业

Esther

胜天半子!阿里内部力荐SpringBoot全栈笔记全网首发,源码实战齐飞

Java架构之路

Java 程序员 架构 面试 编程语言

首次公开!阿里巴巴技术团队共同携手编写的“大厂面试参考指南”v1.0版本

Crud的程序员

Java 架构 Java 面试

架构师训练营第三周作业 - 学习总结

阿德儿

区块链电子合同技术方案,区块链电子合同存证

135深圳3055源中瑞8032

二面阿里Java岗惨败,问的全是源码、Redis、中间件、Dubbo,整吐了

Java成神之路

Java 程序员 架构 面试 编程语言

LeetCode题解:105. 从前序与中序遍历序列构造二叉树,递归+哈希表,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

【Java虚拟机】- Java虚拟机之逃逸分析

双木之林

快了何止100%?阿里巴巴Java性能调优实战(2021华山版)PDF版开源

Java架构追梦

Java 阿里巴巴 架构 性能优化 华山版

EXCEL数据太“脏”无从下手?何须用python,ETL一分钟搞定

智分析

Excel ETL

天猫双十一订单峰值58.3万笔/秒的背后,秘密都在这份文档里

Java成神之路

Java 程序员 架构 面试 编程语言

无敌!全面对标字节跳动2-2:算法与数据结构突击手册(leetcode)

Java成神之路

Java 程序员 架构 面试 编程语言

AES128解密只能解一半的问题

李日盛

AES 问题定位

​Kubernetes资源清单篇:如何创建资源?​

xcbeyond

Kubernetes 28天写作 Kubernetes从入门到精通

Spring全家桶笔记:Spring+Spring Boot+Spring Cloud+Spring MVC

Crud的程序员

Java spring 程序员 架构

DDD分层架构最佳实践

程序员小毕

Java 编程 架构 面试 DDD

蝉联 Apache 最活跃项目,Flink 社区是如何保持高速发展的?

Apache Flink

flink

一文读懂 Serverless,将配置化思想复用到平台系统中

Serverless Devs

Serverless 云原生 PaaS

你kin你擦!阿里终于肯把内部高并发编程高阶笔记开源出来了

Java架构之路

Java 程序员 架构 面试 编程语言

实现数字经济和实体经济深度融合

CECBC区块链专委会

区块链

《价值》- 护城河(6)

石云升

读书笔记 护城河 28天写作

Redis 学习笔记 08:数据结构与对象小结

架构精进之路

redis 七日更 28天写作

为什么你家的 K8s 应用平台不好用?

孙健波

Kubernetes PaaS KubeVela

阿里开源SpringSecurity:用户+案例+认证+框架

996小迁

Java 程序员 架构 面试 springsecurity

吉他谱怎么看?看谱大攻略送上!

懒得勤快

音乐 吉他学习 吉他谱 看谱

认识产品经理(第一节)

让我思考一会儿

阿里云 RTC QoS 屏幕共享弱网优化之若干编码器相关优化

阿里云视频云

WebRTC 音视频会议 网络 RTC 视频会议

DNSPod与开源应用专场

DNSPod与开源应用专场

面向1.8亿房源的深度学习模型迭代及算法优化-InfoQ