• [技术干货] 深度数据包检测 (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!") 二、扩展这里我熟悉了这个数据的训练之后,我做了一个有关模型训练的实际操作红酒分类代码如下:
  • [技术干货] 华为云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)
  • [行业资讯] 数据科学:自动化的未来?
    数据科学家,是精通代码编写、以客户为导向的思维模式和出色沟通技巧的完美结合。但是,为什么这个新生角色如此受欢迎?这份工作实际上需要什么?曾经有一段时间,制造企业使用的数据量和异质性可以通过标准的数据处理应用软件轻松处理。然而,随着技术的进步,生产经理们开始觉得需要一名专业人士,来识别大量非结构化数据中的模式,并使用这些模式来解决实际或潜在的问题。数据科学家来了!大数据解读者虽然数据科学家这个职位才出现了十年,但已经有数千人受雇于精通技术的初创公司和大型企业。然而,目前对数据科学家的需求超过了可用的数量。这一点,再加上进入该领域的学术途径有限,导致发现、雇用和留住数据科学家可能是一个真正的挑战。由于缺乏进入该领域的途径,那么我们可以在哪里找到数据科学家?统计学家、数学家或计算机科学家是该职位的理想人选,因为数据科学是一个高度跨学科的领域,其中经常同时应用统计学、分析和机器学习的技术。除了拥有扎实的数据和计算背景外,数据科学家还需要成为杰出的联想思想家。此外,强大的沟通技巧和简单明了地展示研究结果的能力也是不可或缺的。预测性维护和自动化领域的数据科学家虽然预测性维护始于传感器收集机器状态的数据,但它是由数据科学家获取这些数据,并将其转化为其他工作人员(在这种情况下是维护工程师)可以解释的东西来实现的。数据科学家可以帮助发现机器生产力的模式,以预测机器何时可能发生故障,例如,如果电机变得越来越低效,则很可能会出现问题。这种洞察力使维护工程师能够进行预测性维护,在机器和系统完全崩溃之前对其进行维护。在这种情况下,维护工程师必须快速采取行动。与零件供应商建立牢固的关系是一个良好的开端,因为这使他们能够获得一系列可以订购和储存的零部件,以备需要维修时使用。自动化数据科学?由于数据科学家是热门职业,因此看来该职业的未来需要将工作中的一些重复性任务自动化,以便科学家可以专注于只有人类才能处理的复杂任务。虽然有些人担心自动化会导致数据科学家的工作机会减少,但福布斯预测了两种更令人鼓舞、更有可能发生的情况。首先,自动化将使数据科学家能够在更快的时间内分析更多数据;其次,它将导致角色民主化,这可以帮助数据科学家与维护工程师、软件工程师和业务分析师等其他专业人士建立更紧密的联系。自动化非但不会危及他们的职业机会,反而极有可能突出他们技能的独特性。简而言之,数据科学家的魅力只会随着技术的进步而增加。(编译:iothome)
  • [行业资讯] 贵州电网公司利用RFID等技术持续深化生产领域数字化建设
    累计登录139万人次、发起工单117万单、各域共推送协同业务15.67万单……自4月份电网管理平台正式单轨上线以来,贵州电网庞大且分散的系统数据得以“归一”,“孤岛”连成大陆,数据高度共享、业务高度协同,成效明显。为此,在南方电网公司的指导下,南方电网贵州电网公司以全面推广应用电网管理平台为契机,以解决现场生产问题为出发点,以减轻基层负担为落脚点,积极开展电网生产领域“封键盘”工作,即以拍一拍、扫一扫、自动识别等创新录入方式,取代传统键盘录入,充分挖掘数字“生产力”,让基层减负“落下来”。精准试点 实现经验“复制”“要通过‘封键盘’,保障数据真实性、有效性,减少键盘录入产生的问题数据,最终实现各业务域的业务移动化、智能化、高效化。”贵州电网公司党委书记、董事长陈晔提出,要逐步推进各领域的业务流程、环节、模块的“去键盘”化,为一线员工提供全方位支撑。在推进电网管理平台上线过程中,贵州电网公司对局放检测、油化试验、红外测温等开展频率高、数据录入量大的工作场景开展试点,努力获取可借鉴、可复制的工作经验。作为能够为及时消除设备隐患提供“看得见”科学依据的局放检测,数据却一直采用纸质方式记录,且还需上传局放图谱,增加一线班组工作量的同时,还容易出现结果偏差。为提升效率和精准度,贵州电网公司拟应用无线通讯技术将局放测试仪与手机进行连接,到时只需扫描开关柜体上的RFID标识,将测试数据与设备信息进行关联,当测试完成后,“点一点”便可将数据直接上传至电网管理平台,同时形成标准报告。目前,该项工作已完成功能调试,下一步将进行全面推广应用。对于红外测温工作,更是基层多年来最普遍采用的人工辨识设备异常情况的方法,却主要采用拍照来完成数据记录,过程繁琐、工作量大。对此,贵州电网公司初步拟定了将变电巡视App与智能测温镜头融合的改善方案,直接将测温仪数据进行转化后上传至变电巡视App及电网管理平台,促进效率实现质的提升。“‘封键盘’的试点工作,将为电网生产领域数据的直采直送,数据的智能分析提供有意义的借鉴。”贵州电网公司生产技术部副总经理欧阳广泽说。立足痛点 推动点点皆“清”上面千条线,下面一根针。针对千头万绪的电网生产域工作,要推动“封键盘”,更要立足痛点、难点问题。为充分运用数字化手段,提升劳动生产率,贵州电网公司先行一步,针对设备巡维数据重复记录问题,提前谋划,在电网管理平台上线前就完成了输电、变电、配电巡视App与电网管理平台的接口改造。目前相关数据分析功能持续完善,正朝着实现“一方录入、多方共享”、“尽量不录、要录只录一次”的目标大踏步前进。同样,对于长期需要人工填报且数据繁杂的“用户故障出门”难题,贵州电网公司在停电信息系统内开发上线“用户故障出门实时监测场景”,以线路故障停电后的最后一台复电变压器为专变作为算法突破点,通过大数据分析和数据“清洗”,实现了用户故障出门的自动分析、识别、统计和预警,并可在手机端实时查询相关情况。“监测场景的上线,切实将基层员工从现场排查的繁重工作中解放了出来。”贵州电网公司生产技术部配电管理科经理熊楠表示。此外,贵州电网公司还一直把数据统计分析难、工作效率低等问题,作为省级生产指挥中心建设的重点,引入人工智能、大数据分析等技术手段,让业务系统中实际指标变化的研判代替了人工填报,实现了风险控制措施落实情况以及实施效果的全程“跟踪”。自主研发 促进化繁为简生产指挥平台日报、配网停电信息告警……贵州电网都匀供电局自主研发出5项生产类数字“员工”,将生产数据统计分析效率从原来的4小时变成了10分钟,极大减轻了基层工作负担,补足了平台基础功能,真正实现了工作的扁平化、智能化、便捷化。“通过运用数字化、智能化技术解决基层员工高重复、低效率的工作是‘封键盘’工作最基础的要求。”贵州电网都匀供电局生产技术部副总经理杨竣淇说。与此同时,针对如何运用系统中海量数据进行问题的分析这一工作,贵州电网铜仁供电局利用爬虫技术自主编程“生产业务过程管理全自动数据分析平台”,实现了各业务系统的“数据源”自动采集、统计、分析,以及报表自动输出的“一键”操作,让原来需要人工2小时完成的日报缩短至15分钟就能完成,真正有效的解决了基层工作冗余操作的问题,解放了员工的双手。“我们将研究相关生产运行单位在‘封键盘’实践中的经验做法,逐步在全省推广应用。”贵州电网公司生产技术部副总经理虢韬表示,基于南网“4321”架构制定总体技术方案,依托电网管理平台,明确数据接入规范,应用物联网技术,推进数据的直采直送及数据的深度应用分析,建立“封键盘”的完整体系,真正实现服务决策层、支撑管理层、解放操作层的目标。
  • [技术干货] 【论文分享】长输油气管道大数据挖掘与应用
    长输油气管道大数据挖掘与应用于涛1, 刘丽君2, 陈泓君1, 于瑶11 中国石油天然气股份有限公司北京油气调控中心,北京 1000072 北京中油瑞飞信息技术有限责任公司,北京 100007摘要针对未来长输油气管道智能化建设的需要,结合油气管道数据采集与监视控制(SCADA,supervisory control and data acquisition)系统及运行参数,对比传统理论方法和大数据挖掘方法的特点,提出了大数据推动管道智能化的研究方向以及管道智能化研究的数字信息化、理论化和智能化3个步骤,建立了管道智能化架构,包括物理层、数据层、数据挖掘层、应用层和用户层共5个层次,并确定以数据挖掘层为架构核心。统计分析、时序性预测和工况识别等应用案例表明,利用大数据挖掘可有效解决实际生产的业务需求,指导未来管道智能化的研究与建设。关键词: 长输油气管道 ; 大数据 ; 智能化1 引言近年来,大数据在工业数据领域的参数预测、设备监测和运行优化等方面发展迅速[1],有效提高了工业控制系统的运行管理水平[2]。2020年初,我国提出了“新基建”概念,作为国家经济发展动脉的长输油气管道,可借助“新基建”机遇,通过管道智能化的建设吸收数字化时代赋予的科技力量,推动数字经济与管道上、下游产业的深度融合,将海量数据资源转换为商业价值,提升企业大数据创造价值的能力。充分利用“新基建”中的 5G 通信网络及工业互联网、物联网等技术,加速资源整合,推动行业技术储备能力和应急管理体系的建设,促进机器人检修、无人站场建设、无人机巡线等技术的应用,探索化石能源与新能源全面融合发展,实现管道数字孪生及远程分析监控,逐步建设低碳能源生态圈,有效提升能源利用率,从而提高油气管道的安全管控水平,实现提质增效的运行目标。在长输油气管道运行中,调度员利用 SCADA系统的压力、流量等参数,结合管道的设备状态变化和报警信息等实现管道的远程监控运行。随着管道自控通信、物联网技术的发展以及调度员远程调控运行经验和业务知识的积累,结合SCADA系统的实时数据及历史数据,探索将运行经验、业务知识结合系统报警信息等进行数据理论化和模型化,构建参数预测和工况智能识别模型,并使用实际生产数据驱动模型提高模型的预测精度和适应性,将是未来管道智能化发展的途径[3,4,5],也是油气管道在“新基建”人工智能方面的研究前提。相比其他行业,油气管道具有点多、线长等特点,生产和运行维护环节多、难度大,实施大数据挖掘和智能化研究的困难多,因此,需要根据大数据挖掘特点,结合业务需求,构建管道智能化架构,从而指导未来管道智能化的建设与应用。2 结束语通过以上研究,可以获得如下结论。1) 对比传统理论方法和大数据挖掘方法的研究特点,获得研究过程中可利用理论方法确定模型的影响因素,提升研究效率,同时得出了大数据挖掘方法推动油气管道智能化的4个方向。2) 管道智能化控制需要经过数字信息化、理论化、智能化3个步骤,提出了管道智能化研究架构,指导后续应用研究工作的开展。3) 研究确定以数据挖掘层为核心的管道智能化建设架构,为数据驱动模型构建智能化管道奠定了基础。4) 根据油气管道大数据业务需求,给出统计分析、时序性预测和工况识别等应用案例,可见利用大数据挖掘方法可有效解决实际生产业务需求。5) 目前,油气管道大数据研究应用还处于起步阶段,管道智能化概念性较强,大多侧重于单业务数据孪生与应用,业务之间存在壁垒和信息“孤岛”,后续需要建立一套完整的理论研究体系,构建高质量的样本数据库,培养跨学科的研究人才,为管道智能化研究应用奠定理论基础和人才基础。The authors have declared that no competing interests exist.作者已声明无竞争性利益关系。3 原文链接http://www.infocomm-journal.com/wlw/article/2020/2096-3750/2096-3750-4-3-00112.shtml
  • [技术干货] 华为云IoT技术能力清单
    华为IoT技术能力清单名称一句话简介设备接入IoTDA设备接入服务(IoT Device Access)是华为云的物联网平台,主要包含设备管理、消息通信、规则引擎、数据流转、监控运维等功能。使用设备接入控制台,可以实现对产品的创建、开发、调试,设备的注册、管理、鉴权、软固件升级。在设备接入控制台,可以创建规则引擎,满足用户实现设备联动和数据转发的需求;还可以存储产品和设备数据及生成相应统计报表,方便用户监控设备的各种状态。设备接入支持MQTT/CoAP/LwM2M/HTTP协议接入。提供开源SDK和技术框架,需用户自行部署云网关完成协议转换,或部署协议驱动到边缘网关。支持一机一密,X.509证书等鉴权方式。设备管理设备增删改查、设备状态管理、设备冻结/解冻、子设备管理等。持对设备软固件进行升级,对设备的批量操作等。消息通信支持设备消息HTTP/AMQP推送到应用服务器,支持应用侧向设备以异步方式下发消息。应用侧和设备侧基于物模型定义的属性、命令和事件进行解耦通信。 在线开发编解码插件,对设备数据进行数据解析和格式转换。规则引擎支持数据流转到华为云Kafka/OBS/GaussDB/DIS/DMS/ROMA/IoT数据分析等服务,详细请参见规则引擎。支持建立设备联动规则,实现联动控制。数据分析IoTA物联网数据分析服务(IoTA)基于物联网资产模型,整合物联网数据集成,清洗,存储,分析,可视化,为物联网数据开发者提供一站式服务,降低开发门槛,缩短开发周期,快速实现物联网数据价值变现。离线分析帮助客户快速构建物联网数据湖,开发者可通过标准 SQL开发数据分析任务,并轻松处理TB-EB级别海量数据,可在报表统计、设备行为分析等无需实时处理数据的场景使用。实时分析基于大数据流计算引擎,提供物联网实时分析能力。为了降低开发者开发流分析作业门槛,IoT数据分析服务提供图形化流编排能力,开发者可以通过拖拽方式快速开发上线。时序分析专为物联网时序数据处理优化的服务,包括高压缩比的时序数据存储,高效的时序查询效率,海量时间线能力。资产建模为充分“理解”物联网设备所产生的海量数据、挖掘海量数据背后的价值,往往需要将单一设备数据和测量数值置于一个上下文中去分析,这个上下文可能是一个产线或系统装配关系、组织关系、地理空间关系等等。IoT数据分析服务提供资产模型能力,帮助开发者快速定义复杂业务系统模型,并基于该模型对物联网数据进行实时关联计算、智能关系分析等处理。IoT边缘IoT EdgeIoT边缘(IoT Edge),是边缘计算在物联网行业的应用。IoT Edge 在靠近物或数据源头的边缘侧,融合网络、计算、存储、应用核心能力的开放平台,就近提供计算和智能服务,满足行业在实时业务、应用智能、安全与隐私保护等方面的基本需求。IoT边缘提供数据采集、低时延自治、云边协同、边缘计算等能力,在园区、城市、工业等场景,作为数据源切入点,解决用户对设备上云、本地计算、数据预处理等诉求。边缘节点管理IoT边缘软件部署在网关或服务器上,纳管为边缘节点,节点可以实现设备数据的采集、预处理、数据流转、路由转发,同时边缘侧提供应用托管、边缘计算等功能,方便业务本地自治、业务扩展。边缘集成靠近客户现场的设备,可以通过边缘节点的数据采集能力,就近接入边缘节点,从而实现设备的管理、智能控制、数据治理。华为IoT边缘提供ModuleSDK,用户可通过集成SDK让设备以及设备数据快速上云。IoT边缘平台应用功能有自定义处理设备数据(即数据处理),自定义协议设备快速接入(即协议解析),IT子系统接入(即IT应用),并且支持容器化部署和安装包部署的方式。