写点什么

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

2019 年 10 月 08 日

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

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


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

在提供服务过程当中,贝壳打造了真实房源体系和 ACN 经纪人体系,并凭借其拥有超过 1.8 亿的房源、20 万经纪人,每月为超过 3000 万的用户提供服务。


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


用户画像

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


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


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



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

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

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


其中存在四大难点。第一,在业务层、数据采集层,如何让公司的产品线在不同的前后端有统一的买点规范;第二,在大数据量下如何保证数据存储和计算的稳定;第三,在加工计算层,面向多维度的用户描绘,如何设计统一的数据抽象和建模的模型;第四,如何评估对于用户描绘的准确性。


面对以上问题,贝壳又是如何解决的呢?


贝壳用户画像实践

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


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


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


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


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



在演讲最后,满江红(企业代号名)老师强调:数据是基础,算法和模型是方法,只有赋能业务才能体现数据价值。


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


贝壳找房推出的 AI 找房功能,是基于房源数据,利用深度学习来挑选出用户视角的优质房源。贝壳找房悟 X(企业代号名)老师围绕着 AI 找房场景中的深度学习模型的构建和算法策略的演变,进行了细致的讲解。


AI 选房


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


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


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


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


在悟 X(企业代号名)老师简单介绍问题建模以后,他还介绍了贝壳模型演变的历程。


主要分三个阶段:


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

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

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


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


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



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


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


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


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



AI 选房如何在业务中实践

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


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


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


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

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


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


随着平台越来越大,经纪人需要客服解决的问题也就越来越多。在此环境下,为了节约企业成本,减少人工客服的服务方差以及提高人工客服的服务效率,贝壳自研了一套智能客服体系。


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


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



主要包含四大模块:


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


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


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


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


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


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



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


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


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


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


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

为增加用户对房屋的理解,贝壳基于自研设备采集到房屋的二维和三维信息,对房源进行深度解读;同时使用人工智能技术,全自动生成房屋三维模型和户型图。活动中,贝壳找房笨象(企业代号名)老师分享了如何借助深度神经网络和 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,目前这一部分正在研发和探索过程当中。


本文转载自公众号贝壳产品技术(ID:gh_9afeb423f390)。


原文链接:


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


2019 年 10 月 08 日 16:14284

评论

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

DD 测试linux性能

HU

Kafka系列第6篇:消息是如何在服务端存储与读取的,你真的知道吗?

z小赵

Java 大数据 kafka 实时计算

多个 SSH keys 的配置,方便 Git 对不同仓库的使用与管理

与光

git GitHub SSH

想退休,可能没机会了

池建强

读书感悟

抄作业

escray

学习 CSD 认证实战营

由丰巢快递柜引发的思考

Neco.W

创业 思考 丰巢

CDN百科 | 假如没有CDN,网络世界会变成什么样?

阿里云Edge Plus

可视化 Tekton 组件 Tekton Dashboard

郭旭东

Kubernetes cicd

Rust安装注意事项

邱张华

rust 镜像源 diesel

概念有时候很坑

伯薇

抽象 思考力 沟通 概念

用测试驱动开发学算法

escray

学习 CSD 认证实战营

奔向 10W+ 的第一次 update

赵新龙

InfoQ B站 Quora

视达荣登ChinaBang Awards 2020智慧零售榜Top10

极客编

CDN云课堂 | EdgeRoutine技术专家教你把JS代码跑到CDN边缘

阿里云Edge Plus

Java CDN edge

MySQL数据类型DECIMAL用法

Simon

MySQL

读懂才会用 : 瞅瞅Redis的epoll模型

小眼睛聊技术

redis 缓存 学习 开源 架构 后端

如何推动与影响中型前端团队的成长

堂主

前端 研发管理 团队建设

Java 编程基础

michaelliu

TOTO 2020再次荣获iF、红点两项国际设计大奖

极客编

一文看懂开源工作流引擎 Flowable

Herbert

Java spring 开源 企业中台 工作流

KubeFATE:在Kubernetes上部署联邦学习平台

亨利笔记

人工智能 学习 FATE KUBEFATE

并发编程如何才能不再头疼:iOS中的协程

超越杨超越

ios 协程 coobjc ucontext

游戏夜读 | 如何优化缓冲加载?

game1night

我站在愚蠢之巅

escray

学习 CSD 认证实战营

聊聊Serverless

kimmking

《Linux就该这么学》笔记(二)

编程随想曲

Linux

CDN云课堂 |可编程CDN – EdgeScript应用场景、语言速览和实操演示

阿里云Edge Plus

CDN百科 | 最近,你的APP崩了吗?

阿里云Edge Plus

CDN

一杯茶的时间,上手 Git 团队协作开发

图雀社区

git GitHub

GrowingIO 微服务 SaaS 与私有部署运行实践

GrowingIO技术专栏

大数据 微服务架构 SaaS

谈谈控制感(2):怎么让我们更健康

史方远

个人成长 心理

「中国技术开放日·长沙站」现场直播

「中国技术开放日·长沙站」现场直播

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