1 总体设计
根据学校人工智能实验室理念架构,按照模块化的设计思想,整个实训实验室结构规划如下:
在120人规模的实验室室建设中,使用先进的多租户技术将实验室分为30个实验组(每组4人),并为授课教师提供独立实验环境,除管理学生实验内容外,可同时进行科研项目开发。
实验室依据业务属性,共分为3个功能区:
1)实验区:学生学习人工智能实验室课程内容和实际操作实验课程的区域,根据每组学生数量配置终端(PC);
2)实验设备区:放置实验室实验设备的区域,包括服务器、网络设备和软件,所有的实验内容均运行在该实验设备区内;
3)实验管理区:老师管理区和演示区,负责演示实验课程内容并对所有实验组的实验设备做监控和管理。
学生可分为不同实验小组进行实战练习,每个小组内不超过5人,集群可将计算、存储资源隔离,使实验小组间底层隔离,互不影响;教师区实验设备性能较高,除带领学生外,还可承接校内大数据集中、应用开发等项目。
2 人工智能一体机方案
服务器将按照学校要求提供对应配置的人工智能一体机,提供企业级机架式(非刀片式)服务器,模块化架构,可堆叠,优先考虑高密度服务器。通过软硬件一体化装置实现计算、存储、网络、虚拟化和应用融合的紧密集成的平台。
每个独立物理计算节点的技术要求如下:
1、系统扩展性和扩容性:采用横向扩展的架构,可随着节点的增加而使得CPU、内存、存储、网络等均在一种平衡模式上增加,确保扩展没有瓶颈。支持在线升级,保证随数据存储和计算需求的增长而平滑升级。平台由多个单机组成的大数据集群架构,所有组件可选配万兆以太网或者Infiniband网络或者千兆以太网互联。为保证平台7×24小时连续可用性,系统必须支持在线扩展,系统扩展时不需要停机,系统扩展时,平台整体性能保持基本同比增长
2、关键应用的高可用性:采用工程化设计,可提供高级别的高可用性。所有故障类型均可得到防护,包括磁盘、服务器、网络等简单故障,以及站点故障和人为失误等复杂故障。拥有完整的冗余的硬件保护,包括冗余的供电电源、冗余的风扇等。
3、支持PCIE-SSD闪存加速:允许用户将频繁访问的表数据保存在SSD中缓存中,同时不常访问的数据仍保存在磁盘中。这种方式兼具SSD的高性能与磁盘的大容量和低成本。允许用户任意指定数据库表、分区和段的数据驻留在SSD上。在SSD闪存中实现列式存储,更进一步提高SSD闪存加速效果,在TPC-DS基准测试中性能提升10倍以上。
4、通过中断优化、内核优化、BIOS优化、NUMA优化实现分布式处理能力提升。
3 人工智能教学平台方案
教学平台为整个系统提供教学、教务管理功能,提供班级、教师、学生的管理权限、课程计划、学习记录、学习成绩、实验报告等管理功能,系统采用B/S架构,兼容主流浏览器,如谷歌、火狐等。教学平台主要功能如下:
3.1 教学管理功能
支持管理员、班主任、教师、学生等多种角色。
支持学籍管理,包括:班级的增删、编辑;教师的增删、编辑;学生的增删、编辑。
3.1.1 班级管理
提供对专业下属班级的增加、删除、修改、查询功能。
3.1.2 学生管理
提供对班级内学生的管理,学生内容包含姓名、学号、所属班级、所属专业、联系手机、登录次数等内容。
3.1.3 交流日志查询
对实训机分享交流的内容进行查询,包含交流IP、相关学员、相关老师、实训机编号、交流内容等内容。
3.1.4 成绩管理
对于学习中心在线学习的学习考核成绩进行管理,包含查询及删除等功能。
3.1.5 考试管理
支持考试管理,包括:增删、编辑试题;发布班级考试通告;在线考试,并自动完成批阅(客观题);查询考试成绩及正确答案;生成考试报表,并可查看及下载。
3.2 在线学习功能
3.2.1 开通课程计划
对于学习开课计划的字段内容包含计划名称、授课讲师、授课时间段、开通状态、允许申请周期,允许申请人数等,功能提供绑定课程计划相关实训平台课程、授课助教、云试验机绑定、实验任务绑定等功能。
3.2.2 学习记录功能
提供每个学生在学习中心平台内学习课程的学习记录,包含日期、计划、课程、章节、学习IP等。
3.2.3 学习行为报表
对所有学生的课程学习记录进行统计,包含个体统计、班级统计、全体统计等。
3.3 在线实训功能
3.3.1 学生实训操作
提供学生根据姓名、学号、密码登录系统进行实训操作,学生只需安装浏览即可进行试验任务操作;提供实训课程在线学习功能、试验机在线操作、试验报告提交、试验机界面截图、记录课程学习时长等。
3.3.2 测验习题管理
提供对课程相关的习题管理,题型包含单选、多选、判断题等类型,对习题进行增、删、改、查操作。
3.4 后台管理功能
3.4.1 分级权限功能
系统分为总管理员、助教等二级管理角色,总管理员进行管理所有的功能点,助教可以进行班级管理、学生管理、开课计划制作、试验机远程协助等。
3.4.2 试验机桌面分享
提供试验机桌面分享功能,如学生在学习、操作云试验机的过程中,有问题可以向老师发起协助请求,助教在收到请求时,可以远程访问学生的试验机,并指导如何操作。
3.4.3 平台集群架构支撑
平台基于x86服务器本地的计算与存储资源,分布式存储,计算集群可以动态调整,从数台到数千台之间弹性扩展,按需构建应用。支持VMWare、HyperV等虚拟化软件。
集成MapReduce、Spark、Storm、Tez、Sparkstreaming、Flink 等多种计算框架,利用yarn资源管理做统一管理,可在同一份数据集上运行多种计算,支持离线计算、实时计算、流式计算、全文检索、数据挖掘等数据应用能力。
3.4.4 平台集群管理功能
平台采用B/S架构提供实训机集群管理,对实训室所属服务器进行新增、删除、备份、恢复及迁移功能。
集群基于分布式管理,提供大数据集群管理系统,功能包含Hadoop、Hive、HBase、Sqoop、Flume、kafka、Spark、Scala等节点部署及管理,提供实时监控集群的CPU、内存、硬盘等使用率及相关信息,可以对管理节点、计算节点进行启动、停止等操作管理。
平台具有灵活性和可管理性。管理员可以对试验平台内的虚拟资源创建、监控、资源调整、快照和迁移等进行灵活的调整,方便用户得到足够的计算和存储资源。
4 人工智能实验系统方案
4.1 系统方案
4.1.2 容器化部署
为了方便系统后期扩容升级。本次系统采用基于docker swarm的容器化本地部署方式。
容器化部署介绍
开发过程中一个常见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一致,导致有些bug并未在开发过程中被发现。而Docker的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性。
由于Docker确保了执行环境的一致性,使得应用的迁移更加容易。Docker可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云,甚至是笔记本,其运行结果是一致的。因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。
Docker使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。
Docker容器化部署具有以下优势:
(1)标准化应用发布,docker容器包含了运行环境和可执行程序,可以跨平台和主机使用;
(2)节约时间,快速部署和启动,VM启动一般是分钟级,docker容器启动是秒级;
(3)方便构建基于SOA架构或微服务架构的系统,通过服务编排,更好的松耦合;
(4)节约成本,以前一个虚拟机至少需要几个G的磁盘空间,docker容器可以减少到MB级;
(5)方便持续集成,通过与代码进行关联使持续集成非常方便;
(6)可以作为集群系统的轻量主机或节点,在IaaS平台上,已经出现了CaaS,通过容器替代原来的主机。
4.1.3 平台功能
提供图形化拖拽工具构建相关业务模型,支持 用户进行数据集成、数据预处理、特征工程、模型训练、模型发布等整套模型开发流程,降低数据挖掘开发门槛。
支持多种数据源接入,支持传统关系型数据库、MPP数据库、HDFS(txt、ORC、Parquet等数据格式)、Hive、HBase、Elastic Search、本地文件(CSV、JSON等数据格式)等多种数据存储方式接入。
提供丰富的分布式统计算法、机器学习及深度 学习基础算法库,包括数据预处理,数值分析,特 征工程、分类、聚类、回归、深度学习、验证评估、 NLP 等通用算法,并提供自定义算法支持,方便数据 分析人员进行数据分析与挖掘的相关工作。
整合主流深度学习框架,包括 Tensorflow、MXNet,通过将深度学习框架与Hadoop体系融合,帮助数据科学家以及分析人员敏捷构建DNN,CNN等模型,使用全量数据样本进行模型训练,提高算法 的精准度。
支持挖掘标准PMML模型导入导出,方便模型管理与使用。支持模型协作,多人协作模型开发模式。支持基于模型训练结果,通过图形界面构建相应的应用服务,并通过容器化的方式打包与运行。
4.2 数据抽取
数据抽取系统是本项目建设的基础设施,也体现了数据集成的一种模式,它的优点是简化数据集成拓扑结构,提供共享基础服务,对于跨部门大范围的数据整合与服务,是一种集约化的技术解决方案。
4.2.1 技术框架
数据交换平台框架如下图所示,主要包括批量数据交换和实时数据服务。
1、批量数据交换
批量数据交换服务用于源系统数据获取、主数据管理、数据容灾等数据物理落地的应用场景。
(1)数据交换服务
批量数据交换方式包括基于日志变化的数据捕获模式和前置机、中间库的模式。
前置机、中间库的模式(传统的数据交换模式):先由源系统开发单位开发接口,推送数据至中间库,再通过交换平台将中间库的数据抽取至数据中心。此种方式适合更新频次不高的行业基础数据,可以通过制定定期交换的计划,使生产库数据推送的频率与准确性得到保证。
(2)数据转换服务
数据转换服务是对采集后的数据按数据中心的数据标准执行数据的清洗、转换与加载。
2、实时数据服务
实时数据交换服务是基于ESB等SOA基础设施,将数据中心的数据以服务接口的形式供各类业务系统实时调用。
4.2.2 平台功能
数据交换平台主要功能是定义数据交换存储策略、基础数据交换标准;对授权用户开放业务数据访问的定制服务;业务管理信息系统的信息流转,根据需要提供业务之间的数据共享与交换,包括以下几个部分:
1、数据导入管理
数据导入管理需实现数据抽取、数据转换、数据装载功能。数据抽取实现从不同的数据源中抽取出系统所需数据,包括全量抽取、增量抽取、主从抽取、条件抽取、联合抽取、文件析取、Web Service抽取等多种方式。数据转换需要将所抽取的数据转换为符合数据中心标准的数据,包括映射变换、行列互换、自定义转换等多种灵活的转换形式。数据装载,在数据转换成所需格式后需要将抽取过来的数据装载到资源库。
2、数据导出管理
实现数据中心的各种形式的数据导出,包括EXCEL、XML等中间格式。
3、数据共享
针对各种应用场景对数据需求的不同,提供相应的数据共享实现方式。对于一些数据服务内容涉及与其他行业数据共享,要求采用远程访问的方法,保证平台无关性,实现跨平台的互操作,比如Web Service访问接口等;对于行业内的数据共享,要求采用数据交换的方式,实现异构数据库间的数据交换。
4、数据服务
在数据资源库之上建立数据封装层,将数据封装为Rest风格的Web Service规范的接口,数据中心的库表通常情况下不暴露给数据需求方直接调用。
4.3 数据预处理
系统按照数据中心统一标准规范对各部门共享数据进行处理,实现中心前置库至融合库整个过程多个环节的数据抽取、清洗、转换、比对和加载的管理。
4.3.1 系统架构
数据融合系统实现数据抽取、转换和加载的数据加工处理核心功能,并利用二次开发接口开发数据处理任务管理,实现数据处理的任务定义、任务监控;开发数据处理的规则管理,实现数据处理的规则定义、规则查询,可以调用这些规则进行数据处理;开发数据目录,实现汇集库、基础库、融合库的数据资源目录的维护和查询。
下图为数据融合系统功能架构图,构建的数据加工处理子系统,实现了中心前置库和应用系统历史库到汇集库的数据标准化处理、汇集库到基础库的数据比对、抽取处理、基础库到融合库的数据加载,以及汇集库到融合库的数据关联、加载处理。
4.3.2 系统功能
数据融合系统主要由数据融合方法和过程、任务管理、规则管理和数据目录管理4个子系统组成。
本系统能够实现以下功能:
1、对数据中心除决策支持各种主题或专题信息资源以外的信息进行编目,颗粒度到表一级,数据目录能够按数据类型、部门、业务主题等多个维度进行分类。
2、目录管理与安全管理功能相结合,提供权限控制功能,只有拥有相应权限的用户才能够对各类目录信息进行维护或查询。
3、使用主流数据模型设计。如星形结构、雪花型结构等。
4、提供数据抽取、转换和加载的数据加工处理核心功能。
5、提供数据处理规则管理,实现数据处理的规则定义、规则查询。
6、提供数据处理任务管理,实现数据处理的任务定义、任务配置、任务监控。
4.4 数据探索
数据探索平台主要提供针对数据和服务的管理,并对所提供的数据和服务的获取接口和资源目录进行管理,方便与各类专题数据进行有效整合。数据管理平台包含且不仅包含如下功能:元数据管理和数据质量管理、数据规范符合性审查服务管理。
4.4.1 元数据管理
元数据管理是保证数据准确性的重要技术手段,大数据平台因为平台混合搭配会造成数据分开存储和使用,需要采取集中式管理模式进行统一元数据管理,满足业务人员和技术人员的元数据查询、分析、维护的需求。元数据管理系统贯穿数据中心的整个生命周期,为用户提供高质量、准确和易于管理的数据。
元数据涵盖了数据中心建设过程中源系统、数据交换、数据存储和数据应用的全过程,如下图所示,在不同阶段所产生的各类元数据,均需要统一的规划与管理。
数据管理系统的功能主要包括:
1、指标库管理
指标是业务应用系统中重要的数据资源之一,对业务运行分析和管理决策支持起到重要的支撑作用。指标库管理应用的目标是提高指标的规范性以及指标管理的规范性,保障系统用户对指标理解一致,同时保障系统与外部系统有效互动。
2、业务术语自助学习
业务术语自助学习应用是面向业务操作人员的业务术语查询和帮助应用,提供符合业务人员操作习惯的功能界面,以灵活、便捷的自助学习方式,增进业务用户对系统中相关报表、指标、维度和应用服务等术语的理解,帮助用户更好地使用系统。
3、维表库管理
维表库管理是指基于元数据,实现对数据源系统维表库、数据中心标准维表库分别管理,从而建立一套标准的维表库体系,实现标准维表库与源系统维表库之间的关联管理,其目的是有效处理源系统维表库与标准维表库之间的维度数据统一,支撑本期业务应用系统与源系统的数据质量协同和两级数据中心元数据互通。
4、接口管理
本期业务系统数据交换中存在大量数据接口,基于元数据进行接口管理并建立接口元数据维护机制,能够提高接口元数据质量,为源系统变更协同管理奠定基础。
5、辅助应用优化
元数据对数据中心的数据、数据加工过程以及数据间的关系提供准确的描述,利用血缘分析、影响分析和实体关联分析等元数据分析功能,可识别与系统应用相关的技术资源,结合应用生命周期管理过程,辅助进行系统应用优化。
6、辅助安全管理
数据中心建立完成后,所存储的数据和提供的各类分析应用,涉及到各类敏感或涉密信息。因此在数据中心建设过程中,须采用全面的安全管理机制和措施来保障系统的数据安全。
元数据管理系统安全管理模块负责数据中心的数据敏感度、涉密性和各环节审计日志记录管理,对数据中心的数据访问和功能使用进行有效监控。为实现数据中心对敏感数据和涉密信息的访问控制,安全管理模块应以元数据为依据,由元数据管理模块提供敏感数据定义和涉密信息定义,辅助安全管理模块完成相关安全管控操作。
7、数据目录管理
数据目录管理基于元数据模型的建立,通过检索与树状目录的形式,快速查找不同类型的数据资源,并查看该项数据的各项指标状况。
4.4.2 数据质量管理
数据质量管理包括对数据源、数据源接口、数据实体、处理过程、数据应用和业务指标等相关内容的管控机制和处理流程,也包括对数据质量管控和处理的信息总结和知识应用等辅助内容。
对于新数据的流程为:“录入——检查——反馈问题——修改”;
对于已有系统的数据,流程为“评估——核查(反馈)——转换——入库”。
数据质量管理主要功能包括:源系统变更协同管理、数据质量监控、数据质量问题处理、数据质量评估、数据质量报告、数据质量知识库和数据质量对外服务等:
1、源系统变更协同管理
源系统的业务流程变更或库表、维度和接口等内容变更,将对数据资源中心各类应用系统产生影响。源系统变更协同管理调用元数据管理模块分析功能对源系统变更信息进行影响评估,并将变更信息及时告知数据质量管理人员,避免数据源变更引起各类应用系统数据质量问题。
2、数据质量监控
数据质量监控是根据预先配置的规则或算法,监控数据采集和规则校验,并依据稽核和检查过程中发现的数据质量异常情况进行告警和拓扑呈现的过程。数据质量监控由9个主要功能环节构成,包括数据采集、源系统关键数据稽核、源系统维表稽核、数据实体检查、处理过程检查、关键指标检查、告警管理、拓扑呈现和规则配置。
3、数据质量问题处理
数据质量问题处理模块提供一个统一的数据质量问题入口,系统自动监控所发现的问题以及技术人员和业务人员手工提交的问题,统一通过该入口进行问题单的填写和提交,并触发问题处理流程
4、数据质量评估
数据质量评估包括源接口基础数据质量评估和数据资源中心各业务系统指标关联性分析两部分。其中,源接口基础数据质量评估由数据质量管理人员根据需要发起,根据评估指标和评估方法,对基础数据的数据质量进行评价,得到评估结果以作为系统质量改进的参考和依据。数据资源中心系统指标关联性分析是通过对指标进行关联性检查发现潜在的数据质量问题。
5、数据质量报告
数据质量报告是对源系统变更协同管理、源系统核心数据及维表稽核、数据资源中心系统日常监控以及数据质量评估等过程累积的各种信息进行汇总、梳理、统计和分析,形成统计报告的过程。数据质量报告提供了一个集中展示数据中心数据质量状况的窗口,供相关人员总结经验、沉淀知识和改进方法,不断提高数据质量管理系统的数据质量问题的处理能力。
6、数据质量知识库
数据质量知识是在数据资源中心系统使用及运维过程中,由数据质量管理子系统收集的有关数据及过程问题的处理经验总结。该类知识可作为未来数据质量问题解决方法的参考,并可以按关键字的形式进行索引和分类管理。
4.5 特征工程
支持常见特征工程流程,包括特征变换、特征重要性评估、特征选择、特征生成等,包括且不限于归一化、标准化、离散化、one-hot编码等
支持特征工程自动化,包括自动特征变换、自动特征生成以及自动特征选择等。
4.5.1 数据挖掘模块
Mahout是Apache Software Foundation(ASF)旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。Mahout包含许多实现,包括聚类、分类、推荐过滤、频繁子项挖掘。此外,通过使用Apache Hadoop库,Mahout可以有效地扩展到分布式计算中。
MLLib是Spark项目的一个子模块,MLlib也提供了一套基于Spark处理引擎的机器学习和数据挖掘的算法库。
4.5.2 数据挖掘引擎
主要的机器学习的算法目前在MLlib中都已经提供了,分类回归、聚类、关联规则、推荐、降维、优化、特征抽取筛选、用于特征预处理的数理统计方法、以及算法的评测。
目前支持:支持分布式apiori/fp-growth算法;支持分布式k-means/层次聚类算法;支持分布式svm算法;支持分布式神经网络算法;支持回归算法;支持分布式随机森林算法;支持分布式协同过滤算法,支持时间序列算法;支持分布式决策树C5.0算法;支持分布式朴素贝叶斯算法;支持分布式梯度提升树。
SparkR是AMPLab发布的一个R开发包,为Apache Spark提供了轻量的前端。SparkR提供了Spark中弹性分布式数据集(RDD)的API,用户可以在集群上通过R shell交互性的运行job。处R接口外,也支持Python接口的调用。
4.6 建模算法
4.6.1 功能概述
本次前沿技术辅助发现系统采用了业界领先的大数据,人工智能,自然语言处理技术,确保整个系统能够更好的辅助前沿技术发现。具体算法包括但不限于BERT、序列标注、条件随机场、LSTM、支持向量机、逻辑回归、随机森林、线性回归、决策树回归、K均值聚类、协同过滤、关联分析、TF-IDF、Word2Vec、受限玻尔兹曼机、KMP算法、LCS算法等。
4.6.2 BERT算法
BERT是谷歌公司AI团队今年十月最新发布的模型,在机器阅读理解顶级水平测试SQuAD1.1中表现出惊人成绩:全部两个衡量指标上超越人类,并且还在11种不同NLP(自然语言处理)测试中创出最佳成绩。谷歌团队成员Thang Luong表示BERT开启了NLP的新时代。
BERT有以下优势:
1.BERT拥有一个深而窄的神经网络。
2.BERT模型能够联合神经网络所有层中的上下文来进行训练。
3.BERT只需要微调就可以适应很多类型的NLP任务,这使其应用场景扩大,并且降低了训练成本
BERT算法证明了通过大规模语料集预训练的技术,能够大幅度提升各类文本阅读理解的效果;证明了使用Transformer来作为特征提取方法,以及双向学习机制,能达到超过已有算法优异效果;证明通过遮蔽语言模型进行无监督学习的机制,可以优雅的引入领域知识;未来在学术界传统认为很难处理的一些文字阅读理解任务上,计算机有望能够全面超越人类。
4.6.3 序列标注算法
序列标注模型的训练广泛应用于NLP的若干基础组件之中,例如分词,词性标注,实体识别,信息抽取等任务的基础模型都属于序列标注模型。常用的序列标注模型有隐马尔科夫模型(HMM),条件随机场(CRF)或适用于序列标注的深度学习模型(Bi-LSTM+CRF)等。传统序列标注模型在小数据的训练样本中效果相对较好,而深度学习在应对大数据量时具有更加明显的优势。
首先将标注样本针对具体的任务和算法进行转化,将文本序列根据标注结果转换为BMES或其他的标签体系。对于机器学习模型,根据不同任务,可以选择不同的特征,例如char级别,word级别,词性特征,甚至是否包含关键词等等。而深度学习模型一般使用下文会提到的字词向量特征作为输入。
除了特征以外,还需要对训练数据进行一定的预处理,例如数据平衡,对于关键信息抽取任务,可以采取把标注信息周围内容进行裁剪的方式,既可以避免数据不平衡的问题,也可以缩短训练时间,减小模型的大小。
对于多字段的信息抽取任务或者多任务(分词、词性标注、句法分析)的文本分析任务。既可以训练若干个单独模型,也可以使用单一的联合模型进行训练。
4.6.4 条件随机场算法
CRF即条件随机场(Conditional Random Field)是一种判别式无向图模型。与HMM不同的是CRF的当前状态可以与整个观测序列x相关。如下图所示:
CRF 模型结构
CRF条件概率公式
其中是定义在两个相邻状态之间的状态转移特征函数,用来刻画前一个状态和当前状态的转移概率,为状态转移特征函数对应的贡献权重值。是定义在观测序列时刻i的状态特征函数,用来刻画观测序列x对于i时刻状态变量的影响,类似的为状态特征函数对应的权重。
以词性标注任务为例:
公式 CRF特征公式
上式的状态转移特征刻画当前时刻的观测值为“knock”,当前时刻状态值为V,下个时刻状态值为P时的特征。一般工程中实际上使用的多为线型链CRF,即状态转移函数的输入不考虑x,只考虑当前时刻的状态和下个时刻的状态。
公式 CRF特征值得分
上式的状态特征刻画当前时刻观测值为“knock”时,当前时刻状态值为V的特征。
4.6.5 双向LSTM算法
随着深度学习的发展,深度学习的序列标注模型得到了广泛的应用。深度学习序列标注模型的输入一般为词向量,相比于CRF的one-hot表示会有更强的泛化能力。网络结构如下图所示,双向LSTM网络替代了CRF中状态特征函数的作用,LSTM可以学到更加复杂的特征以及更长的上下文特征。双向LSTM由一个接受顺序词向量输入的LSTM层和一个接受逆序词向量输入的LSTM层组成,一个包含前文特征,一个包含后文特征,将两者的输出拼接则包含了上下文特征。LSTM后的CRF层则建模状态变量的转移特征。最后的CRF层已经成为深度学习序列标注模型的标配,因为深度学习序列模型建模输出标签转移概率较为困难。
Bi-LSTM+CRF模型结构
4.6.6 支持向量机算法
SVM(Support Vector Machine)指的是支持向量机,是常见的一种判别方法,是一个有监督的学习模型。SVM的主要思想可以概括为两点:1.它是对线性可分的情况进行分析,对于线性不可分的情况,通过使用非线性映射算法将低维输入空间线性不可分的样本转化为高维特征空间使其线性可分。2.它基于结构风险最小化理论之上在特征空间中构建最优超平面,使得学习得到全局最优化。
SVM原理是几何间隔最小化:
对于线性不可分问题,通过核函数实现特征空间的隐式映射。
如图,是从二维空间到三维空间的变换:
SVM使用核函数解决低维空间现行不可分问题
4.6.7 逻辑回归算法
逻辑回归(Logistics Regression,LR)模型其实是在线性回归的基础上,套用了一个逻辑函数。逻辑回归是一种广义回归,y=wx+b,其中w和b是待求参数。Logistic回归通过函数L将wx+b对应一个隐状态p,p=L(wx+b),然后p与1-p的大小决定因变量的值。
Logistic回归可以使二分类,也可以是多分类,但二分类更为常用。
Logistic Regression将线性函数的结果映射到了sigmoid函数中的(0,1)区间中。
sigmoid函数图形如下:
Sigmoid函数图
h(x)<0.5说明当前数据属于A类;h(x)>0.5说明当前数据属于B类。
4.6.8 随机森林算法
随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数决定的。决策树相当于一个大师,通过自己在数据集中学到的知识对于新的数据进行分类。随机森林就是希望构建多个臭皮匠,希望最终的分类效果能够超过单个大师的一种算法。
随机森林生成方法:
1.从样本中通过重采样的方式产生n个样本
2.假设样本特征数目为a,对n个样本选择a中的k个特征,用建立决策树的方式建立最佳分割点
3.重复m次,生成m棵决策树
4.多数投票机制来进行预测。
4.6.9 线性回归算法
线性回归(Linear Regression),数理统计中回归分析,用来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,其表达形式为y=w'x+e,e为误差服从均值为0的正态分布,其中只有一个自变量的情况称为简单回归,多个自变量的情况叫多元回归。注意,统计学中的回归并如线性回归非与严格直线函数完全能拟合,所以我们统计中称之为回归用以与其直线函数区别。举个Andrew Ng机器学习讲义中美国俄亥俄州Portland Oregon城市房屋价格为例:
这个例子中近简化使用房屋面积一个因子作为自变量,y轴对应其因变量房屋价格。所以我们机器学习的线性回归就变为对于给定有限的数据集,进行一元线性回归,即找到一个一次函数y=y(x)+e,使得y满足当x={2104,1600,2400,1416,3000,...},y={400,330,369,232,540,...} 如下图所示:
对于线性方程的求解,是属于线性代数的范畴。首先要判断是否有解及是否有唯一解;其次具体求解方法则有矩阵消元法,克莱姆法则,逆矩阵及增广矩阵法等等。
对于大多数给定数据集,线性方程有唯一解的概率比较小,多数都是解不存在的超定方程组。对于这种问题,在计算数学中通常将参数求解问题退化为求最小误差问题,找到一个最接近的解,即术语松弛求解。
4.6.10 决策树回归算法
决策树是一种基本的分类与回归方法,本文叙述的是回归部分。回归决策树主要指CART(classification and regression tree)算法,内部结点特征的取值为“是”和“否”,为二叉树结构。
所谓回归,就是根据特征向量来决定对应的输出值。回归树就是将特征空间划分成若干单元,每一个划分单元有一个特定的输出。因为每个结点都是“是”和“否”的判断,所以划分的边界是平行于坐标轴的。对于测试数据,我们只要按照特征将其归到某个单元,便得到对应的输出值。
4.6.11 K均值聚类算法
K均值聚类算法是先随机选取K个对象作为初始的聚类中心。然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。一旦全部对象都被分配了,每个聚类的聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件。终止条件可以是没有(或最小数目)对象被重新分配给不同的聚类,没有(或最小数目)聚类中心再发生变化,误差平方和局部最小。
具体做法为:先随机选取K个对象作为初始的聚类中心。然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。一旦全部对象都被分配了,每个聚类的聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件。终止条件可以是以下任何一个:
1)没有(或最小数目)对象被重新分配给不同的聚类。
2)没有(或最小数目)聚类中心再发生变化。
3)误差平方和局部最小。
4.6.12 协调过滅算法
主要思想是基于群体智慧,利用已有大量用户群过去行为数据来预测当前用户最可能感兴趣的东西。这种方法克服了基于内容方法的一些弊端,最重要的是可以推荐一些内容上差异较大但是又是用户感兴趣的文档。构成CF(Collaborative Filtering)的两种主要技术:基于领域的方法和隐语义模型。
1)基于领域的方法
该方法重点关注文档之间的关系或者用户之间的关系,基于文档的方法是根据用户对和他感兴趣的文档相似的文档评分,来对该用户的偏好文档建立模型。
基于文档的协同过滤核心思想:给用户推荐那些和他们之前喜欢的文档相似的文档。主要分为两步:计算文档之间的相似度和根据文档的相似度和用户的历史行为给用户生成推荐列表。
第一步:使用下面的余弦相似度公式定义文档的相似度
从上面的定义看出,在协同过滤中两个文档产生相似度是因为它们共同被很多用户喜欢,两个文档相似度越高,说明这两个文档共同被很多人喜欢。这里面蕴含着一个假设:就是假设每个用户的兴趣都局限在某几个方面,因此如果两个文档属于一个用户的兴趣列表,那么这两个文档可能就属于有限的几个领域,而如果两个文档属于很多用户的兴趣列表,那么它们就可能属于同一个领域,因而有很大的相似度。
第二步:根据文档的相似度和用户的历史行为给用户生成推荐列表,通过如下公式计算用户u对一个文档j的兴趣
其中,Puj表示用户u对文档j的兴趣,N(u)表示用户喜欢的文档集合(i是该用户喜欢的某一个文档),S(i,k)表示和文档i最相似的K个文档集合(j是这个集合中的某一个文档),Wji表示文档j和文档i的相似度,Rui表示用户u对文档i的兴趣(这里简化Rui都等于1)。
基于用户的协同过滤算法最重要一点是相似用户的计算。包括找到与目标用户兴趣相似的用户集合、找到这个集合中用户喜欢的、并且目标用户没有听说过的文档推荐给目标用户。可以使用上述的余弦相似度方法计算相似度。在推荐的时候,需要从矩阵中找出与目标用户u最相似的K个用户,用集合S(u,K)表示,将S中用户喜欢的文档全部提取出来,并去除u已经喜欢的文档。
在实际应用中,相似度的计算很多种方法,如余弦相似度、皮尔逊相关度等。其实不同的相似度计算方法有各自的优缺点,适用不同的应用场景,可以通过对比测试进行选取。一般来说,基于用户的推荐系统中,皮尔逊相关系数效果要好一些。基于文档的推荐中,余弦相似度方法比皮尔逊的表现更好。在实际业务中,相似度的计算方法都有很多变种,过于冷门和过于热门的文档对衡量用户间的相似度时区分度不好,这时就需要进行剪枝。下面的相似度计算方法将降低热门文档对用户相似度的影响。
这种基于K近邻的选取相似用户的方法,相似度的阈值设置对结果影响很大,太大的话召回文档过多,准确度会有下降。
2)隐语义模型
该方法把文档和用户映射到相同的隐语义空间。这个空间试图通过描述文档和用户两种实体在因子上的特征来解释评分,而这些因子是根据用户的反馈自动判断出来的。
用隐语义模型来进行协同过滤的目标是揭示隐藏的特征,这些特征能解释观测到的评分。该模型包括pLSA(Probability Latent Semantic Analysis)模型、神经网络模型、LDA(Latent Dirichlet Allocation)模型,以及由用户-文档评分矩阵的因子分解推导出的模型(也叫基于SVD的模型,Singular Value Decomposition)。由于矩阵因子分解技术在线上业务的准确性和稳定性的突出表现,已经成为协同过滤算法的首选。达观数据的推荐系统也大量使用了这种技术,并做了诸多性能和效果优化。
CF模型视图捕捉用户和文档之间的交互作用,正式这些交互作用产生了不同的评分值。设为总体评分值,未知评分的基准预测综合考虑了用户和文档两个因子
参数和表示用户和文档的与评分平均值的偏差。我们可以通过解决最小二乘法的问题来估计和的值
在上述这个公式中,第一项用来寻找与已知评分数据拟合得最好和的。正则化项通过对参数的复杂性增加惩罚因子来避免过拟合问题。这个最小二乘法问题可以通过随机梯度下降(SGD,Stochastic gradient descent)算法有效地解决。
矩阵因子分解模型把用户和文档两方面的信息映射到一个维度为的联合隐语义空间中,因此用户-文档之间的交互作用被建模为该空间的内积。相应地,每一个文档都有一个维向量相关,每一个用户都与一个维向量相关。给定一个文档,向量的维度值代表了该文档拥有这些因子的程度。取值大小反应了文档拥有这些因子的积极或者消极程度。给定一个用户,的维度值代表了用户对这些因子的偏好程度。同样地,这些值的大小反映了用户对这些因子的消极或者积极的评价。
为了学习模型中的参数,也就是、、和,我们可以最小化以下正则化的平方误差
常量控制了正则化程度,一般通过交叉验证来获得。
考虑隐式反馈信息可以增加预测准确度,这些隐式反馈信息提供了用户爱好的额外信息。这对于那些提供了大量隐式反馈但是仅仅提供少量显式反馈的用户尤为重要。这就出现了一些根据用户评分的文档来对用户的某个因子建模的方法,这里谈一下SVD++,这种方法能够提供比SVD更好的准确度。
为了达到上述目的,我们增加了第二个文档因子集合,即为每一个文档关联一个因子变量。这些新的文档因子向量根据用户评分的文档集合来描述用户的特征。模型如下:
例如,如果一个用户对中的一些文档有某种类型的隐式偏好(如他买过它们),对中的文档又另一种类型的偏好(如他赞过它们),就可以使用下面的模型:
在处理用户行为数据的过程中,需要考虑时间因素的影响,毕竟用户的偏好是随着时间变化的。比如,用户会改变对特定导演或者演员的看法。矩阵分解的方法也能很好地对时间效应进行建模。得到扩展模型time SVD++如下:
每一次迭代的时间复杂度仍然与输入大小呈线性关系,而运行时间大概是SVD++算法的两倍,原因是更新时序参数需要额外的花费。重要的是,收敛速度并没有受时序参数化的影响。
4.6.13 关联分析算法
关联分析又称关联挖掘,就是在交易数据、关系数据或其他信息载体中,查找存在于项目集合或对象集合之间的频繁模式、关联、相关性或因果结构。
关联分析是一种简单、实用的分析技术,就是发现存在于大量数据集中的关联性或相关性,从而描述了一个事物中某些属性同时出现的规律和模式。
关联分析是从大量数据中发现项集之间有趣的关联和相关联系。关联分析的一个典型例子是购物篮分析。该过程通过发现顾客放入其购物篮中的不同商品之间的联系,分析顾客的购买习惯。通过了解哪些商品频繁地被顾客同时购买,这种关联的发现可以帮助零售商制定营销策略。其他的应用还包括价目表设计、商品促销、商品的排放和基于购买模式的顾客划分。
4.6.14 TF-IDF算法
Tf-idf是一种用于信息检索与文本挖掘的常用加权技术。tf-idf是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。在一份给定的文件里,词频(term frequency,tf)指的是某一个给定的词语在该文件中出现的频率。这个数字是对词数(term count)的归一化,以防止它偏向长的文件。对于在某一特定文件里的词语 ti来说,它的重要性可表示为:
以上式子中ni,j是该词在文件 dj中的出现次数,而分母则是在文件 dj中所有字词的出现次数之和。
逆向文件频率(inverse document frequency,idf)是一个词语普遍重要性的度量。某一特定词语的idf,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取以10为底的对数得到:
其中
|D|:语料库中的文件总数
:包含词语ti的文件数目(即 ni,j != 0的文件数目)如果词语不在数据中,就导致分母为零,因此一般情况下使用
然后tfidf i,j = tfi, j * idfi
某一特定文件内的高词语频率,以及该词语在整个文件集合中的低文件频率,可以产生出高权重的tf-idf。因此,tf-idf倾向于过滤掉常见的词语,保留重要的词语。
4.6.15 Word2vec算法
Word2vec主要用于挖掘词的向量表示,向量中的数值能够建模一个词在句子中,和上下文信息之间的关系,主要包括2个模型:CBOW(continuous bag-of-word)和SG(skip-gram),从一个简单版本的CBOW模型介绍,上下文只考虑一个词的情形,如图所示,
Word2vec图
假设只有一个隐层的神经网络,输入层以及输出层均为词的one-hot编码表示,词表大小假设为V,隐层神经元个数为N,相邻层的神经元为全连接,层间的权重用V*N的矩阵W表示,隐层到输出层的activation function采用softmax函数,
其中wI,wj为词表中不同的词,yj为输出层第j个神经元的输出,uj为输入层经过权重矩阵W到隐层的score,uj’为隐层经过权重矩阵W’到输出层的score。训练这个神经网络,用反向传播算法,先计算网络输出和真实值的差,然后用梯度下降反向更新层间的权重矩阵,得到更新公式:
其中,η为更新的步长,ej为模型预测以及真实值之间的误差,h为隐层向量。
图2为上下文为多个词时的情况,中间的隐层h计算由
改为
即输入向量为多个上下文向量相加求平均,后续的参数学习与上文的单个词的上下文情况类似。遍历整个训练集context-target词对,经过多次迭代更新模型参数,对模型中的向量的影响将会累积,最终学到对词的向量表示。
Skip-gram跟CBOW的输入层和输出层正好对调,区别就是CBOW是上下文,经过模型预测当前词,而skip-gram是通过当前词来预测上下文。
Skip-gram
目前为止,对词表中的每个词,有两种向量表示:input vector和output vector,对应输入层到隐层权重矩阵W的行向量和隐层到输出层权重矩阵W'的列向量,从等式4、5可以看出,对每一个训练样本,都需要遍历词表中的每一个词,因此,学习output vector的计算量是非常大的,如果训练集或者词表的规模大的话,在实际应用中训练不具可操作性。为解决这个问题,直觉的做法是限制每个训练样本需要更新的output vectors,google提出了两个方法:hierarchical softmax和negative sampling,加快了模型训练的速度,再次不做展开讨论。由于wordvec在NLP领域的巨大成功,Oren Barkan and Noam Koenigstein受此启发,利用item-based CF学习item在低维latent space的embedding representation,优化item的相关推荐。
词的上下文即为邻近词的序列,很容易想到,词的序列其实等价于一系列连续操作的item序列,因此,训练语料只需将句子改为连续操作的item序列即可,item间的共现为正样本,并按照item的频率分布进行负样本采样。
4.6.16 受限玻尔装曼机算法
本质上来说,RBM是一个编码解码器:将原始输入数据从可见层映射到隐藏层,并且得到原始输入数据的隐含因子,对应的是编码过程;然后利用得到的隐藏层向量在映射回可见层,得到新的可见层数据,对应的是解码过程。而优化目标是希望让解码后的数据和原始输入数据尽可能的接近。在推荐场景中,可以获取到用户对文档的评分矩阵,进过RBM的编码-解码过程处理后,不仅得到了已有评分对应的新评分,同时对未评分的文档进行预测,并将预测分数从高到低排序就可以生成推荐列表。换句话说,就是将RBM应用到协同过滤中。
对传统的RBM进行改进:可见层使用Softmax神经元;用户只对部分文档评分,而对于没有评分的文档使用一种特殊的神经元表示,这种神经元不与任何隐藏层神经元连接。具体结构如图所示。
受限玻尔兹曼机
图中可以看到,Softmax神经元是一个长度为K的向量(图中K为5),并且这个向量每次只有一个分量为1,而且第i个单元为1仅当用户对该文档打分为i是才会置为1,其余为0。从而可以得到可见层单元和隐藏层单元被激活的概率:
使用前面提到的CD算法,各个参数的学习过程如下:
RBM经过学习以后,可以得到整个网络的全部参数。给定一个用户u和一个文档i,预测评分R(u, i)过程如下:
1)将用户u的所有评分作为RBM的softmax单元的输入
2)对于所有的隐藏单元j计算激活概率
3)对于所有的k=1,2,…,K,计算
4)取期望值作为预测结果,比如
以上RBM只用到用户对文档的评分,忽略了很重要的信息:用户浏览过哪些文档,但是并没有评的情况。条件RBM (Conditional Restricted Boltzmann Machine)对这种信息可以进行建模。
RBM
其中r是m维的向量,为1的话,表示用户对浏览过第i个电影,加入r之后的条件概率:
权重D的学习过程:
4.6.17 KMP算法
Knuth-Morris-Pratt字符串查找算法(简称为KMP算法)可在一个主文本字符串S内查找一个词W的出现位置。此算法通过运用对这个词在不匹配时本身就包含足够的信息来确定下一个匹配将在哪里开始的发现,从而避免重新检查先前匹配的字符。
4.6.18 LCS算法
最长公共子序列(LCS)是一个在一个序列集合中(通常为两个序列)用来查找所有序列中最长子序列的问题。这与查找最长公共子串的问题不同的地方是:子序列不需要在原序列中占用连续的位置。最长公共子序列问题是一个经典的计算机科学问题,也是数据比较程序,比如Diff工具,和生物信息学应用的基础。它也被广泛地应用在版本控制,比如Git用来调和文件之间的改变。
一个数列S,如果分别是两个或多个已知数列的子序列,且是所有匹配此条件序列中最长的,则S称为已知序列的最长公共子序列。对于一般性的LCS问题(即任意数量的序列)是属于NP-hard。但当序列的数量确定时,问题可以使用动态规划在多项式时间内解决。