数据科学的关键技术包括数据存储计算、数据治理、结构化数据分析、语音分析、视觉分析、文本分析、知识图谱等。数据科学平台围绕数据价值转化过程,将数据科学中的关键技术统一到一个平台上,打通数据集成、数据治理、数据建模、数据分析、数据应用各阶段,让数据科学团队中的每个成员都只需专注于核心业务问题,免于陷入复杂的技术环境。数据科学团队中包含如下角色。
数据科学平台致力于解决数据价值转化过程中的共性需求,为数据工程师、数据分析师和数据科学家群体提供能力全面、交互自然、知识驱动的通用工具,高效构建数据应用。数据科学平台的功能架构如图1-2所示。
图1-2 数据科学平台的功能架构
为了让用户专注于数据价值的实现,从各种技术组件的复杂配置和相互适配中解脱出来,数据科学平台提供了统一的湖仓一体架构,屏蔽了底层存储和计算组件的技术细节,并基于此提供了数据融合治理、数据建模与知识生产、知识应用三类专业工具集。平台的主要功能说明如下。
数据存储计算位于数据科学的基础层,它提供了数据存储、计算和分析的基础设施,为数据科学家提供了处理和分析大规模数据的能力,具体包括数据存储、处理、分析和管理等方面的技术,如分布式存储(Distributed Storage)技术、分布式计算技术、分布式分析技术、资源管理技术等。这些技术为数据科学家提供了强大的数据处理和分析能力,可以帮助他们更好地探索和理解数据。
分布式存储技术的定义:将数据按照一定的分布算法分散存储在多台独立的存储节点上,实现多节点并行访问的存储技术。
常见的用户数据存储主要是分布式文件及对象存储,支撑不同类型的数据进行原始格式的保障。在分布式文件存储中,文件被分成小块并存储在多台服务器上,通过文件系统进行管理和访问。每个文件块都有一个独立的标识符,可以根据该标识符定位文件块并从多个服务器中获取数据以组合成完整的文件。这种架构通常用于需要大量读取和写入的应用程序,例如视频流、科学计算和大规模数据分析,并且一半的文件系统也支持通过Fuse方式挂载成本地磁盘路径,这样使用方可以通过本地文件方式进行访问和使用。常见的文件系统包括HDFS(Hadoop Distributed File System,Hadoop分布式文件系统)、Ceph、GlusterFS、FastDFS等。
1)分布式文件系统
HDFS为Hadoop提供数据存储能力,以HDFS为例的典型分布式文件系统架构如图1-3所示。
图1-3 HDFS系统架构图
在HDFS中,一个文件被分成一个或多个数据块,这些数据块存储在一组DataNode上。NameNode会根据副本数量和数据块所在节点的负载情况来确定数据块的复制位置。这样可以保证在某个DataNode节点失效的情况下,数据仍然可用。NameNode是一个中心服务器,它负责管理文件系统的命名空间(Namespace),包括文件和目录的创建、删除、重命名等操作。此外,NameNode还负责管理数据块的元数据信息,如数据块的副本数量、所在DataNode节点的位置等。NameNode会将这些元数据信息存储在内存中,并定期持久化到本地磁盘上,以保证集群的可靠性和一致性。
DataNode是HDFS集群中的从属节点,一般每个节点都会有一个DataNode。DataNode负责管理它所在节点上的存储,并处理文件系统客户端的读写请求。它会向NameNode定期发送心跳信息,以保证它的可用性。此外,DataNode还负责处理数据块的创建、删除和复制等操作。
2)对象存储
在对象存储中,文件被视为对象,并将对象存储在无须文件系统的分散节点上。每个对象都有一个唯一的标识符和元数据,例如创建时间、大小和内容类型等。这种架构通常用于需要大规模存储和访问数据的应用程序,例如云存储和内容分发网络(Content Delivery Network,CDN)。另外,随着云计算和大数据技术的兴起,存储与计算分离变得越来越普遍。云计算提供了一个可伸缩的基础设施平台,使得用户可以根据需要增加或减少计算资源。同时,大数据技术使得分布式存储和计算变得更加高效和可靠。例如,TensorFlow分布式计算框架允许用户在多个计算机节点上并行训练深度学习模型,从而加快训练速度。目前主流的计算与分析框架也支持对象存储的数据访问,并且兼容各云厂商的对象存储服务,如阿里云的OSS、华为云OBS、Azure Blob Storage、AWS S3等。常见的开源对象存储系统包括Ceph、Swift、MinIO等。
Ceph是一种可扩展的分布式存储系统,可以提供对象存储、块存储和文件存储等服务,其基础架构如图1-4所示。
图1-4 Ceph系统架构图
以Ceph为代表的架构,与HDFS不同的地方在于该架构中没有中心节点。
按照其分层的架构,最底层是RADOS集群,它提供了高可靠性的数据存储和管理功能。RADOS集群实现了分布式的基本特征,包括数据可靠性保护、分布式一致性和故障检测与恢复等。上层的存储形态包括块存储、文件存储和对象存储等,它们都以对象为粒度进行数据存储。Ceph集群为客户端提供了丰富的访问形式,比如对于块存储可以通过动态库或者块设备的方式访问。其中,动态库提供了API,用户通过该API可以访问块存储系统。
大多数对象存储系统(包括Ceph、S3、Swift、MinIO)除满足对象存储的能力外,也提供文件存储和块存储的服务能力,以满足不同类型的存储需求。主流的分布式存储对比如表1-1所示。
表1-1 存储系统对比表
全文检索(Full-Text Search)是一种基于文本的信息检索技术,通过对文本数据建立索引并支持文本查询,可以高效地进行文本信息检索。通常情况下,全文检索引擎会将文本数据切割成若干词项(Term),并对这些词项进行索引。当用户输入查询词(Query)时,全文检索引擎会对索引进行搜索,返回符合条件的文本数据。全文检索不同于关系数据库的模糊查询,它不仅能够精确匹配查询条件,还能够匹配近义词、拼写错误、词形变化等文本变化。在很多需要文本检索的场景下,如搜索引擎、电子商务网站、社交媒体、新闻门户等,全文检索技术都得到了广泛应用。
对于数据科学来说,只要涉及基于关键字的内容搜索都会涉及全文搜索的技术,开源的全文搜索技术一般都是基于Lucene实现的。主流的开源搜索框架包括ElasticSearch和Solr。
Lucene是一个开源的全文检索工具包,提供了构建搜索引擎的基础架构。它可以让开发者快速构建自己的搜索引擎,并支持多种编程语言。ElasticSearch和Solr都是基于Lucene的开源搜索框架,它们在Lucene的基础上进一步扩展了搜索功能,提供了更完整的搜索引擎解决方案。ElasticSearch和Solr都支持分布式搜索、实时搜索、自动化索引等高级功能,并且提供了友好的REST API,可以方便地与其他应用程序集成。
目前,开源搜索引擎的选型主要还是以ElasticSearch为主,提供实时搜索、分布式搜索、自动索引、支持多语言等能力。此外,它可以处理大量数据,并且能够在几乎所有类型的数据中执行实时搜索和分析。在ElasticSearch中,数据被存储在分片中,并且分片会在多台服务器之间自动分布,以确保数据的可用性和高性能,对外可以通过简单的RESTful API进行交互。
此外,ElasticSearch也提供了强大的数据分析能力,并且与主流的大数据框架进行了打通,如基于Spark/Flink访问ElasticSearch等场景。
维基百科把图数据库定义为一个使用图结构进行语义查询的数据库,它使用点、边和属性来表示和存储数据。这种数据结构使得图数据库在许多应用场景中比关系数据库和其他传统数据库更有效,例如社交网络分析、推荐系统、网络安全等。
目前主流的开源图数据库包括Neo4j、JanusGraph、HugeGraph、Nebula Graph等。其中,Neo4j是最早的图数据库之一,但受限于企业版本闭源、社区版本只能单机模式等诸多限制,很多公司也都基于自身的业务开始图数据库的研发,并提交到开源社区,开源图数据库的发展也日益活跃。以百度开源的HugeGraph为例,能够与大数据平台无缝集成,有效解决海量图数据的存储、查询和关联分析需求。HugeGraph支持HBase和Cassandra等常见的分布式系统作为其存储引擎来实现水平扩展。HugeGraph可以与Spark GraphX进行链接,借助Spark GraphX图分析算法(如PageRank、Connected Components、Triangle Count等)对HugeGraph的数据进行分析挖掘。
图数据库有原生和非原生存储两种存储方式。原生图数据库使用图专用的存储引擎,对图数据进行优化存储和索引。这样能够更加高效地支持图查询,但是也意味着原生图数据库可能对图数据的处理能力更为有限,例如在扩展性和兼容性方面可能会存在一定的局限性,而非原生图数据库通常使用已有的NoSQL存储技术作为存储引擎,相对来说更加灵活,但也需要自行实现图查询的算法和数据结构,可能会对性能和查询能力产生一定的影响。同时,非原生图数据库通常具有更好的扩展性和兼容性,能够更加容易地集成到现有的技术栈中。Neo4j属于原生图,而HugeGraph则属于非原生图的存储形式。
NoSQL是指非关系数据库(Not only SQL),它是一种提供灵活、可扩展的处理和管理大量结构化和非结构化数据的数据库管理系统。与传统的关系数据库不同,NoSQL数据库不使用固定的模式来组织和存储数据,而是使用动态模式来实现灵活的数据建模和检索。
NoSQL数据库有多种类型,包括文档数据库、键值数据库和列式数据库等。文档数据库(如MongoDB)将数据存储在文档中,这些文档可以是不同的结构和类型。键值数据库(如Redis)使用键-值对存储数据。列式数据库(如HBase、ClickHouse)使用列来存储相关的数据,而不是以行的方式,这样存储可以减少数据扫描,提供更高的性能。
NoSQL数据库通常被用于高并发场景和大数据处理场景,如Web应用程序、移动应用程序、物联网、社交媒体和游戏等。相比传统的关系数据库,NoSQL数据库具有更好的可扩展性、更高的性能和更灵活的数据模型。
主流的NoSQL数据库包括Redis、HBase、MongoDB等。
1)Redis的介绍
Redis是一种开源的、基于内存的数据存储系统,是流行的键值数据库,它支持多种数据结构,如字符串、哈希表、列表、集合和有序集合等。Redis提供了类似于键-值对的存储方式,可以将数据保存在内存中或者持久化到磁盘中。Redis提供了快速的读写速度、高可用性和数据持久化等功能,还支持事务、Lua脚本、发布/订阅等高级功能。
Redis常用于缓存、消息队列、实时计数器、实时消息传递等各种应用场景。Redis的设计理念是追求简单、高性能、灵活性和可扩展性,并且提供了多种编程语言的客户端库,如Python、Java、Ruby等,使得它容易被集成到不同的应用程序中。
2)HBase的介绍
HBase是一个开源的、面向列的分布式数据库,它使用Hadoop作为其底层的分布式文件系统。HBase源自于Google的Bigtable系统,并且被设计用于存储非结构化和半结构化数据。与传统的关系数据库不同,HBase采用了基于列的存储模式,这意味着它能够高效地处理具有大量列但行数较少的数据集。
HBase是基于Google的Bigtable论文实现的,其数据模型由“表”“行”和“列族”组成。表是HBase中的基本单元,每个表可以包含多个行和列族。每个行都有一个唯一的行键和多个列族,每个列族可以包含多个列。每个列都有一个唯一的列限定符和一个时间戳,用于标识不同版本的数据。HBase还支持复杂的数据类型,如数组和嵌套的对象。并且,由于其基于Hadoop生态系统,HBase可以与其他Hadoop组件集成,包括Hive、MapReduce、Spark等。
在使用上,HBase可以处理海量的数据,支持横向扩展,可以通过增加节点来扩展集群的容量,HBase还提供了强大的数据查询和过滤功能,可以使用行键、列限定符、时间戳等条件来查询和过滤数据,因而适合需要快速读写和随机访问大规模数据的存储,如实时数据处理、日志分析、推荐系统和社交网络等场景。
3)MongoDB介绍
MongoDB通常被称为文档数据库,其内部定义了一种类似于JSON的BSON结构来存储数据。它的数据模型由文档(Document)、集合(Collection)、数据库(Database)组成。文档是MongoDB中的基本单元,每个文档都是一个BSON文档,可以包含不同的字段和值。集合是一组文档的容器,每个集合都有一个唯一的名称,并且可以包含多个文档,可以理解为关系数据库中的表。数据库是MongoDB中的一个物理容器,每个数据库可以包含多个集合。MongoDB不需要预定义数据模式,允许文档具有不同的结构和类型,并且可以直接扩展结构。MongoDB具有很高的可扩展性和性能,可以处理大量的数据和高并发请求。它支持自动分片和副本集,可以通过添加节点来水平扩展集群的容量和提高数据可用性。MongoDB还提供了强大的查询和聚合功能,可以使用索引、聚合等功能来查询和分析数据。此外,MongoDB还支持ACID(Atomicity、Consistency Isolation和Durability,原子性、一致性、隔离性和持久性)事务和多种数据存储引擎。其主要特点如下。
此外,MongoDB还提供了文件的存储模块GridFS,在GridFS中,分为fs.filsy与fs.chunks。fs.files存储文件的元数据信息,包括文件名、文件类型、文件大小、上传时间等。而fs.chunks存储文件的数据,将大文件分割成多个小的chunk(默认256KB),每个chunk作为MongoDB的一个文档存储在chunks集合中。chunks集合中的每个文档都包含chunk数据、文件ID以及当前chunk在整个文件中的位置等信息。
在使用上,MongoDB适用于需要灵活性和可扩展性的应用场景,例如:
数据湖(Data Lake)是一个以原始格式存储数据的存储库或系统,具有如下几个特点。
开源的数据湖架构主要基于Delta Lake、Iceberg和Hudi进行构建,整体架构如图1-5所示。
数据湖架构整体分为4层,分别说明如下。
图1-5 开源数据湖架构图
从数据湖的技术架构可以看出,Delta Lake、Iceberg和Hudi位于第三层,为大数据分析提供了一种开放的表格式。
首先Delta Lake作为开源项目由Databricks(Apache Spark的创建者)维护,因此与Spark深度集成以实现读写操作。它还支持Presto、AWS Athena、AWS Redshift Spectrum和Snowflake的读取操作,提供ACID事务支持、版本控制、数据修复和一致性保证等功能。而Hudi是由Uber开源的开源数据技术,在Hadoop和Apache Spark之上提供了一种高效、可靠和可伸缩的数据湖解决方案,支持对列式数据格式的增量更新,支持从多个来源摄取数据,包括通过Spark从外部数据源(如Apache Kafka)读取数据,支持从Apache Hive、Apache Impala和PrestoDB等读取数据。Iceberg作为新兴的数据湖框架之一,抽象出“表格格式”(Table Format)这一中间层。Iceberg既独立于上层的计算引擎(如Spark和Flink)和查询引擎(如Hive和Presto),也和下层的文件格式(如Parquet、ORC和Avro)相互解耦。Iceberg的架构和实现并未绑定于某一特定引擎,它实现了通用的数据组织格式,利用此格式可以方便地与不同引擎(如Flink、Hive、Spark)对接。
Delta Lake、Hudi、Iceberg三个开源项目都是为了解决数据湖架构中的数据管理和处理问题而设计的。整体功能类似,但它们各自定位又略有差异。
当下数据已经成为政府和企业决策的重要手段与依据,同时近年来政府也多次提出推进和加快政府及企业的数字化转型进程。在数字化转型的建设过程中,数据治理体系建设一直是业界探索的热点。但与传统要素不同的是,数据是无形的,且数据是孤岛林立的、杂乱的,要想发挥数据价值,提升数据治理能力是必要举措。
面对政府和企业数据多样化、数据需求个性化、数据应用智能化的需求,数据治理需求急剧增加,如何做好数据治理以及提升数据治理能力成为政府和企业共同的需求。以数字政府为例,面向数据本身的管理与治理市场还处于大规模的人力投入阶段,相对较离散,正是技术和治理能力颠覆的最佳发力点。我们结合多年政府各个部门及各类企业数据治理项目的经验,提出数据治理项目开展过程中数据治理平台应具备四大能力:聚、治、通、用,以及项目实施总体指导思想:PDCA(Plan-Do-Check-Act,计划、执行、检查和行动)。
数据治理平台的四大能力建设说明如下。
项目实施总体指导思想PDCA包括如下4个方面。
结合数据治理项目实际落地实施过程以四大能力构建、PDCA实施指导思想提出了PAI实施方法论,即流程化(Process-Oriented)、自动化(Automation)、智能化(Intelligence)三化论,以逐步递进方式不断提升数据治理能力,为政府和企业后续的数据赋能业务及数据催生业务创新打下坚实基础。
因数据治理类项目通常采用瀑布式开发模式,核心流程包含需求、设计、开发、测试、上线等阶段,流程化是将交付流程步骤进行详细分解并对项目组及客户工作内容进行提炼及规范,明确每个流程的标准输入、输出内容。其中需求、概要设计和详细设计为执行过程中的核心流程节点,将针对这三部分进行详细讲解。
1)需求调研
(1)需求调研流程
数据调研是整个项目的基础,既要详细掌握业务现状及数据情况,又要准确获取客户需求,明确项目建设目标。数据调研总体分成三个大的时间节点,包括需求调研准备、需求调研实施及需求调研后期的梳理确认。
需求调研准备包括调研计划确定、调研前准备,具备条件的尽量开一次调研需求见面会(项目启动会介绍过的可以不需要再组织)。其中调研前准备需对客户的组织架构及业务情况进行充分的了解,以便在后续的调研实施阶段有的放矢,使调研内容更为翔实,客户需求把控更为准确。
调研实施阶段一般组织两轮调研,第一轮主要是了解业务运转现状、对接业务数据以及客户需求。第二轮针对具体的业务和数据的细节问题进行确认,以及分析后的客户需求与客户确认。对于部分系统的细节问题以线下方式对接,不再做第三轮整体调研。需求调研后期主要是针对客户需求、客户业务及数据现状进行内外部评审并确认签字,以《需求规格说明书》形式明确本期项目建设目录。
(2)需求调研工作事项
表1-2描述了需求调研过程关键节点的客户方、项目组工作内容及输入输出,并说明了需求调研阶段的总体原则、调研方式及相关要求。
表1-2 需求调研工作事项
(3)需求调研注意事项
具体的需求调研有如下注意事项。
2)概要设计
数据治理项目概要设计主要涵盖网络架构、数据流架构、标准库建设、数据仓库建设4部分内容。总体目标是明确数据如何进出数据治理平台(明确网络情况)、数据在平台内部如何组织及流动(数据流架构及数据仓库模型)以及数据在平台内部应遵循哪些标准及规范(标准库)。每部分具体工作事项及输入、输出如表1-3所示。
表1-3 概要设计的组成
(1)网络架构
网络架构要明确硬件部署方案、待接入系统网络情况、后续使用人群及访问系统方式,以便满足数据接入及数据服务需求。
(2)数据流示意图
数据流架构要明确各类数据的处理方式及流向,以便确认后续数据加工及存储方式。
(3)数据标准内容示意图
数据标准内容示意图如图1-6所示,标准库建设要明确平台所遵循的各类标准及规范,以保证平台建设过程的统一规范,为后续业务赋能打下坚实基础。
图1-6 数据标准内容示意图
(4)数据仓库主题域及核心实体示意图
数据仓库建设要明确主题域及关键实体,明确后续数据拉通整合的实体对象,以更好地支撑繁杂多变的数据需求。
原始库是数据仓库和业务系统对接的缓冲,负责数据的抽取,建设时要使用贴源模型作为理论支持,即保证以源系统字段为基础,只增加处理时间的控制字段等,不对数据表结构做任何修改,不做逻辑计算,以保证源系统的数据能够准确、完整、高效地接入数据仓库中。原始库中的数据一般采用分区保存,数据存储时效较短,一般数据保留一周(按日分区或一天一张表)。
资源库从原始库抽取数据,数据结构保持不变,保留全部历史数据记录,会从数据存储空间及后续数据使用角度对数据的存储进行确认,如使用增量、历史拉链等方式记录历史数据。同时,要对数据做标准化以及数据质量的清洗,对于数据质量符合要求的,会放到资源库中存储,不符合要求的会放到问题库,用以反馈给业务系统进行问题处理和数据的清洗。
主题库要求按照主题的方式进行数据处理,数据从资源库获取,把针对同一主题的、联系较为紧密的数据集中到一起。主题的设计要遵循行业共识,应优先使用行业内通用、具有共识的主题结构,对于没有通用行业主题规范的,应由最终用户和数据仓库设计人员共同设计完成。主题库的建设要遵循主题域模型,数据按照主题进行归纳;数据结构按照三范式的规范对不同来源的数据进行整合,重新进行设计,并且要求保持数据结构的扩展性和兼容性。对于常用的数据公共属性,会补充相应的字段属性做冗余处理,比如获取地区信息后可以补充相对应的省份名称和编码。
专题层要按照业务需求定制开发,数据从主题层获取。专题库下的一个专题至少对应一个具体的应用。专题库常用的是以维度模型存储指标数据,维度模型的结构清晰、条理简单,易于业务任务理解和使用,建设维度模型只需根据业务需求梳理维度和分析指标,即可构建对应的维度表和事实表,常见的维度模型结构为星型模式,数据专题示意图如图1-7所示。
图1-7 数据专题示意图
配置库是独立于上面4个库之外的一个共性库,用于存储整个数据治理过程中共性使用的信息,保证数据治理过程中规范、标准的统一。比如标准代码库,负责维护数据治理过程中需要使用的标准代码,这些代码在资源库的数据清洗、质量稽核以及专题库维度模型的构建中都要使用。
实时数据区的数据结构与业务系统相同,数据时效性要求较高,采取实时及准实时的方式将数据从业务系统中同步进行相应的加工计算,直接为应用提供数据支持。
3)详细设计
详细设计针对项目实际落地的工作模块分别进行设计,明确每部分实现的设计,具体模块、工作内容、输入、输出如表1-4所示。
表1-4 详细设计的组成
(续表)
(续表)
在将数据治理项目流程化以后,整个工作内容及具体工作产出已经比较明确了,但是发现流程中会涉及大量的开发工作,同时发现很多工作具有较高的重复性或相似性,开发使用的流程及技术都是一样的,只是配置不同,因此针对流程化以后各节点的自动化开发应运而生。通过配置任务的个性化部分,然后统一生成对应的开发任务或脚本即可完成开发。
自动化处理一般有两种实现路径,其一是采购成熟数据治理软件,其二是自研开发相应工具。其中数据治理过程中可实现自动化处理的流程节点(如“工序”,标蓝色部分),如图1-8所示。
图1-8 数据治理流程节点
对于需求调研、模型设计等流程节点,因为涉及线下的访谈、业务的理解,更多的是与人的沟通交流,进而获取相应的业务知识及需求,并非单纯的计算机语言,同时“因人而异”的情况也比较常见,所以这部分相关工作暂时还以人工为主。因数据接入、脚本开发及数据质量稽核在日常工作中占用时间较长,下面将详细讲解这三部分内容。
1)批量数据接入
数据接入是所有数据治理平台的第一步,批量数据接入占数据接入工作量的70%~90%。自动化处理即将任务个性化部分进行抽象化形成配置项,通过配置任务的抽象化配置项,进而生成对应的任务。批量数据接入抽象以后的配置项如下。
使用Sqoop、DataX等方式可以批量生成对应命令或配置文件,实现批量生成接入作业,实现自动化数据接入工作,数据接入效率提升75%以上,后续只需验证数据接入正确性即可。对于数据接入来说,大数据平台主流的开源工具有Sqoop、DataX、Kettle等。
(1)Sqoop
Sqoop可以理解为连接关系数据库和Hadoop的桥梁,主要有两个方面的能力:①将关系数据库(如MySQL、Oracle、Postgres等)的数据导入Hadoop及其相关的系统中,如Hive和HBase;②将数据从Hadoop系统中抽取并导出到关系数据库。Sqoop工具的底层工作原理本质上是执行MapReduce任务。由于实现方式是MapReduce任务,因此具体到接入任务控制,可以高效、可控地利用资源,可以通过调整任务数来控制任务的并发度,其采集效率也很高。Sqoop整体围绕Hadoop生态建立,必须依赖Hadoop,无法独立运行,因此整体服务相对较重。
(2)DataX
DataX是阿里开源的一个异构数据源离线同步工具,主要用于实现包括关系数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。DataX采用Framework +Plugin架构构建,将数据源读取和写入抽象成为Reader/Writer插件。这样每接入一套新数据源,该新加入的数据源即可实现和现有的数据源互通。DataX具有简单化、轻量化、易扩展的特点,因此很多公司的数据平台都在使用,可进行相关的数据源扩展,并作为ETL工具的后端引擎集成。
其核心原理如下:
(3)Kettle
Kettle是一款基于Java的开源的ETL工具,它允许管理来自不同数据库的数据,把各种数据放到一个壶里,然后以一种指定的格式流出。Kettle提供一个图形化的用户操作环境,使用比较方便和简单,具有数据迁移、文件解析、数据关联比对、数据清洗转换能力。由于操作比较方便和简单,并且具有完全可视化的页面,很多厂商的ETL工具会基于Kettle定制。
以上内容主要针对的是离线接入的场景。在实际项目中,还要考虑到数据实时接入的场景,或者数据提供方不允许使用SQL方式访问数据库,防止对原有业务产生影响,这时候就会涉及CDC(Change Data Capture,变更数据捕获)接入技术,CPC技术是数据库领域非常常见的技术,主要用于捕获数据库的一些变更,然后把变更数据发送到下游。通常业内聊的CDC技术主要是基于数据库日志解析进行实现的。由于是基于日志解析实现的,不同的数据库的形式并不一致,因此没有一个引擎可以处理所有的数据库。目前常用的方案主要通过Canel实现MySQL的CDC能力,通过Logminer实现Oracle的CDC能力。以Canel的实现方式为例,其本质是模拟MySQL Slave的交互协议,伪装自己为MySQL Slave,向MySQL Master发送dump协议,MySQL Master收到dump请求,开始推送Binlog给Slave(即Canal),最后Canal解析Binlog对象。很多数据库CDC都是采用这种方案进行实现的。
这里我们重点介绍的是Debezium组件,Debezium是Apache Kafka Connect的一组源连接器,使用CDC从不同的数据库中获取更改。它可以对接MySQL、PostgreSQL、SQL Server、Oracle、MongoDB等多种SQL及NoSQL数据库,把这些数据库的数据持续以统一的格式发送到Kafka的主题,供下游进行实时消费。与Canel、Logminer等组件不同,Debezium支持多类型的数据库,因此,很多公司将其作为基础引擎进行选型。
此外,随着实时处理技术的发展,Flink也拥有CDC能力,Flink CDC底层封装了Debezium,支持通过SQL方式实现数据库的实时接入。
百分点的CDC接入技术底层基于Debezium进行日志解析,将数据接入分为数据读取和数据写入两个阶段,全流程可视化地实现CDC实时接入。此外,还具有以下特性:
2)脚本开发
资源库、主题库的加工脚本占整体开发工作的50%~80%,同时经过对此部分数据加工方式进行特定分析,结合Mapping文档,选定以上数据处理方式的一种即可自动生成资源库或主题库对应的脚本,开发效率得到大幅度提升,整体效率提升60%以上(模型及Mapping设计尚需人工处理)。
3)数据质量
数据质量是指在业务环境下,数据符合消费者的使用目的,能满足业务场景具体需求的程度。数据质量一般由完整性、有效性、正确性、唯一性、及时性和合理性等特征来描述。
数据质量是数据价值的根本。基于上述特征,数据质量管理贯穿着数据治理的全过程,并且不是一蹴而就的,不同的处理阶段对质量控制的要求也有所不同,表1-5所示的内容供读者参考。
表1-5 质量控制要求表
数据质量是PDCA实施总体指导思想的关键一步,是发现数据问题以及检查数据标准规范落地的必需环节。针对具体的规则,可以通过产品和自助开发来实现,只需进行相应配置即可实现自动化检查。
4)元数据
元数据,最常见的定义就是“描述数据的数据”。元数据管理是对元数据的创建、存储、整合、控制的一整套流程,目的是支持基于元数据的相关需求和应用。通过元数据管理能够让开发和业务人员快速地了解数据的上下游关系及本身的含义,精准定位需要查找的数据,减少数据研究的时间成本,提高效率。
常见的开源元数据管理工具包括Apache Atlas、LinkedIn DataHub等。
对于元数据管理系统来说,可以从元数据采集、元数据管理、元数据分析三个方面进行评估。
(1)元数据采集
从各种工具中,把各种类型的元数据采集进来;对于数据科学平台来说,元数据采集一般是从源系统接入的。如果企业已经拥有数仓,那么数仓也可以看作元数据采集的一个数据源,将已有的元数据从数仓接入,还未接入的从源系统接入。
(2)元数据管理
实现元模型统一、集中化管理,提供元模型的查询、增加、修改、删除、元数据关系管理、权限设置等功能,让用户直观地了解已有元模型的分类、统计、使用情况、变更追溯,以及元数据间的血缘联系。其中包含如下几个重要能力。
(3)元数据分析
基于采集的各类元数据,通过元数据存储策略提供统一的数据地图,帮助用户全面盘点和整理数据资产。其重要能力通常包含数据资产地图、血缘分析和影响分析。
最后,元数据管理是数据治理的关键,我们要知道数据的来龙去脉,才能对数据进行全方位的管理、监控和洞察。从自动化的角度,元数据的范围也是贯穿数据治理的整个过程的,在这个过程中,元数据管理除针对数据模型的元数据管理外,也可以针对上述实现的数据接入任务、数据开发任务、DQC任务的元数据进行识别,并且实现全链路的血缘智能识别和关联。例如,对接入任务的上下游识别、SQL的血缘自动解析、QQC及调度的资源关联等。由此可以实现元数据的管理和分析能力。
经过自动化阶段后,数据治理流程中的数据仓库模型设计、Mapping映射等阶段依旧有非常多人工处理工作,这些工作大部分跟业务领域知识及实际数据情况强相关,依赖专业的业务知识和行业经验才可进行合理的规划和设计。如何快速精通行业知识和提升行业经验是数据治理过程中新的“拦路虎”。如何更好地沉淀和积累行业知识,自动提供设计和处理的建议是数据治理“深水区”面临的一个新挑战。数据治理智能化将为我们的数据治理工作开辟一个“新天地”。
在整个数据治理流程中,智能化发挥作用的节点(如“工序”,标红色部分)如图1-9所示。
图1-9 数据治理流程节点
实现智能化的第一步是积累业务知识及行业经验,形成知识库。数据治理知识库应包括标准文件、模型(数据元)、DQC规则及数据清洗方案、脚本数据处理算法、指标库、业务知识问答库等,具体涵盖如下内容。
流程化是数据治理工作开展的第一步,是自动化和智能化的基础,将数据治理各节点开展过程中用到的内容进行梳理并规范,包括业务流程图、网络架构图、业务系统台账等,行业知识梳理完善以后形成行业版知识(抽离通用版),如标准文件梳理,包括代码表整理和数据元标准整理(数据仓库行业模型对应标准梳理)。
自动化是将流程化标准后的工作进行自动化开发,涉及仓库模型设计、标准化、脚本开发、DQC、指标体系自动化构建,包括自动化程序生成和自动化检查。自动化程序生成一是解放生产力,提高效率;二是提升开发的规范化。自动化检查包括:
智能化是在流程化、自动化基础上针对数据拉通整合、主题模型、数据加工检查给出智能化建议,减少人工分析的工作。
总体思路是先解决项目上的标准化执行问题,然后提升建设效率及处理规范化问题(自动化处理),最后基于业务知识的沉淀最终实现全流程智能化构建。
近年来,随着互联网技术的日益发展,用户越来越多地使用多媒体数据进行信息的传输和交流。这为数据科学技术带来了新的挑战。除文本、日志、表格等传统的数据格式外,数据科学的相关技术还必须支持语音、图像以及视频等多媒体数据。如何从这些多媒体数据中获取有用的信息,并且对其进行结构化处理,成为数据科学技术不可缺的组成部分。
在信息社会,信息可以划分为两大类:一类信息能够用数据或统一的结构加以表示,我们称之为结构化数据,如数字、符号;另一类信息无法用数字或统一的结构表示,如文本、图像、声音、网页等,我们称之为非结构化数据。
具体而言,结构化数据可以使用关系数据库表示和存储,表现为二维形式的数据,即数据库。其一般特点是数据以行为单位,一行数据表示一个实体的信息,每一行数据的属性是相同的,比如企业ERP、财务系统、医疗HIS数据库、教育一卡通、政府行政审批以及其他核心数据库等。非结构化数据是数据结构不规则或不完整,没有预定义的数据模型,不方便用数据库二维逻辑表来表现的数据,包括所有格式的办公文档、文本、图片、HTML、各类报表、图像和音频/视频信息等。相对于传统的在数据库中或者标记好的文件,由于非结构化数据的非特征性和歧义性,因此更难理解。
结构化数据与非结构化数据之间除存储方式不同外,最大的区别是分析两种类型数据的简便程度不同。用于分析结构化数据的工具模型以及方法已经较为成熟,但是用于挖掘分析非结构化数据的工具仍处于新生或发展阶段。
1)有监督学习
(1)分类模型
分类模型是指通过让机器学习与训练已有的数据,从而预测新数据的类别的一种模型方法。通常在已有分类规则标签,需要预测新数据的类别的情况下使用分类模型,如通过男士的年龄、长相、收入、工作等特征指标数据,预测女士是否见面等。分类模型的常见方法包括:
①决策树。决策树就是一棵树,一棵决策树包含一个根节点、若干内部节点和若干叶节点;叶节点对应于决策结果,其他每个节点则对应于一个属性测试;每个节点包含的样本集合根据属性测试的结果被划分到子节点中;根节点包含样本全集,从根节点到每个叶节点的路径对应一个判定测试序列。因此,决策树的学习过程可以总结为特征选择、决策树生成和剪枝三个部分。
②KNN模型。KNN的分类原理是通过先计算待分类物体与其他物体之间的距离,再统计距离最近的K个邻居,最后对于K个最近的邻居,它们属于哪个分类最多,待分类物体就属于哪一类。
K近邻算法的三个基本要素:K值的选择、距离度量和分类决策规则。
③SVM模型。SVM就是构造一个“超平面”,并利用“超平面”对不同类别的数进行划分,同时使得样本集中的点到这个分类超平面的最小距离,即分类间隔最大化。
④逻辑回归。逻辑回归是一个分类算法,它可以处理二元分类以及多元分类。逻辑回归的假设函数为:
其中X为样本输入,h θ (X)为模型输出,θ为要求解的模型参数。设0.5为临界值,当h θ (X)>0.5时,即x θ >0时,y=1;当h θ (X)<0.5时,即x θ <0时,y=0。模型输出值h θ (X)在[0,1]区间内取值,因此可以从概率角度进行解释:h θ (X)越接近0,则分类为0的概率越高;h θ (X)越接近1,则分类为1的概率越高;h θ (X)越接近临界值0.5,则无法判断,分类准确率会下降。
⑤朴素贝叶斯。朴素贝叶斯分类(Naive Bayes Classifier,NBC)是以贝叶斯定理为基础并且假设特征条件之间相互独立的方法,先通过已给定的训练集,以特征词之间独立作为前提假设,学习从输入到输出的联合概率分布,再基于学习到的模型,输入X求出使得后验概率最大的输出Y。
⑥人工神经网络。人工神经网络(Artificial Neural Network,ANN)简称神经网络(Neural Network,NN),是基于生物学中神经网络的基本原理,在理解和抽象了人脑结构和外界刺激响应机制后,以网络拓扑知识为理论基础,模拟人脑的神经系统对复杂信息的处理机制的一种数学模型。该模型以并行分布的处理能力、高容错性、智能化和自学习等能力为特征,将信息的加工和存储结合在一起,以其独特的知识表示方式和智能化的自适应学习能力引起各学科领域的关注。它实际上是一个由大量简单元件相互连接而成的复杂网络,具有高度的非线性,能够进行复杂的逻辑操作,具有非线性关系。神经网络分为以下三种类型的层。
(2)回归分析模型
回归分析是一种预测性的建模技术,它研究的是因变量(目标)和自变量(预测器)之间的关系。这种技术通常用于预测分析时间序列模型以及发现变量之间的因果关系。例如,司机的鲁莽驾驶与道路交通事故数量之间的关系,最好的研究方法就是回归。回归分析的常用方法如下:
①线性回归。线性回归是利用数理统计中的回归分析来确定两种或两种以上的变量间相互依赖的定量关系的一种统计分析方法,运用十分广泛。其表达形式为y=w'x+e,e为误差,服从均值为0的正态分布。在回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多元线性回归分析。如果自变量是二次方及以上,就称为多项式回归。线性回归对数据的要求很高,要求自变量相互独立、残差呈正态分布、方差齐性。从业务场景来说,线性回归可以使用的业务场景很多,只要自变量和因变量都是连续变量就可以使用回归模型,如GDP、淘宝双十一销售额等。
②岭回归与LASSO回归。岭回归是一种专用于共线性数据分析的有偏估计回归方法,实质上是一种改良的最小二乘估计法,通过放弃最小二乘法的无偏性,以损失部分信息、降低精度为代价获得回归系数更为符合实际、更可靠的回归方法,对病态数据的拟合要强于最小二乘法。LASSO的基本思想是在回归系数的绝对值之和小于一个常数的约束条件下,使残差平方和最小化,从而能够产生某些严格等于0的回归系数,得到可以解释的模型。将LASSO应用于回归,可以在参数估计的同时实现变量的选择,较好地解决回归分析中的多重共线性问题,并且能够很好地解释结果。
(3)时间序列模型
时间序列(时序)是指将同一个统计指标的数值按其发生的时间先后顺序排列而成的数列。时序分析的主要目的是根据已有的历史数据对未来进行预测。时序数据本质上反映的是某个或者某些随机变量随时间不断变化的趋势,而时序预测方法的核心就是从数据中挖掘出这种规律,并利用其对未来做出估计。时序预测在商业领域有着广泛的应用,常见的应用场景包括销量和需求预测、经济和金融指标预测、设备运行状态预测等。企业参考预测结果制定不同期限的生产、人员和运输计划,以及长期战略规划。时间序列分析的常用方法如下:
①多元线性回归。时序预测最朴素的方法是使用多元线性回归。具体做法是将下一时期的目标作为回归模型中的因变量,将影响目标的相关因素作为特征。以销量预测问题为例,影响目标的相关因素包括当期的销量、下一时期的营销费用、门店属性、商品属性等。为了捕捉时间信息,我们同时从日期中提取时间特征。以月度频率数据为例,常用的时间特征包括:将月份转化为0-1哑变量,编码11个变量;将节假日转化为0-1哑变量,可简单分为两类,即“有假日”和“无假日”;或赋予不同编码值,如区分国庆节、春节、劳动节等。
②时间序列分解。时间序列分解(Time Series Decomposition)主要用于理解时序的特点,也可以用作预测。其基本思想是任何时序中的规律可以分为长期趋势变动(Trend)、季节变动(Seasonality,即显式周期,特点是固定幅度、长度的周期波动)和循环变动(Cycles,即隐式周期,周期长但不具严格规则的波动)。时间序列分解使用加法模型(Additive Model)或乘法模型(Multiplicative Model)将原始时序分解为上述三类规律和不规则变动。在对时序分解之后,我们就可以对这三个部分分别使用平滑模型或回归模型进行建模,最后将这三个部分根据加法或乘法模型合并,得到预测值。
③指数平滑。指数平滑法的原理是对时间序列的趋势和季节性建模。指数平滑法由布朗(Robert G. Brown)于1959年提出。布朗认为,时间序列的态势具有稳定性或规则性,所以时间序列可被合理地顺势推延,最近的过去态势在某种程度上会持续到最近的未来,所以将较大的权值放在最近的数据上。指数平滑法使用了所有时间序列历史观察值的加权和来对未来进行预测。其中,权值随着数据的远离,逐渐趋近为零,这意味着,越靠近的观察值,其对预测的影响越大,这与实际生活中随机变量的特性是相符的,故指数平滑法是一种有效而可靠的预测方法。
④ARIMA模型。ARIMA模型的目的是对时间序列的自回归特征建模。ARIMA(p, d, q)包括自回归过程(AR)、移动平均过程(MA)和差分项(I)。参数中,p为自回归项数,d为时间序列成为平稳时所做的差分次数,q为移动平均项数。根据AIC准则选择最合适的(p, d, q)组合。ARIMA模型的一般形式为
(1−ϕ 1 B−…−ϕ p B P )(1−B) d y t =c+(1+θ 1 B+…+θ q B q )e t
其中,为延迟算子,表示时间序列的上一时刻;为差分的阶数;p为自回归阶数;q为移动平均阶数;c为常数参数。
⑤机器学习。机器学习方法是多元线性回归方法的拓展,重点在于使用更加复杂的特征工程技巧提取时序特征。在创建完特征后,使用常用的算法进行拟合,例如XGBoost和LightGBM。
2)无监督学习
(1)聚类模型
聚类算法是对大量未标注数据,按照数据的内在相似性将数据集划分为多个组,这些相似的组被称作簇。处于相同簇中的数据实例彼此相同,处于不同簇中的实例彼此不同。聚类和分类的区别主要如下。
聚类的常用方法如下:
①K-Means聚类。K-Means算法的运算原理是每一次迭代都确定K个类别中心,将数据点归到与之距离最近的中心点所在的簇,将类别中心更新为它的簇中所有样本的均值,反复迭代,直到类别中心不再变化或小于某个阈值。
②DBSCAN聚类。DBSCAN通过检查数据集中每点的Eps邻域来搜索簇,如果点p的Eps邻域包含的点多于MinPts个,则创建一个以p为核心对象的簇;然后,DBSCAN迭代地聚集从这些核心对象直接密度可达的对象,这个过程可能涉及一些密度可达簇的合并;当没有新的点添加到任何簇时,该过程结束。
③层次聚类。层次聚类的聚类原理是先计算样本之间的距离,每次将距离最近的点合并到同一个类。然后,计算类与类之间的距离,将距离最近的类合并为一个大类。不停地合并,直到合成一个类。其中类与类的距离的计算方法有最短距离法、最长距离法、中间距离法、类平均法等。比如最短距离法,将类与类的距离定义为类与类之间样本的最短距离。层次聚类算法根据层次分解的顺序分为自底向上和自顶向下,即凝聚的层次聚类算法和分裂的层次聚类算法。
④高斯混合聚类。高斯混合模型(Gaussian Mixed Model,GMM)指的是多个高斯分布函数的线性组合,理论上GMM可以拟合出任意类型的分布,通常用于解决同一集合下的数据包含多个不同的分布的情况(或者是同一类分布但参数不一样,或者是不同类型的分布,比如正态分布和伯努利分布)。
高斯混合聚类采用概率模型来表达聚类原型。GMM用于聚类时,假设数据服从混合高斯分布(Mixture Gaussian Distribution),那么只要根据数据推出GMM的概率分布就可以了,GMM的K个分量实际上对应K个Cluster。根据数据来推算概率密度通常被称作密度估计。
(2)降维
数据降维即为降低数据的维度,在机器学习领域中,所谓的降维是指采用某种映射方法将原高维空间中的数据点映射到低维度的空间中。降维可应用于很多业务场景中,它可以降低时间复杂度和空间复杂度,节省了提取不必要特征的开销,避免维度爆炸;还可以起到去噪的作用,去掉数据集中夹杂的噪声,例如信号数据处理中,通过降维操作提高数据信噪比来提高数据质量。此外,还可以利用降维实现数据的可视化和对样本进行特征提取。在有些业务场景下,我们可以利用因子分析等降维方法进行权重计算和综合评分。
降维的常用方法如下:
①主成分分析(Principal Component Analysis,PCA)。构造原变量的一系列线性组合形成几个综合指标,以去除数据的相关性,并使低维数据最大限度保持原始高维数据的方差信息,核心是把给定的一组相关变量(维度)通过线性变换转换成另一组不相关的变量,这些新的变量按照方差依次递减的顺序排序。第一变量具有最大方差,称第一主成分,第二变量的方差次大,称第二主成分。PCA本质上是将方差最大的方向作为主要特征,并且在各个正交方向上将数据“离相关”,也就是让它们在不同正交方向上没有相关性。
②线性判别(Linear Discriminant Analysis,LDA)。线性判别将高维的模式样本投影到最佳鉴别矢量空间,以达到抽取分类信息和压缩特征空间维度的效果,投影后保证模式样本在新的子空间有最大的类间距离和最小的类内距离,即模式在该空间有最佳的可分离性。线性判别通过一个已知类别的“训练样本”来建立判别准则,并通过预测变量来为未知类别的数据进行分类。
③因子分析(Factor Analysis,FA)。因子分析是指研究从变量群中提取共性因子的统计技术,因子分析可在许多变量中找出隐藏的具有代表性的因子。将相同本质的变量归入一个因子,可减少变量的数目,还可检验变量间关系的假设。下面对因子分析进行举例说明,从而对因子分析的作用有一个直观的认识。
④LASSO变量选择。LASSO是由1996年Robert Tibshirani首次提出的,全称是Least Absolute Shrinkage and Selection Operator。该方法是一种压缩估计。它通过构造一个惩罚函数得到一个较为精炼的模型,使得它压缩一些回归系数,即强制系数绝对值之和小于某个固定值;同时设定一些回归系数为零。因此,保留了子集收缩的优点,是一种处理具有复共线性数据的有偏估计。LASSO本质上是基于L1正则化的原理,当输入的特征变量较多时,通过剔除相关性小的特征变量实现特征选择,减少输入的特征变量个数,从而达到降维的目的。LASSO回归的基本原理如以下公式所示:
上述公式的偏差绝对值求和即为L1正则化,L1正则化构建了特征变量系数的稀疏矩阵,使得不重要的特征变量的权重系数为0。
1)数据输入
(1)离线数据接入
离线数据接入包括如下类型的数据。
(2)数据框数据接入
①MySQL数据库。Python数据库接口支持非常多的数据库,可以选择适合项目的数据库,例如MySQL、PostgreSQL、Microsoft SQL、Informix、Interbase、Oracle、Sybase。所需算法包或函数为PyMySQL,它是在Python 3.x版本中用于连接MySQL服务器的一个库。连接数据库前需要准备的项目如下:一个MySQL数据库,并且已经启动;可以连接该数据库的用户名和密码。有一个有权限操作的Database。
②Hive数据库。所需算法包或函数包括sasl、thrift、thrift_sasl、pyhive等,其中sasl采用0.2.1版本,选择适合自己的版本即可。
2)探索性数据分析
(1)探索性数据分析的目的
探索性数据分析(Exploratory Data Analysis,EDA)是指对已有数据在尽量少的先验假设下通过统计、作图、制表、方程拟合、计算特征量等手段探索数据的结构和规律的一种数据分析方法,该方法在20世纪70年代由美国统计学家J.K.Tukey提出。传统的统计分析方法常常先假设数据符合一种统计模型,然后依据数据样本来估计模型的一些参数及统计量,以此了解数据的特征。但实际中往往有很多数据并不符合假设的统计模型分布,这导致数据分析结果不理想。探索性数据分析则是一种更加贴合实际情况的分析方法,它强调让数据自身“说话”,通过这种方法我们可以更加真实、直接地观察到数据的结构及特征,为后续建模提供重要的洞见。
(2)探索性数据分析方法
探索性数据分析的主要方法包括单变量分析、多变量相关性分析、多变量交叉分析。
①单变量分析。单变量分析是使用统计方法对单一变量进行描述,捕捉其特征。从统计学的角度来看,单变量分析就是对统计量的估计过程。
②多变量相关性分析。多变量相关性分析的常用统计量有协方差、相关系数。协方差越接近0表明两个变量越不具有(线性)关系,但协方差越大并不表明越相关,因为协方差的定义中没有考虑变量量纲的影响。相关系数考虑了变量量纲的影响,因此是一个更合适的统计量。相关系数的取值在[-1,1]上,相关系数为-1表示两个变量完全负相关,相关系数为1表示两个变量完全正相关,0则表示不相关。相关系数是序数型的,只能比较相关程度大小(绝对值比较),并不能做四则运算。
3)数据预处理
(1)数据处理的目的
在真实数据中,我们拿到的数据可能包含大量的缺失值,可能包含大量的噪声,也可能因为人工录入错误(比如,医生的就医记录)导致有异常点存在,这对我们挖据出有效信息造成了一定的困扰,所以我们需要通过一些方法尽量提高数据的质量。
(2)数据处理的环节
数据处理主要包含数据预处理和特征工程两部分,特别是对于数据预处理工作,多个数据源的数据集成工作,数据压缩、数据维度立方体构建、行列转换(宽表或纵表)等数据规约工作,数据离散化等数据变换工作,大批量数据、相对标准化的数据处理工作等,可以利用大数据技术进行批量分布式处理,即通过ETL流程进行数据预处理,而不必放在特征工程环节进行处理。第一,提高了数据质量;第二,减少了数据量;第三,得到了最想要的规范数据。这样尽可能把“最合适”的数据输出到后续特征工程的过程中,可以让整个建模过程更加模块化,提高模型性能和可读性。
(3)数据处理的定位
①数据处理的定位。一个ML项目大致可以总结成如图1-10所示的流程,从图1-10可以看到数据贯穿整个建模的核心流程,同时可以看到数据处理包含数据预处理和特征工程两部分。数据预处理有4个任务:数据清洗、数据集成、数据变换和数据规约。
图1-10 数据建模流程图
②数据处理的重要性。这里引用来自“纽约时报”的一篇报道(Jim Liang的一个观点),本质上是说数据科学家在他们的时间中有50%~80%的时间花费在收集和准备不规则数据的更为平凡的任务中,然后才能探索有用的金块。
4)特征工程
(1)特征工程的概述与定位
特征工程是对原始数据进行一系列工程处理,将其提炼为特征,作为输入供算法和模型使用。从本质上来讲,特征工程是一个表示和展现数据的过程。在实际工作中,特征工程旨在去除原始数据中的杂质和冗余,设计更高效的特征以刻画求解的问题与预测模型之间的关系。
(2)特征工程方法论
①特征理解
表1-6 特征工程表
②特征构造
目标是增强数据表达,添加先验知识。如果我们对变量进行处理之后,效果仍不是非常理想,就需要进行特征构造了,也就是衍生出新变量。统计量特征扩展,统计量构造新的特征,主要有以下思路:
特征分箱包括如下方法。
图1-11 等频分箱图
图1-12 等距分箱图
③特征变换
连续值无量纲化,具体包括如下步骤:
④特征选择
特征选择的目标是降低噪声,平滑预测能力和计算复杂度,增强模型预测性能。当数据预处理完成后,我们需要选择有意义的特征输入机器学习的算法和模型进行训练。通常来说,从以下两个方面考虑来选择特征。
根据特征选择的形式又可以将特征选择方法分为以下3种。
5)模型训练和优化
(1)模型开发迭代
模型的开发和迭代是一个不断试验和尝试的过程。从数据清洗到特征工程再到模型训练是一个迭代的过程,其中每一步可以视为一种模型设置,都可以尝试。下面列举一些面临的选择:
对于上述问题,我们要认识到目前没有一套完整的理论支撑应该如何决定每一步的最佳方法,模型开发和科学研究一样,是一个试验和迭代的过程。因此,我们应该系统化地设计和进行试验,验证不同假设,找到最佳方法。
(2)超参数优化
在机器学习模型中,需要人工选择的参数称为超参数。比如随机森林中决策树的个数、人工神经网络模型中隐藏层的层数和每层的节点个数、正则项中的常数大小等。超参数选择不恰当,就会出现欠拟合或者过拟合的问题。而在选择超参数的时候,有两个途径,一个是凭经验微调,另一个是选择不同大小的参数,代入模型中,挑选表现最好的参数组合。挑选超参数的一种方法是手动调整,但是这么做非常耗费开发时间。项目中一般使用自动化的搜索方法优化超参数。常见的优化方法包括网格搜索(Grid Search)和随机搜索(Random Search)。
①网格搜索。网格搜索即穷举搜索,在所有候选的参数选择中,通过循环遍历尝试每一种可能性,表现最好的参数就是最终的结果。其原理就像是在数组中找到最大值。这种方法的主要缺点是比较耗时。
②随机搜索。我们在搜索超参数的时候,如果超参数个数较少(三四个或者更少),那么可以采用网格搜索,一种穷尽式的搜索方法。但是当超参数个数比较多的时候,我们仍然采用网格搜索,那么搜索所需的时间将会呈指数级上升。所以有人就提出了随机搜索的方法,随机在超参数空间中搜索几十、几百个点,其中就有可能有比较小的值。这种做法比上面稀疏化网格的做法快,而且实验证明,随机搜索法的结果比稀疏网格法稍好。
(3)模型集成
训练模型时,如果模型表现遇到瓶颈,主要提升方法是增加数据源和特征工程。如果计算资源允许,另一个常用方法是模型集成(Model Ensemble)。模型集成的基本思想是将多个准确率较高但相关性低的基础模型通过某种方式结合成一个集成模型。通俗来讲,每个基础模型可以理解为一个专家的意见,而多个专家通过投票可以做出更加准确的预测。在实际项目中,模型集成一般能够提升效果,是机器学习中最接近“免费的午餐”的方法。当然,模型集成是有代价的,训练多个模型就需要多倍的迭代和训练时间,同时集成模型不易于解释。模型集成具体包括如下方法:
①投票法(Voting)。投票法针对分类任务。最简单的多数投票法是让所有基础模型的预测结果以少数服从多数的原则决定最终预测结果。除多数投票法外,也可以对基础模型的预测结果进行加权,常用方法是按照基础模型损失加权,即预测结果乘以1/loss。
②平均法(Averaging)。平均法针对回归任务,按字面意思就是对所有基础模型的预测结果进行平均。同投票方法,也可以使用加权平均方法,按照基础模型的损失加权。
平均法有一个问题,就是不同的基础模型结果的度量可能不一致,造成波动较小模型的权重较低。为了解决这个问题,人们提出了排序平均(Rank Averaging),也就是先将不同模型的结果归一化之后再进行平均。
③堆叠法(Stacking)。堆叠法就是将基础模型(Level 1模型)的结果输入另一个非线性模型(Level 2模型),如GBDT,让模型自行学习最佳的结果合并方法。
6)模型部署
(1)模型结果输出
①输出为文件
②输出到数据库
(2)模型调用
①一次性调用
②定时脚本调用
③API调用
(3)模型日志
模型在运行时需要利用日志(Log)监控,以便监控模型可能出现的问题。常用的方法是结合print函数和shell信息捕捉,或者使用Python中的logging库。
①print函数:最简单和直接的日志方法是使用Python中的print函数打印各类日志信息。例如,一般机器学习任务会拆解为特征工程和模型训练两个阶段。每个阶段可以打印开始和结束信息。当模型部署和自动调度后,由于无法人工观察模型运行情况,因此需要将Python程序的输出信息(stdout和stderr)进行重新指向,并保存在日志文件中。
②logging库:使用print函数捕捉日志很简单,但当面临较为复杂的程序时有一些限制。首先,无法区分日志信息类型,例如将日志信息分为MESSAGE和BUG。其次,如果想增加时间戳,需要额外定义wrapper function。如果项目有需求,使用Python中的logging库可以解决上述问题。
7)模型可视化
(1)代码级可视化
①为什么需要模型可视化
②工具介绍
接下来介绍几个Python中的可视化数据库。
8)模型结果可解释性分析
(1)什么是模型的可解释性
模型在训练的过程中会学习到偏差(Bias),导致模型的泛化性能下降。如果模型具有较强的可解释性,就可以协助调试偏差,帮助模型调优。以借贷问题为例,我们的业务目标是向好客户提供贷款,但仅仅使用机器学习方法只能最小化逾期率,同时也要考虑到需要消除对特定客群的偏见,所以我们不仅需要最小化模型的损失函数,还需要在合规和低风险的情况下尽可能地促进业务增长。显然,仅仅使用模型的损失函数来评估是不够的。
(2)为什么进行模型解释
①模型改进。通过可解释分析可以指导特征工程。一般我们会根据一些专业知识和经验来构建特征,同构分析特征的重要性,可以挖掘更多有用的特征,尤其是在交互特征方面。当原始特征众多时,可解释性分析变得尤为重要。
②模型的可信度和透明度。在我们构建模型时,需要权衡两个方面,是仅仅想要知道预测的结果是什么,还是想了解模型为什么给出这样的预测。在一些低风险的情况下,我们不一定需要知道决策是如何做出的,比如推荐系统(广告、视频或者商品推荐等)。但是在其他领域,比如在金融和医疗领域,模型的预测结果将会对相关人员产生巨大的影响,因此有时候我们依然需要专家对结果进行解释。从长远来看,更好地理解机器学习模型可以节省大量时间,防止收入损失。如果一个模型没有做出合理的决策,我们可以在应用这个模型并造成不良影响之前就发现这一问题。
③识别和防止偏差。方差和偏差是机器学习中广泛讨论的话题。有偏差的模型经常由有偏见的事实导致,如果数据包含微妙的偏差,模型就会学习下来并认为拟合很好。一个有名的例子是,用机器学习模型来为囚犯建议定罪量刑,这显然反映了司法体系在种族不平等上的内在偏差。所以作为数据科学家和决策制定者来说,理解我们训练和发布的模型如何做出决策,可以帮助我们事先预防偏差的增大并及时消除它们。
(3)可解释性的范围
①算法透明度(Algorithm Transparency)。算法透明度指的是如何从数据中学习一个模型,更加强调模型的构建方式以及影响决策的技术细节。比如使用卷积神经网络(Convolutional Neural Network,CNN)对图片进行分类时,模型做出预测,是因为算法学习到了边或者其他纹理。算法透明度需要弄懂算法知识,而不是数据以及学到的模型。对于简单的算法,比如线性模型,具有非常高的算法透明度。复杂的模型如深度学习,人们对模型内部了解较少,透明度较差,这将是一个非常重要的研究方向。
②全局可解释(Global Interpretability)。为了解释模型的全局输出,需要训练模型了解算法和数据。这个层级的可解释性指的是,模型如何基于整个特征空间、模型结构和参数等因素做出决策,哪些特征是重要的,以及特征之间的交互会产生什么影响。模型的全局可解释性可以帮助我们理解不同特征对目标变量分布的影响。在实际情况下,当模型具有大量参数时,人们很难想象特征之间是如何相互作用的,以得到这样的预测结果。然而,某些模型在这个层级是可以解释的。例如,我们可以解释线性模型的权重,以及树模型是如何划分分支和得到节点预测值的。
③局部可解释(Local Interpretability)。局部可解释性更加关注单个样本或一组样本。这种情况下,我们可以将模型视为一个黑盒,不再考虑模型的复杂情况。对于单个样本,我们可以观察到模型给出的预测值和某些特征之间可能存在的线性关系,甚至可能是单调关系。因此,局部可解释性比全局可解释可能更加准确。
1)客户管理模型
(1)客户特征细分。一般客户的需求主要是由其社会和经济背景决定的,因此对客户的特征细分,就是对其社会和经济背景所关联的要素进行细分。这些要素包括地理(如居住地、行政区、区域规模等)、社会(如年龄范围、性别、经济收入、工作行业、职位、受教育程度、宗教信仰、家庭成员数量等)、心理(如个性、生活形态等)、消费行为(如置业情况、购买动机类型、品牌忠诚度、对产品的态度等)、客户线上行为(逛、买、比、晒、享)等要素。
(2)客户价值细分。不同客户给企业带来的价值并不相同,有的客户可以连续不断地为企业创造价值和利益,因此企业需要为不同客户规定不同的价值。在经过基本特征的细分之后,需要对客户进行高价值到低价值的区间分隔(例如大客户、重要客户、普通客户、小客户等),以便根据20%的客户为项目带来80%的利润的原理重点锁定高价值客户。客户价值区间的变量包括客户响应力、客户销售收入、客户利润贡献、忠诚度、推荐成交量等。
(3)客户共性需求细分。依托客户细分的聚类技术,提炼客户的共同需求,以客户需求为导向精确定义企业的业务流程,为每个细分的客户市场提供差异化的营销组合。可以根据不同的数据情况和需要选择不同的聚类算法来进行客户细分。
(4)客户潜客营销模型。企业的发展至关重要,而客户的多少往往在企业发展中占有关键作用。老客户是企业收入来源的稳定部分,但是企业要谋求发展必须靠新的血液,也就是潜在客户。因此,潜在客户的寻找和营销尤为重要。所谓潜在客户,是指对企业的产品或服务存在需求和具备消费能力的待开发客户,这类客户往往很难发现或者不知道如何发掘。而在当今大数据环境下,依靠大量的客户数据及合适的数据挖掘手段,就能构建出一些有效的潜客挖掘模型,利用这些模型能精确地找出潜在客户,从而为营销做好充分准备。
(5)客户生命周期细分。过去几年,各行业获客成本都在直线攀升,部分行业已达数千元/新客。以电商行业为例,2016年至今,获客成本增长5倍。这意味着随着消费升级,人口红利见顶,企业将迎来一场“存量博弈”。但是现在大多企业注重单次交易的购买价值,常以优惠补贴等促销形式,对单次获客投入高成本,以此促进成交来提高业绩,而这种利益驱动下的成交只会使得企业成本居高不下。如果企业能最大限度地利用和挖掘顾客的价值,从而延长客户生命周期,提升客户生命周期价值,有效摆脱对获客与促销高成本投入但低转化的依赖,这时企业将获得更高的利润。
(6)客户细分组合与应用。在对客户群进行细分之后,会得到多个细分的客户群体,但是,并不是得到的每个细分都是有效的。细分的结果应该通过下面几条规则来测试:与业务目标相关的程度;可理解性和是否容易特征化;基数是否足够大,以便保证一个特别的宣传活动;是否容易开发独特的宣传活动等。
2)销量预测与库存预警
梳理影响销售预测的内外部因素,构建销售预测指标体系,采集关键节点数据,建立销售预测模型体系,对总部、分公司、经营部、客户的总量、分尺寸、分型号的销售进行逐级预测。尽可能多因素地考虑,选择最优的预测模型,提高销售预测准确率,进而提高商业库存周转率。建立动态安全库存模型,满足总部、分公司、客户的分型号安全库存建议与预警。对总部、分公司、客户(有商业库存数据的客户),分型号提供合理的补货建议。
语音数据作为多媒体数据的一种表现形式,在日常交流中发挥着重要的作用。对语音数据的处理又叫作语音分析,主要包括声纹识别和语音识别,分别说明如下。
近年来,许多智能语音技术服务商开始布局声纹识别领域,声纹识别逐渐进入大众视野。随着技术的发展和在产业内的不断渗透,声纹识别的市场占比也逐年上升,但目前声纹识别需要解决的关键问题还有很多。接下来梳理声纹识别技术的发展历史,并分析每一阶段的关键技术原理,以及遇到的困难与挑战,希望能够让大家对声纹识别技术有进一步的了解。
声纹(Voiceprint)是用电声学仪器显示的携带言语信息的声波频谱。人类语言的产生是人体语言中枢与发音器官之间一个复杂的生理物理过程,不同的人在讲话时使用的发声器官(舌、牙齿、喉头、肺、鼻腔)在尺寸和形态方面有着很大的差异,所以任何两个人的声纹图谱都是不同的。每个人的语音声学特征既有相对稳定性,又有变异性,不是绝对的、一成不变的。这种变异可来自生理、病理、心理、模拟、伪装,也与环境干扰有关。尽管如此,由于每个人的发音器官都不尽相同,因此在一般情况下,人们仍能区别不同的人的声音或判断是不是同一人的声音。因此,声纹也就成为一种鉴别说话人身份的识别手段。
声纹识别是生物识别技术的一种,也叫作说话人识别,是一项根据语音波形中反映说话人生理和行为特征的语音参数自动识别语音说话者身份的技术。首先需要对发音人进行注册,即输入发音人的一段说话音频,系统提取特征后存入模型库中,然后输入待识别音频,系统提取特征后经过比对打分,从而判断所输入音频中说话人的身份。从功能上来讲,声纹识别技术应有两类,分别为1:N和1:1。前者用于判断某段音频是若干人中的哪一个人所说的,后者则用于确认某段音频是否为某个人所说的。因此,不同的功能适用于不同的应用领域,比如公安领域中重点人员布控、侦查破案、反电信欺诈、治安防控、司法鉴定等经常用到的是1:N功能,即辨认音频是若干人中的哪一个人所说的,而1:1功能则更多应用于金融领域的交易确认、账户登录、身份核验等。
从技术发展角度来说,声纹识别技术经历了三个大阶段:
1)模板匹配的声纹识别
最早的声纹识别技术框架是一种非参数模型,特点在于基于信号比对差别,通常要求注册和待识别的说话内容相同,属于文本相关,因此局限性很强。
此方法将训练特征参数和测试的特征参数进行比较,两者之间的失真(Distortion)作为相似度。例如矢量量化(Vector Quantization,VQ)模型和动态时间规整法(Dynamic Time Warping,DTW)模型。DTW通过将输入待识别的特征矢量序列与训练时提取的特征矢量进行比较,通过最优路径匹配的方法来进行识别。而VQ方法则是通过聚类、量化的方法生成码本,识别时对测试数据进行量化编码,以失真度的大小作为判决的标准。
2)基于统计机器学习的技术框架
由于第一阶段只能用于文本相关的识别,即注册语音的内容需要跟识别语音的内容一致,因此具有很强的局限性,同时受益于统计机器学习的快速发展,声纹识别技术也迎来了第二阶段。此阶段可细分为4个小阶段,即GMM→GMM-UBM/GMM-SVM→JFA→GMM-iVector-PLDA。
(1)高斯混合模型
高斯混合模型(Gaussian Mixture Model,GMM)的特点在于采用大量数据为每个说话人训练(注册)模型。注册要求很长的有效说话人语音。高斯混合模型是统计学中一个极为重要的模型,其在机器学习、计算机视觉和语音识别等领域均有广泛的应用,甚至可以算是神经网络和深度学习普及之前的主流模型。GMM之所以强大,在于其能够通过对多个简单的正态分布进行加权平均,从而用较少的参数模拟出十分复杂的概率分布。
在声纹识别领域,高斯混合模型的核心设定是:将每个说话人的音频特征用一个高斯混合模型来表示。采用高斯混合模型的动机也可以直观地理解为:每个说话人的声纹特征可以分解为一系列简单的子概率分布,例如发出的某个音节的概率、该音节的频率分布等。这些简单的概率分布可以近似地认为是正态分布(高斯分布)。但是由于GMM规模越庞大,表征力越强,其负面效应也会越明显:参数规模会等比例膨胀,需要更多的数据驱动GMM的参数训练才能得到一个更加通用(或泛化)的GMM模型。
假设对维度为50的声学特征进行建模,GMM包含1024个高斯分量,并简化多维高斯的协方差为对角矩阵,则一个GMM待估参数总量为1024(高斯分量的总权数)+1024×50(高斯分量的总均值数)+1024×50(高斯分量的总方差数)=103424,超过10万个参数需要估计。
这种规模的变量即使是将目标用户的训练数据量增大到几个小时,都远远无法满足GMM的充分训练要求,而数据量的稀缺又容易让GMM陷入一个过拟合(Over-fitting)的陷阱中,导致泛化能力急剧衰退。因此,尽管一开始GMM在小规模的文本无关数据集合上表现出了超越传统技术框架的性能,但它却远远无法满足实际场景的需求。
(2)高斯混合背景模型(GMM-UBM)和支持向量机(GMM-SVM)
GMM-VBM模型的特点在于使用适应模型的方法减少建模注册所需要的有效语音数据量,但对跨信道分辨能力不强。由于前面使用GMM模型对数据的需求量很大,因此2000年前后,DA Reynolds的团队提出了一种改进的方案:既然没法从目标用户那里收集到足够的语音,那就换一种思路,可以从其他地方收集到大量非目标用户的声音,积少成多,我们将这些非目标用户数据(声纹识别领域称为背景数据)混合起来充分训练出一个GMM,这个GMM可以看作对语音的表征,但由于它是从大量身份的混杂数据中训练而成的,因此不具备表征具体身份的能力。
该方法对语音特征在空间分布的概率模型给出了一个良好的预先估计,我们不必再像过去那样从头开始计算GMM的参数(GMM的参数估计是一种称为EM的迭代式估计算法),只需要基于目标用户的数据在这个混合GMM上进行参数的微调即可实现目标用户参数的估计,这个混合GMM就叫通用背景模型(Universal Background Model,UBM)。
UBM的一个重要优势在于它是通过最大后验估计(Maximum A Posterior,MAP)的算法对模型参数进行估计,避免了过拟合的发生。MAP算法的另一个优势是我们不必再去调整目标用户GMM的所有参数(权重、均值、方差),只需要对各个高斯成分的均值参数进行估计,就能实现最好的识别性能。这样待估计的参数一下减少了一半多(103424→51200),越少的参数也意味着更快地收敛,不需要那么多的目标用户数据即可完成对模型的良好训练。
GMM-UBM系统框架是GMM模型的推广,用于解决当前目标说话人数据量不够的问题。通过收集其他说话人的数据进行预先训练,并利用MAP算法的自适应将预先训练过的模型向目标说话人模型进行微调。这种方法可以显著减少训练所需要的样本量和训练时间(通过减少训练参数)。
但是GMM-UBM缺乏对应信道多变性的补偿能力,因此后来WM Campbell将支持向量机(Support Vector Machine,SVM)引入到GMM-UBM的建模中,通过将GMM每个高斯分量的均值单独拎出来,构建一个高斯超向量(Gaussian Super Vector,GSV)作为SVM的样本,利用SVM核函数的强大非线性分类能力,在原始GMM-UBM的基础上大幅提升了识别的性能,同时基于GSV的一些规整算法,例如扰动属性投影(Nuisance Attribute Projection,NAP)、类内方差规整(Within Class Covariance Normalization,WCCN)等,在一定程度上补偿了由于信道易变形对声纹建模带来的影响。
(3)联合因子分析法
联合因子分析法(Joint Factor Analysis,JFA)的特点在于分别建模说话人空间、信道空间以及残差噪声,但每一步都会引入误差。在传统的基于GMM-UBM的识别系统中,由于训练环境和测试环境的失配问题,导致系统性能不稳定。于是Patrick Kenny在2005年左右提出了一个设想:既然声纹信息可以用一个低秩的超向量子空间来表示,那么噪声和其他信道效应是不是也能用一个不相关的超向量子空间进行表达呢?基于这个假设,Kenny提出了联合因子分析的理论分析框架,将说话人所处的空间和信道所处的空间做了独立不相关的假设,在JFA的假设下,与声纹相关的信息全部可以由特征音空间(Eigenvoice)进行表达,并且同一个说话人的多段语音在这个特征音空间上都能得到相同的参数映射,之所以实际的GMM模型参数有差异,这个差异信息是由说话人差异和信道差异这两个不可观测的部分组成的,公式如下:
M=s+c
其中,s为说话人相关的超矢量,表示说话人之间的差异;c为信道相关的超矢量,表示同一个说话人不同语音段的差异;M为GMM均值超矢量,表述为说话人相关部分s和信道相关部分c的叠加,如图1-13所示。
图1-13 均值超矢量
如图1-13所示,联合因子分析实际上是用GMM超矢量空间的子空间对说话人差异及信道差异进行建模,从而可以去除信道的干扰,得到对说话人身份更精确的描述。JFA定义的公式如下:
s=m+Vy+Dz
C=Ux
其中,s为说话人相关的超矢量,表示说话人之间的差异;m为与说话人以及信道无关的均值超矢量;V为低秩的本征音矩阵;y为说话人相关因子;D为对角的残差矩阵;z为残差因子;c为信道相关的超矢量,表示同一个说话人不同语音段的差异;U为本征信道矩阵;x为与特定说话人的某一段语音相关的因子。这里的超参数集合{V,D,U}即为需要评估的模型参数。有了上面的定义公式,我们可以将均值超矢量重新改写为如下形式:
M=m+Vy+Dx+Dz
为了得到JFA模型的超参数,我们可以使用EM算法训练出UBM模型,使用UBM模型提取Baum-Welch统计量。尽管JFA对于特征音空间与特征信道空间的独立假设看似合理,但绝对的独立同分布的假设是一个过于强的假设,这种独立同分布的假设往往为数学的推导提供了便利,却限制了模型的泛化能力。
(4)基于GMM的I-Vector方法及PLDA
I-Vector方法的特点在于统一建模所有空间,进一步减少注册和识别所需的语音时长,使用PLDA分辨说话人的特征,但噪声对GMM仍然有很大影响。N. Dehak提出了一个更加宽松的假设:既然声纹信息与信道信息不能做到完全独立,那就用一个超向量子空间对两种信息同时建模,即用一个子空间同时描述说话人信息和信道信息。这时候,同一个说话人,无论怎么采集语音,采集了多少段语音,在这个子空间上的映射坐标都会有差异,这也更符合实际情况。这个既模拟说话人差异性又模拟信道差异性的空间称为全因子空间(Total Factor Matrix),每段语音在这个空间上的映射坐标称作身份认证(Identity-Vector,I-Vector)向量,I-Vector向量的维度通常也不会太高,一般在400~600。
I-Vector方法采用一个空间来代替这两个空间,这个新的空间可以成为全局差异空间,它既包含说话人之间的差异,又包含信道间的差异。所以I-Vector的建模过程在GMM均值超矢量中不严格区分说话人的影响和信道的影响。这一建模方法的动机来源于Dehak的又一研究:JFA建模后的信道因子不仅包含信道效应,也夹杂着说话人的信息。I-Vector中Total Variability的做法(M=m+Tw)将JFA复杂的训练过程以及对语料的复杂要求瞬间降到了极致,尤其是将Length-Variable Speech映射到了一个固定且低维(Fixed and Low-Dimension)的身份认证向量上。于是,所有机器学习算法都可以用来解决声纹识别的问题了。现在,主要用的特征是I-Vector。这是通过高斯超向量基于因子分析而得到的,是基于单一空间的跨信道算法,该空间既包含说话人空间的信息,也包含信道空间信息,相当于用因子分析方法将语音从高维空间投影到低维。可以把I-Vector看作一种特征,也可以看作简单的模型。最后,在测试阶段,我们只要计算测试语音I-Vector和模型的I-Vector之间的余弦(cosine)距离,就可以作为最后的得分。这种方法也通常被作为基于I-Vector说话人识别系统的基线系统。
I-Vector简洁的背后是它舍弃了太多的东西,其中就包括文本差异性,在文本无关识别中,由于注册和训练的语音在内容上的差异性比较大,因此我们需要抑制这种差异性。但在文本相关识别中,又需要放大训练和识别语音在内容上的相似性,这时候牵一发而动全身的I-Vector就显得不是那么合适了。虽然I-Vector在文本无关声纹识别上表现非常好,但是在看似更简单的文本相关声纹识别任务上,I-Vector表现得并不比传统的GMM-UBM框架更好。I-Vector的出现使得说话人识别的研究一下子简化抽象为一个数值分析与数据分析的问题:任意的一段音频,无论长度怎样,内容如何,最后都会被映射为一段低维度的定长I-Vector。只需要找到一些优化手段与测量方法,在海量数据中能够将同一个说话人的几段I-Vector尽可能分类得近一些,将不同说话人的I-Vector尽可能分得远一些。并且Dehak在实验中还发现,I-Vector具有良好的空间方向区分性,即便在SVM进行区分,也只需要选择一个简单的余弦核就能实现非常好的区分性。I-Vector在大多数情况下仍然是文本无关声纹识别中表现性能最好的建模框架,学者们后续的改进都是基于对I-Vector进行优化,包括线性区分分析(Linear Discriminant Analysis,LDA)、概率线性判别分析(Probabilistic Linear Discriminant Analysis,PLDA)甚至是度量学习(Metric Learning)等。
概率线性判别分析是一种信道补偿算法,被用于对I-Vector进行建模、分类,实验证明其效果最好。因为I-Vector中既包含说话人的信息,也包含信道信息,而我们只关心说话人信息,所以才需要做信道补偿。我们假设训练数据语音由i个说话人的语音组成,其中每个说话人有j段自己不同的语音。那么,我们定义第i个人的第j条语音为x ij 。根据因子分析,我们定义x ij 的生成模型为:
x ij =μ+Fh i +Gw ij +ϵ ij
PLDA模型训练的目标就是输入一堆数据x ij ,输出可以最大限程度地表示该数据集的参数θ=[μ,F,G,Σ]。由于我们现在不知道隐藏变量h i 和W ij ,因此还是使用EM算法来进行求解。
在PLDA中,我们计算两条语音是否由说话人空间中的特征h i 生成,或者由h i 生成似然程度,而不用去管类内空间的差异。下面给出得分公式:
以上公式中,η 1 和η 2 分别是两个语音的I-Vector矢量,这两条语音来自同一空间的假设为H s ,来自不同的空间的假设为H d 。其中p(η 1 ,η 2 |H s )为两条语音来自同一空间的似然函数;p(η 1 |H d )、p(η 2 |H d )分别为η 1 和η 2 来自不同空间的似然函数。通过计算对数似然比,就能衡量两条语音的相似程度。比值越高,得分越高,两条语音属于同一说话人的可能性越大;比值越低,得分越低,则两条语音属于同一说话人的可能性越小。
3)基于深度神经网络的技术框架
随着深度神经网络技术的迅速发展,声纹识别技术逐渐采用了基于深度神经网络的技术框架,目前有DNN-iVector-PLDA和最新的End-2-End。
(1)基于深度神经网络的方法(D-Vector)
深度神经网络(Deep Neural Networks,DNN)的特点在于可以从大量样本中学习到高度抽象的音素特征,同时它具有很强的抗噪能力,可以排除噪声对声纹识别的干扰。在论文Deep Neural Networks for Small Footprint Text-Dependent Speaker Verification 中,作者对DNN在声纹识别中的应用做了研究。
DNN经过训练可以在帧级别对说话人进行分类。在说话人录入阶段,使用训练好的DNN用于提取来自最后隐藏层的语音特征。这些说话人特征或平均值即D-Vector,用作说话人特征模型。在评估阶段,为每个话语提取D-Vector与录入的说话人模型相比较进行验证。实验结果表明,基于DNN的D-Vector与常用的I-Vector在一个小的声音文本相关的声纹验证集上相比,具有更良好的性能表现。
深度网络的特征提取层(隐藏层)输出帧级别的说话人特征,将其以合并平均的方式得到句子级别的表示,这种utterance-level的表示即深度说话人向量,简称D-Vector。计算两个D-Vectors之间的余弦距离得到判决打分。类似主流的概率统计模型I-Vector,可以通过引入一些正则化方法(线性判别分析(LDA)、概率线性判别分析(PLDA)等),以提高D-Vector的说话人区分性。此外,基于DNN的系统在噪声环境中更加稳健,并且在低错误拒绝上优于I-Vector系统。最后,D-Vector-SV系统在进行安静和嘈杂的条件分别以14%和25%的相对错误率(Equal Error Rate,EER)优于I-Vector系统。
(2)端到端(End-to-End)深度神经网络
端到端(End-to-End)深度神经网络的特点在于由神经网络自动提取高级说话人的特征并进行分类。随着端到端技术的不断发展,声纹识别技术也进行了相应的尝试,百度在论文 an End-to-End Neural Speaker Embedding System 中提出了一种端到端的声纹识别系统。
Deep Speaker是一个系统,包含一个说话人识别的流程,包括语音前端处理+特征提取网络(模型)+损失函数训练(策略)+预训练(算法)。
图1-14 ResCNN
文中设定了一个ResBlock,如图1-14所示:3×3的卷积核+ReLU激活+3×3的卷积核。ResBlock最后激活函数的输出:a[L+1]=g(z[L+1]+a[L]),残差的核心就体现在这个a[L]中。其中,z[L+1]为输入数据经过块中的(Cov、ReLU、Cov)得到的输出。
关于dim(维度)这一列,开始时输入的语音数据是三维的:(时间帧数×每帧特征维度×通道数)。这里时间帧数根据语音长度可变,每帧特征维度为64,通道数为3(代表Fbank、一阶、二阶)。所以输入维度为时间帧数×64×3。经过第一层conv64-s后:因为卷积层步长2×2,所以时间帧数和每帧特征维度都减半了,特征维度变为32,通道数变为卷积核个数64。32×64=2048,也就是dim的值。所以,这里的dim指的是除去时间维的频率特征维度。训练的时候,使用Triplet loss作为损失函数,如图1-15所示。通过随机梯度下降使得来自同一个人的向量相似度尽可能大,不是同一个说话者的向量相似度尽可能小。
该论文在三个不同的数据集上演示了Deep Speaker的有效性,其中既包括依赖于文本的任务,也包含独立于文本的任务。其中一个数据集UIDs包含大约250 000个说话人,这是目前所知文献中最大规模的。实验表明,Deep Speaker的表现显著优于基于DNN的I-Vector方法,具体实验数据如图1-16所示。
图1-15 Triplet loss
图1-16 Deep Speaker实验结果
比如,在一个独立于文本的数据集上,Deep Speaker在说话人验证任务上达到了1.83%的等错误率(EER),并且在100个随机采样的候选者的说话人识别任务上得到了92.58%的准确度。相比基于DNN的I-Vector方法,Deep Speaker的EER下降了50%,准确度提高了60%。
总结:从声纹识别技术发展综述中,不难看出,声纹识别的研究趋势正在快速朝着深度学习和端到端方向发展,其中最典型的就是基于句子层面的做法。在网络结构设计、数据增强、损失函数设计等方面还有很多的工作要做,还有很大的提升空间。
在人工智能飞速发展的今天,语音识别技术成为很多设备的标配,过去5年间,语音识别的需求逐渐爆发。然而,目前语音识别相关的应用及使用场景仍具有局限性,因此,国内外众多企业纷纷开始探索语音识别的新算法新策略。接下来从技术发展的角度出发,深入分析语音识别技术不同发展阶段的模型构建和优化,以及未来发展趋势。
简单地说,语音识别技术就是将计算机接收到的音频信号转换为相应的文字。语音识别技术从20世纪50年代出现,发展到现在已有半个多世纪的历史。经过多轮技术迭代,语音识别已经从最早的孤立数字识别发展到今天复杂环境下的连续语音识别,并且已经应用到各种电子产品中,为人们的日常生活带来许多便利。
从技术发展的历史来讲,语音识别技术主要经历了三个时代,即基于模板匹配的技术框架、基于统计机器学习的技术框架和最新的端到端技术框架。近年来,得益于深度学习技术突破性的进展,以及移动互联网的普及带来的海量数据的积累,语音识别已经达到了非常高的准确率,在某些数据集上甚至超过了人类的识别能力。
随着识别准确率的提升,研究者们的关注点也从语音识别的准确率渐渐转移到了一些更加复杂的问题上,比如多语种混合语音识别。该问题涉及多语种混合建模、迁移学习和小样本学习等技术。对某些小语种来说,由于无法获得足够多的训练样本,因此如何从小样本数据中构建可靠的语音识别系统成为一个待解决的难题。
接下来将重点介绍语音识别技术不同发展阶段经历的重要技术框架,包括传统的GMM-HMM和DNN-HMM,以及最新的端到端方法等。
1)GMM-HMM/DNN-HMM
从GMM-HMM开始讲起,GMM-HMM基本使用HTK或者Kaldi进行开发。在2010年之前,整个语音识别领域都是在GMM-HMM中做一些文章。
我们的语音通过特征提取后,利用高斯混合模型(Gaussian Mixed Mode,GMM)来对特征进行建模。这里的建模单元是cd-states。建模单元在GMM-HMM时代,或者DNN-HMM时代,基本没有太多创新,大多使用tied triphone,即senone。
2)DNN-HMM
在2010年前后,由于深度学习的发展,整个语音识别的框架开始转变成DNN-HMM。其实就是把原来用GMM对特征进行建模,转换成用神经网络建模。由于神经网络从2010年至今不断发展,各种不同的结构不断出现,也带来了不同的效果。DNN模型可以是纯DNN模型、CNN模型或LSTM模型等。整个模型层只是在GMM基础上进行替换。在这个时代,模型结构整体上都是各种调优,最经典的模型结果就是谷歌的CLDNN模型和LSTM结构。 Context-Dependent Pre-Trained Deep Neural Networks for Large-Vocabulary Speech Recognition 是公认的第一篇研究DNN-HMM的论文。而后,谷歌、微软等公司在这一算法上不断推进。相对传统的GMM-HMM框架,DNN-HMM在语音识别任务上可以获得全面的提升。DNN-HMM之所以取得巨大的成功,通常被认为有三个原因:第一,DNN-HMM舍弃了声学特征的分布假设,模型更加复杂精准;第二,DNN的输入可以采用连续的拼接帧,因而可以更好地利用上下文的信息;第三,可以更好地利用鉴别性模型的特点。
3)端到端语音识别
端到端语音识别是近年来业界研究的热点,主流的端到端方法包括CTC、RNN-T和LAS。
传统的模型训练还是比较烦琐,而且特别依赖HMM这套架构体系。真正脱离HMM的是CTC。CTC在一开始是由Hinton的博士生Grave发现的。CTC框架虽然在学习传统的HMM,但是抛弃了HMM中一些复杂的东西。CTC从原理上就解释得比HMM好,因为强制对齐的问题存在不确定因素或者状态边界有时分不清楚,但HMM必须要求分一个出来。
而CTC的好处就在于,它引入了blank的概念,在边界不确定的时候就用blank代替,用尖峰来表示确定性。所以边界不准的地方就可以用blank来替代,而我们觉得确信的东西用一个尖峰来表示,这样尖峰经过迭代就越来越强。CTC在业界的使用有两个办法,有人把它当作声学模型使用,有人把它当作语音识别的全部。但目前工业界系统都只把CTC当作声学模型来使用,其效果更好。纯端到端的使用CTC进行语音识别效果还是不够好。
这里讲一下Chain模型,Chain模型源自Kaldi。Kaldi当时也想做CTC,但发现在Kaldi体系下CTC效果不好,但CTC的一些思想特别好,后来Dan Povey发现可以在此基础上做一些优化调整,于是就把Chain模型调好了。但在Kaldi体系里,Chain模型的效果的确比原来模型的效果要更好,这个在Dan Povey的论文中有解释。
CTC时代的改进让语音识别技术朝着非常好的方向发展,CTC还有一个贡献就是前面提到的建模单元,CTC把建模单元从原来的cd-states调整为cdphone,或到后面的音节(Syllable),或到后面的字级别(Char)。因此,端到端的语音识别系统中很少使用前面细粒度的建模。目前很多公司的线上系统都是基于LSTM的CTC系统。
CTC在业界用得最成功的论文是 Fast and Accurate Recurrent Neural Network Acoustic Models for Speech Recognition ,论文里探索出来在CTC领域比较稳定的模型结构是5层LSTM的结构。这篇文章从LSTM是单向还是双向,建模单元是cdstate、ciphone还是最终的cdphone等问题进行探究。性能最优的是cdphone的双向LSTM的CTC系统。但是由于双向在线上流式处理不好处理,因此单向LSTM的性能也是可以接受的。
整体CTC阶段,以Alex Graves的论文为主线,论文中从timit小数据集,到最终谷歌上万小时的数据集,一步一步验证了CTC算法的威力,引领了语音界的潮流。CTC是语音界一个比较大的里程碑的算法。
接下来介绍注意力(Attention)机制。注意力机制天然适合Seq2Seq模型,而语音天然就是序列问题。LAS的全称为Listen,Attended and Spell,此模型拉开了纯端到端语音识别架构的序幕。LAS目前应该是所有网络结构里面最好的模型,性能也是最好的,这点毋庸置疑,超过了原来基于LSTM-CTC的Baseline。然而,LAS的主要限制在于它需要接收所有的输入,这对于流式解码来说是不允许的,这一致命的问题影响了这种算法的推进,也引起了众多研究者的关注。当然,最好的办法就是减少Attention对输入的依赖,因此推出了一个叫Mocha的算法,该算法以后有机会再介绍。
CTC算法虽然是一个里程碑式的算法,但CTC算法也有缺陷,比如要求每一帧是条件独立的假设,比如要想性能好,需要外加语言模型。一开始的LAS模型效果也不够好。后来谷歌的研究者们经过各种算法演练,各种尝试,最终提出了流式解码,性能也更好。但是严格来说,谷歌的流式模型也不是LAS模型,如果不考虑流式解码,LAS模型结构肯定是最优的。
RNN-T:和LAS模型类似的还有一个RNN-T算法,它天然适合流式解码。RNN-T也是Grave提出的,此算法在2012年左右就提出来了,但是并没有受到广泛关注,直到谷歌把它运用到Pixel手机里才开始流行起来。RNN-T相比CTC,继承了blank机制,但对原来的路径做了约束。相比CTC,RNN-T的约束更合理,所以整体性能也比CTC好。但是RNN-T较难训练,一般需要把CTC模型当作预训练模型的基础进行训练。此外,RNN-T的显存极易爆炸,因此有很多人在改进显存的应用。谷歌在2020 ICASSP的论文中写着用RNN-T结合LAS,效果超过了基于LSTM-CTC的Baseline方案。
Transformer/Conformer(变换器/整形器):Transformer和Conformer是目前性能最好的模型。Transformer模型是从NLP借鉴到ASR领域的,在ESPnet的论文里证明,Transformer模型在各个数据集上效果比RNN或者Kaldi模型都好。同样,在谷歌的论文 FastEmit: Low-latency Streaming ASR with Sequence-Level Emission Regularization 中,同样在LibriSpeech上,Conformer模型比LSTM或者Transformer模型好。
最后,为什么大家都去研究端到端模型,其实可以从两方面来考虑:第一,端到端模型把原来传统的模型简化到最简单的模型,抛弃了传统的复杂的概念和步骤;第二,其实整个端到端模型用很小的模型结构就可以达到原来几十吉字节模型的效果。谷歌论文的原文里写着:
In this section, we compare the proposed RNN-T+LAS model (0.18G inmodel size) to a state-of-the-art conventional model. This model uses alow-frame-rate (LFR) acoustic model which emits contextdependent phonemes(0.1GB), a 764k-word pronunciation model (2.2GB), a 1st-pass 5-gramlanguage-model (4.9GB), as well as a 2nd-pass larger MaxEnt language model(80GB). Similar to how the E2E model incurs cost with a 2nd-pass LASrescorer, the conventional model also incurs cost with the MaxEnt rescorer. Wefound that for voice-search traffic, the 50% computation latency for the MaxEntrescorer is around 2.3ms and the 90% computation latency is around 28ms. InFigure 2,we compare both the WER and EP90 of the conventional and E2E models. The figure shows that for an EP90 operating point of 550ms or above, the E2Emodel has a better WER and EP latency tradeoff compared to the conventionalmodel. At the operating point of matching 90% total latency (EP90 latency + 90%2nd-pass rescoring computation latency) of E2E and server models, Table 6 showsE2E gives a 8% relative improvement over conventional, while being more than400-times smaller in size.
但端到端模型真正与业务相结合时,遇到的问题还是很明显的,比如不同场景下模型如何调整?遇到一些新词的时候LM如何调整?针对此类问题,学术界和工业界都在寻找新的解决方案。
除语音外,图像和视频同样是多媒体数据的重要表现形式。从图像和视频中提取有用的信息对数据科学领域来说非常重要。比如,通过人脸识别或者物体识别,可以将包含相同人脸或者物体的照片进行归类保存。通过内容识别,可以有效地判断视频中包含的场景,从而有效地对视频进行管理。对图像和视频数据的处理又叫作视觉分析。
计算机视觉(Computer Vision,CV)是一门综合性的学科,是极富挑战性的重要研究领域,目前已经吸引了来自各个学科的研究者参加到对它的研究之中。本小节梳理计算机视觉技术的基本原理和发展历程,针对其当前主要的研究方向及落地应用情况进行深入剖析,并分享百分点科技在该领域的技术研究和实践成果。
计算机视觉是人工智能的一个领域,它与语音识别、自然语言处理共同成为人工智能最重要的三个核心领域,也是应用最广泛的三个领域,计算机视觉使计算机和系统能够从数字图像、视频和其他视觉输入中获取有意义的信息,并根据这些信息采取行动或提出建议。如果人工智能使计算机能够思考,那么计算机视觉使它们能够看到、观察和理解。计算机视觉的工作原理与人类视觉大致相同,只是人类具有领先优势。人类视觉具有上下文生命周期的优势,可以训练如何区分对象,判断它们有多远、它们是否在移动,以及图像中是否有问题等情况。计算机视觉训练机器执行这些功能,不是通过视网膜、视神经和视觉皮层,而是用相机、数据和算法,能够在更短的时间内完成。因为经过培训以检查产品或观察生产资产的系统可以在一分钟内分析数千个产品或流程,发现不易察觉的缺陷或问题,所以它可以迅速超越人类的能力。
计算机视觉需要大量数据,它一遍又一遍地运行数据分析,直到辨别出区别并最终识别出图像。例如,要训练计算机识别咖啡杯,需要输入大量咖啡杯图像和类似咖啡杯的图像来学习差异并识别咖啡杯。现在一般使用深度学习中的卷积神经网络(Convolutional Neural Networks,CNN)来完成这一点,也就是说最新的科研方向和应用落地绝大多数都是基于深度学习的计算机视觉的。
CNN通过将图像分解为具有标签或标签的像素来帮助机器学习或深度学习模型“观察”,使用标签来执行卷积(对两个函数进行数学运算以产生第三个函数)并对其“看到”的内容进行预测。神经网络运行卷积并在一系列迭代中检查其预测的准确性,直到预测开始成真,然后以类似于人类的方式识别或查看图像。就像人类在远处观察图像一样,CNN首先识别硬边缘和简单形状,然后在运行其预测的迭代时填充信息。
60多年来,科学家和工程师一直在努力开发让机器查看和理解视觉数据的方法。实验始于1959年,当时神经生理学家向一只猫展示了一系列图像,试图将其大脑中的反应联系起来。他们发现它首先对硬边或线条做出反应,从科学上讲,这意味着图像处理从简单的形状开始,比如直边。
大约在同一时期,第一个计算机图像扫描技术被开发出来,使计算机能够数字化和获取图像。1963年达到了另一个里程碑,当时计算机能够将二维图像转换为三维形式。在1960年代,人工智能作为一个学术研究领域出现,这也标志着人工智能寻求解决人类视觉问题的开始。
1974年引入了光学字符识别(Optical Character Recognition,OCR)技术,该技术可以识别以任何字体或字样打印的文本。同样,智能字符识别(Intelligent Character Recognition,ICR)可以使用神经网络破译手写文本。此后,OCR和ICR进入文档和发票处理、车牌识别、移动支付、机器翻译等常见应用领域。
1982年,神经科学家David Marr确定视觉是分层工作的,并引入了机器检测边缘、角落、曲线和类似基本形状的算法。与此同时,计算机科学家Kunihiko Fukushima开发了一个可以识别模式的细胞网络。该网络称为Neocognitron,在神经网络中包含卷积层。
到2000年,研究的重点是物体识别,到2001年,第一个实时人脸识别应用出现。视觉数据集如何标记和注释的标准化出现在2000年。2010年,李飞飞所带领的团队为了提供一个非常全面、准确且标准化的可用于视觉对象识别的数据集创造出了ImageNet。它包含跨越1000个对象类别的数百万个标记图像,并以此数据集为基础每年举办一次软件比赛,即ImageNet大规模视觉识别挑战赛(ILSVRC),为当今使用的CNN和深度学习模型奠定了基础。2012年,多伦多大学的一个团队将CNN输入图像识别竞赛中。该模型称为AlexNet,它是由Yann LeCun于1994年提出的Lenet-5衍变而来的,显著降低了图像识别的错误率。第二名TOP-5错误率为26.2%(没有使用卷积神经网络),AlexNet获得冠军,错误率为15.3%。在这一突破之后,错误率下降到只有几个百分点(到2015年分类任务错误率只有3.6%)。
人类应用计算机视觉解决的最重要的问题是图像分类、目标检测和图像分割,按难度递增,其中图像分割主要包含语义分割、实例分割、全景分割。
在传统的图像分类任务中,我们只对获取图像中存在的所有对象的标签感兴趣。在目标检测中,我们更进一步,尝试在边界框的帮助下了解图像中存在的所有目标以及目标所在的位置。图像分割通过尝试准确找出图像中对象的确切边界并将其提升到一个新的水平,以下用图例简单地介绍它们是如何工作的。
1)图像分类
图像分类(Image Classification)识别图像中存在的内容,即图像所属类别,通常结果为一个带有概率的分类结果,一般取概率最高的类别为图像分类结果。
2)目标检测
目标检测(Object Detection)将物体的分类和定位合二为一,识别图像中存在的内容和检测其位置。
3)图像分割
语义分割(Semantic Segmentation)是将图像中属于某个类别的每个像素进行分类的过程,因此可以将其视为每个像素的分类问题。
实例分割(Instance Segmentation)是目标检测和语义分割的结合,在图像中将目标检测出来,然后对每个像素打上标签,实例分割与语义分割的不同之处在于它只为检测出的目标像素打上标签,不需要将全部像素打上标签,并且语义分割不区分属于同类别的不同实例,实例分割需要区分同类别的不同实例,为每个目标打上id标签(使用不同颜色区分不同的人和车)。
全景分割(Panorama Segmentation)是语义分割和实例分割的结合,即要将图像中的每个像素打上类别标签,又要区分出相同类别中的不同实例。
图像分类和目标检测是很多计算机视觉任务背后的基础,接下来将简单地说明一下它们的运行原理。
1)图像分类的运行原理
图像分类的实现主要依靠基于深度学习的卷积神经网络。卷积神经网络是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks,FNN),是深度学习的代表算法之一。卷积神经网络具有表征学习(Representation Learning)能力,能够按其阶层结构对输入信息进行平移不变分类(Shift-Invariant Classification),因此也被称为平移不变人工神经网络(Shift-Invariant Artificial Neural Networks,SIANN)。
那么人工神经网络(Artificial Neural Networks,ANN)又是什么呢?它是一种模仿生物神经网络(动物的中枢神经系统,特别是大脑)结构和功能的教学模型或计算模型,用于对函数进行估计或近似。人工神经网络由大量的人工神经元相互连接进行计算,大多数情况下人工神经网络能在外界信息的基础上改变内部结构,是一种自适应系统。
典型的人工神经网络具有以下三个部分。
了解完人工神经网络后,接下来继续了解卷积神经网络,它分为输入层、隐藏层和输出层,具体如图1-17所示。
图1-17 卷积神经网络原理图
输入层接收的是图像的三维数组,数组的形状大小为图像宽度、图像高度、图层数,数组的值为每一个图像通道逐个像素点的像素值。隐藏层主要包括卷积层(Convolutional Layer)、池化层(Pooling Layer)和全连接层(Fully-Connected Layer)。卷积层的功能是对输入数据进行特征提取,其内部包含多个卷积核,组成卷积核的每个元素都对应一个权重系数和一个偏差量,类似于一个前馈神经网络的神经元。卷积层内每个神经元都与前一层中位置接近的区域的多个神经元相连,区域的大小取决于卷积核的大小,也称作感受野,其含义可类比视觉皮层细胞的感受野。卷积核在工作时会有规律地扫过输入特征,在感受野内对输入特征做矩阵元素乘法求和并叠加偏差量。卷积层还包括卷积参数和激励函数,使用不同的参数或函数,可以用来调节卷积层卷积后获得的结果。在卷积层进行特征提取后,输出的特征图会被传递至池化层进行特征选择和信息过滤。池化层包含预设定的池化函数,其功能是将特征图中单个点的结果替换为其相邻区域的特征图统计量,可降低图像参数,加快计算,防止过拟合。卷积神经网络中的全连接层等价于传统前馈神经网络中的隐藏层(或称为隐含层)。全连接层位于卷积神经网络层隐藏层的最后部分,并只向其他全连接层传递信号。特征图在全连接层中会失去空间拓扑结构,被展开为向量并通过激励函数。在一些卷积神经网络中,全连接层的功能可由全局均值池化(Global Average Pooling)取代,全局均值池化会将特征图每个通道的所有值取平均,可降低计算量,加快运行速度,防止过拟合。卷积神经网络中输出层的上游通常是全连接层,因此其结构和工作原理与传统前馈神经网络中的输出层相同。对于图像分类问题,输出层使用逻辑函数或归一化指数函数(Softmax Function)输出分类标签。
卷积就像是拿扫描仪(滤波器,Filter)扫描图片,扫描仪扫完的结果一个一个压在一起,后面再用扫描仪接着扫,这里只展示了一个滤波器,实际上图片是有厚度的,也就是通道数(Channel),有图层,同样滤波器也是有厚度的,会获取不同通道的特征图。
图像分类网络的发展经历了LeNet、AlexNet、GoogleNet、VGG、ResNet、MobileNet、EfficientNet等阶段,其中由何恺明提出的ResNet(残差神经网络)对近几年的图像分类乃至计算机视觉发展起到了至关重要的作用。ResNet的产生简单来说就是为了更好地获取特征,人们希望使用更深层次的网络来实现,但是随之而来会出现很多问题,如梯度弥散(Vanishing Gradient)、梯度爆炸(Exploding Gradient)等,还会出现网络的退化,反向传播(Back Propagation)时无法有效地将梯度更新到前面的网络层,导致前面的网络层无法正确更新参数,实际上超过20层的网络的效果反而不如之前,于是何恺明提出了ResNet来解决这个问题。
由于ResNet有残差连接(Skip Connection),梯度能够畅通无阻地通过各个残差块(Res Blocks),使得深层次的卷积神经网络也能够正常有效地运行。
2)目标检测的运行原理
目标检测可分为两个关键的子任务:目标分类和目标定位。目标分类任务负责判断输入图像或所选择图像区域(Proposals)中是否有感兴趣类别的物体出现,输出一系列带分数的标签表明感兴趣类别的物体出现在输入图像或所选择图像区域中的可能性。目标定位任务负责确定输入图像或所选择图像区域中感兴趣类别的物体的位置和范围,输出物体的边界框、物体中心或物体的闭合边界等,通常使用边界框(Bounding Box)来表示物体的位置信息。
算法模型大体可以分成两大类别:
目前目标检测在落地应用中主要还是以One-Stage的YOLO系列为主,它既能够充分地保证项目运行的实时性,又能保证较高的模型准确率。其中YOLOV3可谓是目标检测发展的里程碑。YOLOV3的主干网络为Darknet53,主要由不同尺寸参数的卷积层和残差块组成,并进行多尺度融合训练,能够适应更多不同尺寸大小的图片,拥有较快的运行速度。现在广泛应用的YOLOV4/V5/X都是由YOLOV3衍变而来的。
随着计算机视觉技术的不断发展,除图像分类、目标检测、图像分割等主要方向外,还有很多新的技术不断产生,生成式对抗网络(Generative Adversarial Networks,GAN)就是其中一个非常有代表性的技术。GAN是一种深度学习模型。模型通过框架中(至少)两个模块:生成模型(Generative Model)和判别模型(Discriminative Model)的互相博弈学习产生相当好的输出。原始GAN理论上并不要求G(Generator)和D(Discriminator)都是神经网络,只需要能拟合相应生成和判别的函数即可。但实际应用中一般使用深度神经网络作为G和D。一个优秀的GAN应用需要有良好的训练方法,否则可能由于神经网络模型的自由性而导致输出不理想。
GAN的基本原理其实非常简单,这里以生成图片为例进行说明。假设我们有两个网络:G和D。正如它的名字,它们的功能分别是:G是一个生成图片的网络,它接收一个随机的噪声z,通过这个噪声生成图片,记作G(z)。D是一个判别网络,用于判别一幅图片是不是“真实的”。它的输入参数是x,x代表一幅图片,输出D(x)代表x为真实图片的概率,如果为1,就代表100%是真实的图片,而输出为0,代表不可能是真实的图片。在训练过程中,生成网络G的目标就是尽量生成真实的图片来欺骗判别网络D。而D的目标就是尽量把G生成的图片和真实的图片区分开来。这样,G和D构成了一个动态的“博弈过程”。最后博弈的结果是什么?在最理想的状态下,G可以生成足以“以假乱真”的图片G(z)。对于D来说,它难以判定G生成的图片究竟是不是真实的,因此D(G(z))=0.5。这样我们的目的就达成了:我们得到了一个生成式的模型G,它可以用来生成图片。
由GAN和GAN衍生的网络在近几年也迸发出许多创新性的应用,例如风格迁移、图像修复、图像生成等。下面这组图展示了使用风格迁移技术完成时间风格迁移、智能上色、人脸风格迁移等功能。
计算机视觉是目前人工智能应用中最为广泛与普遍的,且早已深入日常生活与工作的多方面,典型的应用如生物特征识别中的人脸识别。人脸识别已经广泛应用在人证比对、身份核验、人脸支付、安防管控等各个领域。
现在主流的人脸识别技术多使用黄种人和白种人的面部特征进行模型开发和训练,并且样本中的光照条件良好,因此可以从图片中较好地识别和分析黄种人和白种人的人脸,但是,由于深肤色(如黑人)人脸图像的纹理特征较不明显,并且反光较强,因此现有的人脸识别方法对深肤色人脸的识别和分析存在缺陷,尤其无法应对中偏重黑人人脸光照不佳的情况,不能在视频和照片中很好地识别和分析深肤色人脸,也就是说,现有的人脸识别方法很难对深肤色人脸的特征进行有效分析和提取,从而导致对深肤色人脸的识别准确率较低。
我们采用了创新的方法,如增加拉普拉斯变换融合到图像图层等,采用基于深度学习的图像识别技术较好地解决了深肤色人种人脸识别的问题。主要流程如下。
1)人脸检测
人脸检测和关键点检测步骤采用了级联结构的卷积神经网络,可以适应环境变化和人脸不全等问题,且具有较快的检测速度。该方法规避了传统方法劣势的同时,兼具时间和性能两个优势。一幅图片中绝大部分区域容易区分出非人脸区域,只有少部分区域包含人脸和难以区分的非人脸区域。为加快检测速度,我们设计使用三级分类器,使得性能逐级提高。一般算法中只包含一个回归器,如果候选框与真实人脸框相差较大,则无法进行有效的回归。我们使用多级回归器,每一级回归器皆可让结构更接近真实人脸框,在多级回归后结果更准确。为实现对人脸/非人脸分类、人脸框回归、人脸关键点回归等预测,我们设计出基于多任务的深度学习模型。多任务学习提升了各个子任务的性能,达到1+1大于2的效果。在实现多任务共享深度学习模型参数的同时,较大地减少了模型运算量,大幅提高了人脸检测速度。
2)人脸识别
特征提取步骤采用了深层次的残差卷积神经网络,且具有优化的损失函数,对比传统方法可以更快、更好地提取人脸特征,增加类间距,减少类内距,获得更好的人脸识别效果。该技术在残差卷积神经网络的基础上增加了更多的Shortcut网络连接与Highway卷积层连接,保证了特征生成网络中能够兼具挖掘出人脸样本图像中的浅层与深层纹理特征,并将多重纹理特征进行组合,生成可分性更强的人脸特征,增强人脸识别的准确率。同时,在特征生成网络中加入了多尺度融合机制,在卷积层中加入了多尺度视觉感受,保证了同一人在多方位图片中的人脸特征空间距离接近,有效提升同一分类的图像产生更好的聚类,进而提高人脸识别的准确率。
针对不同肤色人种的人脸识别,尤其是深肤色人种,我们使用提取纹理,通过对原始人脸图像进行拉普拉斯变换后得到的变换人脸图像描述人脸图像中的纹理强度,因此,由该原始人脸图像及该变换人脸图像进行拼接后得到的四通道人脸图像,相较于原始人脸图像来说,人脸纹理特征较明显,这样在基于深肤色人脸的四通道人脸图像进行特征提取时,可以更高效地获取人脸图像的纹理特征,进而可以提高深肤色人脸识别的准确率,业务流程示例如图1-18所示。
图1-18 人脸识别业务流程示例
计算机视觉在光学字符识别领域的应用同样很广泛,如文档识别、证件识别、票据识别、视频文字识别、车牌识别等。车牌识别即识别图像中包含车牌的车牌号。基于深度学习的方法获取车牌在图像中的区域并进行光学文字识别。
车牌检测和关键点检测步骤采用了级联结构的卷积神经网络,可以适应车牌的不同倾斜角度、环境变化和车牌不全等问题,还能够将倾斜的车牌进行矫正对齐,方便车牌号识别,且具有较快的检测速度。车牌号识别采用深层卷积神经网络并加以连接式时序分类损失函数,可准确地识别不定长文字序列,具有较强的泛化性。同时,我们还采用了细粒度识别技术,能够精确地识别车型,甚至能够区分具体车型,如红旗H9。
总结一下,如今计算机视觉已经广泛应用于人们日常生活的众多场景中。随着深度学习的飞速发展,计算机视觉融合了图像分类、目标检测、图像分割等技术,已在工业视觉检测、医疗影像分析、自动驾驶等多个领域落地应用,为各行各业捕捉和分析更多信息。
数据科学是一门研究如何从数据中提取有用信息的学科。而文本分析则是数据科学领域中一个非常重要的分支,可以帮助我们从大量的文本数据中提取有用的信息,了解文本数据中隐藏的洞见,并发现趋势和模式。数据科学和文本分析的结合能够让我们更好地利用文本数据中的信息,做出更加准确的决策。
数据科学和文本分析密不可分,文本数据是人类生产和交流信息的主要方式之一,随着数字化和互联网技术的发展,海量的文本数据不断涌现。数据科学旨在从数据中提取价值信息,以支持决策和创新。文本分析是数据科学中的一个重要领域,它致力于利用自然语言处理和机器学习技术对文本数据进行处理、分析和挖掘,从中提取有用的信息。
数据科学和文本分析的关系也可以从技术的角度来看。数据科学需要处理大量的数据,文本数据是其中一个重要的组成部分,但与结构化数据相比,文本数据的处理更加复杂和困难。文本数据具有天然的不确定性、模糊性和主观性,它们往往需要经过预处理、特征提取、模型训练和评估等多个环节才能够得到有用的信息。数据科学家需要掌握自然语言处理、机器学习和深度学习等多种技术,才能够有效地处理文本数据。
本书中文本分析的重要技术主要介绍预训练模型、多语种文本分析、文本情感分析、文本机器翻译、文本智能纠错等。
在文本分析技术中,预训练模型是一种非常重要的技术手段。随着深度学习技术的不断发展,预训练模型已经成为自然语言处理领域的热门研究方向之一。本书中将介绍文本分析技术中预训练模型的相关内容。预训练模型是指在大规模语料库上进行无监督训练,从而学习出一定的语言表示,并将其作为下游自然语言处理任务的初始化参数或特征。预训练模型的思想是将大规模数据的统计规律内化到模型的权重参数中,通过对预训练模型进行微调,可以使得模型在目标任务上表现出更好的性能。
在文本分析技术中,预训练模型主要应用在两个方面:语言模型和表示学习。语言模型是指给定一个文本序列,预测下一个单词或者生成一段新的文本。通过预训练语言模型,可以学习到一个通用的语言表示,这个表示可以用于下游任务,例如文本分类、命名实体识别等。表示学习是指学习文本的向量表示,通过预训练模型可以学习到高质量的文本表示,这些表示可以用于相似度计算、聚类分析等任务。
预训练模型的应用越来越广泛,当前比较热门的预训练模型有BERT(Bidirectional Encoder Representations from Transformers)、GPT(Generative Pre-trained Transformer)、RoBERTa(Robustly Optimized BERT Pre-Training Approach)等。BERT是一种双向Transformer编码器,通过对大量语料进行预训练,得到了一个通用的语言表示。GPT则是一种单向Transformer编码器,它可以生成新的文本序列。RoBERTa是在BERT的基础上进行改进,通过更大规模的语料和更长的训练时间来提高模型的性能。预训练模型是文本分析技术中的重要手段之一,它能够学习到通用的语言表示,并可以用于下游任务的初始化和特征提取。当前已经有很多高质量的预训练模型可供使用,可以根据实际需求进行选择和微调,以得到更好的效果。
多语种文本分析是指对多种语言的文本进行分析和处理的技术。随着全球化的不断深入和国际交流的增多,多语种文本分析变得越来越重要。多语种文本分析需要处理不同语言之间的差异和变化。语言之间的差异包括语法、词汇和发音等方面,这些都需要考虑到。因此,多语种文本分析需要使用自然语言处理技术来解决这些问题。自然语言处理技术可以处理语言中的语法和词汇问题,同时可以进行文本分类、关键词提取和情感分析等任务。
多语种文本分析在很多领域都有着广泛的应用。在商业领域中,多语种文本分析可以帮助企业了解不同语言用户的需求和反馈,从而改进产品和服务。在政府领域中,多语种文本分析可以帮助政府了解不同语言区域的民意和情况,从而制定更好的政策和措施。在文化领域中,多语种文本分析可以帮助人们了解不同语言的文化背景和特点,从而促进文化交流和沟通。
多语种文本分析技术在现代社会中具有重要的作用和意义。随着全球化的不断发展,这种技术将变得越来越重要,并且将在更多的领域得到应用和发展。
情感分析是文本分析领域的一项重要技术,旨在通过自然语言处理和机器学习等技术手段识别和分析文本中的情感色彩,如正面、负面或中性等情感倾向。情感分析技术被广泛应用于社交媒体分析、品牌管理、市场调研等领域,以帮助企业了解消费者对其品牌或产品的情感倾向,从而制定更有效的营销策略和改进方案。
在社交媒体分析领域,情感分析技术可以帮助企业快速了解消费者对其品牌或产品的看法,从而及时回应消费者的需求和投诉。例如,一些社交媒体监测工具可以通过对社交媒体上用户的评论和反馈进行情感分析,帮助企业发现并解决用户的不满意,提高用户满意度和口碑。
在品牌管理领域,情感分析技术可以帮助企业了解其品牌在公众心目中的形象和评价,从而进行品牌定位和形象塑造。例如,在一些消费品牌的宣传和广告中,情感分析技术可以帮助企业更好地了解消费者的需求和情感倾向,制定更有效的广告策略和宣传口径,提高品牌形象和知名度。
在市场调研领域,情感分析技术可以帮助企业了解其产品在市场上的表现和评价,从而进行产品改进和创新。例如,在一些产品上市前,企业可以通过情感分析技术对市场上的相关产品进行评价和比较,找到自身的优势和不足,从而进行产品的改进和创新,提高市场竞争力。
虽然情感分析技术在文本分析领域具有广泛的应用前景和优势,但它也面临一些挑战和限制。例如,情感分析技术需要对不同的语境和文化背景进行适配和调整,以保证情感分析的准确性和有效性;此外,情感分析技术也需要不断地进行模型训练和优化,以适应不断变化的语言和文本环境。尽管如此,随着技术的不断发展和进步,相信情感分析技术在未来将会有更为广泛和深入的应用。
机器翻译是文本分析技术中的一项重要技术,它能够将一种自然语言翻译成另一种自然语言。这项技术广泛应用于多语种文本分析、跨语言信息检索、国际化网站和应用程序等领域。
文本机器翻译早期采用的是基于规则的方法,但由于规则过于复杂,难以覆盖所有语言规则,导致翻译质量不佳。近年来,随着深度学习技术的发展,文本机器翻译逐渐采用基于神经网络的方法,其中以Transformer模型最为知名。Transformer模型在机器翻译中的应用已经取得了极大的成功。该模型利用自注意力机制来学习源语言和目标语言之间的关系,避免了基于规则的传统翻译方法中所面临的规则复杂、翻译不准确等问题,进一步提高了翻译质量。
机器翻译技术的应用非常广泛,它可以帮助企业、政府机构和个人快速翻译各种文本,例如新闻报道、政策文件、商业合同、用户手册、社交媒体帖子等。机器翻译技术还可以帮助企业实现全球化,扩大市场,降低翻译成本,提高效率。此外,机器翻译技术还可以与其他文本分析技术结合使用,例如情感分析、实体识别和关系抽取等,以提高翻译质量和准确性。
机器翻译技术在文本分析领域具有重要的应用价值,它可以帮助人们更快速、更准确地理解和传递信息。随着人工智能和自然语言处理技术的不断发展,机器翻译技术的性能和应用范围也将不断扩大。未来,机器翻译技术将更加智能化,能够理解更复杂的语言结构和上下文,并能够根据不同的应用场景进行个性化的翻译。因此,机器翻译技术将成为未来文本分析领域不可或缺的一部分。
文本智能纠错是指利用自然语言处理技术自动检测文本中的错误,并进行修正的技术。这项技术在许多场景下都具有重要意义,比如在撰写邮件、新闻稿、论文等文本时,错误的出现会影响读者对文本的理解和信任度。智能纠错能够对文本中出现的语法错误、拼写错误、语义错误等进行自动纠错。
智能纠错技术的应用场景非常广泛。在商业领域,智能纠错技术可以帮助企业提高客户服务质量、改善用户体验等。例如,在在线客服系统中,智能纠错技术可以快速地识别并自动纠正用户输入的问题描述,减少用户的烦恼和困扰。在学术研究中,智能纠错技术可以帮助研究人员进行文本数据的分析和挖掘,发现其中隐藏的信息和规律。
智能纠错技术相比传统的人工纠错方式具有很多优势。首先,智能纠错技术可以大幅度提高纠错的效率,尤其是在大规模文本处理方面。其次,智能纠错技术能够提高纠错的准确性,避免了人工纠错中的主观因素和误差。
当前,利用预训练模型来实现文本智能纠错的方法已经被广泛应用。例如,Google在2018年推出的BERT模型中加入了一个任务——掩码语言模型(Masked Language Model,MLM),通过该任务可以让模型自动学习纠错的能力。同时,一些基于BERT的文本智能纠错工具,如Microsoft的Editor和Grammarly等,也在市场上广受欢迎。
文本分析技术已经成为数据科学中不可或缺的一部分。随着技术的不断进步,文本分析的应用场景也越来越广泛。预训练模型、多语种文本分析、文本情感分析、文本机器翻译、文本智能纠错等技术的不断发展为文本分析的应用提供了强有力的支持和推动。随着人工智能技术的不断发展,文本分析技术还将有更广泛的应用和更深入的研究。
在数据科学的实践中,行业客户对知识图谱的应用诉求愈发强烈,核心需求是将行业数据知识化,并通过搜索、推荐、问答,以及用知识辅助进行更加智能的决策。因此,如何将结构化和非结构化数据有效地治理起来,进行数据和知识挖掘,提取当中有价值的信息,并以可视化分析为政府和企业决策提供支持,成为当今亟待解决的问题。知识图谱作为大数据知识工程的典型代表,知识图谱技术近年来取得了长足进步,并在一系列实际应用中取得了显著效果。知识图谱之所以备受关注是因为业界普遍认为知识图谱是实现机器认知智能的基础。
但随着应用的深化,知识图谱的落地过程单靠其所代表的知识智能本身这套技术体系和范式已经难以解决很多问题:一是数据获取和治理困难;二是在知识层面,小样本、低资源情况下知识的表示和获取代价仍然非常大;此外,获取知识之后,在应用、服务能力方面也存在很多挑战。因此,未来破题的关键在于要突破以知识图谱为代表的知识智能的边界,向认知智能这样的智能新形态发展。认知智能作为数据智能、知识智能的融合创新产物,将是知识图谱等知识工程技术发展的必然归宿。近些年,人工智能逐渐从感知智能向认知智能发展,知识图谱则是实现认知智能的关键技术方法,在构建出知识图谱后,可以实现各种智能场景应用。未来知识图谱一定会深入各行各业,只有掌握通用的人工智能技术,并将技术和业务需求对应起来,才能真正发挥出知识图谱的价值,解决行业问题。
目前,半自动化结合人工是业内构建知识图谱所采用的主流方式,从长远来看,完全靠机器自动化,一点都不投入人工,目前不现实,也不可能存在。现在有很多知识图谱构建工程化的工具,在解决如何高效地抽取实体关系,如何做出映射、如何融合,以及如何通过预训练模型减少需要标注数据的数量等问题方面,只能说随着技术的发展和工具的发展,人工的工作量会逐渐降低,人工的效率会越来越高。但到什么时候,采用机器构建的比例比人工构建更多,现在还不好衡量,这是一个逐渐发展的过程。
另外,“人在闭环”是认知智能行业落地的必由之路,即在知识图谱构建和应用的过程中,人必须参与。必须要有人在,这是一个责任问题。机器适合做数据密集型和经验密集型的工作。而人适合做价值判断型或情感密集型的工作。任何一个在现实中有意义的业务,它的价值一定来自人。如果没有人的话,这个东西是没有价值的,所以不可能离开人。当前,已经进入一个从数据到知识的“智变”时代,随着大数据、知识图谱、自然语言处理(Natural Language Processing,NLP)等数据智能技术的进一步成熟,数据中的价值将不断被挖掘利用,帮助人们做出合理决策。