数据中台之数据开发-算法开发

news2024/11/17 15:29:10

目录

一、数据智能化挑战

二、算法开发的作用

三、算法架构与算法使用场景

3.1 算法架构总览

3.2 算法的适用场景

3.2.1 金融风控和反欺诈

3.2.2 文本挖掘分析

3.2.3 广告精准营销

3.2.4 个性化推荐

四、 算法开发涉及的内容

4.1 建模

4.1.1 可视化建模

4.1.1.1 可视化建模作用

4.1.1.2 拖曳式实验流

4.1.1.3 丰富算法组件

4.1.1.4 实验周期调度

4.1.1.5 告警通知

4.1.1.6 多角色协同

4.1.2 Notebook建模

4.1.2.1 Notebook建模的作用

4.1.2.2 JupyterLab在线编程

4.1.2.3 支持通过API方式调用标准算法组件

4.1.2.4 支持多语言

4.1.2.5 高可用

4.2 数据集管理

4.2.1 概述

4.2.2 数据接入

4.2.3 数据标注

4.2.4 数据探查

4.3 核心算法组件介绍

4.3.1 概述

4.3.2 算法组件分类图

4.3.3 算法组件分类说明

4.3.3.1 数据获取及存储

4.3.3.2 数据预处理

4.3.3.3 特征工程

4.3.3.4 统计分析

4.3.3.5 机器学习

4.3.3.6 深度学习

4.3.3.7 文本分析

4.3.3.8 网络分析

4.3.3.9 工具类

4.4 算法框架多版本支持

4.5 与离线、实时开发的联合应用

4.6 算法框架简介

4.6.1 概述

4.6.2 TensorFlow

4.6.3 PyTorch

4.6.4 LightGBM


一、数据智能化挑战

DT时代的数据具有高维稀疏特征,对算法处理提出了更高的要求。面对百亿样本级别的数据量,传统的数据挖掘在辨识价值信息、挖掘数据关系和数据趋势方面捉襟见肘。此外,DT时代的业务具有快速迭代、敏捷开发、灵活试错的特性,新的时代特征为数据智能化发展带来了新的挑战,具体表现在如下方面:

  • ❑数据处理难度加大;
  • ❑业务处理要求变高;
  • ❑烟囱式的开发模型;
  • ❑散落各地的模型服务;
  • ❑模型研发环节繁多;
  • ❑冗余、分散的基础设施;
  • ❑数据处理/特征工程;
  • ❑多角色企业研发团队。

二、算法开发的作用

算法开发套件作为一站式的企业级机器学习工具,旨在快速赋予企业构建核心算法服务的能力,它集成了以批计算为核心的离线模型训练功能,以流计算为核心的在线机器学习,以及基于在线查询、即席分析的数据探索和统计分析能力。算法开发套件为算法人员提供可视化建模和Notebook建模两种建模方式,集成主流的机器学习、深度学习计算框架和丰富的标准化算法组件能力,能够帮助企业快速实现数据智能、数据科研、预测分析等人工智能应用的构建与落地。

三、算法架构与算法使用场景

3.1 算法架构总览

3.2 算法的适用场景

不同企业的算法应用场景不一样,数据的差异性决定了每个企业的算法效果会有很大差别,数据和特征决定了机器学习的上限。比较常见的应用场景如下:

3.2.1 金融风控和反欺诈

利用关联分析、标签传播、PageRank和社团发现等图算法组件,构建金融反欺诈核心能力,根据客户本身属性和行为数据识别虚假账号和欺诈行为,增强金融监管能力,保障金融业务稳定和安全。

3.2.2 文本挖掘分析

利用命名实体识别、图挖掘等文本算法能力,通过分析非结构化的文本信息自动识别其中的实体以及它们之间的关系,构建关系网,可以深度分析以前未处理的一些线索。

3.2.3 广告精准营销

通过深入洞察客户需求、偏好和行为,利用特征分箱、LightGBM、PMI等算法组件构建的机器学习模型来智能挖掘潜在客户,实现可持续的精准营销计划和高质量曝光率,有效提升广告点击率。

3.2.4 个性化推荐

利用协同过滤、XGBoost等推荐场景组件,通过分析海量用户行为数据构建多维用户画像,实现千人千面的推荐,提高转化率。

