• [技术干货] 深度数据包检测 (DPI) 技术   精准数据获取
    深度数据包检测 (DPI) 技术是一种能够深入分析和控制网络流量的技术,其检测粒度达到应用层,可以识别和控制各种应用协议,如HTTP、FTP、DNS等。DPI技术广泛应用于网络安全、网络优化、业务运营等领域,能够帮助企业提高网络性能、保障网络安全、提升用户体验。 DPI技术的工作原理是对网络流量进行深入的分析和控制。当网络流量经过DPI设备时,设备会对流量进行深度分析,识别出流量的应用协议,然后根据预设的策略对流量进行控制,如允许、限制或阻断等。  例如,在网络安全方面,通过对网络流量进行深度分析,DPI可以实时检测和防范各种网络攻击,如DDoS攻击、网络钓鱼等。在网络优化方面,DPI可以识别和控制各种应用层协议,有效优化网络资源,提高网络性能。   DPI技术的应用对于企业和个人都有着重要的意义。对于企业来说,DPI技术可以帮助他们提高网络性能、保障网络安全、提升用户体验,从而提高企业的运营效率和竞争力。对于个人来说,DPI技术可以保护他们的网络安全,避免网络攻击和网络钓鱼等安全威胁,提高他们的网络使用体验。  DPI技术还可以用于构建用户画像。在当今这个信息爆炸的时代,品牌了解自己的用户变得越来越重要。用户画像中包含了用户的年龄、性别、地域、社交关系、兴趣偏好、触媒习惯、行为特征、消费习惯等信息,可以帮助品牌深入了解目标用户群体,洞察用户真正的动机和行为。这对于品牌来说,具有重要的营销和产品设计意义。  
  • [技术干货] 深度数据包检测 (DPI) 构建用户画像 
    在当今这个信息爆炸的时代,品牌了解自己的用户变得越来越重要。用户画像中包含了用户的年龄、性别、地域、社交关系、兴趣偏好、触媒习惯、行为特征、消费习惯等信息,可以帮助品牌深入了解目标用户群体,洞察用户真正的动机和行为。 构建用户画像的原理和机制主要基于对用户行为数据的收集、分析和建模。通过数据收集工具,如网站分析工具、社交媒体监控工具等,收集用户的行为数据。然后,对这些数据进行深入分析,包括用户的人口统计学特征、兴趣爱好、行为习惯等。基于这些分析结果,建立用户画像模型,从而实现对用户的全面理解和精准刻画。例如,某电商企业通过收集用户的购物行为数据,分析用户的年龄、性别、地域、购物偏好等信息,建立了用户画像。基于这些用户画像,该企业可以进行精准的商品推荐,从而提高用户的购物体验和满意度,提高商品的销售转化率。构建用户画像在营销、产品设计、客户服务等方面都具有重要的应用价值。通过用户画像,品牌可以深入了解目标用户,制定更有效的营销策略,设计更符合用户需求的产品,提供更有针对性的客户服务。用户画像还可以帮助企业进行用户行为预测,从而提前布局,抢占市场先机。构建用户画像对于提升品牌竞争力,实现业务增长具有重要的意义。
  • 智能数据洞察(DataArts Insight)应用场景
    固定式报表/大屏制作场景场景简介:DataArts Insight支持快速搭建固定报表/大屏,实现全自然语言交互的BI自助分析,让一般业务人员和管理者也能轻松获取和分析数据。用户痛点:业务涉及表多,报表响应慢;报表交互和样式复杂,调试工作量大。产品优势:高性能BI引擎支持多种加速模式,10亿数据秒级响应;AutoGraph引擎自动生成可视化图表,风格统一,美观。个性化分析场景场景简介:企业业务需求的多样化催生出对特定BI功能的需求,除了基础的数据查询和可视化分析,DataArts Insight提供了多种DataArts Insight能力,提供不同的数据视图和报表,以满足不同工作职责的用户需求实现个性化分析。用户痛点:报表需求多、变化快,分析成本高,需求响应慢;BI使用门槛高,业务人员难上手。产品优势:盘古for BI,自然语言交互的BI自助分析,无论是业务人员还是技术人员都能轻松获取和分析数据。数据挖掘场景场景简介:DataArts Insight 内置或集成行业算法,深入挖掘数据价值;支持业务态势洞察,辅助业务管理者高效决策。用户痛点:传统BI只满足简单的统计分析,无法支撑问题根因分析、趋势预测等需求。产品优势:DataArts Insight 内置集成行业算法,深入挖掘数据价值;支持自动分析洞察讲解和专题故事生成,辅助业务管理者高效决策。数据管理和安全场景场景简介:DataArts Insight支持数据平台原生集成。华为云库/仓/湖/治理等数据平台产品原生集成,降低集成和运维难度,提供全链路数据安全保护能力。用户痛点:数据平台架构复杂,集成和运维困难,全链路数据安全存在隐患。产品优势:华为云数据生产线原生集成,开箱即用,提供全链路数据安全保护能力。嵌入式BI场景场景简介:DataArts Insight支持嵌入式分析,使能应用智能化升级。轻松将可视化图表和盘古 for BI智能问答机器人嵌入到您的SaaS应用界面中,使能SaaS应用智能化升级,提升用户体验,并催生新的盈利机会。用户痛点:强依赖嵌入式报表,BI开发门槛高,灵活度低。产品优势:盘古for BI “0”门槛自助分析,全自然语言交互的BI自助分析。
  • [其他] 浅谈异常检测(anomaly detection)
    在数据挖掘中,异常检测(anomaly detection)对不匹配预期模式或数据集中其他项目的项目、事件或观测值的识别。通常异常项目会转变成银行欺诈、结构缺陷、医疗问题、文本错误等类型的问题。异常也被称为离群值、新奇、噪声、偏差和例外。特别是在检测滥用与网络入侵时,有趣性对象往往不是罕见对象,但却是超出预料的突发活动。这种模式不遵循通常统计定义中把异常点看作是罕见对象,于是许多异常检测方法(特别是无监督的方法)将对此类数据失效,除非进行了合适的聚集。相反,聚类分析算法可能可以检测出这些模式形成的微聚类。有三大类异常检测方法。在假设数据集中大多数实例都是正常的前提下,无监督异常检测方法能通过寻找与其他数据最不匹配的实例来检测出未标记测试数据的异常。监督式异常检测方法需要一个已经被标记“正常”与“异常”的数据集,并涉及到训练分类器(与许多其他的统计分类问题的关键区别是异常检测的内在不均衡性)。半监督式异常检测方法根据一个给定的正常训练数据集创建一个表示正常行为的模型,然后检测由学习模型生成的测试实例的可能性。应用异常检测技术用于各种领域,如入侵检测、欺诈检测、故障检测、系统健康监测、传感器网络事件检测和生态系统干扰检测等。它通常用于在预处理中删除从数据集的异常数据。在监督式学习中,去除异常数据的数据集往往会在统计上显著提升准确性。热门方法文献中提出了几种异常检测方法。一些热门方法有:    基于密度的方法(最近邻居法、局部异常因子及此概念的更多变化)。    基于子空间与相关性的高维数据的孤立点检测。    一类支持向量机。    复制神经网络。    基于聚类分析的孤立点检测。    与关联规则和频繁项集的偏差。    基于模糊逻辑的孤立点检测。    运用特征袋、分数归一化与不同多样性来源的集成方法。不同方法的性能在很大程度上取决于数据集和参数,比较许多数据集和参数时,各种方法与其他方法相比的系统优势不大。
  • [技术干货] NLP领域任务如何选择合适预训练模型以及选择合适的方案【规范建议】
    1.常见NLP任务信息抽取:从给定文本中抽取重要的信息,比如时间、地点、人物、事件、原因、结果、数字、日期、货币、专有名词等等。通俗说来,就是要了解谁在什么时候、什么原因、对谁、做了什么事、有什么结果。文本生成:机器像人一样使用自然语言进行表达和写作。依据输入的不同,文本生成技术主要包括数据到文本生成和文本到文本生成。数据到文本生成是指将包含键值对的数据转化为自然语言文本;文本到文本生成对输入文本进行转化和处理从而产生新的文本问答系统:对一个自然语言表达的问题,由问答系统给出一个精准的答案。需要对自然语言查询语句进行某种程度的语义分析,包括实体链接、关系识别,形成逻辑表达式,然后到知识库中查找可能的候选答案并通过一个排序机制找出最佳的答案。对话系统:系统通过一系列的对话,跟用户进行聊天、回答、完成某一项任务。涉及到用户意图理解、通用聊天引擎、问答引擎、对话管理等技术。此外,为了体现上下文相关,要具备多轮对话能力。语音识别和生成:语音识别是将输入计算机的语音符号识别转换成书面语表示。语音生成又称文语转换、语音合成,它是指将书面文本自动转换成对应的语音表征。信息过滤:通过计算机系统自动识别和过滤符合特定条件的文档信息。通常指网络有害信息的自动识别和过滤,主要用于信息安全和防护,网络内容管理等。舆情分析:是指收集和处理海量信息,自动化地对网络舆情进行分析,以实现及时应对网络舆情的目的。信息检索:对大规模的文档进行索引。可简单对文档中的词汇,赋之以不同的权重来建立索引,也可建立更加深层的索引。在查询的时候,对输入的查询表达式比如一个检索词或者一个句子进行分析,然后在索引里面查找匹配的候选文档,再根据一个排序机制把候选文档排序,最后输出排序得分最高的文档。机器翻译:把输入的源语言文本通过自动翻译获得另外一种语言的文本。机器翻译从最早的基于规则的方法到二十年前的基于统计的方法,再到今天的基于神经网络(编码-解码)的方法,逐渐形成了一套比较严谨的方法体系。文本挖掘:包括文本聚类、分类、情感分析以及对挖掘的信息和知识的可视化、交互式的表达界面。目前主流的技术都是基于统计机器学习的。2.如何将业务问题抽象为已得到很好解决的典型问题2.1 明确业务的输入与输出令输入文本用X表示,输出标签用Y表示,则有以下粗略的分类:2.1.1 如果Y表示某一类的概率,或者是一个定长向量,向量中的每个维度是其属于各个类的概率,且概率之和为1,则可抽象为文本多分类问题。a.一般X只有一段文本。如下所示 i.如情感分析等任务。房间 太 小 。 其他 的 都 一般 0b.如果X是2段文本(X1,X2),则是可以抽象为句对分类问题。如下所示 i:如NLI等任务。大家觉得她好看吗 大家觉得跑男好看吗? 0c.如果的每个类别的概率相互独立,即各类概率之和不为1,可抽象为文本多标签分类问题。如下所示 i:如用户评论分类、黄反识别等任务。互联网创业就如选秀 需求与服务就是价值 0 1d. 如果X有多段非文本特征输入,如整型、浮点型类型特征。则可抽象为混合特征的分类问题。如下所示 i:如CTR预估等任务。 CTR预估*CTR预估是推荐中最核心的算法之一。 相关概念: CTR预估:对每次广告的点击情况做出预测,预测用户是点击还是不点击。 CTR预估的影响因素:比如历史点击率、广告位置、时间、用户等 CTR预估相关介绍 推荐算法之4——CTR预估模型2.1.2 如果X是2段文本(X1,X2),Y表示二者的相似度,可抽象为文本匹配问题。如下所示喜欢 打篮球 的 男生 喜欢 什么样 的 女生 爱 打篮球 的 男生 喜欢 什么样 的 女生 1a.如语义相似度、相似问题匹配等任务。b.文本聚类的问题可以通过文本相似度问题进行处理。2.1.3 如果X有一段文本,Y是一个与X等长的序列,可抽象为序列标注问题。如下所示海 钓 比 赛 地 点 在 厦 门 与 金 门 之 间 的 海 域 。 O O O O O O O B-LOC I-LOC O B-LOC I-LOC O O O O O Oa.如分词、POS、NER、词槽挖掘等任务。2.1.4 如果X有一段文本,Y是一个不定长的文本,可抽象为文本生成问题。如下所示Rachel Pike : The science behind a climate headline Khoa học đằng sau một tiêu đề về khí hậua.如机器翻译、文本摘要、标题生成等任务。2.1.5.如果X为一段文本,Y表示文本X作为正常语句出现的概率或者混淆度,则属于语言模型任务。如下所示<s> but some analysts remain sour on the company but some analysts remain sour on the company <e>a.语言模型任务的子问题是基于上(下)文X预测下(上)一个词出现的概率Y,可以理解为一种特殊的文本分类。2.1.6如果X是2段文本(X1,X2),分别表示正文篇章和问题,Y是篇章中的一小段文本,表示对应问题的答案,则可抽象为阅读理解问题。{ "data": [{ "title": "", "paragraphs": [{ "context": "爬行垫根据中间材料的不同可以分为:XPE爬行垫、EPE爬行垫、EVA爬行垫、PVC爬行垫;其中XPE爬行垫、EPE爬行垫都属于PE材料加保鲜膜复合而成,都是无异味的环保材料,但是XPE爬行垫是品质较好的爬行垫,韩国进口爬行垫都是这种爬行垫,而EPE爬行垫是国内厂家为了减低成本,使用EPE(珍珠棉)作为原料生产的一款爬行垫,该材料弹性差,易碎,开孔发泡防水性弱。EVA爬行垫、PVC爬行垫是用EVA或PVC作为原材料与保鲜膜复合的而成的爬行垫,或者把图案转印在原材料上,这两款爬行垫通常有异味,如果是图案转印的爬行垫,油墨外露容易脱落。当时我儿子爬的时候,我们也买了垫子,但是始终有味。最后就没用了,铺的就的薄毯子让他爬。您好,爬行垫一般色彩鲜艳,能吸引宝宝的注意力,当宝宝刚会爬的时候,趴在上面玩,相对比较安全,不存在从床上摔下来的危险。对宝宝的爬行还是很有好处的。还有就是妈妈选择爬行垫时可以选择无害的PE棉,既防潮又隔冷隔热。外有要有一层塑料膜,能隔绝液体进入垫子内部,而且方便清洗。宝宝每次爬行,一定要记得把宝宝的手擦干净。", "qas": [{ "answers": [{ "text": "XPE", "answer_start": 17 }], "id": "DR-single-pre_and_next_paras-181574", "question": "爬行垫什么材质的好" }] }, ..., ] }] }2.1.7 如果Y是以上多种任务的组合,则可以抽象为多标签学习、多任务学习任务。a.如实体关系抽取任务,实体抽取本属于序列标注、关系抽取本属于文本多分类。2.2抽象与拆分任务取舍经验2.2.1优先考虑简单的任务,由易到难循序渐进:a.文本分类、文本匹配、序列标注、文本生成、阅读理解、多任务学习、强化学习、对抗学习等。2.2.2 复杂任务可拆分、化简成简单的子任务a.如实体关系抽取任务,可以拆分为实体识别+关系抽取的pipline进行实现。b.如文本纠错任务,可以拆分出语言模型、统计机器翻译等多种不同子任务构造复杂的pipline进行实现。c.如排序任务,输入X为多段文本,输出Y为每段文本的排序位置,可化简成文本分类问题、文本匹配问题进行处理。2.2.3 有监督学习任务优先于无监督学习任务a.因为有监督学习更可控,更易于应用最前沿的研究成果。文心目前只覆盖有监督、自监督任务。b.比如文本关键词抽取,可以有TFIDF之类的无监督解法,但效果控制较困难,不如转换为文本分类问题。2.2.4 能应用深度学习的任务优于不利用深度学习的任务a.因为深度学习算法效果一般更好,而且可以应用到最前沿的预训练模型。文心目前只采用深度学习算法。b.如果文本聚类,可以有LDA之类的解法,但效果一般不如基于深度学习的语义相似度的文本聚类。3. 明确业务目标与限制条件3.1典型业务目标与限制条件1.预测部署性能a.典型指标:qps 性能指标:QPS、TPS、系统吞吐量理解2.模型效果a.以文本分类为例,典型指标:精确率、准确率、召回率、F1值b.该评估指标应该在训练开始之前基本确定,否则很容易优化偏。3.硬件采购成本a.典型指标:钱b.GPU远贵于CPU,V100贵于P40。4.训练时间成本(GPU,卡,调参,GPU利用率)a.典型指标:每一轮训练所需要的时间。5.数据大小限制a.由于标注成本较高,很多时候是数据量很少又希望有很好的效果。6.开发迭代成本a.搭建环境成本b.迭代效率:往往是最消耗时间的部分。3.2 可供选择的方案选择平台版还是工具版选择GPU还是CPU训练,哪一款硬件,单机还是多机,单卡还是多卡,本地还是集群选择怎样的预制网络是否需要预训练模型选择哪一版本的预训练模型训练数据要多少batch_size、train_log_step、eval_step、save_model_step选多少4.根据业务目标与限制条件选择合适的方案4.1预测部署性能如果要求qps>1000a.不适合直接部署ERNIE预训练模型。b.但可尝试蒸馏策略,模型效果会存在一定损失。如果要求qps>100a.如果预算允许使用GPU,可尝试直接部署ERNIE相关预训练模型,推荐尝试ERNIE-tiny系列模型。b.如果预算只允许使用CPU,可尝试CPU集群部署ERNIE相关预训练模型。3.如果对部署性能要求不高,可随意尝试各种预训练模型。4.性能细节请参考:模型预测与部署——预测性能4.2 模型效果1.一般来说,复杂的网络优于简单的网络,多样的特征优于单一的特征,有预训练模型的效果优于无预训练模型。a.从模型复杂度来看,LSTM、GRU、CNN、BOW的复杂度与效果依次递减,速度依次提升。2.一般来说,在预训练模型中,large优于base优于tiny,新版本的模型优于旧版本的模型,针对具体任务的预训练模型优于通用版预训练模型。3.一般来说,在不欠拟合的情况下,训练数据越多模型效果越好,标注数据的质量越好效果越好。标注数据的质量优于数据的数量。4.不同任务适合的网络结构并不相同,具体任务具体分析。4.3硬件采购成本1.GPU远贵于CPU,常用训练用GPU型号为V100、P40、K40,价格依次递减。2.具体成本可参考百度云服务器-BCC-价格计算器3.如果缺少训练资源,可通过文心平台版的免费共享队列进行训练,资源紧张,且用且珍惜。4.4训练时间成本1.GPU还是CPUa.对于非ERNIE等复杂网络的模型,CPU的训练速度一般也能接受。 如果训练语料过多,数千万条以上,则建议采用CPU集群进行训练。 b.对于ERNIE模型,尽量采用GPU训练,CPU太慢,训练不起来。2.怎么用好GPU a.GPU并行训练能提升训练速度,建议优先把一个节点(trainer)的卡数用完,再考虑多机训练。因为单机多卡的GPU利用率更高,更快。而多机训练数据通信时间成本较高,时间更慢。 b.大原则:GPU利用率越高训练越快。 c.还有一点需要注意,多卡训练时是将不同的数据文件送给不同的卡,所以数据文件的个数要大于卡的个数。数据文件建议拆分细一些,这可以提升数据读取的速度。 d.熟练的同学可以尝试GPU多进程单机多卡训练、混合精度训练等方法,提升训练速度。3.train_log_step、eval_step、save_model_stepa.分别表示每多少步打印训练日志、每多少步评估一次验证集、每多少步保存一次模型。 b.设置不当也会拖慢训练时间 c.一般建议三者依次放大十倍,如:10、100、10004.batch_sizea.设置过小容易收敛慢,设置过大容易超过显存极限直接挂掉 b.如果使用ERNIE,batch_size建议小一些,使用large版本建议更小一些,如果输入语句并不是很长可以适当增加batch_size。 c.如果不使用ERNIE,可以大一些。 d.建议使用默认配置,如果想优化可以采用二分查找4.5 数据大小限制1.一般建议标注语料越多越好。2.非ERNIE模型一般需要几万至几百万条数据能收敛到较好的效果。3.ERNIE模型一般需要几千至几万条数据即可收敛到较好效果。a.一般不用ERNIE训练数百万条以上的数据,因为这会极大延长训练时间,增大资源消耗,而对效果的提升并不明显。自己有足够GPU资源的用户除外。 b.对于基线模型,建议在几万条数据上验证策略有效后再尝试增加数据量。4.如果用ERNIE模型,最少需要多少样本才能取得效果a.对于文本分类与序列标注,一般来说每个标签覆盖的样本数至少要超过200条才能有一定的效果。也就是说如果要进行50类多分类,就总共至少需要1万条样本。一般分类的类别越多任务越复杂。4.6开发迭代成本1.搭建环境成本a.如果只想训练基线模型验证效果,可以考虑使用文心平台版,免去搭建环境的成本。 b.如果需要不断调试、迭代优化模型,而由于平台版集群资源紧张造成迭代周期过长,可以尝试使用工具版。 i:这会付出搭建环境的成本,但长痛不如短痛。2.迭代效率a.使用工具版本地调试成功后再上集群训练能极大提升迭代效率。 b.使用预训练模型能提升迭代效率。 c.基线模型,建议在几万条数据上验证策略,提升迭代效率。验证有效后再尝试增加数据量5. 如何高效训练NLP任务汇总诸多NLP算法同学的建议,我们把高效训练NLP任务的基本流程总结如下:1.分析业务背景、明确任务输入与输出,将其抽象为已得到很好解决的NLP典型任务。 a.对于复杂任务,需要将其拆分成比较简单的子任务 b.文心已覆盖绝大部分NLP典型任务,可参考文心ERNIE工具版-支持任务。2.准备好几千条格式规范的训练数据,快速实现一个NLP模型基线。 a.最快速的方法是通过文心ERNIE平台版或者工具版,采用预制网络和模型无代码训练一个模型基线。 b.本步骤只需要您知道最基本的机器学习概念,划分好训练集、验证集、测试集进行训练即可。 c.评估训练出模型的效果,看是否满足你的业务需求,如果不满足,可考虑进一步优化模型效果。3.优化模型效果: a.各优化手段按照投入产出比排序如下 i:进一步分析你的业务背景和需求,分析基线模型的不足,进行更细致的技术选型。 ii:采用工具版进行本地小数据调试,极大地提升迭代效率。 iii:基于预制网络进行调参。 iv:自定义组网并进行调参。 v:基于核心接口进行高度自定义开发。 vi:直接修改文心核心源码进行开发。 b.每一种优化手段都都可以申请vip服务进行支持。如何自我判断采用哪种文心开发方式 典型的训练方式:无代码训练(不调参),无代码训练(自主调参),自定义组网训练,高阶自定义训练。以上4类训练方式的开发自由度、上手难度、建模的风险、模型效果的上限依次递增,性价比依次递减。本地工具包的调试、迭代效率最高。6总结:需掌握知识6.1 无代码调参建议具备的相关知识1.明确以下概念:有监督学习、标签、特征、训练集、验证集、测试集、逻辑回归、过拟合、欠拟合、激活函数、损失函数、神经网络、学习率、正则化、epoch、batch_size、分词、统计词表。2.知道回归与分类的区别。3.知道如何通过收敛曲线判断过拟合与欠拟合。4.知道准确率、召回率、精确度、F1值、宏平均、微平均的概念与区别。5.知道为什么训练集、验证集、测试集要保证独立同分布。6.知道什么是神经网络.7.知道什么是迁移学习、什么是预训练模型、什么是finetune、迁移学习的优点是什么。6.2 自定义组网建议具备的相关知识1.前提是已经掌握无代码调参建议具备的相关知识2.明确以下概念:Sigmoid函数公式、softmax函数公式、交叉熵公式、前向传播、反向传播、SGD、Adam、词向量、embedding、dropout、BOW、CNN、RNN、GRU、LSTM、迁移学习、3.知道神经网络为什么具有非线性切分能力。4.知道NLP中一维CNN中的卷积核大小、卷积核的个数各指代什么,时序最大池化层如何操作。5.知道NLP中CNN与LSTM的区别,各擅长处理哪类文本问题。6.知道为什么BOW模型无法识别词语顺序关系。7.知道为什么会梯度爆炸,以及如何解决。参考书籍: a.ML特征工程和优化方法 b.周志华《机器学习》前3章 c.迁移学习常见问题 a.CNN常见问题 b.深度学习优化方法 c.花书《深度学习》6-10章 d.《基于深度学习的自然语言处理》整本项目参考链接:cid:link_2
  • [技术干货] UIE模型实战实体抽取任务【打车数据、快递单】
    项目连接:可以直接fork使用 Paddlenlp之UIE模型实战实体抽取任务【打车数据、快递单】0.背景介绍本项目将演示如何通过小样本样本进行模型微调,快速且准确抽取快递单中的目的地、出发地、时间、打车费用等内容,形成结构化信息。辅助物流行业从业者进行有效信息的提取,从而降低客户填单的成本。数据集情况: waybill.jsonl文件是快递单信息数据集:{"id": 57, "text": "昌胜远黑龙江省哈尔滨市南岗区宽桥街28号18618391296", "relations": [], "entities": [{"id": 111, "start_offset": 0, "end_offset": 3, "label": "姓名"}, {"id": 112, "start_offset": 3, "end_offset": 7, "label": "省份"}, {"id": 113, "start_offset": 7, "end_offset": 11, "label": "城市"}, {"id": 114, "start_offset": 11, "end_offset": 14, "label": "县区"}, {"id": 115, "start_offset": 14, "end_offset": 20, "label": "详细地址"}, {"id": 116, "start_offset": 20, "end_offset": 31, "label": "电话"}]} {"id": 58, "text": "易颖18500308469山东省烟台市莱阳市富水南路1号", "relations": [], "entities": [{"id": 118, "start_offset": 0, "end_offset": 2, "label": "姓名"}, {"id": 119, "start_offset": 2, "end_offset": 13, "label": "电话"}, {"id": 120, "start_offset": 13, "end_offset": 16, "label": "省份"}, {"id": 121, "start_offset": 16, "end_offset": 19, "label": "城市"}, {"id": 122, "start_offset": 19, "end_offset": 22, "label": "县区"}, {"id": 123, "start_offset": 22, "end_offset": 28, "label": "详细地址"}]}doccano_ext.jsonl是打车数据集:{"id": 1, "text": "昨天晚上十点加班打车回家58元", "relations": [], "entities": [{"id": 0, "start_offset": 0, "end_offset": 6, "label": "时间"}, {"id": 1, "start_offset": 11, "end_offset": 12, "label": "目的地"}, {"id": 2, "start_offset": 12, "end_offset": 14, "label": "费用"}]} {"id": 2, "text": "三月三号早上12点46加班,到公司54", "relations": [], "entities": [{"id": 3, "start_offset": 0, "end_offset": 11, "label": "时间"}, {"id": 4, "start_offset": 15, "end_offset": 17, "label": "目的地"}, {"id": 5, "start_offset": 17, "end_offset": 19, "label": "费用"}]} {"id": 3, "text": "8月31号十一点零四工作加班五十块钱", "relations": [], "entities": [{"id": 6, "start_offset": 0, "end_offset": 10, "label": "时间"}, {"id": 7, "start_offset": 14, "end_offset": 16, "label": "费用"}]} {"id": 4, "text": "5月17号晚上10点35分加班打车回家,36块五", "relations": [], "entities": [{"id": 8, "start_offset": 0, "end_offset": 13, "label": "时间"}, {"id": 1, "start_offset": 18, "end_offset": 19, "label": "目的地"}, {"id": 9, "start_offset": 20, "end_offset": 24, "label": "费用"}]} {"id": 5, "text": "2009年1月份通讯费一百元", "relations": [], "entities": [{"id": 10, "start_offset": 0, "end_offset": 7, "label": "时间"}, {"id": 11, "start_offset": 11, "end_offset": 13, "label": "费用"}]}结果展示预览输入:城市内交通费7月5日金额114广州至佛山 从百度大厦到龙泽苑东区打车费二十元 上海虹桥高铁到杭州时间是9月24日费用是73元 上周末坐动车从北京到上海花费五十块五毛 昨天北京飞上海话费一百元输出:{"出发地": [{"text": "广州", "start": 15, "end": 17, "probability": 0.9073772252165782}], "目的地": [{"text": "佛山", "start": 18, "end": 20, "probability": 0.9927365183877761}], "时间": [{"text": "7月5日", "start": 6, "end": 10, "probability": 0.9978010396512218}]} {"出发地": [{"text": "百度大厦", "start": 1, "end": 5, "probability": 0.968825147409472}], "目的地": [{"text": "龙泽苑东区", "start": 6, "end": 11, "probability": 0.9877913072493669}]} {"目的地": [{"text": "杭州", "start": 7, "end": 9, "probability": 0.9929172180094881}], "时间": [{"text": "9月24日", "start": 12, "end": 17, "probability": 0.9953342057701597}]} {#"出发地": [{"text": "北京", "start": 7, "end": 9, "probability": 0.973048366717471}], "目的地": [{"text": "上海", "start": 10, "end": 12, "probability": 0.988486130309397}], "时间": [{"text": "上周末", "start": 0, "end": 3, "probability": 0.9977407699595275}]} {"出发地": [{"text": "北京", "start": 2, "end": 4, "probability": 0.974188953533556}], "目的地": [{"text": "上海", "start": 5, "end": 7, "probability": 0.9928200521486445}], "时间": [{"text": "昨天", "start": 0, "end": 2, "probability": 0.9731559534465504}]}1.数据集加载(快递单数据、打车数据)doccano_file: 从doccano导出的数据标注文件。save_dir: 训练数据的保存目录,默认存储在data目录下。negative_ratio: 最大负例比例,该参数只对抽取类型任务有效,适当构造负例可提升模型效果。负例数量和实际的标签数量有关,最大负例数量 = negative_ratio * 正例数量。该参数只对训练集有效,默认为5。为了保证评估指标的准确性,验证集和测试集默认构造全负例。splits: 划分数据集时训练集、验证集所占的比例。默认为[0.8, 0.1, 0.1]表示按照8:1:1的比例将数据划分为训练集、验证集和测试集。task_type: 选择任务类型,可选有抽取和分类两种类型的任务。options: 指定分类任务的类别标签,该参数只对分类类型任务有效。默认为["正向", "负向"]。prompt_prefix: 声明分类任务的prompt前缀信息,该参数只对分类类型任务有效。默认为"情感倾向"。is_shuffle: 是否对数据集进行随机打散,默认为True。seed: 随机种子,默认为1000.*separator: 实体类别/评价维度与分类标签的分隔符,该参数只对实体/评价维度级分类任务有效。默认为"##"。!python doccano.py \ --doccano_file ./data/doccano_ext.jsonl \ --task_type 'ext' \ --save_dir ./data \ --splits 0.8 0.1 0.1 \ --negative_ratio 5[2022-07-14 11:34:26,474] [ INFO] - Converting doccano data... 100%|████████████████████████████████████████| 40/40 [00:00<00:00, 42560.16it/s] [2022-07-14 11:34:26,477] [ INFO] - Adding negative samples for first stage prompt... 100%|███████████████████████████████████████| 40/40 [00:00<00:00, 161009.75it/s] [2022-07-14 11:34:26,478] [ INFO] - Converting doccano data... 100%|██████████████████████████████████████████| 5/5 [00:00<00:00, 21754.69it/s] [2022-07-14 11:34:26,479] [ INFO] - Adding negative samples for first stage prompt... 100%|██████████████████████████████████████████| 5/5 [00:00<00:00, 44057.82it/s] [2022-07-14 11:34:26,479] [ INFO] - Converting doccano data... 100%|██████████████████████████████████████████| 5/5 [00:00<00:00, 26181.67it/s] [2022-07-14 11:34:26,480] [ INFO] - Adding negative samples for first stage prompt... 100%|██████████████████████████████████████████| 5/5 [00:00<00:00, 45689.59it/s] [2022-07-14 11:34:26,482] [ INFO] - Save 160 examples to ./data/train.txt. [2022-07-14 11:34:26,482] [ INFO] - Save 20 examples to ./data/dev.txt. [2022-07-14 11:34:26,482] [ INFO] - Save 20 examples to ./data/test.txt. [2022-07-14 11:34:26,482] [ INFO] - Finished! It takes 0.01 seconds输出部分展示:{"content": "上海到北京机票1320元", "result_list": [{"text": "上海", "start": 0, "end": 2}], "prompt": "出发地"} {"content": "上海到北京机票1320元", "result_list": [{"text": "北京", "start": 3, "end": 5}], "prompt": "目的地"} {"content": "上海到北京机票1320元", "result_list": [{"text": "1320", "start": 7, "end": 11}], "prompt": "费用"} {"content": "上海虹桥到杭州东站高铁g7555共73元时间是10月14日", "result_list": [{"text": "上海虹桥", "start": 0, "end": 4}], "prompt": "出发地"} {"content": "上海虹桥到杭州东站高铁g7555共73元时间是10月14日", "result_list": [{"text": "杭州东站", "start": 5, "end": 9}], "prompt": "目的地"} {"content": "上海虹桥到杭州东站高铁g7555共73元时间是10月14日", "result_list": [{"text": "73", "start": 17, "end": 19}], "prompt": "费用"} {"content": "上海虹桥到杭州东站高铁g7555共73元时间是10月14日", "result_list": [{"text": "10月14日", "start": 23, "end": 29}], "prompt": "时间"} {"content": "昨天晚上十点加班打车回家58元", "result_list": [{"text": "昨天晚上十点", "start": 0, "end": 6}], "prompt": "时间"} {"content": "昨天晚上十点加班打车回家58元", "result_list": [{"text": "家", "start": 11, "end": 12}], "prompt": "目的地"} {"content": "昨天晚上十点加班打车回家58元", "result_list": [{"text": "58", "start": 12, "end": 14}], "prompt": "费用"} {"content": "2月20号从南山到光明二十元", "result_list": [{"text": "2月20号", "start": 0, "end": 5}], "prompt": "时间"}2.模型训练!python finetune.py \ --train_path "./data/train.txt" \ --dev_path "./data/dev.txt" \ --save_dir "./checkpoint" \ --learning_rate 1e-5 \ --batch_size 8 \ --max_seq_len 512 \ --num_epochs 100 \ --model "uie-base" \ --seed 1000 \ --logging_steps 10 \ --valid_steps 50 \ --device "gpu"部分训练效果展示:**具体输出已折叠** [2022-07-12 15:09:47,643] [ INFO] - global step 250, epoch: 13, loss: 0.00045, speed: 3.90 step/s [2022-07-12 15:09:47,910] [ INFO] - Evaluation precision: 1.00000, recall: 1.00000, F1: 1.00000 [2022-07-12 15:09:50,399] [ INFO] - global step 260, epoch: 13, loss: 0.00043, speed: 4.02 step/s [2022-07-12 15:09:52,966] [ INFO] - global step 270, epoch: 14, loss: 0.00042, speed: 3.90 step/s [2022-07-12 15:09:55,464] [ INFO] - global step 280, epoch: 14, loss: 0.00040, speed: 4.00 step/s [2022-07-12 15:09:58,028] [ INFO] - global step 290, epoch: 15, loss: 0.00039, speed: 3.90 step/s [2022-07-12 15:10:00,516] [ INFO] - global step 300, epoch: 15, loss: 0.00038, speed: 4.02 step/s [2022-07-12 15:10:00,781] [ INFO] - Evaluation precision: 1.00000, recall: 1.00000, F1: 1.00000 [2022-07-12 15:10:03,348] [ INFO] - global step 310, epoch: 16, loss: 0.00036, speed: 3.90 step/s [2022-07-12 15:10:05,836] [ INFO] - global step 320, epoch: 16, loss: 0.00035, speed: 4.02 step/s [2022-07-12 15:10:08,393] [ INFO] - global step 330, epoch: 17, loss: 0.00034, speed: 3.91 step/s [2022-07-12 15:10:10,888] [ INFO] - global step 340, epoch: 17, loss: 0.00033, speed: 4.01 step/s 推荐使用GPU环境,否则可能会内存溢出。CPU环境下,可以修改model为uie-tiny,适当调下batch_size。 增加准确率的话:--num_epochs 设置大点多训练训练 可配置参数说明: **train_path:** 训练集文件路径。 **dev_path:** 验证集文件路径。 **save_dir:** 模型存储路径,默认为./checkpoint。 **learning_rate:** 学习率,默认为1e-5。 **batch_size:** 批处理大小,请结合显存情况进行调整,若出现显存不足,请适当调低这一参数,默认为16。 **max_seq_len:** 文本最大切分长度,输入超过最大长度时会对输入文本进行自动切分,默认为512。 **num_epochs:** 训练轮数,默认为100。 **model** 选择模型,程序会基于选择的模型进行模型微调,可选有uie-base和uie-tiny,默认为uie-base。 **seed:** 随机种子,默认为1000. **logging_steps:** 日志打印的间隔steps数,默认10。 **valid_steps:** evaluate的间隔steps数,默认100。 **device:** 选用什么设备进行训练,可选cpu或gpu。3模型评估!python evaluate.py \ --model_path ./checkpoint/model_best \ --test_path ./data/test.txt \ --batch_size 16 \ --max_seq_len 512[2022-07-11 13:41:23,831] [ INFO] - ----------------------------- [2022-07-11 13:41:23,831] [ INFO] - Class Name: all_classes [2022-07-11 13:41:23,832] [ INFO] - Evaluation Precision: 1.00000 | Recall: 1.00000 | F1: 1.00000 [2022-07-11 13:41:35,024] [ INFO] - ----------------------------- [2022-07-11 13:41:35,024] [ INFO] - Class Name: 出发地 [2022-07-11 13:41:35,024] [ INFO] - Evaluation Precision: 1.00000 | Recall: 1.00000 | F1: 1.00000 [2022-07-11 13:41:35,139] [ INFO] - ----------------------------- [2022-07-11 13:41:35,139] [ INFO] - Class Name: 目的地 [2022-07-11 13:41:35,139] [ INFO] - Evaluation Precision: 1.00000 | Recall: 1.00000 | F1: 1.00000 [2022-07-11 13:41:35,246] [ INFO] - ----------------------------- [2022-07-11 13:41:35,246] [ INFO] - Class Name: 费用 [2022-07-11 13:41:35,246] [ INFO] - Evaluation Precision: 1.00000 | Recall: 1.00000 | F1: 1.00000 [2022-07-11 13:41:35,313] [ INFO] - ----------------------------- [2022-07-11 13:41:35,313] [ INFO] - Class Name: 时间 [2022-07-11 13:41:35,313] [ INFO] - Evaluation Precision: 1.00000 | Recall: 1.00000 | F1: 1.00000model_path: 进行评估的模型文件夹路径,路径下需包含模型权重文件model_state.pdparams及配置文件model_config.json。test_path: 进行评估的测试集文件。batch_size: 批处理大小,请结合机器情况进行调整,默认为16。max_seq_len: 文本最大切分长度,输入超过最大长度时会对输入文本进行自动切分,默认为512。model: 选择所使用的模型,可选有uie-base, uie-medium, uie-mini, uie-micro和uie-nano,默认为uie-base。debug: 是否开启debug模式对每个正例类别分别进行评估,该模式仅用于模型调试,默认关闭。4 结果预测from pprint import pprint import json from paddlenlp import Taskflow def openreadtxt(file_name): data = [] file = open(file_name,'r',encoding='UTF-8') #打开文件 file_data = file.readlines() #读取所有行 for row in file_data: data.append(row) #将每行数据插入data中 return data data_input=openreadtxt('./input/nlp.txt') schema = ['出发地', '目的地','时间'] few_ie = Taskflow('information_extraction', schema=schema, batch_size=1,task_path='./checkpoint/model_best') results=few_ie(data_input) with open("./output/test.txt", "w+",encoding='UTF-8') as f: #a : 写入文件,若文件不存在则会先创建再写入,但不会覆盖原文件,而是追加在文件末尾 for result in results: line = json.dumps(result, ensure_ascii=False) #对中文默认使用的ascii编码.想输出真正的中文需要指定ensure_ascii=False f.write(line + "\n") print("数据结果已导出")输入文件展示:城市内交通费7月5日金额114广州至佛山 从百度大厦到龙泽苑东区打车费二十元 上海虹桥高铁到杭州时间是9月24日费用是73元 上周末坐动车从北京到上海花费五十块五毛 昨天北京飞上海话费一百元输出展示:{"出发地": [{"text": "广州", "start": 15, "end": 17, "probability": 0.9073772252165782}], "目的地": [{"text": "佛山", "start": 18, "end": 20, "probability": 0.9927365183877761}], "时间": [{"text": "7月5日", "start": 6, "end": 10, "probability": 0.9978010396512218}]} {"出发地": [{"text": "百度大厦", "start": 1, "end": 5, "probability": 0.968825147409472}], "目的地": [{"text": "龙泽苑东区", "start": 6, "end": 11, "probability": 0.9877913072493669}]} {"目的地": [{"text": "杭州", "start": 7, "end": 9, "probability": 0.9929172180094881}], "时间": [{"text": "9月24日", "start": 12, "end": 17, "probability": 0.9953342057701597}]} {"出发地": [{"text": "北京", "start": 7, "end": 9, "probability": 0.973048366717471}], "目的地": [{"text": "上海", "start": 10, "end": 12, "probability": 0.988486130309397}], "时间": [{"text": "上周末", "start": 0, "end": 3, "probability": 0.9977407699595275}]} {"出发地": [{"text": "北京", "start": 2, "end": 4, "probability": 0.974188953533556}], "目的地": [{"text": "上海", "start": 5, "end": 7, "probability": 0.9928200521486445}], "时间": [{"text": "昨天", "start": 0, "end": 2, "probability": 0.9731559534465504}]}5.可视化显示visualDL详细文档可以参考: cid:link_1 有详细讲解,具体实现参考代码,核心是:添加一个初始化记录器下面是结果展示:6.小技巧:获取paddle开源数据集数据集网站:cid:link_0数据集名称 简介 调用方法CoLA 单句分类任务,二分类,判断句子是否合法 paddlenlp.datasets.load_dataset('glue','cola')SST-2 单句分类任务,二分类,判断句子情感极性paddlenlp.datasets.load_dataset('glue','sst-2')MRPC 句对匹配任务,二分类,判断句子对是否是相同意思 paddlenlp.datasets.load_dataset('glue','mrpc')STSB 计算句子对相似性,分数为1~5 paddlenlp.datasets.load_dataset('glue','sts-b') QQP 判定句子对是否等效,等效、不等效两种情况,二分类任务 paddlenlp.datasets.load_dataset('glue','qqp')MNLI 句子对,一个前提,一个是假设。前提和假设的关系有三种情况:蕴含(entailment),矛盾(contradiction),中立(neutral)。句子对三分类问题 paddlenlp.datasets.load_dataset('glue','mnli')QNLI 判断问题(question)和句子(sentence)是否蕴含,蕴含和不蕴含,二分类 paddlenlp.datasets.load_dataset('glue','qnli')RTE 判断句对是否蕴含,句子1和句子2是否互为蕴含,二分类任务 paddlenlp.datasets.load_dataset('glue','rte')WNLI 判断句子对是否相关,相关或不相关,二分类任务 paddlenlp.datasets.load_dataset('glue','wnli')LCQMC A Large-scale Chinese Question Matching Corpus 语义匹配数据集 paddlenlp.datasets.load_dataset('lcqmc')通过paddlenlp提供的api调用,可以很方便实现数据加载,当然你想要把数据下载到本地,可以参考我下面的输出就可以保存数据了。#加载中文评论情感分析语料数据集ChnSentiCorp from paddlenlp.datasets import load_dataset train_ds, dev_ds, test_ds = load_dataset("chnsenticorp", splits=["train", "dev", "test"]) with open("./output/test2.txt", "w+",encoding='UTF-8') as f: #a : 写入文件,若文件不存在则会先创建再写入,但不会覆盖原文件,而是追加在文件末尾 for result in test_ds: line = json.dumps(result, ensure_ascii=False) #对中文默认使用的ascii编码.想输出真正的中文需要指定ensure_ascii=False f.write(line + "\n")7 总结UIE(Universal Information Extraction):Yaojie Lu等人在ACL-2022中提出了通用信息抽取统一框架UIE。该框架实现了实体抽取、关系抽取、事件抽取、情感分析等任务的统一建模,并使得不同任务间具备良好的迁移和泛化能力。PaddleNLP借鉴该论文的方法,基于ERNIE 3.0知识增强预训练模型,训练并开源了首个中文通用信息抽取模型UIE。该模型可以支持不限定行业领域和抽取目标的关键信息抽取,实现零样本快速冷启动,并具备优秀的小样本微调能力,快速适配特定的抽取目标。UIE的优势使用简单: 用户可以使用自然语言自定义抽取目标,无需训练即可统一抽取输入文本中的对应信息。实现开箱即用,并满足各类信息抽取需求。降本增效: 以往的信息抽取技术需要大量标注数据才能保证信息抽取的效果,为了提高开发过程中的开发效率,减少不必要的重复工作时间,开放域信息抽取可以实现零样本(zero-shot)或者少样本(few-shot)抽取,大幅度降低标注数据依赖,在降低成本的同时,还提升了效果。效果领先: 开放域信息抽取在多种场景,多种任务上,均有不俗的表现。本人本次主要通过实体抽取这个案例分享给大家,主要对开源的paddlenlp的案例进行了细化,比如在结果可视化方面以及结果输入输出的增加,使demo项目更佳完善。当然标注问题是所有问题的痛点,可以参考我的博客来解决这个问题本人博客:cid:link_3
  • [应用实践] Mindspore-训练模型
    前言MindSpore:新一代AI开源计算框架。创新编程范式,AI科学家和工程师更易使用,便于开放式创新;该计算框架可满足终端、边缘计算、云全场景需求,能更好保护数据隐私;可开源,形成广阔应用生态。2020年3月28日,华为在开发者大会2020上宣布,全场景AI计算框架MindSpore在码云正式开源。MindSpore着重提升易用性并降低AI开发者的开发门槛,MindSpore原生适应每个场景包括端、边缘和云,并能够在按需协同的基础上,通过实现AI算法即代码,使开发态变得更加友好,显著减少模型开发时间,降低模型开发门槛。通过MindSpore自身的技术创新及MindSpore与华为昇腾AI处理器的协同优化,实现了运行态的高效,大大提高了计算性能;MindSpore也支持GPU、CPU等其它处理器。一、训练模型(1)步骤构建数据集。定义神经网络模型。定义超参、损失函数及优化器。输入数据集进行训练与评估。(2)开发前提我们在使用这个框架进行模型训练的时候,我们必须在数据集和网络构建中加载一些代码,这是为了后面测试的时候可以更好地针对性训练,也是对数据训练更完整做了一个前提准备的过程。 import mindspore from mindspore import nn from mindspore import ops from mindspore.dataset import vision, transforms from mindspore.dataset import MnistDataset # Download data from open datasets from download import download url = "https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/" \ "notebook/datasets/MNIST_Data.zip" path = download(url, "./", kind="zip", replace=True) def datapipe(path, batch_size): image_transforms = [ vision.Rescale(1.0 / 255.0, 0), vision.Normalize(mean=(0.1307,), std=(0.3081,)), vision.HWC2CHW() ] label_transform = transforms.TypeCast(mindspore.int32) dataset = MnistDataset(path) dataset = dataset.map(image_transforms, 'image') dataset = dataset.map(label_transform, 'label') dataset = dataset.batch(batch_size) return dataset train_dataset = datapipe('MNIST_Data/train', 64) test_dataset = datapipe('MNIST_Data/test', 64) class Network(nn.Cell): def __init__(self): super().__init__() self.flatten = nn.Flatten() self.dense_relu_sequential = nn.SequentialCell( nn.Dense(28*28, 512), nn.ReLU(), nn.Dense(512, 512), nn.ReLU(), nn.Dense(512, 10) ) def construct(self, x): x = self.flatten(x) logits = self.dense_relu_sequential(x) return logits model = Network()(3)配置参数这里我们就必须要提到另外一个概念,就是超参超参是可以调整的参数,可以控制模型训练优化的过程,不同的超参数值可能会影响模型训练和收敛速度。目前深度学习模型多采用批量随机梯度下降算法进行优化,随机梯度下降算法的原理经常使用的超参训练轮次(epoch):训练时遍历数据集的次数。这里我补充一下,这就是相当于我们在数钱的时候,数一张大拇指动一下,那么我们数多少张,大拇指所动的次数,大概就是这样的一个道理。批次大小(batch size):数据集进行分批读取训练,设定每个批次数据的大小。batch size过小,花费时间多,同时梯度震荡严重,不利于收敛;batch size过大,不同batch的梯度方向没有任何变化,容易陷入局部极小值,因此需要选择合适的batch size,可以有效提高模型精度、全局收敛。学习率(learning rate):如果学习率偏小,会导致收敛的速度变慢,如果学习率偏大,则可能会导致训练不收敛等不可预测的结果。梯度下降法被广泛应用在最小化模型误差的参数优化算法上。梯度下降法通过多次迭代,并在每一步中最小化损失函数来预估模型的参数。学习率就是在迭代过程中,会控制模型的学习进度。(4)训练流程模拟训练也就是对模型的流程大致的做一个预想方案,按照流程进行操作训练:迭代训练数据集,并尝试收敛到最佳参数。验证/测试:迭代测试数据集,以检查模型性能是否提升。(5)损失函数损失函数或代价函数是将随机事件或其有关随机变量的取值映射为非负实数以表示该随机事件的“风险”或“损失”的函数。在应用中,损失函数通常作为学习准则与优化问题相联系,即通过最小化损失函数求解和评估模型。例如在统计学和机器学习中被用于模型的参数估计,在宏观经济学中被用于和决策 ,在控制理论中被应用于最优控制理论。(6)开始训练代码放在下面 def train_loop(model, dataset, loss_fn, optimizer): # Define forward function def forward_fn(data, label): logits = model(data) loss = loss_fn(logits, label) return loss, logits # Get gradient function grad_fn = ops.value_and_grad(forward_fn, None, optimizer.parameters, has_aux=True) # Define function of one-step training def train_step(data, label): (loss, _), grads = grad_fn(data, label) loss = ops.depend(loss, optimizer(grads)) return loss size = dataset.get_dataset_size() model.set_train() for batch, (data, label) in enumerate(dataset.create_tuple_iterator()): loss = train_step(data, label) if batch % 100 == 0: loss, current = loss.asnumpy(), batch print(f"loss: {loss:>7f} [{current:>3d}/{size:>3d}]") def test_loop(model, dataset, loss_fn): num_batches = dataset.get_dataset_size() model.set_train(False) total, test_loss, correct = 0, 0, 0 for data, label in dataset.create_tuple_iterator(): pred = model(data) total += len(data) test_loss += loss_fn(pred, label).asnumpy() correct += (pred.argmax(1) == label).asnumpy().sum() test_loss /= num_batches correct /= total print(f"Test: \n Accuracy: {(100*correct):>0.1f}%, Avg loss: {test_loss:>8f} \n") loss_fn = nn.CrossEntropyLoss()optimizer = nn.SGD(model.trainable_params(), learning_rate=learning_rate) epochs = 3for t in range(epochs): print(f"Epoch {t+1}\n-------------------------------") train_loop(model, train_dataset, loss_fn, optimizer) test_loop(model, test_dataset, loss_fn)print("Done!") 二、扩展这里我熟悉了这个数据的训练之后,我做了一个有关模型训练的实际操作红酒分类代码如下:
  • [新手课堂] 湖仓协同,赋能数智融合
    湖仓一体进一步取消了用户的选型困难,为用户提供的数据管理平台兼具数据仓库的结构和治理优点与数据湖的扩展性和为机器学习提供的便利性大数据(Big Data)在字面上的理解是海量数据,但这个角度是抽象的。在网络信息时代,大数据产生的客观意义并不在于其宏大的数据规模,而在于如何数据进行专业存储和处理,并从中挖掘和提取所需要的知识价值。技术突破通常来源于市场对产品的实质需求,互联网、云、AI的不断发展与大数据技术融合满足了商业需求。在大数据产业中,降低存储成本、提升计算速度、对数据进行多维度的分析加工、赋能企业利用数据价值,是大数据产业实现盈利的关键,也是大数据技术蓬勃发展的根源。大数据技术的内涵伴随着传统信息技术和数据应用的发展不断演进,而大数据技术体系的核心始终是面向海量数据的存储、计算、处理等基础技术。在大数据技术发展的60多年之间,数据应用经历了互联网、移动互联网蓬勃的发展与需求变革。数据库与数据仓库基于事务分析处理等传统优势依然是当前信息技术的中流砥柱,但也在日益增长的数据复杂度需求以及海量弹性的数据规模面前难以匹配。分布式架构的突破与云计算的兴起奠定了数据湖的概念,湖仓一体则进一步取消了用户的选型困难,为用户提供的数据管理平台兼具数据仓库的结构和治理优点与数据湖的扩展性和为机器学习提供的便利。数据仓库与数据湖作为两个单独的数据管理范式都具备成熟的技术积累,在长期实践中两者以湖+仓的混合架构方式共同存在:数据湖用作对原始数据的提取和处理,同时依赖数据仓库在数据管道的发布。在用户反馈中,湖+仓的混合架构存在着使Hadoop和MPP共存下的数据冗余、两个系统间ETL造成的低时效性、一致性保障及运维等方面的困难。在用户需求的驱动下,数据湖与数据仓库提供商在原本的范式之上向其限制的范围扩展,逐渐形成了“湖上建仓”与“从数仓向湖”的两种“湖仓一体”的成型路径。虽然在底层逻辑中,湖仓一体仍然是一个二元体系,但能够极大帮助用户在其原IT基础之上封装出与需求更紧密的大数据范式,或者直接挂载全托管服务的湖仓一体系统。数据仓库本身以及ETL的性能取决于通信、I/O能力和硬件性能,执行架构则决定了数据仓库的支撑能力数据库侧重OLTP,数据仓库侧重OLAP。数据仓库是传统的关系型数据库如SQL Server、Oracle等,经过严格的数据模型设计或参数调整就可以变成很好的数据仓库实体,而纯粹的数据仓库如Terradata、SybaseIQ若要用来适应OLTP系统则不合适。趋势中,OLAP与OLTP正在走向统一融合成HTAP,数据库对AP分析能力的加强将使数据库与数据仓库的界限将逐渐模糊。Hadoop架构(MapReduce模型)适合海量数据存储查询、批量数据ETL、非结构化数据分析;而MPP架构适合替代现有关系型数据结构下的大数据处理,进行多维度数据分析、数据集市。混搭架构中,MPP处理高质量的结构化数据,同时提供SQL及事务支持。而Hadoop实现半结构化、非结构化数据处理。通过这种混搭方式,自动满足结构化、半结构化、非结构化数据的高效处理的需求,解决了传统数据仓库在海量数据下加载慢、数据查询效率低、难以融合多种异构数据源进行分析的困难。这种打破数据仓库与数据仓库边界的方案已经成为了一种主流架构方式。但在湖仓一体进程中,有更多新兴的架构正在开发和验证,或有新一代的架构在未来将取代MPP-Hadoop架构成为更优的架构方案。数据湖为了实现实时数据处理开发出了多种架构方式,其中最具代表性的是Lambda、Kappa、IOTA架构数据湖从Lambda架构开始完成离线与实时计算的融合,Kappa架构统一了数据口径简化数据冗余。IOTA架构通过边缘下发和统一数据模型取消了ETL,进一步加速了数据湖效率。其他的数据湖架构还有偶数科技自研的Omega架构,由流数据处理系统和实时数仓组成。融合了Lambda架构和Kappa架构处理流数据的优势,增加了实时按需智能和离线按需智能数据处理的能力,以及高效处理可变更数据实时快照的能力。随着数据智能服务认知的流行,厂商如何将数据分析服务与机器学习服务无缝集成,为无AI算法背景的数据研发和分析师等用户提供更加智能易用的产品服务尤为关键数据库、数据仓库、数据湖以及湖仓一体等产品是数据基础设施,如何采用数据分析工具,并且驱动决策,才能转化出数据价值。人工智能和机器学习功能是赋予湖仓一体服务能力创新的重要功能。数据智能(Data Intelligence)即基于大数据,通过AI对海量数据进行处理、分析、挖掘,提取数据中的信息和知识,并通过建立模型寻求现有问题的解决方案以及实现预测等,帮助决策。过去,BI作为统计分析类计算是数据仓库的主要应用场景,预测类计算的AI分析是数据湖的主流应用。随着湖仓一体的成熟化,AI+BI双模式将成为大数据计算分析的重要负载形式。随着大数据技术的持续发展,离线处理与实时处理的融合、数据存储与数据分析的融合,大数据系统的性能瓶颈的突破提供了巨大的数据服务及应用的潜力。相应的,随着数据智能服务认知的流行,厂商如何将数据分析服务与机器学习服务无缝集成,为无AI算法背景的数据研发和分析师等用户提供更加智能易用的产品服务尤为关键,如:(1)通用性:可直接通过SQL进行机器学习模型推理;(2)易用性:提供简易工具实现业务利用已有数据实现机器学习模型训练;(3)透明化:可视化数据准备低代码进行数据清洗转换;(4)智能运维:AIOPS 能力应用在数据平台日常运维。机器学习平台与大数据平台深度融合,融合后的机器学习大数据平台的数据处理速度和自动化水平将提升一代。而要实现机器学习与大数据的融合,根据相关论文,需要满足以下要求:(1)隔离机制:人工智能与大数据之间不发生相互干扰的情况;(2)代码无缝对接:使大数据平台支持机器学习的原生代码;(3)融合框架:数据处理层、赋能层、应用层中,引入数据融合引擎,对数据处理层和赋能层进行深度融合;而要实现机器学习生产效率的提升,需要满足以下要求:(1)全生命周期平台化:覆盖从数据准备、模型构建、模型开发到模型生产的端对端能力;(2)预置机器学习算法和框架:使用户可以直接调用,而无需自行构建;(3)资源快速启动:底层资源即需即用,无需预置,使用统一的计算集群。全无服务器部署的湖仓一体架构是指数据存储、数据查询引擎、数据仓库、数据处理框架、数据目录产品均支持无服务器部署Serverless无服务器部署通过FaaS+BaaS提供服务,允许用户在不构建不运维一个复杂的基础设施的情况下进行开发,运行和管理应用程序。湖仓一体Serverless化后会具备两个优点:使用流程简化向用户提供Serverlesss部署的湖仓一体架构,使用户获得更易用的使用体验,全托管无运维的方式也帮助用户专注于业务本身,而非关心技术逻辑,符合云原生概念。成本灵活优化Serverless部署能够提供按需计费,不需要为等待付费,可以做到更高效的资源利用率。对于使用随时间变化大的企业是更具性价比的。无服务器部署已经成为了头部厂商在湖仓产品系列竞逐的产品特性,用以更好的支持用户需求:(1)亚马逊云通过具备Serverless能力的Redshift+EMR+MSK+Glue+Athena+Amazon Lake Formation实现Serverless全无服务器部署的湖仓一体;(2)华为云Stack+DLI Serverless+FusionInsight MRS+DWS实现Serverless化部署的大数据体系;(3)阿里云的DLA通过核心组件Lakehouse、Serverless Spark、Serverless SQL打造云原生+Serverless+数据库与大数据一体化架构Maxcompute;(4)其他Serverless湖仓产品还有Databricks Serverless SQL、Azure Synapse Analytics Serverless、移动云云原生Lakehouse等。数据管理解决方案厂商需要以用户体验为中心,从数据仓库、数据湖、湖仓方案、IaaS相关等维度持续深耕产品技术在市场用户对数据仓库要求更高的灵活性,并对数据湖要求更高的成长性的背景下,“湖仓一体”概念是业内厂商与用户对未来大数据架构的共同认知。纵然在概念层面具备显著的优势,湖仓一体在实际生产中依然面临由于技术或服务的不成熟而带来的众多问题。潜在用户出于对使用体验与稳定性的担忧、或对替换成熟稳定的原系统的投入产出价值不清晰,而保持谨慎观望。厂商需要以用户体验为中心,从多维度切入持续深耕产品技术。中国数据管理解决方案市场处于稳步增长阶段,竞争主体将根据其在创新能力及成长能力两个维度的表现划分梯队本报告分别通过市场增长指数与创新指数两大主要维度衡量业内优秀厂商竞争实力。增长指数衡量竞争主体在数据管理解决方案增长维度的竞争力,包括:数据存储、数据准备、机器学习分析支撑、湖仓一体整合、多维度多框架数据分析等创新技术或能力;而创新指数则衡量竞争主体在数据管理解决方案的竞争力,位置越靠右侧,数据管理解决方案的兼容性、查询&计算性能表现、灾备安全、服务支持、产业链生态、数据服务场景解决方案等市场增长能力及水平。沙利文联合头豹研究院根据增长指数和创新指数两大评估维度,通过数据存储、数据准备、数据分析支撑、数据分析、流程编排管理、兼容性、性能、灾备建设、服务支持、开源社区与产业链生态及数据服务场景解决方案十一项大指标,对中国数据管理解决方案市场竞争力多因素分层次评估。由“创新指数”和“增长指数” 综合评分,亚马逊云科技、华为云、阿里云、金山云、星环科技、浪潮云位列中国数据管理解决方案市场领导者梯队。亚马逊云科技:亚马逊云科技智能湖仓架构升级,通过Amazon Athena与Amazon Lake Formation打破数据孤岛,构建云中统一的数据治理底座,Amazon SageMaker机器学习全流程组件助力机器学习由实验转为实践,赋能业务人员探索业务敏捷创新。亚马逊云科技凭借专业深入的技术支持服务提供经历全球商业实践的产品和服务,为各行业客户提供各类数据服务场景的成熟解决方案。华为云:华为云FusionInsight MRS智能数据湖,MRS与AI开发平台ModelArts实现数智融合,通过HetuEngine一站式交互式SQL分析引擎实现湖仓协同,提供离线、实时、逻辑三湖一集市的数据架构支撑丰富的业务场景。华为云在大数据领域引领开源坚持开放,联合1000+行业应用生态合作伙伴共建覆盖金融、运营商、互联网、泛政等领域的落地场景解决方案。阿里云:阿里云Maxcompute适配多种数据湖仓案构建湖仓一体最佳实践,具备DB级元数据透视统一开发管理数据,与机器学习平台PAI无缝集成提供超大规模的机器学习处理能力。同时,Maxcompute与Hologres深度集成,为客户提供离线实时一体化的海量云数仓结构。结合开放开发建设和与伙伴生态产品的深度集成,为多行业用户的各种大数据场景提供多维的产品组合。金山云:金山云云原生数据引擎KCDE的统一元数据服务LMS统一湖仓的元数据层,支持构建实时湖、离线湖、分析湖的逻辑数据湖。大数据开发治理平台KDC与机器学习平台KingAI融合,基于统一的数据底座提供一站式数据挖掘服务。金山云以多元产品矩阵构建全域云原生能力,在金融、泛互联网、医疗、公共服务行业广泛覆盖大数据云平台应用解决方案。浪潮云:浪潮云大数据存储与分析IEMR提供多湖多仓关联计算能力,通过数据湖构建IDLF提供湖仓数据协同调用能力,与机器学习平台IMLP深度适配并提供200+预置模型和100+即开即用的行业模型调用能力。浪潮云IEMR具备高安全保障的灾备建设水平,IBP数据产品线可根据业务场景提供个性化产品交付形态,对电信、医疗、金融、政务等行业及其他大型国企提供丰富的场景解决方案和实施经验。星环科技:星环科技大数据基础平台TDH通过提供统一的SQL编译器Transwarp Quark和统一的分布式计算引擎Transwarp Nucleon等打造湖仓一体解决方案,突破传统Hadoop+MPP混合架构实现批流协同、多模融合的特性。星环科技在大数据各流程任务均提供组件化的技术服务和高度解耦的成熟产品,落地案例覆盖了金融、政务、交通、运营商、邮政、医疗、能源等行业。文章来源:弗若斯特沙利文 (如有侵权,请联系删除)
  • [技术干货] 华为云GaussDB(DWS)构建高价值数据分析核心,引领金融数智化迈向世界
    7月20日至22日,华为全球智慧金融峰会2022在新加坡隆重召开。会上,华为云计算Marketing部部长董理斌在“一切皆服务,共建全场景智慧金融”主题演讲中表示:“当前,全球金融机构的数字化转型正在深化展开,全面云化开启了一个最好的时代,给金融行业带来了跨越式发展的大机会。金融最终会步入全场景智慧时代,而全场景智慧金融最终会带来普惠金融,让每个人都能随时随地享受到多样化的金融服务。华为云将携手合作伙伴,实现‘一切皆服务’,推动金融行业实现全面云化、数智融合和全场景智联,共建全场景智慧金融。”金融正在走向数据和AI融合 金融作为高度数字化的行业,率先实现了数据和AI融合。为充分激发数据价值,华为云提供了数智融合平台,解决湖、仓、AI之间数据不互通导致的数据治理问题,通过统一存储、统一元数据等能力,让一份数据能够在多个引擎间高速流转。中国工商银行开始了基于华为云数智融合平台的数据分析探索,数据查询平均等待时间由300分钟降低至1.5分钟,数据分析效率大幅提升。 全场景一站式分析,构建高价值数据分析核心 多样性应用、海量数据、实时处理对金融行业数据平台提出新挑战。华为云数据仓库GaussDB(DWS)多层级全并行数据处理架构,提供毫秒级实时分析、秒级交互式分析、分钟级批量分析,匹配金融行业典型的业务场景:在精准营销场景中深挖数据资产价值,交互式查询秒级响应,实现个性化金融服务,业务效率提升80%;高并发敏捷联机查询升级智能风控系统,30ms实时风控能力,降低50%交易风险;高效率批量数据查询,一次性批量任务导出和加载,提供稳定、及时、准确报送数据,保障监管报送时效性。 华为云GaussDB(DWS)单集群可扩展至2048个节点,数据容量达到PB级,超大规模支持金融业务快速增长的算力和容量的需求。当前,在中国工商银行,商用最大集群480节点,实现上万分析师在线作业。基于云原生架构,根据业务需要进行灵活扩展存储和计算资源,在线扩容与在线升级业务零中断。充分利用云的存算分离、极致扩展的优势,较传统物理机本地部署,极大提升了性价比。为企业用户已有的数据仓库平台提供一键式迁移工具高效迁移,自动迁移上层业务无感知。 推动金融数据仓库技术创新,华为云GaussDB(DWS)从中国走向全球 迄今为止,已有11家国有大行与股份制银行选用华为云GaussDB(DWS)建设金融数据仓库平台,并与华为云共同探索和推进数智融合平台建设。 例如,工商银行基于华为云GaussDB(DWS)重构数据仓库平台,由传统的一体机模式升级为开放可扩展的分布式架构,率先完成金融行业数据分析平台转型,使数据服务向智能时代跃进。 招商银行基于华为云GaussDB(DWS)建成国内首个大规模金融云数仓,实现全行数据应用全链路运行时长缩短15%以上,有效支撑了“人人用数”大数据发展战略落地。 光大银行基于华为云GaussDB(DWS)完成数据分析大集中,汇聚全行数据资产,批量作业时长缩短8小时,数据服务时间窗延长2倍。 金融行业从数字化转型中受益,先行者逐步向云之深处迈进。华为云GaussDB(DWS)深入云原生数据仓库技术的研究和实践,发挥自身优势,以丰富的跨域业务场景和实践经验,助力金融行业数字化转型。未来,华为云GaussDB(DWS)将持续携手全球客户和伙伴,共建高价值数据分析核心,让优秀的经验复制到全球。来源:GaussDB DWS
  • [技术干货] 《2021年中国数据管理解决方案市场报告》——湖仓协同,赋能数智融合
    湖仓一体进一步取消了用户的选型困难,为用户提供的数据管理平台兼具数据仓库的结构和治理优点与数据湖的扩展性和为机器学习提供的便利性大数据(Big Data)在字面上的理解是海量数据,但这个角度是抽象的。在网络信息时代,大数据产生的客观意义并不在于其宏大的数据规模,而在于如何数据进行专业存储和处理,并从中挖掘和提取所需要的知识价值。技术突破通常来源于市场对产品的实质需求,互联网、云、AI的不断发展与大数据技术融合满足了商业需求。在大数据产业中,降低存储成本、提升计算速度、对数据进行多维度的分析加工、赋能企业利用数据价值,是大数据产业实现盈利的关键,也是大数据技术蓬勃发展的根源。大数据技术的内涵伴随着传统信息技术和数据应用的发展不断演进,而大数据技术体系的核心始终是面向海量数据的存储、计算、处理等基础技术。在大数据技术发展的60多年之间,数据应用经历了互联网、移动互联网蓬勃的发展与需求变革。数据库与数据仓库基于事务分析处理等传统优势依然是当前信息技术的中流砥柱,但也在日益增长的数据复杂度需求以及海量弹性的数据规模面前难以匹配。分布式架构的突破与云计算的兴起奠定了数据湖的概念,湖仓一体则进一步取消了用户的选型困难,为用户提供的数据管理平台兼具数据仓库的结构和治理优点与数据湖的扩展性和为机器学习提供的便利。数据仓库与数据湖作为两个单独的数据管理范式都具备成熟的技术积累,在长期实践中两者以湖+仓的混合架构方式共同存在:数据湖用作对原始数据的提取和处理,同时依赖数据仓库在数据管道的发布。在用户反馈中,湖+仓的混合架构存在着使Hadoop和MPP共存下的数据冗余、两个系统间ETL造成的低时效性、一致性保障及运维等方面的困难。在用户需求的驱动下,数据湖与数据仓库提供商在原本的范式之上向其限制的范围扩展,逐渐形成了“湖上建仓”与“从数仓向湖”的两种“湖仓一体”的成型路径。虽然在底层逻辑中,湖仓一体仍然是一个二元体系,但能够极大帮助用户在其原IT基础之上封装出与需求更紧密的大数据范式,或者直接挂载全托管服务的湖仓一体系统。数据仓库本身以及ETL的性能取决于通信、I/O能力和硬件性能,执行架构则决定了数据仓库的支撑能力数据库侧重OLTP,数据仓库侧重OLAP。数据仓库是传统的关系型数据库如SQL Server、Oracle等,经过严格的数据模型设计或参数调整就可以变成很好的数据仓库实体,而纯粹的数据仓库如Terradata、SybaseIQ若要用来适应OLTP系统则不合适。趋势中,OLAP与OLTP正在走向统一融合成HTAP,数据库对AP分析能力的加强将使数据库与数据仓库的界限将逐渐模糊。Hadoop架构(MapReduce模型)适合海量数据存储查询、批量数据ETL、非结构化数据分析;而MPP架构适合替代现有关系型数据结构下的大数据处理,进行多维度数据分析、数据集市。混搭架构中,MPP处理高质量的结构化数据,同时提供SQL及事务支持。而Hadoop实现半结构化、非结构化数据处理。通过这种混搭方式,自动满足结构化、半结构化、非结构化数据的高效处理的需求,解决了传统数据仓库在海量数据下加载慢、数据查询效率低、难以融合多种异构数据源进行分析的困难。这种打破数据仓库与数据仓库边界的方案已经成为了一种主流架构方式。但在湖仓一体进程中,有更多新兴的架构正在开发和验证,或有新一代的架构在未来将取代MPP-Hadoop架构成为更优的架构方案。数据湖为了实现实时数据处理开发出了多种架构方式,其中最具代表性的是Lambda、Kappa、IOTA架构数据湖从Lambda架构开始完成离线与实时计算的融合,Kappa架构统一了数据口径简化数据冗余。IOTA架构通过边缘下发和统一数据模型取消了ETL,进一步加速了数据湖效率。其他的数据湖架构还有偶数科技自研的Omega架构,由流数据处理系统和实时数仓组成。融合了Lambda架构和Kappa架构处理流数据的优势,增加了实时按需智能和离线按需智能数据处理的能力,以及高效处理可变更数据实时快照的能力。随着数据智能服务认知的流行,厂商如何将数据分析服务与机器学习服务无缝集成,为无AI算法背景的数据研发和分析师等用户提供更加智能易用的产品服务尤为关键数据库、数据仓库、数据湖以及湖仓一体等产品是数据基础设施,如何采用数据分析工具,并且驱动决策,才能转化出数据价值。人工智能和机器学习功能是赋予湖仓一体服务能力创新的重要功能。数据智能(Data Intelligence)即基于大数据,通过AI对海量数据进行处理、分析、挖掘,提取数据中的信息和知识,并通过建立模型寻求现有问题的解决方案以及实现预测等,帮助决策。过去,BI作为统计分析类计算是数据仓库的主要应用场景,预测类计算的AI分析是数据湖的主流应用。随着湖仓一体的成熟化,AI+BI双模式将成为大数据计算分析的重要负载形式。随着大数据技术的持续发展,离线处理与实时处理的融合、数据存储与数据分析的融合,大数据系统的性能瓶颈的突破提供了巨大的数据服务及应用的潜力。相应的,随着数据智能服务认知的流行,厂商如何将数据分析服务与机器学习服务无缝集成,为无AI算法背景的数据研发和分析师等用户提供更加智能易用的产品服务尤为关键,如:(1)通用性:可直接通过SQL进行机器学习模型推理;(2)易用性:提供简易工具实现业务利用已有数据实现机器学习模型训练;(3)透明化:可视化数据准备低代码进行数据清洗转换;(4)智能运维:AIOPS 能力应用在数据平台日常运维。机器学习平台与大数据平台深度融合,融合后的机器学习大数据平台的数据处理速度和自动化水平将提升一代。而要实现机器学习与大数据的融合,根据相关论文,需要满足以下要求:(1)隔离机制:人工智能与大数据之间不发生相互干扰的情况;(2)代码无缝对接:使大数据平台支持机器学习的原生代码;(3)融合框架:数据处理层、赋能层、应用层中,引入数据融合引擎,对数据处理层和赋能层进行深度融合;而要实现机器学习生产效率的提升,需要满足以下要求:(1)全生命周期平台化:覆盖从数据准备、模型构建、模型开发到模型生产的端对端能力;(2)预置机器学习算法和框架:使用户可以直接调用,而无需自行构建;(3)资源快速启动:底层资源即需即用,无需预置,使用统一的计算集群。全无服务器部署的湖仓一体架构是指数据存储、数据查询引擎、数据仓库、数据处理框架、数据目录产品均支持无服务器部署Serverless无服务器部署通过FaaS+BaaS提供服务,允许用户在不构建不运维一个复杂的基础设施的情况下进行开发,运行和管理应用程序。湖仓一体Serverless化后会具备两个优点:使用流程简化向用户提供Serverlesss部署的湖仓一体架构,使用户获得更易用的使用体验,全托管无运维的方式也帮助用户专注于业务本身,而非关心技术逻辑,符合云原生概念。成本灵活优化Serverless部署能够提供按需计费,不需要为等待付费,可以做到更高效的资源利用率。对于使用随时间变化大的企业是更具性价比的。无服务器部署已经成为了头部厂商在湖仓产品系列竞逐的产品特性,用以更好的支持用户需求:(1)亚马逊云通过具备Serverless能力的Redshift+EMR+MSK+Glue+Athena+Amazon Lake Formation实现Serverless全无服务器部署的湖仓一体;(2)华为云Stack+DLI Serverless+FusionInsight MRS+DWS实现Serverless化部署的大数据体系;(3)阿里云的DLA通过核心组件Lakehouse、Serverless Spark、Serverless SQL打造云原生+Serverless+数据库与大数据一体化架构Maxcompute;(4)其他Serverless湖仓产品还有Databricks Serverless SQL、Azure Synapse Analytics Serverless、移动云云原生Lakehouse等。数据管理解决方案厂商需要以用户体验为中心,从数据仓库、数据湖、湖仓方案、IaaS相关等维度持续深耕产品技术在市场用户对数据仓库要求更高的灵活性,并对数据湖要求更高的成长性的背景下,“湖仓一体”概念是业内厂商与用户对未来大数据架构的共同认知。纵然在概念层面具备显著的优势,湖仓一体在实际生产中依然面临由于技术或服务的不成熟而带来的众多问题。潜在用户出于对使用体验与稳定性的担忧、或对替换成熟稳定的原系统的投入产出价值不清晰,而保持谨慎观望。厂商需要以用户体验为中心,从多维度切入持续深耕产品技术。中国数据管理解决方案市场处于稳步增长阶段,竞争主体将根据其在创新能力及成长能力两个维度的表现划分梯队本报告分别通过市场增长指数与创新指数两大主要维度衡量业内优秀厂商竞争实力。增长指数衡量竞争主体在数据管理解决方案增长维度的竞争力,包括:数据存储、数据准备、机器学习分析支撑、湖仓一体整合、多维度多框架数据分析等创新技术或能力;而创新指数则衡量竞争主体在数据管理解决方案的竞争力,位置越靠右侧,数据管理解决方案的兼容性、查询&计算性能表现、灾备安全、服务支持、产业链生态、数据服务场景解决方案等市场增长能力及水平。沙利文联合头豹研究院根据增长指数和创新指数两大评估维度,通过数据存储、数据准备、数据分析支撑、数据分析、流程编排管理、兼容性、性能、灾备建设、服务支持、开源社区与产业链生态及数据服务场景解决方案十一项大指标,对中国数据管理解决方案市场竞争力多因素分层次评估。由“创新指数”和“增长指数” 综合评分,亚马逊云科技、华为云、阿里云、金山云、星环科技、浪潮云位列中国数据管理解决方案市场领导者梯队。亚马逊云科技:亚马逊云科技智能湖仓架构升级,通过Amazon Athena与Amazon Lake Formation打破数据孤岛,构建云中统一的数据治理底座,Amazon SageMaker机器学习全流程组件助力机器学习由实验转为实践,赋能业务人员探索业务敏捷创新。亚马逊云科技凭借专业深入的技术支持服务提供经历全球商业实践的产品和服务,为各行业客户提供各类数据服务场景的成熟解决方案。华为云:华为云FusionInsight MRS智能数据湖,MRS与AI开发平台ModelArts实现数智融合,通过HetuEngine一站式交互式SQL分析引擎实现湖仓协同,提供离线、实时、逻辑三湖一集市的数据架构支撑丰富的业务场景。华为云在大数据领域引领开源坚持开放,联合1000+行业应用生态合作伙伴共建覆盖金融、运营商、互联网、泛政等领域的落地场景解决方案。阿里云:阿里云Maxcompute适配多种数据湖仓案构建湖仓一体最佳实践,具备DB级元数据透视统一开发管理数据,与机器学习平台PAI无缝集成提供超大规模的机器学习处理能力。同时,Maxcompute与Hologres深度集成,为客户提供离线实时一体化的海量云数仓结构。结合开放开发建设和与伙伴生态产品的深度集成,为多行业用户的各种大数据场景提供多维的产品组合。金山云:金山云云原生数据引擎KCDE的统一元数据服务LMS统一湖仓的元数据层,支持构建实时湖、离线湖、分析湖的逻辑数据湖。大数据开发治理平台KDC与机器学习平台KingAI融合,基于统一的数据底座提供一站式数据挖掘服务。金山云以多元产品矩阵构建全域云原生能力,在金融、泛互联网、医疗、公共服务行业广泛覆盖大数据云平台应用解决方案。浪潮云:浪潮云大数据存储与分析IEMR提供多湖多仓关联计算能力,通过数据湖构建IDLF提供湖仓数据协同调用能力,与机器学习平台IMLP深度适配并提供200+预置模型和100+即开即用的行业模型调用能力。浪潮云IEMR具备高安全保障的灾备建设水平,IBP数据产品线可根据业务场景提供个性化产品交付形态,对电信、医疗、金融、政务等行业及其他大型国企提供丰富的场景解决方案和实施经验。星环科技:星环科技大数据基础平台TDH通过提供统一的SQL编译器Transwarp Quark和统一的分布式计算引擎Transwarp Nucleon等打造湖仓一体解决方案,突破传统Hadoop+MPP混合架构实现批流协同、多模融合的特性。星环科技在大数据各流程任务均提供组件化的技术服务和高度解耦的成熟产品,落地案例覆盖了金融、政务、交通、运营商、邮政、医疗、能源等行业。文章来源:弗若斯特沙利文 (如有侵权,请联系删除)
  • [其他] 浅谈Pandas的优点
    Pandas是python的一个数据分析包,最初由AQR Capital Management于2008年4月开发,并于2009年底开源出来,目前由专注于Python数据包开发的PyData开发team继续开发和维护,属于PyData项目的一部分。Pandas最初被作为金融数据分析工具而开发出来,因此,pandas为时间序列分析提供了很好的支持。 Pandas的名称来自于面板数据(panel data)和python数据分析(data analysis)。panel data是经济学中关于多维数据集的一个术语,在Pandas中也提供了panel的数据类型。Pandas有许多的优势    处理浮点与非浮点数据里的缺失数据,表示为NaN;    大小可变:插入或删除DataFrame等多维对象的列;    自动、显示数据对齐:显示将对象与一组标签对齐,也可以忽略标签,在Series、DataFrame计算时自动与数据对齐;    强大、灵活的分组(group by)功能:拆分-应用-组合数据集,聚合、转换数据;    把Python和NumPy数据结构里不规则、不同索引的数据轻松地转换为DataFrame对象;    基于智能标签,对大型数据集进行切片、花式索引、子集分解等操作;    直观地合并、连接数据集;    灵活地重构、透视数据集;    轴支持结构化标签:一个刻度支持多个标签;    成熟地IO工具:读取文本文件(CSV等支持分隔符地文件)、Excel文件、数据库等来源地数据,利用超快地HDF5格式保存/加载数据;    时间序列:支持日期范围生成、频率转换、移动窗口统计、移动窗口线性回归、日期位移等时间序列功能。这些功能主要是为了解决其它编程语言、科研环境的痛点。处理数据一般分为数据整理与清洗、数据分析与建模、数据可视化与制表,Pandas是处理数据的理想工具。Pandas速度很快,Pandas很多底层算法都用Cython优化过。然而,为了保持通用性,必然要牺牲一些性能,如果专注某一功能,完全可以开发出比Pandas更快的专用工具。Pandas是statsmodels的依赖项,因此,Pandas也是Python中统计计算生态系统的重要组成部分。Pandas已广泛应用于金融领域。
  • [技术干货] python数据分析之单因素分析线性拟合及地理编码【转载】
    目录一、单因素分析线性拟合二、实现地理编码一、单因素分析线性拟合功能:线性拟合,单因素分析,对散点图进行线性拟合,并放大散点图的局部位置输入:某个xlsx文件,包含'患者密度(人/10万人)'和'人口密度(人/平方千米)'两列输出:对这两列数据进行线性拟合,绘制散点实现代码:1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768import pandas as pdfrom pylab import mplfrom scipy import optimizeimport numpy as npimport matplotlib.pyplot as pltdef f_1(x, A, B):    return A*x + Bdef draw_cure(file):    data1=pd.read_excel(file)    data1=pd.DataFrame(data1)    hz=list(data1['患者密度(人/10万人)'])    rk=list(data1['人口密度(人/平方千米)'])    hz_gy=[]    rk_gy=[]    for i in hz:        hz_gy.append((i-min(hz))/(max(hz)-min(hz)))    for i in rk:        rk_gy.append((i-min(rk))/(max(rk)-min(rk)))    n=['玄武区','秦淮区','建邺区','鼓楼区','浦口区','栖霞区','雨花台区','江宁区','六合区','溧水区','高淳区',       '锡山区','惠山区','滨湖区','梁溪区','新吴区','江阴市','宜兴市',       '鼓楼区','云龙区','贾汪区','泉山区','铜山区','丰县','沛县','睢宁县','新沂市','邳州市',       '天宁区','钟楼区','新北区','武进区','金坛区','溧阳市',       '虎丘区','吴中区','相城区','姑苏区','吴江区','常熟市','张家港市','昆山市','太仓市',       '崇川区','港闸区','通州区','如东县','启东市','如皋市','海门市','海安市',       '连云区','海州区','赣榆区','东海县','灌云县','灌南县',       '淮安区','淮阴区','清江浦区','洪泽区','涟水县','盱眙县','金湖县',       '亭湖区','盐都区','大丰区','响水县','滨海县','阜宁县','射阳县','建湖县','东台市',       '广陵区','邗江区','江都区','宝应县','仪征市','高邮市',       '京口区','润州区','丹徒区','丹阳市','扬中市','句容市',       '海陵区','高港区','姜堰区','兴化市','靖江市','泰兴市',       '宿城区','宿豫区','沭阳县','泗阳县','泗洪县']    mpl.rcParams['font.sans-serif'] = ['FangSong']    plt.figure(figsize=(16,8),dpi=98)    p1 = plt.subplot(121)    p2 = plt.subplot(122)    p1.scatter(rk_gy,hz_gy,c='r')    p2.scatter(rk_gy,hz_gy,c='r')    p1.axis([0.0,1.01,0.0,1.01])    p1.set_ylabel("患者密度(人/10万人)",fontsize=13)    p1.set_xlabel("人口密度(人/平方千米)",fontsize=13)    p1.set_title("人口密度—患者密度相关性",fontsize=13)    for i,txt in enumerate(n):        p1.annotate(txt,(rk_gy[i],hz_gy[i]))    A1, B1 = optimize.curve_fit(f_1, rk_gy, hz_gy)[0]    x1 = np.arange(0, 1, 0.01)    y1 = A1*x1 + B1    p1.plot(x1, y1, "blue",label='一次拟合直线')    x2 = np.arange(0, 1, 0.01)    y2 = x2    p1.plot(x2, y2,'g--',label='y=x')    p1.legend(loc='upper left',fontsize=13)    # # plot the box    tx0 = 0;tx1 = 0.1;ty0 = 0;ty1 = 0.2    sx = [tx0,tx1,tx1,tx0,tx0]    sy = [ty0,ty0,ty1,ty1,ty0]    p1.plot(sx,sy,"purple")    p2.axis([0,0.1,0,0.2])    p2.set_ylabel("患者密度(人/10万人)",fontsize=13)    p2.set_xlabel("人口密度(人/平方千米)",fontsize=13)    p2.set_title("人口密度—患者密度相关性",fontsize=13)    for i,txt in enumerate(n):        p2.annotate(txt,(rk_gy[i],hz_gy[i]))    p2.plot(x1, y1, "blue",label='一次拟合直线')    p2.plot(x2, y2,'g--',label='y=x')    p2.legend(loc='upper left',fontsize=13)    plt.show()if __name__ == '__main__':    draw_cure("F:\医学大数据课题\论文终稿修改\scientific report\返修\市区县相关分析 _2231.xls")实现效果:二、实现地理编码输入:中文地址信息,例如安徽为县天城镇都督村冲里18号输出:经纬度坐标,例如107.34799754989581 30.50483335424108功能:根据中文地址信息获取经纬度坐标实现代码:123456789101112131415161718192021222324252627282930313233343536373839404142434445import jsonfrom urllib.request import urlopen,quoteimport xlrddef readXLS(XLS_FILE,sheet0):    rb= xlrd.open_workbook(XLS_FILE)    rs= rb.sheets()[sheet0]    return rsdef getlnglat(adress):    url = 'http://api.map.baidu.com/geocoding/v3/?address='    output = 'json'    ak = 'fdi11GHN3GYVQdzVnUPuLSScYBVxYDFK'    add = quote(adress)#使用quote进行编码 为了防止中文乱码    # add=adress    url2 = url + add + '&output=' + output + '&ak=' + ak    req = urlopen(url2)    res = req.read().decode()    temp = json.loads(res)    return tempdef getlatlon(sd_rs):    nrows_sd_rs=sd_rs.nrows    for i in range(4,nrows_sd_rs):    # for i in range(4, 7):        row=sd_rs.row_values(i)        print(i,i/nrows_sd_rs)        b = (row[11]+row[12]+row[9]).replace('#','号') # 第三列的地址        print(b)        try:            lng = getlnglat(b)['result']['location']['lng']  # 获取经度并写入            lat = getlnglat(b)['result']['location']['lat']  #获取纬度并写入        except KeyError as e:            lng=''            lat=''            f_err=open('f_err.txt','a')            f_err.write(str(i)+'\t')            f_err.close()            print(e)        print(lng,lat)        f_latlon = open('f_latlon.txt', 'a')        f_latlon.write(row[0]+'\t'+b+'\t'+str(lng)+'\t'+str(lat)+'\n')        f_latlon.close()if __name__=='__main__':    # sle_xls_file = 'F:\医学大数据课题\江苏省SLE数据库(两次随访合并).xlsx'    sle_xls_file = "F:\医学大数据课题\数据副本\江苏省SLE数据库(两次随访合并) - 副本.xlsx"    sle_data_rs = readXLS(sle_xls_file, 1)    getlatlon(sle_data_rs)
  • [技术干货] openLooKeng,一款面向海量、跨DC的大数据分析利器
    本文介绍的内容包括四部分,然后第一部分是openLooKeng是什么,然后第二部分是 openLooKeng的典型应用场景。第三部分是openLooKeng的架构解析和关键特性。第四部分是关于openLooKeng 的开源策略以及伙伴的帮助计划。1. openLooKeng是什么1.1 openLooKeng打破数据和应用壁垒,快速实现数据价值首先我们在介绍 openLooKeng之前,我们大致的介绍一下当前大数据面临的一些困难。然后主要是困难就是包括左边的三个方面。第一个就是我们看到的我现在一个很典型的场景,就是很典型的问题,就带大数据的。在大数据中心里面,我们都会有很多的引擎,比如说有OLTP的、 OLAP 的,同时有 hadoop 还有 noSQl 的,然后不同的引擎又有不同的语法。然后通常我们还要面临的是跨地域的一个访问。所以说总结起来就有三个部分的困难。一个就是用数难,对于我们面临的开发的组件越多,老开发语言越多,这样的话导致的开发成本越高。但是说我们要从不同的数据语言中,如果进行关联分析的话,我们需要掌握的语言会很多。第二个问题就是找树难,找树难一个典型特性是数据比较分散,然后管理复杂,流动性差,查询效率也低。第三部分就是数据的取数难,跨源分析通常需要数据的半天效率不高。通常我们在进行分析的时候要从一个数据源导到另一个数据源,这样的话导致数据存在多份拷贝,然后数据迁移的效率有部分也很低。而openLooKeng的出现就是为了打破数据壁垒,然后快速实现数据的价值。openLooKeng有三个比较典型的特征,就是用数极简,找数极速取数高效。在下面的 App 中灰着重的讲述这几份方面。然后用数极简的话,第一个方面就说的是在openLooKeng我们提供一个统一的简化的接口,就是 SQL 语言,然后找数取数的话就是我们会在openLooKeng里面利用了很多的增强特性来提高数据的查询速度。然后取数高效,就是我数据在分析的时候不需要搬迁,我们可以实现一个跨源跨域以及跨数据中心的一个联合的查询,从而实现快速的查找数据。1.2 openLooKeng统一高效的数据虚拟化引擎,让大数据变简单openLooKeng用一句话来说就是openLooKeng 是一个跨域的高效的虚拟化查询引擎。它主要是分为三个部分,第一部分就是统一接口层,向外接口的话,我们向上层次提供 2003 兼容的SQL语法。然后中间一层是内核引擎层在内核引擎层我们做了很多的优化,比如说启发式索引动态过滤算子下推以及包括一些企业级特性AA的高可用以及权限的控制。第三部分就是数据源层,openLooKeng提供了一个抽象的数据源框架 data connect framework ,这样的话针对的不同的数据源,我们只要复写它提供的一些接口,就可以简单高效的把数据源接入到 openLooKeng引擎里面来。当前 openLooKeng支持的数据源应该有二十种,然后重新开发一种数据源也是非常简单的。同时我们也实现了一个跨 DC 的 connect 也就是说我们通过openLooKeng的 DC connect 可以去访问另一个openLooKeng集群,这样的话我们形成一个跨域的级联的分析。总体整体来说就是说 openLooKeng有四个特点。第一个就是同一路口化环为点,单一引擎支持多场景。然后第二部分就是内核增强,高性能查询。第三部分就是跨源关联分析,数据消费零搬迁。然后第四部分就是我们提供了一个的 DC connect 实现跨域的协同分析、广域网的部署、局域网的体验。我们在 DC connect 里面实现了多重的优化,包括数据压缩、断点续传以及算子下推,从而实现在 DC connect 性能跨域访问性能的增强。2.3 openLooKeng:统一高效的数据虚拟化引擎我们接下来看一下就是openLooKeng在大数据一个整体的解决方案中的一个位置。我们可以看到就是openLooKeng属于一个在引擎层的位置,它属于数据查询的一个组件。但是相比于 Spark Hive 参数来看的话,它处于一个更高的层次,因为它下层可以接的数据源就包括了 MySQL hive, hbase 等。而底层的硬件设备是可以支持 Kunpeng和X86 都是可以的。然后上层openLooKeng的上层就是 ISV 的大数据解决方案,这个大数据解决方案可以是数据中台等的解决方案。再上层就是我们的数据使能层。数据使能层就包括数据开发的工具、调度工具,然后再上层就是我们的应用。比如说我们典型的五大应用,政府、金融、安频、互联网、电力加三大运营商。2. openLooKeng的典型应用场景2.1 openLooKeng面对行业应用四大场景持续发力openLooKeng面临的四大场景,也就是openLooKeng跟主要发力的四大场景。第一个就是单引擎覆盖交互式的场景。然后现在一个比较典型特征就是比如说我要进行一个数据分析的话,首先数据是导到 Hive 里面,然后经过 ETL 的过程导到一个专题数据库里面,这样的话就有两个烟串,两份数据管理复杂查询数据搬迁的效率也差。那这是第一个场景,通过openLooKeng的话,我们可以使用它的域跨源能力实现数据关联分析。第二个就是大数据实时数据实时分析场景,这个主要是通过openLooKeng的 Kafka connector 这种数据兼容能力,可以实现数据实时的录入,然后实时的对数据进行分析。第三个的就是引擎接口,就是实现一个跨域跨源的数据分析,比如说我的底程有 Hive 和 mpb 数据源,由于这两种数据源它的本身的接口是不一样的,Hive使用的是 Hsql ,然后MPPDB所是使用的是标准的 SQL ,他们在分析的时候由于他们俩的接口不一样,然后需要写不同的语言对他的数据进行一个读取,然后在上层的平台进行一个关联分析,然后下面的几个应用场景也是在实在实际中用到的一个场景。第一个就是 OPPO 跟的用 OPPO 跟去替换 Hive 或者 Spark 目标的场景是这样子的,交互场景目的是为了分析人员提供或是为数据分析人员提供更方便快捷的机器查询能力,性能的要求是很高的,通常是秒级查询。这个是在我司应用的一个场景,他开当前的话之前他们用的是 Hive 然后中间的有一个比较明显特征是中间结果落盘次数比较多,然后调度效率低。而通过使用 open 螺根然后同时以使用了 open 螺根的启发式索引、执行计划、cache等一些技术。然后还有一个比较典型的特征是 OPPO 跟本来是基于一个内存的全 pipeline 的一个数执行模式,这样的时候数据是没有落盘的,最终效率是提高了两至十倍。这是一个在我市应用的一个场景。然后第二个就是融合分析的场景,就统一 SQL 跨源融合分析。我们看就是下沉有三个数据源,一个是 Hive 一个是 hbase 一个是 ES 这样话通过以前的话就你可要通过不同通过他们各自的 connect client 把它的数据拉取上来,然后通过一块源的综合分析程序来实现一个关联分析。那么的话这个一个就是你的开发成本很高,然后你的效率也很低。就很完美的解决这个问题。然后第四个场景就是一个跨域的协同分析的场景。现在的跨如果需要两个 DC 之间需要做一个关联分析,首先比如说我 DC 1 要访问 DC 2 的数据到 dcr,需要把数据放到前置机上,然后通过共享交互平台的方式把数据传送给 DC 1,这样的话肯定是不能做到一个T+0准确的分析。通常的话是一个T+ 1 的分析模式。那通过openLooKeng的跨域的 disconnector 就可以实现一个跨域的实时分析。+2.2 即席服务提供秒级查询能力下面的几个应用场景也是在实际中用到的场景。第一个就是用openLooKeng去替换 Hive 或者 Spark 目标的场景,交互场景目的是为了分析人员提供或是为数据分析人员提供更方便快捷的机器查询能力,性能的要求是很高的,通常是秒级查询。这个是在我司应用的一个场景,当前的话之前用的是 Hive 然后中间的有一个比较明显特征是中间结果次数比较多,然后调度效率低。而通过使用openLooKeng启发式索引、执行计划、cache等一些技术。然后还有一个比较典型的特征是openLooKeng本来是基于一个内存的全 pipeline 的一个执行模式,这样数据是没有落盘的,最终效率是提高了两至十倍。这是一个在我司应用的一个场景。然后第二个就是融合分析的场景,就统一 SQL 跨源融合分析。我们看就是下面有三个数据源,一个是 Hive ,一个是 hbase ,一个是 ES 这样话通过以前的话就你可要通过不同通过他们各自的 connect client 把它的数据拉取上来,然后通过一跨源的综合分析程序来实现一个关联分析。那么的话这个一个就是你的开发成本很高,然后你的效率也很低。然后通过openLooKeng的跨源分析能力,我们可以通过增加新的 connector 把数据源数据接入到openLooKeng引擎里面来。然后通常的话开发一个 connector 只需要一人/月的成本。如果说你很熟悉的话,通常两个礼拜就好了。然后通过这种模式,同时openLooKeng又是一个标准的 mppDB架构的一个分析引擎,通过它的统一的北向接口,南向的抽象 connect 的访问模式,就可以把数据实现一个跨源的融合分析场景。一个很典型特征就是它可通过一个统一的 SQL 2003 的接口,屏蔽了异构数据源访问差异,简化应用程序开发提高点,极大的提升了开发效率。然后就是一个高性能提供百毫秒级的一个分析能力。2.3 融合分析:跨DC联合查询,更强的数据分析能力第三个场景就是跨 DC 的融合关联分析。之前的话都是一个手动处理的一个模式,然后它是 T +1 的一个数据分析能力。然后通过openLooKeng的 DC connect 我们可以实现的一个 T +0 的实时的共享分析能力。那比如说他当前的新的一个业务痛点就是数据量膨胀,导致数据分级分散,存储各省二十一个地市 3000 多的数据源,每天接入的数据总量大于 200 TB ,分析目标人群,分析业务跨域分析效率低。通常的话我们是需要把数据手动的导入到需要访问它的一个DC 里面去通openLooKeng的 DC connect ,无需人工的去搬运数据,然后同时通过openLooKeng DC connect 提供的比如说算子下断点续传以及数据压缩并行传输等特点来提升跨域的一个访问能力,把之前的从天级别的分析速度提高到分钟级的一个分析能力。2.4 融合分析:一份数据,节约存储成本以前有一个典型的流程就是生产数据经,首先是流到 Hive 或者是流到其他系统,然后再流到一个专题的数据库里面。比如说 Oracle 、mppdb这种的话,一个典型的特征就是 ETL 流程长,数据重复搬迁,一致性差。同时有个很大的业务痛点就是提拉高了建设成本。然后通过openLooKeng引擎我们也看到就是数据只需要录到一个数据源中,然后通过openLooKeng的跨源跨域的分析能力,这样的话数据在数据源中只会存在一部分,也存在一份数据,减少了 ETL 过程和不必要的数据的搬迁。3. openLooKeng架构解析和关键特性下面一张图就是显示了openLooKeng的一个典型的架构。首先openLooKeng是一个典型的mppdb 的结构。你它是由 coordinator 和 worker 组成的, coordinator 是负责接收应用层来的 SQL 然后经过他的执行优化再通过他的调度把任务调度到 worker 上去执行。同时每个 worker 是负责整个 SQL 的一部分的数据。然后底层的数据源通过 data connect framework 的方式接入到数据源里面来。然后 data connect framework 提供了两个很重要的接口。一个就是分片的机制就是你要告诉 connector 数据语是怎么分片的,从而实现了一个就是分布式并行处理的一个能力。第二个就是告诉我数据是怎么读取的。其实 connector 就是要告诉引擎就数据是怎么分片的。第二个就是数据是怎么从你的数据源里面读取的。比如说我拿一个很简单的例子,拿 Hive 举例的话,就是它首先会告它的 support manager 就是我们的分片的管理的一个模块,它会告诉openLooKeng引擎我的数据按照DFS block 的大小来调度它。通常一个 block 可能会比较大,可能会按照四分之一个 block 也就是 32 道或者是 60 道的单位来进行一个调度。引擎告诉 worker 在执行的时候怎么去获取这个数据。然后针对于 Hive 数据源的话,它其实就是通过访问文件的方式。首先它会从 HMS 去获取它的元数据,获取它元数据之后就知道它存储在 Hive 哪个地方。这样的话 worker 在执行的时候就会去用 three reader 去解析这个 strip ,然后 strip就解析里面的 strap,这样的话就是可以对数据进行一个分析。图中另外还显示了一个就是跨 DC 的能力。DC connector 走的是 JDBC 的方案,openLooKeng是一个典型的 MPP 架构,高可用无,单点无单点故障。因为之前 codinator 是单节点的,现在我们已经实现了 codinator 一个双活的特性。然后openLooKeng是一个向量化的存储引擎,是基于内存的流水线处理。相比于 Spark 的话,它是一个基于内存的完全的 pipeline 的一个处理引擎,这也是openLooKeng相比于 Spark 性能有提升的一个重要的原因。3.1 openLooKeng关键技术概览openLooKeng重要特征,一个就是索引。索引的会创建一个外置索引,我们提供了 create index 等命令,让用户去根据需要去创建比如说 mini max brow failed bitmap 以及 B +树这种索引。然后在数据读取的时候,我们会去用这用索引去过滤分片,同时也可以用这种索引去获取。另外一个是动态过滤。在左右表作用的时候,通过把右表的列建立一个 felt 去过滤左表的数据,这种效果其实特别的明显。3.2 高性能:对标PrestoSql*,源自开源,领先开源openLooKeng引擎相对与其他引擎的一个性能的优势,对标的是 PrestoSql,源自开源,领先开源。我们当前是用的是十一个节点,每个节点是有238 G 的内存,CPU 的特征列在上面,大家可以仔细看一下,然后测试的数据集是 10 TB 的。我们首先我们可以看一下整体的耗时。 openLooKeng 是用了大概 11,000 多。然后是然后 PrestoSq 347 是用了将近24,00。也就说openLooKeng 1.2 相对于 PrestoSql 347提高了52%,其中有 76% 的 SQL 用时使用率是低于 PrestoSql 347的。可以看到一些典型的,就有有一些 SQL 是体现的很明显的。3.3 高性能:对标impala*,性能领先第二个就是对标impala,可以看到它整个的环境还是和之前一样。是十一个节点,内存稍微小一点,数据量是2 TB。首先看一下它的整个的延时openLooKeng 大概在 1400 秒,然后impala是在 2100 多秒。openLooKeng 是对 tpc-ds 是 100% 的支持的,impala它仅仅是支持了78%,它有一些算子是不支持的。3.4 高性能:对标spark 2.3.2再看一下对标 Spark2.3.2,是同一个数据集群,然后测试数据集是 1 TB。openLooKeng 的用时大概是 1600 秒,然后 Spark 用时大概是在 4700s。其实相对于 Spark 的话openLooKeng 相当于有两倍的性能提升,其实这个性能提升还是很好理解的,因为本身 Spark 它是一个基于 stage ,然后每个 stage要等待上一个 stage 所有的 task 执行完。3.5 OmniRuntime: the Foundation for High-Performance Data AnalyticsopenLooKeng当前正在做的一些优化,runtime 就是现在针对于所有引擎就是做一个 CA comment big data ,简单来说就是一个 native 的 code 键的一个执行环境,用于减少CPU 指令。看到整体的之前的话,相对于之前的话我们有优势的话就是之前PrestoSql spark Hive它都自己在做这种 local optimization ,然后我们的目标是实现一个统一的,就是可以供所有人应用的一个 big data 的 runtime 。3.6 OmniRuntime:Analytics Operator EcosystemOmniRruntime 主要也就是包含有四个部分,然后一个就是Omni flex ,第二个部分就是 Omni operator ,第三个部分就是Omnicache ,然后第四部分是Omni change,在这里主要是介绍一下Omni vector 还有 Omni operator ,Omni vector就是在内存中的一个数据存储格式,就是数据在内存中是怎么表示的。Omni operator就是我们用 C++重新写了一个算子。Omni cache 现在还正在设计,omni change 是一个兼容 RDMA 和 TCP 的一个传输传输方式。3.7 OmniRuntime: Performance Evaluation首先是从 operator 级别,然后是端到端的一个性能提升,可以看得出来就是在算子级别,OmniRuntime:提升的还是特别的明显的。举个例子,就是 filter hash X 其他都是有数倍的提升,最大的提升可能有 10 倍,但是单个算子在整个的 SQL 中的占比会比较少。比如说整个 SQL 中 hash贡献只占了20%,那最多也就是提升 20% 。我们可以看一下单个就是针对于端到端的一个性能提升, tbch 的Q1,可以看在一并发和四并发以及十发的时候,它大概都有 30% 左右的一个提升。3.8大数据OmniData算子下面介绍是OmniData数据计算,就是比如说我们现在要做一个数据分析,通常我要去分析一个表,然后通常我们会带那种过滤条件,然后我从下拿 8 亿行的数据,然后通过OmniData推到数据存储端去计算。、原理就是一个 NTP 的数据计算的一个原理,就把数据的把算子把能够推的算子推到进数据端去执行。然后我们可以看到它最终上来的数据只有 78.7 万行,然后执行时间从之前的 3800 多秒下降到了 2084 秒,这个是在我司的一个真实的案例。ominta 本身的一个目的就是把算子以及它的加解密以及它的解压缩这些算子推到存储团存,推到存储的 CPU 或者是 DPU 上去。因为现在 DPU 也其实一个很火的概念,大家很多公司都在做,然后就是把用多就是用多出来的算力减少,从而减少那个 C 现在以 CPU 为 CPU sentry 的那种结构模式,架构模式 of 缓解 CPA 的压力,本身 DPU 上可能还会带有那种解压缩或者是加解密的引擎,从而我们是应用上硬件的能力来加速整个 SQL 的执行。这样的话我们可以看出在右图我们可以看出是以它的一个整体的架构。我在这里画的是一个纯算分离的场景,就是在 open log 它是由 coinator 就是这个框和 worker 这两个组件组成,然后存储端是 HDFS 集群。然后我们可以看的就是我们红色的部分代表我们的一个修改我们增加了一个 omindata server 这个 omedata server 其实就是用来管做算子下推的。然后同时我们会在执行计划层做一些修改。因为我们现在的需要把算子下推到 admin data sever 里面去。所以我们在执行计划优化的时候会去识别哪些算子能够适合下推。比如说我们会根据算子的选择率,把算子选择率就是把算子最终的选择选,把算子选择率低的推到面对实验我去。比如说之前我这个表是 100 万行,我过滤之后只有 1 万行,我那这个这个选择这这种选择率就特别适合推送到 G 数据端去执行的。3.9 OminData架构设计OminData本身的一个目的就是把算子以及它的加解密以及它的解压缩这些算子推到存储的 CPU 或者是DPU 上去。从而减少现在以 CPU 为 结构的模式,本身 DPU 上可能还会带有那种解压缩或者是加解密的引擎,从而我们是应用上硬件的能力来加速整个 SQL 的执行。这部分已经产品化了,然后在鲲鹏的 support 网站上已经发布了。一个很简单的总结就是openLooKeng下推项目前就是一个同时支持 Spark Hive 组件下推 来缓解 CPU 压力,实现净数据计算,减少数无效数据在网络上传输,从而提升整个大数据。3.10 OmniData: Performance Evaluation接下来我们可以看一下就是OmniData性能,左侧是openLooKeng引擎,右侧是 Spark 引擎,然后这个是在 实际业务上测出来的。我们可以看出整体上提升的效果还是挺明显。无论是 Spark 引擎还是openLooKeng引擎。接下来是在实际的业务中一个性能测试,性能是归一化的。3.11 openLooKeng的四大优势总结一下就是 openLooKeng有四大优势,一个就是融合风险,就是跨源,还有一个就是跨域。然后第三个就是一份数据,而第二个部分就是高性能。通过我们新增的一些特性,比如说动态过滤、启发式索引算子下推聚合 cte 等特性,从而提升 SQL 查询端到端的时延大概提升两到十倍。第三个部分就是南北向生态向北向统提供一个统一的访问层,就是 SQL 阶段 SQL 2003 的一个语法。然后向南向提供了一个 connect framework 可以实现解数据的快速接入。第四部分就是企业级的特性,就包括 autoscanning ,autoscanning 就是 worker 的动态伸缩,我们会根据 worker 的繁忙程度来动拓来动态的升增加或者减少。然后第二部分就是 coordinator 的 AA 就是实现了 coordinator 的双活,任一个 connect都可以接受任务,下发任务到 worker ,然后第三个就是 task level 的 recover 就是任务级别的恢复。然后第四个就是资源隔离,3.12 高可用:坚如磐石般的“数据库”体验openLooKeng在故障域的处理主要是分为三部分,一个是 query 级别的资源控制。就是可以对单条 query 的使用的资源进行一个控制。第二个就是集群资源弹性伸缩,,因为openLooKeng 的 worker 是一个无状态的,可以实现按需的动态扩动态的扩展或者是收缩,第三部分就是自动化的处理节点故障,然后节点故障是业务感知的。4. openLooKeng开源策略及伙伴帮助计划接下来给大家介绍的是 openLooKeng一个开源的策略以及伙伴帮助计划。4.1 openLooKeng社区与Presto社区关系openLooKeng和 Presto社区的一个关系是同针对一些大颗粒的特性会同步过来。同时会做一个能力的提升。我们是基于开源,然后就是超越开源,就是从基线版本会做一些很多的性能提升,实现能力的增强。同时如果有新的大颗粒的出现,我们会把社区的大颗粒特性根据需要。比如这个需求这个特性是很有必要的,我们会移植过来。然后第二部分就是其实也可以看到是社区也在应用openLooKeng的一些新的特性。而第三就是和合作伙伴实现一个合作共赢的一个目的。然后开源的一个策略就是持续使能伙伴共建大数据繁荣生态,第一个方面就是代码开源,合作开发,解决商业利益冲突,让合作伙伴放心使用。当前我们太原都是开发开放在那个 DT 上面,任何都可以去下载或者是通过 TPR 的方式给社区提做出贡献。第三部分是拥抱标准,统一接口,降低被集成的难度。openLooKeng提供了一个 SQL 2003 的一个接口,就是估计大家使用 SQL 比较简单,然后大家都习惯于使用 SQL 来进行一个数据分析。然后第二部分就是全场景的能力。第三个就是全场景能力的一个保证,逐步补齐查询场景,第四部分就是友好对接现有生态。比如说现现有生现有的数据源中,我可以对它实现一个灵活的访问。+总结就是代码开源,易于集成技术支持,帮助合作伙伴大数据解决方案,提升提升伙伴的大数据竞争力。4.2 ISV对接模式然后我们可以看一下 SV 的三个对接方式。第一种是自研的大数据平台,这种方式的话就是需要手动的去集成 OPPO 跟这样的话需要的 SV 能力状态的要求能力,能力的要求状态会比较高,它需要自行的去集成openLooKeng引擎,当然我们一定会给予基础知识。然后第二步就是基于现有的免费大数据平台,比如说 CDH 去集成openLooKeng引擎这个的相对来说就会相对来说比较简单一点,因为它本首先它的底层的组件都是一个开源的通过开源的组件构建出来的。然后本身openLooKeng也是开源的,然后底层的组件也都是基开源的。第三个就是商业发行版,比如说华为公司与平台 ISV 合作,辐射对应行业ISV ,这三种模式我们都会提供比较大提供很大的技术支持。华为测试会持续投入openLooKeng社区,使能数据伙伴,同时会在高校或是线下展开一系列的活动,让大家去更好的去了解openLooKeng。5. 总结本文介绍的openLooKeng是一种"开箱即用"的引擎,支持在任何地点(包括地理上的远程数据源)对任何数据进行原位分析。它通过SQL 2003接口提供了所有数据的全局视图。openLooKeng具有高可用性、自动伸缩、内置缓存和索引支持,为企业工作负载提供了所需的可靠性。openLooKeng用于支持数据探索、即席查询和批处理,具有100+毫秒至分钟级的近实时时延,而无需移动数据。openLooKeng还支持层次化部署,使地理上远程的openLooKeng集群能够参与相同的查询。利用其跨区域查询计划优化能力,涉及远程数据的查询可以达到接近“本地”的性能。本文参与华为云社区【内容共创】活动第17期。https://bbs.huaweicloud.com/blogs/358780 任务15:openLooKeng,一款面向海量、跨DC的大数据分析利器
  • [行业资讯] 数据科学:自动化的未来?
    数据科学家,是精通代码编写、以客户为导向的思维模式和出色沟通技巧的完美结合。但是,为什么这个新生角色如此受欢迎?这份工作实际上需要什么?曾经有一段时间,制造企业使用的数据量和异质性可以通过标准的数据处理应用软件轻松处理。然而,随着技术的进步,生产经理们开始觉得需要一名专业人士,来识别大量非结构化数据中的模式,并使用这些模式来解决实际或潜在的问题。数据科学家来了!大数据解读者虽然数据科学家这个职位才出现了十年,但已经有数千人受雇于精通技术的初创公司和大型企业。然而,目前对数据科学家的需求超过了可用的数量。这一点,再加上进入该领域的学术途径有限,导致发现、雇用和留住数据科学家可能是一个真正的挑战。由于缺乏进入该领域的途径,那么我们可以在哪里找到数据科学家?统计学家、数学家或计算机科学家是该职位的理想人选,因为数据科学是一个高度跨学科的领域,其中经常同时应用统计学、分析和机器学习的技术。除了拥有扎实的数据和计算背景外,数据科学家还需要成为杰出的联想思想家。此外,强大的沟通技巧和简单明了地展示研究结果的能力也是不可或缺的。预测性维护和自动化领域的数据科学家虽然预测性维护始于传感器收集机器状态的数据,但它是由数据科学家获取这些数据,并将其转化为其他工作人员(在这种情况下是维护工程师)可以解释的东西来实现的。数据科学家可以帮助发现机器生产力的模式,以预测机器何时可能发生故障,例如,如果电机变得越来越低效,则很可能会出现问题。这种洞察力使维护工程师能够进行预测性维护,在机器和系统完全崩溃之前对其进行维护。在这种情况下,维护工程师必须快速采取行动。与零件供应商建立牢固的关系是一个良好的开端,因为这使他们能够获得一系列可以订购和储存的零部件,以备需要维修时使用。自动化数据科学?由于数据科学家是热门职业,因此看来该职业的未来需要将工作中的一些重复性任务自动化,以便科学家可以专注于只有人类才能处理的复杂任务。虽然有些人担心自动化会导致数据科学家的工作机会减少,但福布斯预测了两种更令人鼓舞、更有可能发生的情况。首先,自动化将使数据科学家能够在更快的时间内分析更多数据;其次,它将导致角色民主化,这可以帮助数据科学家与维护工程师、软件工程师和业务分析师等其他专业人士建立更紧密的联系。自动化非但不会危及他们的职业机会,反而极有可能突出他们技能的独特性。简而言之,数据科学家的魅力只会随着技术的进步而增加。(编译:iothome)
  • [行业资讯] 贵州电网公司利用RFID等技术持续深化生产领域数字化建设
    累计登录139万人次、发起工单117万单、各域共推送协同业务15.67万单……自4月份电网管理平台正式单轨上线以来,贵州电网庞大且分散的系统数据得以“归一”,“孤岛”连成大陆,数据高度共享、业务高度协同,成效明显。为此,在南方电网公司的指导下,南方电网贵州电网公司以全面推广应用电网管理平台为契机,以解决现场生产问题为出发点,以减轻基层负担为落脚点,积极开展电网生产领域“封键盘”工作,即以拍一拍、扫一扫、自动识别等创新录入方式,取代传统键盘录入,充分挖掘数字“生产力”,让基层减负“落下来”。精准试点 实现经验“复制”“要通过‘封键盘’,保障数据真实性、有效性,减少键盘录入产生的问题数据,最终实现各业务域的业务移动化、智能化、高效化。”贵州电网公司党委书记、董事长陈晔提出,要逐步推进各领域的业务流程、环节、模块的“去键盘”化,为一线员工提供全方位支撑。在推进电网管理平台上线过程中,贵州电网公司对局放检测、油化试验、红外测温等开展频率高、数据录入量大的工作场景开展试点,努力获取可借鉴、可复制的工作经验。作为能够为及时消除设备隐患提供“看得见”科学依据的局放检测,数据却一直采用纸质方式记录,且还需上传局放图谱,增加一线班组工作量的同时,还容易出现结果偏差。为提升效率和精准度,贵州电网公司拟应用无线通讯技术将局放测试仪与手机进行连接,到时只需扫描开关柜体上的RFID标识,将测试数据与设备信息进行关联,当测试完成后,“点一点”便可将数据直接上传至电网管理平台,同时形成标准报告。目前,该项工作已完成功能调试,下一步将进行全面推广应用。对于红外测温工作,更是基层多年来最普遍采用的人工辨识设备异常情况的方法,却主要采用拍照来完成数据记录,过程繁琐、工作量大。对此,贵州电网公司初步拟定了将变电巡视App与智能测温镜头融合的改善方案,直接将测温仪数据进行转化后上传至变电巡视App及电网管理平台,促进效率实现质的提升。“‘封键盘’的试点工作,将为电网生产领域数据的直采直送,数据的智能分析提供有意义的借鉴。”贵州电网公司生产技术部副总经理欧阳广泽说。立足痛点 推动点点皆“清”上面千条线,下面一根针。针对千头万绪的电网生产域工作,要推动“封键盘”,更要立足痛点、难点问题。为充分运用数字化手段,提升劳动生产率,贵州电网公司先行一步,针对设备巡维数据重复记录问题,提前谋划,在电网管理平台上线前就完成了输电、变电、配电巡视App与电网管理平台的接口改造。目前相关数据分析功能持续完善,正朝着实现“一方录入、多方共享”、“尽量不录、要录只录一次”的目标大踏步前进。同样,对于长期需要人工填报且数据繁杂的“用户故障出门”难题,贵州电网公司在停电信息系统内开发上线“用户故障出门实时监测场景”,以线路故障停电后的最后一台复电变压器为专变作为算法突破点,通过大数据分析和数据“清洗”,实现了用户故障出门的自动分析、识别、统计和预警,并可在手机端实时查询相关情况。“监测场景的上线,切实将基层员工从现场排查的繁重工作中解放了出来。”贵州电网公司生产技术部配电管理科经理熊楠表示。此外,贵州电网公司还一直把数据统计分析难、工作效率低等问题,作为省级生产指挥中心建设的重点,引入人工智能、大数据分析等技术手段,让业务系统中实际指标变化的研判代替了人工填报,实现了风险控制措施落实情况以及实施效果的全程“跟踪”。自主研发 促进化繁为简生产指挥平台日报、配网停电信息告警……贵州电网都匀供电局自主研发出5项生产类数字“员工”,将生产数据统计分析效率从原来的4小时变成了10分钟,极大减轻了基层工作负担,补足了平台基础功能,真正实现了工作的扁平化、智能化、便捷化。“通过运用数字化、智能化技术解决基层员工高重复、低效率的工作是‘封键盘’工作最基础的要求。”贵州电网都匀供电局生产技术部副总经理杨竣淇说。与此同时,针对如何运用系统中海量数据进行问题的分析这一工作,贵州电网铜仁供电局利用爬虫技术自主编程“生产业务过程管理全自动数据分析平台”,实现了各业务系统的“数据源”自动采集、统计、分析,以及报表自动输出的“一键”操作,让原来需要人工2小时完成的日报缩短至15分钟就能完成,真正有效的解决了基层工作冗余操作的问题,解放了员工的双手。“我们将研究相关生产运行单位在‘封键盘’实践中的经验做法,逐步在全省推广应用。”贵州电网公司生产技术部副总经理虢韬表示,基于南网“4321”架构制定总体技术方案,依托电网管理平台,明确数据接入规范,应用物联网技术,推进数据的直采直送及数据的深度应用分析,建立“封键盘”的完整体系,真正实现服务决策层、支撑管理层、解放操作层的目标。