建设部建造师网站,织梦建站要多少钱,网站的安全检查怎么做,承德房地产网站建设一、概述
下图是较简化的机器学习平台架构#xff0c;概括了机器学习平台的主要功能和流程。本章会进行简要介绍#xff0c;在功能章节再展开详述。机器学习最主要的三个步骤可概括为#xff1a;数据处理、建模以及部署。 数据处理#xff0c;即所有和数据相关的工作…一、概述
下图是较简化的机器学习平台架构概括了机器学习平台的主要功能和流程。本章会进行简要介绍在功能章节再展开详述。机器学习最主要的三个步骤可概括为数据处理、建模以及部署。 数据处理即所有和数据相关的工作包括存储、加工、采集和标记几大主要功能。前三者与大数据平台几乎一致标记部分是机器学习平台所独有。数据存储较好理解要根据存取的特点找到合适的存储系统。数据加工也被称为ETLExtractTransformLoad即将数据在不同的数据源间导入导出并对数据进行聚合、变形、清洗等操作。数据采集即从外部系统获得数据包括通过网络爬虫来采集数据。数据标记是将人类的知识附加到数据上产生样本数据以便训练出模型能对新数据推理预测。 建模即创建模型的过程包括特征工程、试验、训练及评估模型。特征工程即通过数据科学家也称为算法工程师的知识来挖掘出数据更多的特征将数据进行相应的转换后作为模型的输入。试验即尝试各种算法、网络结构及超参来找到能够解决当前问题的最好的模型。模型训练主要是平台的计算过程好的平台能够有效利用计算资源提高生产力并节省成本。 部署是将模型部署到生产环境中进行推理应用真正发挥模型的价值。部署这个词本身可以仅仅代表将模型拷贝到生产环境中。但计算机软件的多年发展证明提供一个好的服务需要考虑多种因素并通过不断迭代演进解决遇到的各种新问题从而保持在较高的服务水平。 对平台的通用要求如扩展能力运维支持易用性安全性等方面。由于机器学习从研究到生产应用都还处于快速发展变化的阶段所以框架、硬件、业务上灵活的扩展能力显得非常重要。任何团队都需要或多或少的运维工作出色的运维能力能帮助团队有效的管理服务质量提升生产效率。易用性对于小团队上手、大团队中新人学习都非常有价值良好的用户界面也有利于深入理解数据的意义。安全性则是任何软件产品的重中之重安全漏洞是悬在团队头上一把剑不能依靠运气来逃避问题。
这里不得不再分辨一下人工智能、机器学习、深度学习的含义以便文中出现时读者不会混淆。 人工智能是人们最常听到的说法。在不需要严谨表达时一般都可以用这个词来表达一些不同以往的智能应用。而实际上程序员写的每一行逻辑代码都是人工智能每一个软件都饱含了人工智能不是人类智能。如果要严谨的表达人工智能和软件并没有什么区别也不表达什么意义深刻的智能革新产品。 但如果遵循普适的理解那么人工智能一定是得有一些新奇的、超越以往的人工智能的东西才能配得上这个词。比如以往计算器注意不是计算机是加减乘除的计算器刚出现时它就是新奇的事物超越了人类的认知。在那个时刻计算器就代表了人工智能的最高水平是当之无愧的人工智能产品。 那么什么时候适合用人工智能这个词汇呢如果别人在用这个词汇说明什么那就跟着用就好了不必过于严谨。如果觉得有什么超越以往的智能的事物那就用人工智能来介绍它。放之当下2018年图像中识别出物体、语音中识别出文本、自动驾驶等等就可以称为人工智能了本文也没少用。但电灯能感应到人后自动点亮就不足以说是人工智能了。 机器学习。这是专业词汇表达的是具有学习能力的软硬件产品与程序员写就的代码相区别。可以认为机器学习模型是一个函数有输入输出它的逻辑是数据驱动的核心逻辑在数据中不在代码中。 机器学习的学习过程如果也用函数来类比那么就是首先给模型传入输入获得输出。然后将模型的输出与期望的输出即样本数据中的标记结果进行比较。并根据比较结果来更新模型中的数据以便下一次的模型输出能够与期望结果更接近。这个过程和人学习时的题海战术很类似。 由此看出机器学习的学习过程是机器直接学习规律改进数据逐渐形成逻辑。而不是先有人类学习规律后再写成代码。故称之为机器学习。 深度学习。这是机器学习的子领域但带来了非常大的变革因此成为了流行的词汇。从字面上解释所谓深度学习即在机器学习时数据组织成了多层次的、有深度的网络。传统成功的机器学习算法一般是三层而深度学习能够实现多达上千层的网络。层次越多可以认为机器学习模型就能越聪明越有智能。 深度学习成功的解决了大量和人类认知相关的问题如图像中识别物体、物体位置、人脸语音中更精确的识别文字文字中翻译、理解含义等。一方面将机器学习模型的效果大大提升另一方面反而降低了机器学习模型应用的难度让更多的人能够参与进来。最近的一次人工智能热潮也是深度学习所带来的。
二、功能
机器学习平台上最重要的三个功能为数据处理、建模、部署也可称为推理。每一个都可自成体系成为一个独立的平台。本章从功能角度来描述机器学习平台给读者以完整的认识。在不同的使用场景下只需要部分功能可删可减不需要面面俱到。
比如采用预构建的人工智能云服务时在建模、部署上并不需要投入主要精力会在数据处理上。再比如对于以研究为主的团队来说利用公开数据集进行模型评估等工作不需要数据处理也不需要部署。甚至对于个人研究者强大的平台也不是必须的手工作坊就能满足需求。
再比如团队需要比较强大的平台。虽然说工欲善其事必先利其器但是常常是业务需求生死攸关的情况相比之下提升平台从而提高生产力的工作还没到不做不可的时候。这时候平台的功能如果不能产生立竿见影、显著的成效可以缓一缓先实现投入产出较高的功能待以后再增量开发或重构。如何很好的平衡开发投入是艺术也是持续的话题这里就不展开了。
在建设平台时要注意合理利用现有的成果。比如一些在发展初期的平台其实已经解决了核心需求可以直接拿来用。还有一些大数据平台通过改造也能很好的解决机器学习的计算问题。再不济多使用开源的小模块在系统中减少一些重复开发的工作。
总之平台对服务稳定性、时效性、生产力、成本等各方面有很大的价值但建设平台不是一朝一夕的事情也没有一个平台能满足各种需求。比如关系型数据库经过了多年的成熟发展除了流行的几种数据库外也不断的有满足新需求的新数据库出现。如理论容量无限的分布式关系数据库还有不少大企业根据自己的应用情况开发的高性能数据库系统以及兴起的各种NoSQL数据库。在使用数据库时不少团队会组合多种数据库来满足需求。在建设机器学习平台时也如此除了用已有的平台外可能还需要自己搭建一些周边的支持系统。
数据
机器学习的本质即通过数据来理解信息掌握知识。因此数据是机器学习的知识来源没有数据计算机就无处学习知识巧妇难做无米之炊。绝大部分机器学习系统需要样本数据并从而进行学习。对于Alpha go这样的强化学习系统数据全部从规则中生成则不需要外部的数据。自动驾驶虽然也涉及到强化学习的部分却需要与实际环境交互的数据数据的收集难度就更高了。
人类文明早期就开始了数据的利用。结绳记事的信息中就有相当一部分是产量等数据信息。前些年流行的大数据系统更是将数据的作用进一步发挥出来并产生了丰富、成熟的分布式存储系统、数据加工流程、数据采集等平台和工具。机器学习平台可直接重用这些大数据平台中的工具。数据标记是机器学习特有的数据需求数据标记就是在数据上加上人类知识形成样本数据的过程。
数据的建设上要根据需求来定。如强化学习不需要数据采集系统小数据量的业务也不需要强大的分布式存储系统企业数据已经有了强大的数据加工能力尽量不要再建立新的数据加工流水线。
数据采集
数据采集即将系统外部的数据导入到机器学习平台中。包括企业内部的数据导入企业间的数据交换以及通过网络爬虫抓取数据等。
对接
对于企业内部的机器学习应用可充分挖掘内部数据的潜力。内部数据一般已有较成熟的数据解决方案可尽量借用现有功能尽量通过已有的功能来做数据加工、整理。
安全
对于跨数据中心、跨安全域的数据传输要注意保护接口安全。不能假设外部人员不知道接口地址、规范就能幸运的一直安全下去。要通过威胁建模来分析数据接口的受攻击面找出解决方案从而减小数据的泄露风险。不仅要对数据传输通道加密增加认证、授权功能还要从流程上保证密钥等关键数据的安全性发生泄露后还要有预案能快速、平稳的更新密钥。
网络瓶颈
跨数据中心传输大量数据时网络通常是瓶颈。遇到瓶颈时除了增加投入提升带宽外还可以从技术方面进行优化。首先看看传输的数据是否还有压缩空间其次可重新审查一下传输的数据是否都是需要的有没有可以去掉的部分。在有的系统中某些数据的实时性要求不强可以在收集数据方进行细粒度的缓存减少数据的重复传输。
除此之外还要注意数据传输过程是否会占用大量带宽对双方的其它业务系统的网络延迟带宽等产生负面影响。这时可考虑错峰传输数据在非业务高峰期进行数据传输或者隔离数据采集的带宽。
网络爬虫
网络爬虫即从互联网获取网页并从中抽取信息。随着互联网的发展网络中的数据越来越多网络爬虫也得以发展成熟。在使用网络爬虫抽取数据时要注意遵守相关的法律法规互联网协议以及道德规范。
如果被抓取方没有提供专门的数据接口网络爬虫的数据采集效率会相对较低且易受页面改动的影响抓取失败。这种情况下首先要通过人工分析确定目标网站的页面级联关系页面结构等信息。然后来制定爬取逻辑并抽取出需要的数据。在爬取网页时如果爬取速度过快有可能会影响到目标网站的正常访问。不仅影响目标网站的业务也会影响数据爬取过程。所以要规划好一定的爬取速度。同时应该有警报机制对抓取中的异常预警及时改进爬虫。
有的网站信息量较大前来爬取数据的也较多通常会有一定的反爬虫策略。反爬虫策略主要分成两个阶段 检测。有的网站会检查请求的数据格式可以发现明显是网络爬虫的情况。还有的网站会对每个IP和cookie等的访问频率做分钟、小时级统计超过一定阈值后即视为网络爬虫。对于流行的搜索引擎还会采用机器学习对网络爬虫的行为建模能更有效的检测到网络爬虫。 应对。检测到网络爬虫后接下来就会采取不同的应对策略。简单的直接封禁IP或网段但一般会过期解禁。还有的会采用图片验证码等方式确认是人类还是爬虫在访问从而决定是否展示关键数据。还有的会对网络爬虫返回缓存的假数据来影响爬虫结果。 还有的情况并不检测是否是网络爬虫直接对关键数据进行保护。如电子商务网站将商品价格用图片显示增加数据分析的难度。还有的采用自定义字体将ascii编码映射到不同的字符上。
另外有的网站会建立白名单允许一部分合作伙伴采集数据白名单内的网站会采取不同的检测、应对方法甚至不做检测。
因此网络爬虫在设计中要考虑以上因素确定合理的爬取策略。如通过代理服务器来更换IP。严格模仿网站请求发送数据或通过浏览器内核来生成数据请求。利用机器学习或人工服务来识别图片中的信息等等。
网络爬虫应用已经非常广泛了可以评估一下已有的软件找到适合自己的方案。
隐私保护
保护客户隐私是企业数据处理时不可忽视的一环每次将数据传输到新环境都会增加数据泄露的风险。此时一方面应仔细分析新系统的安全性另一方面要避免将与建模无关的数据采集到机器学习平台中。如果机器学习过程需要一些隐私数据如地址、电话等应进行脱敏处理。从而减小数据泄露后产生的影响。
不少机器学习推理应用中能获得用户的真实数据。使用真实数据能够弥补测试数据集和真实数据集的差异训练出更精准的模型。与此同时要让用户充分知情注意保护用户隐私不要滥用数据。
数据存储
机器学习平台的整个流程中几乎都会产生数据。除了采集阶段的原始数据外还有加工过的中间数据训练好的模型用户数据等等。对各类数据要考虑不同的需求选择不同的数据存储方案。
数据存储的方案很多在速度、容量、可靠性等各方面的性能上都能做到很高的水准。但每项指标的提升都意味着成本的增加。在数据存储方案上不能盲目追求性能要量力而行。选择对的而不是贵的。
可靠性
可靠性即数据是否能在极端情况下正常使用不会丢失。实际上任何系统都不能保证在任何极端情况下都能正常使用。只能通过不断的演进来避免常见问题从而搭建出可靠性不断逼近100%的可靠系统。
提升可靠性的常见方法即进行数据冗余对整个系统都避免单点依赖产生的风险。从网络、电力来源、主机、硬盘的各个方面都保证一个设备坏了之后不影响整个服务。对硬件上的冗余方法不再详述此处只讨论软件解决方案。
软件上的可靠性其实主要依赖于数据的复制备份来实现。说起来简单但具体的实现上却比较复杂。根据保障的场景不同主要分为两种情况 高可用。即出现问题后系统只允许丢失秒级的数据而且要在数秒之内恢复。由于要求响应时间很快所以高可用一般都在同一个数据中心甚至相邻的机架上实现。数据会在不同的服务器间进行高速复制及时保证有两三份或者更多的数据存在并且几秒钟就检测一下服务器的可访问性随时准备将不可达服务器从集群中剥离。高可用一般用于解决机器的故障问题。虽然一台服务器故障的故障概率比较低但在机房中成千上万台服务器时几乎每天都会有服务器坏掉。通过高可用集群偶发的服务器物理损坏几乎不影响系统的使用。 灾备。即出现灾难性问题后系统仅丢失分钟级的数据且要在十分钟或一小时内恢复服务。常见的灾难性问题包括地震、强烈天气、火灾等极端事件。由于要防止地震等地区性问题灾备需要两个数据存储位置相距800公里以上。为了保证灾备的效果灾备的数据中心之间也会进行持续的数据复制。为了提高资源的利用率进行灾备的数据中心可能也要承担业务工作数据中心之间的数据同步传输是双向的。这样虽然增加了系统设计上的复杂性但可提高资源的利用效率。
分布式文件系统是比较流行的保障数据存储可靠性的方案。有的分布式文件系统不仅能提供高可用还能提供灾备的解决方案。
一致性
一致性即数据从各个方面来看信息都是一致的。可分为两个层面来讨论 数据备份。在提高可靠性的分布式系统中每份数据都有两到三份。系统在不断的保持各份数据都是一致的。当服务器出现故障时就有可能出现几份数据不一致的情况。这时候可取其中的某一份作为主数据从这份数据来重新创建备份。这样有一定的概率会丢失数据但保证了数据的一致性。在出现这种情况时要以一致性优先无论如何都要保证分布式系统备份数据间的一致否则潜在的问题会更多。 冗余信息。在不少系统中因为性能、历史遗留问题等原因会存在一定的数据冗余。一般会在数据更新时逐步刷新这些信息。当数据正在更新时出了问题就有可能产生数据的不一致。传统的关系型数据库通过事务来处理这类问题将前面更新的一半内容恢复还原。如果系统中不支持事务或在分布式业务系统中就需要设计一个可靠的同步机制来实现类似的恢复还原的功能。 比如银行系统中要完成跨行转账需要从一个账户中扣除金额再给另一个账户增加金额。其中涉及到的系统包括双方银行中间的支付系统甚至更多的系统。其中要通过多种同步、超时、重试的机制来保障账户金额的一致性并尽量保证交易的成功进行。又比如系统中可能会有些缓存信息。当原始信息刷新后依赖于业务需求缓存信息也需要一定的更新策略要么即时刷新要么定时刷新。 要保持数据的一致性就会牺牲访问速度不是所有的数据都需要一致性。这要根据业务的形态来决定。一般来说如果业务没有要求就尽量保证访问速度提高系统响应能力。
访问速度
根据业务的不同有的数据可能经常写入很少读取有的则相反。还有的数据存取的时候需要越快越好而有的数据则对速度不敏感。如备份数据几乎都是写入且对读取时的延迟不敏感。而机器学习中的学习参数则需要在内存中保障最快的读取速度。当机器学习模型在推理应用时对于模型只有读取需求不需要写入。访问速度和一致性、可靠性的需求都有所冲突鱼和熊掌不能兼得。
数据访问从CPU寄存器、缓存到内存、网络、磁盘、物理距离数据延迟的数量级逐步增加。见下表同时每单位容量的价格也随之快速下降。
存储类型读取速度CPU寄存器0.3纳秒CPU一级缓存1纳秒CPU二级缓存10纳秒内存100纳秒高速网卡1G10,000纳秒固态硬盘1,000,000纳秒1毫秒传统磁盘20,000,000纳秒20毫秒从中国到美国往返的理论极限光速100,000,000纳秒100毫秒
在实际应用中数据库、分布式文件系统等由于要处理更多的通用问题或数据规模较大同时要保证可靠性、一致性并不能达到上面的理论速度。通常会慢一个或数个数量级。传输数据用的光纤达不到理论光速。
另外访问速度应该从整个系统来计算有时存储本身并不是瓶颈。比如通过各个组件的运算最终需要两秒钟才能返回结果。可以看出通过存储也很难提升其速度。只能从算法、流程上来提升如增加缓存等这也意味着产生一致性问题。
版本控制
版本控制即哪个版本的数据会被使用。在业务数据处理时会经常产生新的数据。在多种场景下都需要对新数据进行版本控制。
在新数据写入完毕前不应该可读取否则会读取到部分数据。在写入完成后应尽快允许读取这样能够拿到最新的结果。如果有缓存时在数据更新后可能需要触发缓存同步更新。
在新数据中发现问题时在某些场景下应该允许切换回旧数据。这部分功能和业务结合紧密因此通常需要自己实现相关功能。
数据加工
数据加工通常可称为ETLExtract Transform Load即将数据导出、转换、加载可称为保存。总之数据加工可以抽象为数据的导入导出和形态的转换描述了数据加工的通用流程。成熟的ETL系统会提供大量的组件适配不同的数据源以及丰富的数据变换操作并解决了很多稳定性相关的问题。使用这样的ETL系统能够达到事半功倍的效果。
在数据加工过程中有可能需要多次ETL的数据加工才能得到最终需要的数据。这时系统需要在完成前置的ETL任务后触发下一轮的ETL任务。要考虑到上一节中提到的数据一致性、可靠性造成的延迟防止下一轮ETL没有在最新的数据上运行或因为找不到数据而出现错误。
导入导出
导入导出即将数据从各种异构的数据源中导出并导入到另一个目的数据源中。导入导出的主要功能是支持关系型数据库、NoSQL数据库、json、csv、内存、web api、程序结构体等各种形式的接口能将数据无缝的在各种数据源中导入导出。各种数据源之间的数据结构并不一定能一一映射如有的NoSQL能够存储树形结构的数据而关系型数据库只能存储二维的数据表。
在导入导出过程中可以对数据进行过滤、映射可以选择出部分数据列也可以增加查询条件选择出部分数据条目。在导入时可以将不同名的数据列进行映射改名。
转换
在数据平台中数据转换是核心功能之一。常用的SQL、Map Reduce等都是对数据的转换。数据转换可以串联起来对数据进行多次处理。也可以并联起来将两个数据源合并或一份数据输出两种形态的数据。
将数据转换从导入导出中单独抽象出来不必关心源数据存放在哪里支持什么样的操作。所有的操作都会在ETL的转换过程中完成。大大方便了异构数据的处理在数据需求非常多、数据源复杂的场景下对效率提升非常高。但是通过通用的转换流程处理数据就不能使用数据源里原生的数据处理过程在某些场景下数据转换效率会大幅降低。
通过组合不同的数据转换方式能完成绝大部分的数据转换操作。在一些通用数据转换组件无法完成操作或者效率太低的情况下可以实现接口写出专用转换组件。数据转换的主要种类如下。 单条数据内的变化。 树形结构的调整。这种转换可以进行移动、复制、增加、删除树形结构内的节点以及改名等操作。还可以将树形结构扁平化为只有一层节点。这样变化后可以将键值对导入到关系型数据库中。机器学习中大部分数据也是像关系型数据库一样的键值对而不是树形结构。 字段计算。在机器学习中要对NULL值赋值或者通过正则表达式来抽取出信息。这些都通过修改字段值或增加新的计算字段来实现。 数据打包拆包。在数据处理流程中有些操作通过批处理效率会更高。这时需要将多条数据打包成一条以便后面的流程可以进行批量操作。完成批量操作后再拆成多条数据。 分拆单条数据。树形结构中包含的数组如果要在接下来的数据中单独处理则需要将数组分拆成多条数据。分拆后的数据还可能需要包含原始数据的某些字段。 聚合多条数据。聚合可以统计唯一键、进行求和等操作。如果聚合的数据量非常大有可能需要外存来缓存。 跨语言互操作。有时候ETL工具本身的语言和用户使用的目标语言不一致。可通过互操作接口来调用用户代码如通过网络接口序列化数据。这样用户可以用目标语言写出业务相关的转换组件集成到ETL工具中。 数据流的合并与分支。如果多种数据需要合并则可通过数据流的合并操作来进行。数据流合并从独立的数据导出操作开始在某一步中合并起来。或者在数据转换过程中根据主键查询出新的数据后直接合并。如果数据需要同时输出两种格式如原始数据与聚合内容都需要输出则可以在中间对数据进行分支通过两条流水线来分别处理。 定制化。如果原生的转换组件不足以处理复杂的业务逻辑或者为了提高处理效率。可以实现转换组件的接口实现定制的逻辑。
校验与清洗
大数据中异常数据是常见问题大数据通常只进行一些聚合操作少量的异常数据可以忽略不计。在机器学习应用中所有数据都会影响模型的计算结果在某些算法下异常数据会对模型效果有非常大的影响。所以要对数据进行校验和修复将异常数据在数据处理过程中过滤掉。对于常见的数据异常要从数据源头调研检查数据来源上是否有缺陷并进行修复。
数据清洗是对数据进行修正。有些数据虽然不属于数据异常但不利于机器学习。要么将数据标准化要么忽略掉这类数据。比如数值列中的空值可能需要替换为零在自然语言处理中如果文本只有一两个字基本没法生成有意义的模型可直接忽略掉整条数据有些空白字段可以训练一个小的机器学习模型来预测、填充转换成正常数据。
可视化
平台的核心目标是提高生产力。如果将提高生产力分解开来其中很重要的方法就是降低学习成本节约日常操作时间。可视化是降低学习成本节约操作时间的重要方法。
数据处理过程可以完全是代码也可以用json文件一样的配置方法来实现。使用配置来实现就能很容易的接入各种系统实现可视化。可视化后一些数据的导入导出工作还可以交给非开发人员使用节约沟通交流的时间。这也会让新人更容易上手更快形成生产力。数据的可视化也能让人对数据处理过程有直观的感觉甚至能发现一些数据处理中的错误。
样本数据
样本数据包含了数据以及从数据中期望得到的知识也称为标记数据。有监督学习supervised learning必须有样本数据才能训练出模型从而将知识应用到新数据中。虽然从机器学习的分类上来看还有无监督学习、强化学习等不需要样本数据的场景。但有监督学习的应用更为广泛。
数据标记的过程是机器学习中将人类知识赋予到数据上的过程。有了好的标记数据才能训练出好的模型。如果标记数据的质量不高会直接影响到训练出的模型质量。比如人类的标记数据正确率在90%那么模型的理论最好成绩也不会高于90%。
标记后的样本数据是团队独有的财富。它的价值不仅在于标记人员投入的时间、经济成本也在于独有的样本数据带来的模型效果的提升。模型丢了可以重新训练样本数据丢了重新标记的时间成本和机会成本可能无法承受。因此一方面要做好数据备份等工作防止数据丢失另一方面还要做好内部、外部的保密工作防止样本数据泄露。
一般的数据标记方法是让有一定背景知识的人来标记然后将数据和标记结果及其关联保存起来。训练时会将数据和标记结果同时输入机器学习模型中让模型来学习两者间的关系。数据标记方法的复杂程度不一如 图片分类即给定一张图片对其进行分类。标记方法比较简单给每张图片进行分类即可标记速度也比较快。如工业应用中经常要检测流水线上是否有次品。可让人来判断成品、次品图片然后点击相应的分类或者将图片放入不同分类的文件夹即可。 文本分类即给定一段文本判断它的分类。如正面评价、负面评价、不相关评价、中性评价、垃圾广告等。这种数据的标记需要标记者通读文本并领会其中的含义也比较简单。在舆情监测领域有广泛的应用。 目标检测即给定一张图片将其中需要检测的目标标示出来并进行分类。这种标示方法有两种一种是用矩形框将目标标示出来另一种需要将目标的每个像素都标示出来。可以看出这两种标记方法的工作量都大于前面两种标记任务标记像素更需要大量的时间才能标记得非常准确。自动驾驶领域就需要对行人、车辆、道路标识等信息标记其位置。 语音识别即将音频转换为文字。虽然这类数据已经较多但仍然不能满足需求。如诗词、方言、特定噪音下的数据等都需要人工标记来丰富数据。语音识别应用非常广泛最常见的就是对视频、音频内容自动生成字幕。
除了人工标记有些领域可以利用已有数据来形成样本数据。如机器翻译可以利用大量已有的双语翻译资料。但机器翻译一般是逐句翻译所以还要找出双语句子对。如果需要的应用领域没有足够的双语资料翻译效果也会受影响。
数据使用
在机器学习中数据的使用上也有基本的原则。一般说来会将数据按比例随机分成三组训练集、验证集、测试集。 训练集用来在训练中调整模型中的参数使模型能够拟合出最佳效果。通常训练集在所有数据中占的比例最高大部分数据都用来进行训练。 验证集用来在每轮拟合之后评估拟合效果。有的训练过程会在数据达到了一定的性能后停止训练这就是用验证集来评估的。通过在验证集上进行推理预测能够实时的了解模型当前的训练进度。可以了解训练是否在收敛收敛的速度如何等信息。 在有些训练过程中验证集不是固定的集合。在每轮训练前将数据随机分配至训练集和验证集。这样参与模型训练过程的数据规模就更大了。 测试集用于最终模型准备发布之前的评估。测试集就像最终考试一样一般对一个模型只用一次甚至对于一些训练结果不好的模型不使用。测试集用来解决模型的过拟合问题。过拟合即模型只能很好的预测训练时使用的数据对实际数据预测效果会明显打折扣。因此在模型训练过程中要严格限制测试集的使用次数否则它和验证集就没有区别无法发现过拟合的问题。
标记工具
标记工具提供了用户界面帮助数据标记人员高效的标记数据。根据不同的标记任务标记工具的用户界面会有所不同但后面的处理流程是相似的。标记工具最重要的任务是提升生产力让标记人员的时间花在知识推理上而不是操作工具、等待工具响应中。
标记工具的用户界面开发过程并不复杂开发成本也不高。只要遵循基本的用户体验设计方法以生产力为目标就能做出易用、高效的标记工具。因此几乎每个团队、平台都会开发自己的标记工具。
标记工具要紧密结合到整个数据处理过程中从源数据到标记后数据的存储。除了要做好备份外标记后的样本数据要融入整个数据流水线尽快将标记的数据投入到模型训练中让新数据尽早发挥作用。
在线标记
用户数据收集的过程从产品设计实现到后端数据处理的整个流程。有的场景下用户不仅会提供数据还会提供数据标记从而能够减少标记数据上的投入。将这些标记数据及时补充到样本数据中随着用户的使用产品就会越来越好。
如在搜索引擎中排名第一的结果是模型计算出的第一个结果接下来的结果相关性依次降低。而用户第一次点击的结果则是用户标记的相关度最高的结果。因此可以将用户的搜索关键词、第一次点击的结果保存下来作为样本数据用于模型的下一轮训练。通过不断的迭代训练用户就会感觉到搜索引擎越来越聪明排在前面的结果就有自己想要的。
外包
标记工作比较枯燥如果长时间进行数据标记工作人会感到厌烦。如果需要的样本数据量很大团队人手不够或者要解决其它更重要的事情又或者标记数据的工作不是持续性的没必要组建自己的标记团队。这时外包数据标记工作是个很好的选项。随着机器学习的火热数据标记工作已经逐步标准化。一些被称为数字富士康的公司有成百上千人的团队专门进行数据标记工作还有流程来保证标记质量的稳定。
外包数据标记工作时最重要的是要保证标记结果的质量。虽然成熟的外包团队能够很好的控制质量但对于业务相关的知识可能并不熟悉。需要团队悉心教导、传授知识才能保证数据标记结果的质量。
众包
众包也是一种将工作外包的方式不同点在于是将任务直接包给个人而不是公司。个人与项目的耦合也非常松散完全按照工作量计费。众包的优势在于经济成本低廉一旦运营好了横向扩充标记速度非常容易。有一些公益性质的众包项目人们甚至愿意免费参与。众包的技巧在于管理。通过合理的架构、结果评估以及激励方式就能得出好的结果。
比如ImageNet是一个众包的图片数据集标注了1400万张图片的两万多个分类以及超过100万张图片的边框。基于ImageNet的大赛让图像认知领域得到了长足的发展对深度学习的发展起到了至关重要的推动作用。
一些数据标注的众包平台可以直接使用能够节省众包的管理成本和风险。但是平台的质量参差不齐需要认真的评估。
其它方法
如果实在找不到更多标记数据可以通过一些机器学习中独特的方法来增加数据。这些方法虽然效果有限但也有一定的价值。 数据增广Data Augmentation。主要应用于图像领域可通过往图片中增加噪点数据翻转、小角度旋转、平移、缩放等方法将一张图片变为多张图片。从而增加样本数据总量。 迁移学习Transfer Learning。可用于深度学习的多层网络中。在其它某个有丰富样本数据的领域先训练出较高质量的模型。然后将其输出端的一些隐藏层用本领域的样本数据重新训练则可以得出较好的效果。一些图片分类的云服务有的通过这种方法来基于用户上传的少量图片进行学习、分类得到性能不错的模型。 半监督学习Semi-supervised Learning、领域自适应Domain Adaptation等其它方法。