通过算法开发工具可以大幅提升这些场景的落地效率,当企业缺少算法工程师构建场景时,可以降低企业构建智能化场景的门槛,快速实现企业需求。

四、 算法开发涉及的内容

4.1 建模

4.1.1 可视化建模

4.1.1.1 可视化建模作用

可视化建模面向算法工程师和数据分析人员,通过拖曳的可视化交互方式便捷编排算法实验,集数据处理、模型训练和评估、在线预测于一体,帮助开发者实现零代码的开发工作。为达到这一目标,功能设计需要考虑以下方面。

4.1.1.2 拖曳式实验流

通过可视化拖曳,自由编排数据集、模型以及机器学习/深度学习等算法组件,组成有向无环图。屏蔽了复杂的算法代码开发过程,极大降低了用户进行算法开发或数据分析的门槛,为用户提供“所见即所得”的交互体验,帮助用户在面对智能业务需求时快速响应、快速试错。

4.1.1.3 丰富算法组件

提供大量开箱即用的算法组件,支持用户完成数据处理、模型训练、模型评估和预测的实验流程设计与调试,覆盖主流算法应用场景。通过可视化配置算法参数,零基础算法背景的用户也能快速上手,训练出可用的算法模型。同时,对算法模块进行不同的参数设置,能让模型训练过程透明可控,分析结果更准确。

4.1.1.4 实验周期调度

在实际的智能业务场景中,经常需要根据每天产生的最新数据来定时运行实验和训练算法模型。根据不同的需求灵活安排调度实验,需要支持细粒度的调度周期,包含分钟、小时、天、周、月等级别。

4.1.1.5 告警通知

算法模型训练时间往往较长,设置告警通知可以保证在第一时间得知实验运行和模型训练的结果。提供不同的告警方式(邮件、短信、钉钉等),可自定义告警规则和内容,灵活适配不同的用户习惯。

4.1.1.6 多角色协同

算法开发是一项团队性工作,需要很多角色共同参与。从底层资源的运维到上层的项目管理,多人多角色分工协作的项目管理模式,可以让算法开发者专注算法建模任务,减少烦琐的底层资源运维工作,同时保障人员权限隔离和数据安全。

4.1.2 Notebook建模

4.1.2.1 Notebook建模的作用

Notebook建模提供了一个集成的Jupyter工具,提供专业算法开发环境和主流算法框架,帮助算法工程师快速、轻松地通过代码开发来构建和训练机器学习模型。Notebook建模环境的构建,需要考虑的功能点如下。

4.1.2.2 JupyterLab在线编程

主流的专业机器学习环境,轻便快捷,支持开发结果查看。JupyterLab是一个交互式的开发环境,使用它,用户能够以灵活、集成可拓展的方式处理文档和活动。可开启终端,用于交互式代码运行,支持丰富的输出。它支持代码、Markdown文档、JSON、YML、CSV、各种格式的图片、Vega文件等多种文件,还支持多种插件,能最大限度提升算法开发生产力。

4.1.2.3 支持通过API方式调用标准算法组件

内置大量优化的机器学习算法,高效处理海量数据,提高开发人员的开发效率。

4.1.2.4 支持多语言

包括Scala、Python、R、Shell等,同时可进行拓展。

4.1.2.5 高可用

支持共享存储,实现数据高可用和数据隔离;支持Kubernetes集群,保证服务的高可用和资源隔离。

4.2 数据集管理

4.2.1 概述

数据集是算法建模过程中不可或缺的原材料。由于企业业务场景的复杂性,算法开发过程需要管理并整合不同来源的数据,同时对数据集进行标注和可视化探查,使数据的使用更高效,简化建模流程。作为统一维护数据集的场所,数据集管理需要考虑的功能点如下。

4.2.2 数据接入

支持多种类型的数据,主要可分为结构化数据和非结构化数据。提供多种数据接入方式,包括本地数据上传、HDFS数据上传、Kafka数据接入、数据源接入等。可对数据集进行统一管理,并直接在可视化构建实验流时使用。

4.2.3 数据标注

高质量的数据是模型和算法突破瓶颈的关键因素。通常,数据标注越精准,算法模型训练的效果就越好。大部分算法在拥有足够多普通标注数据的情况下,能够将准确率提升到95%,但要从95%提升到99%甚至99.9%,就需要大量高质量的标注数据。通过对人工少量标注的样本进行建模训练,然后用训练出来的模型进行数据预标注,由人工判断标注是否准确,并反馈结果用于优化算法,直到机器标注的准确率达到要求。支持的数据标注类型包括图片、语音、文本、视频等,通过抽检、多重审核机制把控标注结果的准确性,提升数据输出质量。

4.2.4 数据探查

数据探查是算法开发人员建模前必不可少的工作。通过数据探查可快速评判数据集的质量和可用性,并根据数据集展现的特点评估适用的模型范围。在数据探查时,不仅可对数据内容进行预览,还可以搭配丰富的统计分析组件对数据进行可视化展示,直观反映字段级的数据特征。

4.3 核心算法组件介绍

4.3.1 概述

为了提高可用性和降低使用门槛,主流机器学习平台都会提供内置的机器学习算法组件,覆盖从数据接入、数据预处理、特征工程、模型训练到评估和导出的完整算法建模过程,辅助用户高效完成复杂的业务建模。

4.3.2 算法组件分类图

4.3.3 算法组件分类说明

4.3.3.1 数据获取及存储

数据获取及存储组件主要用来从HDFS等存储平台中读取或保存数据和文件,是整个机器学习平台的运行基础。

4.3.3.2 数据预处理

由于现实中的大多数数据是不完整、不一致的脏数据,无法直接应用算法,或算法效果不尽如人意,因此需要在算法建模和预测之前对数据进行简单处理。此外,机器学习平台往往很难支持全量数据分析,当要处理或者分析大数据量时就需要借助抽样技术进行样本分析。为了解决上述问题,通常可以采用数据清理、数据集成、数据变换、数据归约及数据采样等方法。因此数据预处理是提高数据质量和算法效率的关键因素。常见的组件有随机采样、加权采样、分层采样、拆分、join、归一化、标准化、缺失值填充、类型转换等。

4.3.3.3 特征工程

特征工程是指在算法开发过程中,利用特征选择、特征加工、特征降维等技术手段构建对结果具有显著影响或便于模型处理的特征。利用特征工程相关的组件可以快速构建特征体系,快速选择有效特征,进而大幅提高算法的质量,提升分析效率。常见的组件有主成分分析、特征尺度变换、特征离散、特征异常平滑、奇异值分解、one-hot编码等。

4.3.3.4 统计分析

主要用来探索和分析数据特征及其他相关数据的深层统计意义,涵盖相关性分析、分布、参数校验等功能。常见的组件有直方图、协方差、相关系数矩阵、正态检验、皮尔森系数、T检验、百分位、洛伦兹曲线、经验概率密度图等。

4.3.3.5 机器学习

机器学习是算法开发的核心模块之一,包含主流分类算法、回归算法和聚类算法,可以满足大多数算法需求。

  • 分类

分类是监督学习领域的一个核心问题,分类用于推测输入数据的类别。当分类的类别为两个时称之为二分类问题,当分类的类别为多个时称之为多分类问题。分类预测在许多领域都有应用,例如,在银行领域用来预测客户是否逾期还款,在新闻领域用来预测新闻所属的类别,在医学领域用来预测病人是否患病等。以预测病人是否患病为例,将历史病人数据作为训练数据,通过数据预处理和特征工程组件将病人的相关体征与信息处理成输入的特征,并将是否患病作为标签列,就可以通过分类组件与机器学习预测组件对后续的病人是否患病进行预测。常见的组件有GBDT二分类、线性支持向量机、k-近邻、决策树分类、多层感知机分类、朴素贝叶斯分类、LightGBM分类、随机森林分类、逻辑回归分类等。

  • 回归

回归是监督学习领域的一个重要问题,用于预测输入变量和输出变量之间的关系。按输入变量与输出变量之间的关系类型来分,回归可以分为线性回归和非线性回归。许多领域的问题都可以转化为回归问题,例如股价预测、销量预测、营业额预测、房价预测等。以房价预测为例,将过去一段时间的数据作为训练数据,利用数据预处理和特征工程组件将影响房价的信息处理成输入的特征,并将房价作为标签列,就可以通过回归组件与机器学习预测组件对未来的房价进行预测。常见的组件有GBDT回归、随机森林回归、线性回归、LightGBM回归等。

  • 聚类

聚类是无监督学习领域被研究较多的问题,其目的是将数据分为多个簇,使得簇内的样本较为相似、簇与簇之间样本的差距较大。聚类在许多领域都有着广泛的应用,例如在电商领域用于发现兴趣相似的用户,进而向这类用户推荐相似的商品。通过数据预处理和特征工程组件将原始数据处理成输入的特征,就可以通过聚类组件对数据进行聚类。常见的组件有k-means、高斯混合聚类等。

4.3.3.6 深度学习

支持TensorFlow、MXNet、Caffe、XGBoost、LightGBM等主流深度学习框架,利用这些组件可以灵活、高效地构建深度学习应用。

4.3.3.7 文本分析

主要包括文本相关的特征处理、模型构建等功能,专门用来实现文本分类、关键词抽取、摘要生成等文本相关应用。包括PLDA、TF-IDF、Word2Vec、Doc2Vec、词频统计、去停用词、分词处理和关键词抽取等。

4.3.3.8 网络分析

提供了基于图数据结构的分析组件,这些组件一般用于解决包含网状关系的业务场景,例如金融风控、社群发现、最短路径查找等。常见的组件有最大联通子图、标签传播分类、标签传播聚类、Modularity、树深度等。

4.3.3.9 工具类

工具类组件是解决组件间数据格式不一致,以及满足其他额外数据处理需求的一系列组件,是对现有其他功能组件的补充。常见的组件有自定义SQL、PySpark、表转文件、文件转表等,涵盖数据预处理、特征工程、机器学习、深度学习、文本处理、图像处理、视频处理、人脸识别、OCR、车牌识别、知识图谱构建与推理等。

4.4 算法框架多版本支持

实现同一个框架不同版本统一运行,可对不同版本进行统一管理。同时支持机器学习/深度学习计算框架与大数据平台无缝打通,共享存储和计算资源。

多版本实现要支持两种技术:一种是基于Conda的环境隔离,可以将不同版本的算法框架打包成不同的Conda环境,支持运行时加载,不侵入已有的机器环境;另一种是基于Docker的隔离,将不同版本的算法框架打包成不同的镜像,运行时根据需要加载不同镜像来执行,该方案隔离性更好,但会有虚拟化性能的损失。

4.5 与离线、实时开发的联合应用

算法模型具备开发、运行这两个典型状态。开发态主要是对算法模型进行训练,通过输入训练数据集和测试数据集对模型进行训练,并周期生成模型;运行态是将算法模型部署到运行的容器或其他执行系统中,对输入数据进行计算并输出结果。

可见,无论是开发还是运行,都具备输入和输出这两个重要特性,因此也能够与数据批量处理、流处理进行深度整合使用。甚至可以将开发态、运行态整合在流批一体的计算引擎中,持续训练模型、发布模型,并通过最新模型处理数据和返回结果。

在训练模型方面,可以将训练文件引入数据开发的业务流程中,进行统一调度运行。在上游处理离线数据之后,启动模型训练,结合离线数据、实时数据完成模型训练并输出模型,同时自动创建版本用于后期的管理和引用。

在应用模型方面,可以将算法模型引入数据计算任务或即席分析过程中,通过动态加载定期更新版本的算法模型,为业务提供最新的算法服务,提升数据应用效果。

4.6 算法框架简介

4.6.1 概述

机器学习框架涵盖用于分类、回归、聚类、异常检测和数据准备的各种学习方法。深度学习利用多层神经网络被广泛应用到图像、文本、语音等场景中。机器学习/深度学习计算框架的出现降低了算法开发的入门门槛,让开发人员可以方便地利用内置的算法SDK,大大减少算法模型的开发工作量。算法开发工具需要具备以下功能特性。

4.6.2 TensorFlow

TensorFlow是谷歌研发的用于研究和生产的开源机器学习库,提供了各种API,可供初学者和专家在桌面、移动、网络和云端环境下进行开发,是目前最常用的深度学习框架。

4.6.3 PyTorch

它是Facebook开源的一个深度学习框架,采用动态计算图架构,具有先进的设计理念、完整的生态和易用的接口,也是目前常用的深度学习框架之一。

4.6.4 LightGBM

它是一个梯度boosting框架,使用基于学习算法的决策树。它有以下优势:训练速度快,内存占用低,准确率高,支持并行计算。

好了,本次内容就分享到这,欢迎大家关注《数据中台》专栏,后续会继续输出相关内容文章。如果有帮助到大家,欢迎大家点赞+关注+收藏,有疑问也欢迎大家评论留言!

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

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

相关文章

Vue3使用el-table实现多级表头合并列

不难发现&#xff0c;需要多级表头的列只需要在外面包一层el-table-column起名字即可 <el-table :data"tableData" style"width: 100%"><el-table-column type"index" label"序号" width"100" align"center&q…

Operator

国内operator学习大全 simple example 一、实践 二、理论问答 1.这张图属于 client-go 的 Informer 框架 配置和 Restclient或者 ClientSet 准备好后就可以通过客户端 CRUD k8s集群里面的资源 reflector 就是 watch和list k8s api 。就是监控资源变化和列出资源 ResourceVers…

最新图像修复论文汇总(2024年以来)(三)

汇总了自2024年以来新提出的高质量图像修复工作&#xff0c;包含扩散模型、transformer、mamba、sam等最前沿的技术&#xff0c;其中一些是ICLR、ICML、CVPR、ECCV、ACM MM 2024年的新作。 这里是第三部分&#xff0c;还有两部分请参阅。 最新图像修复论文汇总&#xff08;20…

python处理时间,按照周分割时间段

在实际的开发中&#xff0c;我们经常要设计一些工具类&#xff0c;对于时间来说&#xff0c;有时候需要将其处理成时间段。 例如&#xff0c;对于2024年08月01日到2024年08月16日的时间段&#xff0c;我们如何将其处理成时间段[2024-08-01, 2024-08-03], [2024-08-04, 2024-08-…

嘉立创EDA个人学习笔记1(PCB板介绍)

前言 本篇文章属于嘉立创EDA的学习笔记&#xff0c;来源于B站教学视频。下面是这位up主的视频链接。本文为个人学习笔记&#xff0c;只能做参考&#xff0c;细节方面建议观看视频&#xff0c;肯定受益匪浅。 嘉立创EDA-PCB设计零基础入门课程&#xff08;54集全&#xff09;_…

安卓应用开发学习:手机摇一摇功能应用尝试--摇骰子和摇红包

一、引言 前几天&#xff0c;我发布的日志《安卓应用开发学习&#xff1a;查看手机传感器信息》记录了如何查看手机传感器的信息&#xff0c;通过上述的方法&#xff0c;可以看到我的OPPO手机支持19种传感器。本篇日志就记录一下常见的加速度传感器的典型应用——“摇一摇”功…

ESP32添加组件02

1.接ESP32创建工程01&#xff0c;快捷键CtrlShiftp 2.输入组件的名称&#xff0c;然后按Enter键 3.创建结果如下图所示 目录结构如下 一级 component --文件夹 二级 led ---文件夹 led.c c文件 CMakeList.txt txt文件 三级 include 文件夹 led.h c头文件 4.主要代码 //led.c…

机器学习之 K 近邻算法图像识别实战

引言 在机器学习领域&#xff0c;K 近邻算法&#xff08;K-Nearest Neighbors, KNN&#xff09;是一种基于实例的学习方法&#xff0c;它可以根据样本之间的距离来进行分类或回归。本文将介绍如何使用 KNN 算法进行手写数字识别&#xff0c;并通过一个实际的例子来演示整个过程…

GPU纹理压缩格式(详解ETC1)

参考 纹理压缩格式原理概述&#xff1a; 你所需要了解的几种纹理压缩格式原理Compressed GPU texture formats – a review and compute shader decoders – part 1 ETC1格式&#xff1a;ETC1压缩纹理格式详解 ETC1 将4x4像素&#xff08;16RGB8位共384位&#xff0c;48字…

ChatGPT下的Java代码审计

吉祥知识星球http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247485367&idx1&sn837891059c360ad60db7e9ac980a3321&chksmc0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330#rd 《网安面试指南》http://mp.weixin.qq.com/s?…

爬虫:scrapy基本使用:链家实例

scrapy基本使用 Scrapy是用纯Python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架&#xff0c;用途非常广泛。 框架的力量&#xff0c;用户只需要定制开发几个模块就可以轻松的实现一个爬虫&#xff0c;用来抓取网页内容以及各种图片&#xff0c;非常之方便。 安…

【原创】java+swing+mysql的KTV管理系统设计与实现

个人主页&#xff1a;程序员杨工 个人简介&#xff1a;从事软件开发多年&#xff0c;前后端均有涉猎&#xff0c;具有丰富的开发经验 博客内容&#xff1a;全栈开发&#xff0c;分享Java、Python、Php、小程序、前后端、数据库经验和实战 开发背景&#xff1a; 随着社会的发展…

语义分割:YOLOv5的分割模型训练自己的数据集(从代码下载到实例测试)

文章目录 前言一、环境搭建二、构建数据集三、修改配置文件①数据集文件配置②权重下载③模型文件配置④训练参数配置 四、模型训练和测试模型训练模型测试 总结 前言 提示&#xff1a;本文是YOLOv5的分割模型训练自己数据集的记录教程&#xff0c;在调试前需要本地已配置好CU…

测试资料1111

什么是软件 软件是控制计算机硬件工作的工具 软件产生过程 需求产生&#xff08;客户、用户&#xff09;、需求文档&#xff08;需求文档&#xff09;、设计效果图&#xff08;UI设计师&#xff09;、产品开发&#xff08;研发人员&#xff09;、产品测试&#xff08;测试人…

multiple definition of `xxxx`问题解决(vscode开发stm32)

一、背景 开发时遇到如下问题&#xff1a; 在Tim.h文件夹中定义了一个结构体变量 TIM_HandleTypeDef htim2;//定时器实例变量 其余的文件在引用此变量时都加上了#include "Tim.h" 但编译时&#xff0c;终端报错&#xff1a; multiple definition of htim2 全局搜…

hs_err_pid.log分析

hs_err_pid.log 文件是 Java 虚拟机&#xff08;JVM&#xff09;在遇到致命错误&#xff08;如崩溃或内部错误&#xff09;时生成的错误日志文件。这个文件包含了关于崩溃的详细信息&#xff0c;可以帮助开发者或系统管理员诊断和解决问题。 hs_err_pid.log文件位置和命名 文…

maven导入依赖后依然爆红?

今天遇到了maven导入依赖后依然爆红的问题&#xff0c;检查了本地仓库发现依赖包已经全有了但是IDEA这边的XML文件里面依然大量爆红&#xff1b;并且我重新将之前的本地仓库相关的依赖包甚至其上级目录进行了删除后重新导入&#xff0c;但问题依然没有解决&#xff1b;因此我非…

【大模拟】逻辑回环类

区块链 AcWing 3285. 区块链 - AcWing 区块链涉及密码学、哈希算法、拜占庭问题、共识算法、故障模型、网络模型等诸多知识&#xff0c;也在金融等领域有广泛的应用。 本题中&#xff0c;我们需要实现一个简单的区块链系统。 在一个分布式网络中&#xff0c;有 nn 个节点通…

最新软件库系统源码/ 免服务器源码/带后台功能/使用链接上传或服务器存储

源码简介&#xff1a; 最新软件库系统源码&#xff0c;它是免服务器的&#xff0c;而且带后台&#xff0c;实现超级管理动态发布&#xff0c;会员系统卡密系统充值的后台功能。注册用户的软件投稿&#xff0c;可以使用链接上传&#xff0c;或者服务器存储。 它带有后台功能&a…

Springboot 整合 Swagger3(springdoc-openapi)

使用springdoc-openapi这个库来生成swagger的api文档 官方Github仓库&#xff1a; https://github.com/springdoc/springdoc-openapi 官网地址&#xff1a;https://springdoc.org 目录题 1. 引入依赖2. 拦截器设置3. 访问接口页面3.1 添加配置项&#xff0c;使得访问路径变短…