• [行业动态] 专家解惑 | 关于华为云盘古大模型,你想问的都在这里~
    4月25日,华为云发布盘古系列超大规模预训练模型,包括30亿参数的全球最大视觉(CV)预训练模型,以及与循环智能、鹏城实验室联合开发的千亿参数、40TB训练数据的全球最大中文语言(NLP)预训练模型。其中,盘古NLP大模型由华为云、循环智能和鹏城实验室联合开发,具备领先的语言理解和模型生成能力:在权威的中文语言理解评测基准CLUE榜单中,盘古NLP大模型在总排行榜及分类、阅读理解单项均排名第一,刷新三项榜单世界历史纪录;总排行榜得分83.046,多项子任务得分业界领先, 向人类水平(85.61)迈进了一大步。外界对盘古大模型充满了好奇,在华为开发者大会(Cloud)期间,参与大模型开发的两位华为云专家回答了以下几个大家关心的问题。谢凌曦博士专访 Q:作为一个开发者,请问这些预训练模型的易用性如何?使用成本有多高?谢凌曦:预训练模型设计的目的就是为了让大家降低使用成本。模型的预训练过程,成本是比较高的,但这个成本不需要开发者来承担。而在使用这些大模型的时候,它本身的易用性会使得使用成本进一步降低,达到一个比较合适的水平。比如说,我们会开发出一些比较通俗易懂的Pipeline,如果你是有一定基础的开发人员,你可以从我们的Pipeline当中去做更多的定制化的开发,更好地去释放我们预训练模型的能力。如果你只是一个AI开发小白,想用大模型去做AI简单的开发,我们也会给你更加通俗易懂的界面,让大家能够用一些拖拉拽的方式使用盘古大模型。总体来讲,大家在使用预训练模型的时候,计算时长、调参所需要重复的代价等都会被降到很低,总体来讲是对开发者非常友好的。Q:对于新入门计算机视觉的人来说,需要掌握什么哪些知识才能快速进入到学习和研发中?谢凌曦:人工智能、计算机视觉,经过几十年的发展,到现在已经拥有很庞大的知识体系。如果一个初学者想要把这些东西都了解以后再开始做研究,效率会稍微有点低。我给大家的建议是,你在学习过程当中,可以先找准一个问题。刚开始的时候,这个问题可能是相对初级的问题,但一定有具体的场景。比如想做弱监督学习,一般就是遇到某个实际的问题,它确实需要弱监督算法。但是这个时候我是不是一定要掌握全监督才能去做弱监督呢?并不是这样的。你可以先去查阅一些资料,了解当前的弱监督学习方法,它的基线是什么,它的前沿在哪里。然后你就可以开始做一些简单的实验。实验的过程当中,一般会遇到一些困难或者一些疑惑。解决这些困难和疑惑的过程,一般就会把你引导到它的基础,比如说全监督到底是怎么做的。当你有了更多基础以后,回过头来,也会发现你对当前做的算法有了一个更好的理解。所以我的建议是大家可以找一本机器学习、计算机视觉这类介绍比较深入的教材去看。但是不要局限于这个教材:一边做具体的课题,一边去学习知识,效率会比较高。张晓鹏博士专访Q:盘古CV大模型有哪些成功的落地?跟业界相比处在什么位置?  张晓鹏:视觉预训练CV大模型,结合相关流程化开发,已经在华为内部以及其他合作项目上,有100+成功落地,这些方向涵盖了各行各业,包括工业视觉、网络审查、零售商超,以及医疗等场景,都获得了一些相较于之前不使用预训练大模型更高的结果。在某些场景上,比如刚才提到的遥感影像分割,我们通过设计针对遥感影像的预训练算法,在没有增加额外标注代价的情况下,达到了最多12%的分割精度提升。还有另外一个比较有意思的现象,我们使用超大规模图像进行的预训练模型具有更好的可迁移性,即直接把这样一个模型,迁移到了工业质检的缺陷上进行推理,我们非常欣喜地发现,我们在下游数据集上没有进行任何微调,但是在工业缺陷检测上,获得了比之前我的模型不停地高度的优化,甚至利用下游的数据微调更好的结果,这个结果基本上会高出3到4个百分点。这个启发我们,模型数据一旦够多,其实它的泛化能力能够获得更好的保障。第二,我们是国内最早做视觉预训练大模型的公司之一。在国外是Facebook和谷歌从2019年开始在图像上做了一些应用。我们视觉预训练模型大概从2019年底的时候就开始了,通过自研的一些列改进算法,我们首次在基于imagNet 的无监督预训练模型线性分类精度上达到了全监督基线的水平,同时在小样本学习上大大领先现有技术,这些都是业界领先的成果。Q: 华为的预训练是采用什么类型数据和学习任务?大模型如何保证端侧性能? 张晓鹏:针对视觉图像不同角度,以及不同场景的变化,我们采取的方法非常简单。一,我们可能有海量数据集,这个数据集规模已经达到了亿级甚至十亿级这样的规模,我们相信这个海量的数据集,它能够建模,我们实际场景图像的方方面面。另外一个,我们采取了什么样的学习方式。其实它的一个核心思想,就是2019年开始,比较火的基于全局的对比度自监督学习方法。当然我们在这上面做了很多改进。包括如何来利用弱标签信息,如何把全局的信息拓展到局部来更好建模局部相关关系。同时也会呼应刚才提到的,如何处理不同视角,不同尺度图像问题,怎么来让它进行高效的建模,这里面就是让它进行不同的数据增强,我们在预训练算法里面,集成了十余种数据增强方法,让它通过不同的数据增强,使得整个模型具有针对不同数据增强的不变性。到目前为止,我们在一个大模型,搭载模型蒸馏、抽取以及行业大模型,我们现在已经适配了大概十余种预训练模型。而这十余种模型都是通过我们一个大模型的抽取,蒸馏所得到的,它在相应的行业上,得到了非常大的精度提升。同时也极大的减少了标注代价以及模型迭代周期。Q:华为的预训练模型是如何结合不同行业知识,解决标注数据大的问题?张晓鹏:举一个我们在HDC Cloud上发布的国网电力智能巡检的例子,这就是非常典型的利用盘古CV大模型解决行业知识。在国网电力巡检模型开发的过程中,它有海量的数据,标注非常困难,我们做了什么呢?通过我们的视觉预训练算法,在海量的巡检数据上进行预训练,这个预训练是利用了无人机巡检的数十TB,上百万规模的数量,进行预训练,它的预训练可以看到我们非常多的数据,它的内在分布。我们的大模型,模型参数越大,也看了更多的数据,所以说它能够更好的建模无人机巡检过程中的图片的细微差异。利用我们的视觉预训练大模型,它能够提供更好的表征以后,因为它的缺陷和正常样本的表征能力更强,我们在标注代价上,基本上减少了80%以上,这一块整个在人力上是一个非常大的提升。除了减少标注,我们一个模型可以适配我们电力行业一百多种缺陷,从而让模型迭代周期大大减少,整个迭代效率大概提升了10倍,我们在每次迭代过程中反馈给人需要标注的整体的工作量就会越少,通过这两种模式,我们实现了在电力行业方面,利用我们视觉预训练模型,极大的提升了我们的开发效率。
  • [其他] 什么时候该改变开发/测试集和指标
    你已经学过如何设置开发集和评估指标,就像是把目标定在某个位置,让你的团队瞄准。但有时候在项目进行途中,你可能意识到,目标的位置放错了。这种情况下,你应该移动你的目标。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/30/005556taswqyoyrj2eqgpx.png) 我们来看一个例子,假设你在构建一个猫分类器,试图找到很多猫的照片,向你的爱猫人士用户展示,你决定使用的指标是分类错误率。所以算法和分别有3%错误率和5%错误率,所以算法似乎做得更好。 但我们实际试一下这些算法,你观察一下这些算法,算法由于某些原因,把很多**图像分类成猫了。如果你部署算法,那么用户就会看到更多猫图,因为它识别猫的错误率只有3%,但它同时也会给用户推送一些**图像,这是你的公司完全不能接受的,你的用户也完全不能接受。相比之下,算法有5%的错误率,这样分类器就得到较少的图像,但它不会推送**图像。所以从你们公司的角度来看,以及从用户接受的角度来看,算法实际上是一个更好的算法,因为它不让任何**图像通过。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/30/005607d15qaiccp9gqu5o0.png) 那么在这个例子中,发生的事情就是,算法A在评估指标上做得更好,它的错误率达到3%,但实际上是个更糟糕的算法。在这种情况下,评估指标加上开发集它们都倾向于选择算法,因为它们会说,看算法A的错误率较低,这是你们自己定下来的指标评估出来的。但你和你的用户更倾向于使用算法,因为它不会将**图像分类为猫。所以当这种情况发生时,当你的评估指标无法正确衡量算法之间的优劣排序时,在这种情况下,原来的指标错误地预测算法A是更好的算法这就发出了信号,你应该改变评估指标了,或者要改变开发集或测试集。在这种情况下,你用的分类错误率指标可以写成这样: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/30/005630bk9h6ywpoasetnik.png) 是你的开发集例子数,用表示预测值,其值为0或1,这符号表示一个函数,统计出里面这个表达式为真的样本数,所以这个公式就统计了分类错误的样本。这个评估指标的问题在于,它对**图片和非**图片一视同仁,但你其实真的希望你的分类器不会错误标记**图像。比如说把一张**图片分类为猫,然后推送给不知情的用户,他们看到**图片会非常不满。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/30/005643xs0x0johesopqolp.png) 其中一个修改评估指标的方法是,这里(与之间)加个权重项,即: 我们将这个称为,其中如果图片不是**图片,则。如果是**图片,可能就是10甚至100,这样你赋予了**图片更大的权重,让算法将**图分类为猫图时,错误率这个项快速变大。这个例子里,你把**图片分类成猫这一错误的惩罚权重加大10倍。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/30/005652clkfyjfot32zvupj.png) 如果你希望得到归一化常数,在技术上,就是对所有求和,这样错误率仍然在0和1之间,即: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/30/0056583kaknx9nd6kwkit4.png) 加权的细节并不重要,实际上要使用这种加权,你必须自己过一遍开发集和测试集,在开发集和测试集里,自己把**图片标记出来,这样你才能使用这个加权函数。 但粗略的结论是,如果你的评估指标无法正确评估好算法的排名,那么就需要花时间定义一个新的评估指标。这是定义评估指标的其中一种可能方式(上述加权法)。评估指标的意义在于,准确告诉你已知两个分类器,哪一个更适合你的应用。就这个视频的内容而言,我们不需要太注重新错误率指标是怎么定义的,关键在于,如果你对旧的错误率指标不满意,那就不要一直沿用你不满意的错误率指标,而应该尝试定义一个新的指标,能够更加符合你的偏好,定义出实际更适合的算法。 你可能注意到了,到目前为止我们只讨论了如何定义一个指标去评估分类器,也就是说,我们定义了一个评估指标帮助我们更好的把分类器排序,能够区分出它们在识别**图片的不同水平,这实际上是一个正交化的例子。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/30/005712ypbnskixlii6qepi.png) 我想你处理机器学习问题时,应该把它切分成独立的步骤。一步是弄清楚如何定义一个指标来衡量你想做的事情的表现,然后我们可以分开考虑如何改善系统在这个指标上的表现。你们要把机器学习任务看成两个独立的步骤,用目标这个比喻,第一步就是设定目标。所以要定义你要瞄准的目标,这是完全独立的一步,这是你可以调节的一个旋钮。如何设立目标是一个完全独立的问题,把它看成是一个单独的旋钮,可以调试算法表现的旋钮,如何精确瞄准,如何命中目标,定义指标是第一步。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/30/005719uetung2iasfbguh5.png) 然后第二步要做别的事情,在逼近目标的时候,也许你的学习算法针对某个长这样的成本函数优化,,你要最小化训练集上的损失。你可以做的其中一件事是,修改这个,为了引入这些权重,也许最后需要修改这个归一化常数,即: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/30/005808wbjzyodtdoyci2ln.png) 再次,如何定义并不重要,关键在于正交化的思路,把设立目标定为第一步,然后瞄准和射击目标是独立的第二步。换种说法,我鼓励你们将定义指标看成一步,然后在定义了指标之后,你才能想如何优化系统来提高这个指标评分。比如改变你神经网络要优化的成本函数。 在继续之前,我们再讲一个例子。假设你的两个猫分类器和,分别有用开发集评估得到3%的错误率和5%的错误率。或者甚至用在网上下载的图片构成的测试集上,这些是高质量,取景框很专业的图像。但也许你在部署算法产品时,你发现算法看起来表现更好,即使它在开发集上表现不错,你发现你一直在用从网上下载的高质量图片训练,但当你部署到手机应用时,算法作用到用户上传的图片时,那些图片取景不专业,没有把猫完整拍下来,或者猫的表情很古怪,也许图像很模糊,当你实际测试算法时,你发现算法表现其实更好。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/30/0057554r28aohcmtmtnkjz.png) 这是另一个指标和开发集测试集出问题的例子,问题在于,你做评估用的是很漂亮的高分辨率的开发集和测试集,图片取景很专业。但你的用户真正关心的是,他们上传的图片能不能被正确识别。那些图片可能是没那么专业的照片,有点模糊,取景很业余。 所以方针是,如果你在指标上表现很好,在当前开发集或者开发集和测试集分布中表现很好,但你的实际应用程序,你真正关注的地方表现不好,那么就需要修改指标或者你的开发测试集。换句话说,如果你发现你的开发测试集都是这些高质量图像,但在开发测试集上做的评估无法预测你的应用实际的表现。因为你的应用处理的是低质量图像,那么就应该改变你的开发测试集,让你的数据更能反映你实际需要处理好的数据。 但总体方针就是,如果你当前的指标和当前用来评估的数据和你真正关心必须做好的事情关系不大,那就应该更改你的指标或者你的开发测试集,让它们能更够好地反映你的算法需要处理好的数据。 有一个评估指标和开发集让你可以更快做出决策,判断算法还是算法更优,这真的可以加速你和你的团队迭代的速度。所以我的建议是,即使你无法定义出一个很完美的评估指标和开发集,你直接快速设立出来,然后使用它们来驱动你们团队的迭代速度。如果在这之后,你发现选的不好,你有更好的想法,那么完全可以马上改。对于大多数团队,我建议最好不要在没有评估指标和开发集时跑太久,因为那样可能会减慢你的团队迭代和改善算法的速度。本视频讲的是什么时候需要改变你的评估指标和开发测试集,我希望这些方针能让你的整个团队设立一个明确的目标,一个你们可以高效迭代,改善性能的目标。
  • [其他] 开发集和测试集的大小
    在上一个文章中你们知道了你的开发集和测试集为什么必须来自同一分布,但它们规模应该多大?在深度学习时代,设立开发集和测试集的方针也在变化,我们来看看一些最佳做法。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/30/005301siugokwyanbfvkuo.png) 你可能听说过一条经验法则,在机器学习中,把你取得的全部数据用70/30比例分成训练集和测试集。或者如果你必须设立训练集、开发集和测试集,你会这么分60%训练集,20%开发集,20%测试集。在机器学习的早期,这样分是相当合理的,特别是以前的数据集大小要小得多。所以如果你总共有100个样本,这样70/30或者60/20/20分的经验法则是相当合理的。如果你有几千个样本或者有一万个样本,这些做法也还是合理的。 但在现代机器学习中,我们更习惯操作规模大得多的数据集,比如说你有1百万个训练样本,这样分可能更合理,98%作为训练集,1%开发集,1%测试集,我们用和缩写来表示开发集和测试集。因为如果你有1百万个样本,那么1%就是10,000个样本,这对于开发集和测试集来说可能已经够了。所以在现代深度学习时代,有时我们拥有大得多的数据集,所以使用小于20%的比例或者小于30%比例的数据作为开发集和测试集也是合理的。而且因为深度学习算法对数据的胃口很大,我们可以看到那些有海量数据集的问题,有更高比例的数据划分到训练集里,那么测试集呢? 要记住,测试集的目的是完成系统开发之后,测试集可以帮你评估投产系统的性能。方针就是,令你的测试集足够大,能够以高置信度评估系统整体性能。所以除非你需要对最终投产系统有一个很精确的指标,一般来说测试集不需要上百万个例子。对于你的应用程序,也许你想,有10,000个例子就能给你足够的置信度来给出性能指标了,也许100,000个之类的可能就够了,这数目可能远远小于比如说整体数据集的30%,取决于你有多少数据。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/30/005311rf4cp58uehroiok3.png) 对于某些应用,你也许不需要对系统性能有置信度很高的评估,也许你只需要训练集和开发集。我认为,不单独分出一个测试集也是可以的。事实上,有时在实践中有些人会只分成训练集和测试集,他们实际上在测试集上迭代,所以这里没有测试集,他们有的是训练集和开发集,但没有测试集。如果你真的在调试这个集,这个开发集或这个测试集,这最好称为开发集。 不过在机器学习的历史里,不是每个人都把术语定义分得很清的,有时人们说的开发集,其实应该看作测试集。但如果你只要有数据去训练,有数据去调试就够了。你打算不管测试集,直接部署最终系统,所以不用太担心它的实际表现,我觉得这也是很好的,就将它们称为训练集、开发集就好。然后说清楚你没有测试集,这是不是有点不正常?我绝对不建议在搭建系统时省略测试集,因为有个单独的测试集比较令我安心。因为你可以使用这组不带偏差的数据来测量系统的性能。但如果你的开发集非常大,这样你就不会对开发集过拟合得太厉害,这种情况,只有训练集和测试集也不是完全不合理的。不过我一般不建议这么做。 总结一下,在大数据时代旧的经验规则,这个70/30不再适用了。现在流行的是把大量数据分到训练集,然后少量数据分到开发集和测试集,特别是当你有一个非常大的数据集时。以前的经验法则其实是为了确保开发集足够大,能够达到它的目的,就是帮你评估不同的想法,然后选出还是更好。测试集的目的是评估你最终的成本偏差,你只需要设立足够大的测试集,可以用来这么评估就行了,可能只需要远远小于总体数据量的30%。 所以我希望本视频能给你们一点指导和建议,让你们知道如何在深度学习时代设立开发和测试集。接下来,有时候在研究机器学习的问题途中,你可能需要更改评估指标,或者改动你的开发集和测试集,我们会讲什么时候需要这样做。
  • [其他] 训练/开发/测试集划分
    设立训练集,开发集和测试集的方式大大影响了你或者你的团队在建立机器学习应用方面取得进展的速度。同样的团队,即使是大公司里的团队,在设立这些数据集的方式,真的会让团队的进展变慢而不是加快,我们看看应该如何设立这些数据集,让你的团队效率最大化。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/30/0048448wetkmczbgeyboc6.png) 在这个视频中,我想集中讨论如何设立开发集和测试集,开发(**dev**)集也叫做开发集(**development set**),有时称为保留交叉验证集(**hold out cross validation set**)。然后,机器学习中的工作流程是,你尝试很多思路,用训练集训练不同的模型,然后使用开发集来评估不同的思路,然后选择一个,然后不断迭代去改善开发集的性能,直到最后你可以得到一个令你满意的成本,然后你再用测试集去评估。 现在,举个例子,你要开发一个猫分类器,然后你在这些区域里运营,美国、英国、其他欧洲国家,南美洲、印度、中国,其他亚洲国家和澳大利亚,那么你应该如何设立开发集和测试集呢? ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/30/004859patlzq5ah5icfnhb.png) 其中一种做法是,你可以选择其中4个区域,我打算使用这四个(前四个),但也可以是随机选的区域,然后说,来自这四个区域的数据构成开发集。然后其他四个区域,我打算用这四个(后四个),也可以随机选择4个,这些数据构成测试集。 事实证明,这个想法非常糟糕,因为这个例子中,你的开发集和测试集来自不同的分布。我建议你们不要这样,而是让你的开发集和测试集来自同一分布。我的意思是这样,你们要记住,我想就是设立你的开发集加上一个单实数评估指标,这就是像是定下目标,然后告诉你的团队,那就是你要瞄准的靶心,因为你一旦建立了这样的开发集和指标,团队就可以快速迭代,尝试不同的想法,跑实验,可以很快地使用开发集和指标去评估不同分类器,然后尝试选出最好的那个。所以,机器学习团队一般都很擅长使用不同方法去逼近目标,然后不断迭代,不断逼近靶心。所以,针对开发集上的指标优化。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/30/004908nf0ndsluezocck8s.png) 然后在左边的例子中,设立开发集和测试集时存在一个问题,你的团队可能会花上几个月时间在开发集上迭代优化,结果发现,当你们最终在测试集上测试系统时,来自这四个国家或者说下面这四个地区的数据(即测试集数据)和开发集里的数据可能差异很大,所以你可能会收获"意外惊喜",并发现,花了那么多个月的时间去针对开发集优化,在测试集上的表现却不佳。所以,如果你的开发集和测试集来自不同的分布,就像你设了一个目标,让你的团队花几个月尝试逼近靶心,结果在几个月工作之后发现,你说“等等”,测试的时候,"我要把目标移到这里",然后团队可能会说"好吧,为什么你让我们花那么多个月的时间去逼近那个靶心,然后突然间你可以把靶心移到不同的位置?"。 所以,为了避免这种情况,我建议的是你将所有数据随机洗牌,放入开发集和测试集,所以开发集和测试集都有来自八个地区的数据,并且开发集和测试集都来自同一分布,这分布就是你的所有数据混在一起。 这里有另一个例子,这是个真实的故事,但有一些细节变了。所以我知道有一个机器学习团队,花了好几个月在开发集上优化,开发集里面有中等收入邮政编码的贷款审批数据。那么具体的机器学习问题是,输入为贷款申请,你是否可以预测输出,是他们有没有还贷能力?所以这系统能帮助银行判断是否批准贷款。所以开发集来自贷款申请,这些贷款申请来自中等收入邮政编码,**zip code**就是美国的邮政编码。但是在这上面训练了几个月之后,团队突然决定要在,低收入邮政编码数据上测试一下。当然了,这个分布数据里面中等收入和低收入邮政编码数据是很不一样的,而且他们花了大量时间针对前面那组数据优化分类器,导致系统在后面那组数据中效果很差。所以这个特定团队实际上浪费了3个月的时间,不得不退回去重新做很多工作。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/30/0049196buagkkxyclqrg9i.png) 这里实际发生的事情是,这个团队花了三个月瞄准一个目标,三个月之后经理突然问"你们试试瞄准那个目标如何?",这新目标位置完全不同,所以这件事对于这个团队来说非常崩溃。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/30/004927ahkeapkgvpja85fg.png) 所以我建议你们在设立开发集和测试集时,要选择这样的开发集和测试集,能够反映你未来会得到的数据,认为很重要的数据,必须得到好结果的数据,特别是,这里的开发集和测试集可能来自同一个分布。所以不管你未来会得到什么样的数据,一旦你的算法效果不错,要尝试收集类似的数据,而且,不管那些数据是什么,都要随机分配到开发集和测试集上。因为这样,你才能将瞄准想要的目标,让你的团队高效迭代来逼近同一个目标,希望最好是同一个目标。 我们还没提到如何设立训练集,我们会在之后的视频里谈谈如何设立训练集,但这个视频的重点在于,设立开发集以及评估指标,真的就定义了你要瞄准的目标。我们希望通过在同一分布中设立开发集和测试集,你就可以瞄准你所希望的机器学习团队瞄准的目标。而设立训练集的方式则会影响你逼近那个目标有多快,但我们可以在另一个讲座里提到。我知道有一些机器学习团队,他们如果能遵循这个方针,就可以省下几个月的工作,所以我希望这些方针也能帮到你们。 from:结构化机器学习项目--笔记
  • [其他] 满足和优化指标
    要把你顾及到的所有事情组合成单实数评估指标有时并不容易,在那些情况里,我发现有时候设立满足和优化指标是很重要的,让我告诉你是什么意思吧。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/30/001419k2yjypnwti67bjvz.png) 假设你已经决定你很看重猫分类器的分类准确度,这可以是分数或者用其他衡量准确度的指标。但除了准确度之外,我们还需要考虑运行时间,就是需要多长时间来分类一张图。分类器需要80毫秒,需要95毫秒,需要1500毫秒,就是说需要1.5秒来分类图像。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/30/001430f4c2luvp8sh82ekz.png) 你可以这么做,将准确度和运行时间组合成一个整体评估指标。所以成本,比如说,总体成本是,这种组合方式可能太刻意,只用这样的公式来组合准确度和运行时间,两个数值的线性加权求和。 你还可以做其他事情,就是你可能选择一个分类器,能够最大限度提高准确度,但必须满足运行时间要求,就是对图像进行分类所需的时间必须小于等于100毫秒。所以在这种情况下,我们就说准确度是一个优化指标,因为你想要准确度最大化,你想做的尽可能准确,但是运行时间就是我们所说的满足指标,意思是它必须足够好,它只需要小于100毫秒,达到之后,你不在乎这指标有多好,或者至少你不会那么在乎。所以这是一个相当合理的权衡方式,或者说将准确度和运行时间结合起来的方式。实际情况可能是,只要运行时间少于100毫秒,你的用户就不会在乎运行时间是100毫秒还是50毫秒,甚至更快。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/30/001443dhwgi7uxraebxmdf.png) 通过定义优化和满足指标,就可以给你提供一个明确的方式,去选择“最好的”分类器。在这种情况下分类器B最好,因为在所有的运行时间都小于100毫秒的分类器中,它的准确度最好。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/30/001451wgd7pomzc83ozt34.png) 所以更一般地说,如果你要考虑个指标,有时候选择其中一个指标做为优化指标是合理的。所以你想尽量优化那个指标,然后剩下个指标都是满足指标,意味着只要它们达到一定阈值,例如运行时间快于100毫秒,但只要达到一定的阈值,你不在乎它超过那个门槛之后的表现,但它们必须达到这个门槛。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/30/001500bv9q7qbgtm8hi8lf.png) 这里是另一个例子,假设你正在构建一个系统来检测唤醒语,也叫触发词,这指的是语音控制设备。比如亚马逊**Echo**,你会说“**Alexa**”,或者用“**Okay Google**”来唤醒谷歌设备,或者对于苹果设备,你会说“**Hey Siri**”,或者对于某些百度设备,我们用“你好百度”唤醒。 对的,这些就是唤醒词,可以唤醒这些语音控制设备,然后监听你想说的话。所以你可能会在乎触发字检测系统的准确性,所以当有人说出其中一个触发词时,有多大概率可以唤醒你的设备。 你可能也需要顾及假阳性(**false positive**)的数量,就是没有人在说这个触发词时,它被随机唤醒的概率有多大?所以这种情况下,组合这两种评估指标的合理方式可能是最大化精确度。所以当某人说出唤醒词时,你的设备被唤醒的概率最大化,然后必须满足24小时内最多只能有1次假阳性,对吧?所以你的设备平均每天只会没有人真的在说话时随机唤醒一次。所以在这种情况下,准确度是优化指标,然后每24小时发生一次假阳性是满足指标,你只要每24小时最多有一次假阳性就满足了。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202104/30/001510gahztp7gzduyx75u.png) 总结一下,如果你需要顾及多个指标,比如说,有一个优化指标,你想尽可能优化的,然后还有一个或多个满足指标,需要满足的,需要达到一定的门槛。现在你就有一个全自动的方法,在观察多个成本大小时,选出"最好的"那个。现在这些评估指标必须是在训练集或开发集或测试集上计算或求出来的。所以你还需要做一件事,就是设立训练集、开发集,还有测试集。 from:结构化机器学习项目--笔记
  • [体验官] 使用MindSpore开发训练模型识别手写数字实验体验
    做完了Tesseract文字识别的实验,不能识别手写文字,继续尝试使用MindSpore开发训练模型识别手写数字实验。我的凭证这里,从个人账号点击进去,不同的上下文会提供不同的下拉列表有点模糊,提了云声。obs桶是免费创建,按用量计费,实验的话,完全可以承担。ModelArts也是免费创建,按需计费,后面会用到。之后就是上传训练用的数据、脚本,创建好日志和输出文件目录。修改脚本文件的时候,出了个错,在修改vi train_lenet.py的时候,“② 红色框2实例化一个用于参数更新的优化器,两个问号处分别填写学习率和动量参数,学习率和动量的范围为0~1。通常学习率设置0.0到0.1之间,动量设置为0.8到1.0之间能取的较好的训练效果。因此,在红色框2处(52行),将原代码中的第一个“?”设置为0.0到0.1之间的数值,第二个“?”设置0.8到1.0之间的数值;”只修改了其中的一个参数,漏掉了一个,导致整个实验的失败。想要修改训练脚本,需要重新xterm远程登录,vi修改再次上传obs。训练作业并没有再次运行的按键,需要点击修改训练作业,即使未做任何修改,也可以触发另一个版本的训练。实验时间不够了。等明天再做?嗯,尝试使用实验手册实际跑一下。难点是,实验所用的数据和脚本都保存在沙箱环境中,并没有像上一个Tesseract实验提供wget的链接,实验的时间又用完了。。。通过其他的IAM账号获得实验时间,然后尝试scp出来,还有一种更简单的方法:首先按照实验手册创建好obs的资源,然后用其他IAM账号(如果没有可以创建一个)进去实验环境,然后不用沙箱的账号密码登录,用自己的账号在沙箱环境登录,将桌面的训练数据、脚本,依次上传到自己的obs桶中去。退出实验环境,用自己的账号(非IAM方式)登录,从控制台找到ModelArts界面,创建训练作业,执行。 查看日志,可能是参数学习率(设置0.0到0.1之间)设置成0.05的原因,准确率有点低。整个训练的时间不到2分钟。
  • [其他] DL:LSTM如何实现长短期记忆
    循环神经网络(RNN) 循环神经网络(Recurrent Neural Network,RNN)是一类具有短期记忆能力的神经网络。在循环神经网络中,神经元不但可以接受其它神经元的信息,也可以接受自身的信息,形成具有环路的网络结构。 梯度爆炸和梯度消失 如果从数学的角度来理解,一般结构的循环神经网络中,网络的状态之间是非线性的关系,并且参数 w 在每个时间步共享,这是导致梯度爆炸和梯度消失的根本原因。 无论是梯度消失,还是梯度爆炸,都是技术实践上的bug,而不是理论上的 BUG首先需要明确的是,RNN 中的梯度消失/梯度爆炸和普通的 MLP 或者深层 CNN 中梯度消失/梯度爆炸的含义不一样。MLP/CNN 中不同的层有不同的参数,各是各的梯度;而 RNN 中同样的权重在各个时间步共享,最终的梯度 g=各个时间步的梯度 gt的和。RNN 中总的梯度是不会消失的。即便梯度越传越弱,那也只是远距离的梯度消失,由于近距离的梯度不会消失,所有梯度之和便不会消失。RNN 所谓梯度消失的真正含义是,梯度被近距离梯度主导,导致模型难以学到远距离的依赖关系。梯度爆炸从技术上相比梯度消失更好解决,因此,很少有人大篇幅去论证这个问题。梯度爆炸最常用的解决方案是梯度截断:逐元素的截断参数梯度和截断梯度的范数。第二种方案可以确保截断后的梯度仍然是在正确的梯度方向上。但是实践表明:两种方式的效果相近。因为逐元素的梯度截断时,梯度更新的方向不仅不再是真实梯度方向,甚至也不是 mini-batch 的梯度方向。但是它仍然是一个使得目标值下降的方向。长程依赖问题 虽然简单循环网络理论上可以建立长时间间隔的状态之间的依赖关系,但是由于梯度爆炸或消失问题,实际上只能学习到短期的依赖关系。这样,如果时刻 t的输出yt依赖于时刻k的输入 xk,当间隔t-k比较大时,简单神经网络很难建模这种长距离的依赖关系,称为长程依赖问题(Long-Term Dependencies Problem)。 LSTM 为了改善循环神经网络的长程依赖问题,一种非常好的解决方案是引入门控机制来控制信息的累积速度,包括有选择地加入新的信息和有选择地遗忘之前累积的信息。 长短期记忆(Long Short-Term Memory,LSTM)网络[Gers 等人; Hochreiter 等人,2000; 1997] 是循环神经网络的一个变体,可以有效地解决简单循环神经网络的梯度爆炸或消失问题。 与传统的 RNN 相比,LSTM 依然是基于循环机制,只不过对内部的结果进行了更加精细的设计。LSTM 中梯度的传播有很多条路径,关键在于穿过记忆单元的状态 的路径,其上面只有一些少量的线**互(逐元素乘法和加法),梯度流最稳定,信息在上面流动保持不变会变得容易。 但是其他路径上梯度流与普通 RNN 类似,照样会发生相同的权重矩阵反复连乘,所以依然会爆炸或者消失。由于总的远距离梯度 = 各条路径的远距离梯度之和,即便其他远距离路径梯度消失了,只要保证有一条远距离路径(就是上面说的那条路径)梯度不消失,总的远距离梯度就不会消失(正常梯度 + 消失梯度 = 正常梯度)。因此 LSTM 通过改善一条路径上的梯度问题拯救了总体的远距离梯度。
  • [其他] 分享NLP超越「预训练-调优」范式
    超越「预训练-调优」范式经过不断的迭代,虽然当前的 NLP 模型似乎已经达到了最先进的水平,但是 NLP 研究社区的主流观点仍然是:还有一些问题需要改进。由于我们经常使用对比基准来衡量任务的研究进展,我们渐渐遇到了一些棘手的情况,而且这些模型中有许多已经在现有的 NLP 对比基准上超过了人类的表现。那么我们应该怎么办呢?这就是 Zellers等人(https://arxiv.org/pdf/1905.07830.pdf)提出的问题,在早期的工作中,它为常识性的自然语言推理问题提供了一个挑战性的数据集,结果在发布后不就就发现 BERT 已经达到了与人类相近的表现。为了让问题变得更困难一点,作者发布了一个后续的数据集,该数据集使用一种叫做对抗性过滤的技术选择出令 BERT 和其它模型难以回答的示例。在这个过程中,他们大大增加了对比基准测试的复杂度。BERT 当然并非完美。Nangia 等人(https://arxiv.org/pdf/1905.10425.pdf)的研究表明,基于 BERT 的模型难以应对低资源(可用数据量较少)的句子分类任务,并提出了一个被称为「SuperGLUE」(https://arxiv.org/pdf/1905.00537.pdf)的后续的自然语言理解对比基准,专门对这种机制进行评价。McCoy 等人(https://arxiv.org/pdf/1902.01007.pdf)的另一项工作则说明了,应用于自然语言推理的 BERT 模型实际上学习到了非常简单的语法启发信息,但这些启发信息不能很好地泛化到其它的推演(entailment)例子中。他们也发布了一个评价数据集,从而确定模型是否采用在采用了这些启发信息后也没能解决更一般的推理问题。Min 和 Wallace 等人(https://arxiv.org/pdf/1906.02900.pdf)的另一篇相关论文说明了,许多针对 HotpotQA 数据集(一个多条问答对比基准)提出的模型,实际上并不需要执行多跳推理来获得良好的性能。总的来说,我认为现在大部分的模型仍然是在针对特定数据集做工作,而不是针对特定任务。我们建立的模型可以非常有效地收集和利用数据集特有的偏差。在这个过程中,我们的评价指标又为我们展示了相当具有误导性的分析结果。这让我想起了「古德哈特定律」 :当一项指标成为目标时,那么他就不再是一个好的指标(一项社会指标或经济指标,一旦成为一个用以指引宏观政策制定的既定目标,那么该指标就会丧失其原本具有的信息价值)。那么,接下来我们该如何做呢?考虑到这些评价对比基准对于自然语言任务发展的重要意义,以及模型开发的速度,假设对比基准一成不变似乎是不合理的。相反,我发现开发一套不断演化的、难度越来越大的对比基准,提高自然语言能力的门槛,是特别有前景的。也许从某种程度上来说,这就是我们实现令机器具有人类级别的自然语言能力的方式。转自,MrBear,https://www.leiphone.com/category/academic/6e0VKaqUCAEhjj0q.html
  • [其他] 深度学习的训练,验证,测试集
    在配置训练、验证和测试数据集的过程中做出正确决策会在很大程度上帮助大家创建高效的神经网络。训练神经网络时,我们需要做出很多决策,例如: 1. 神经网络分多少层 2. 每层含有多少个隐藏单元 3. 学习速率是多少 4. 各层采用哪些激活函数 创建新应用的过程中,我们不可能从一开始就准确预测出这些信息和其他超级参数。实际上,应用型机器学习是一个高度迭代的过程,通常在项目启动时,我们会先有一个初步想法,比如构建一个含有特定层数,隐藏单元数量或数据集个数等等的神经网络,然后编码,并尝试运行这些代码,通过运行和测试得到该神经网络或这些配置信息的运行结果,你可能会根据输出结果重新完善自己的想法,改变策略,或者为了找到更好的神经网络不断迭代更新自己的方案。 现如今,深度学习已经在自然语言处理,计算机视觉,语音识别以及结构化数据应用等众多领域取得巨大成功。结构化数据无所不包,从广告到网络搜索。其中网络搜索不仅包括网络搜索引擎,还包括购物网站,从所有根据搜索栏词条传输结果的网站。再到计算机安全,物流,比如判断司机去哪接送货,范围之广,不胜枚举。 我发现,可能有自然语言处理方面的人才想踏足计算机视觉领域,或者经验丰富的语音识别专家想投身广告行业,又或者,有的人想从电脑安全领域跳到物流行业,在我看来,从一个领域或者应用领域得来的直觉经验,通常无法转移到其他应用领域,最佳决策取决于你所拥有的数据量,计算机配置中输入特征的数量,用**GPU**训练还是**CPU**,**GPU**和**CPU**的具体配置以及其他诸多因素。 目前为止,我觉得,对于很多应用系统,即使是经验丰富的深度学习行家也不太可能一开始就预设出最匹配的超级参数,所以说,应用深度学习是一个典型的迭代过程,需要多次循环往复,才能为应用程序找到一个称心的神经网络,因此循环该过程的效率是决定项目进展速度的一个关键因素,而创建高质量的训练数据集,验证集和测试集也有助于提高循环效率。 假设这是训练数据,我用一个长方形表示,我们通常会将这些数据划分成几部分,一部分作为训练集,一部分作为简单交叉验证集,有时也称之为验证集,方便起见,我就叫它验证集(**dev set**),其实都是同一个概念,最后一部分则作为测试集。 接下来,我们开始对训练执行算法,通过验证集或简单交叉验证集选择最好的模型,经过充分验证,我们选定了最终模型,然后就可以在测试集上进行评估了,为了无偏评估算法的运行状况。 在机器学习发展的小数据量时代,常见做法是将所有数据三七分,就是人们常说的70%验证集,30%测试集,如果没有明确设置验证集,也可以按照60%训练,20%验证和20%测试集来划分。这是前几年机器学习领域普遍认可的最好的实践方法。 如果只有100条,1000条或者1万条数据,那么上述比例划分是非常合理的。 但是在大数据时代,我们现在的数据量可能是百万级别,那么验证集和测试集占数据总量的比例会趋向于变得更小。因为验证集的目的就是验证不同的算法,检验哪种算法更有效,因此,验证集要足够大才能评估,比如2个甚至10个不同算法,并迅速判断出哪种算法更有效。我们可能不需要拿出20%的数据作为验证集。 比如我们有100万条数据,那么取1万条数据便足以进行评估,找出其中表现最好的1-2种算法。同样地,根据最终选择的分类器,测试集的主要目的是正确评估分类器的性能,所以,如果拥有百万数据,我们只需要1000条数据,便足以评估单个分类器,并且准确评估该分类器的性能。假设我们有100万条数据,其中1万条作为验证集,1万条作为测试集,100万里取1万,比例是1%,即:训练集占98%,验证集和测试集各占1%。对于数据量过百万的应用,训练集可以占到99.5%,验证和测试集各占0.25%,或者验证集占0.4%,测试集占0.1%。 总结一下,在机器学习中,我们通常将样本分成训练集,验证集和测试集三部分,数据集规模相对较小,适用传统的划分比例,数据集规模较大的,验证集和测试集要小于数据总量的20%或10%。后面我会给出如何划分验证集和测试集的具体指导。 现代深度学习的另一个趋势是越来越多的人在训练和测试集分布不匹配的情况下进行训练,假设你要构建一个用户可以上传大量图片的应用程序,目的是找出并呈现所有猫咪图片,可能你的用户都是爱猫人士,训练集可能是从网上下载的猫咪图片,而验证集和测试集是用户在这个应用上上传的猫的图片,就是说,训练集可能是从网络上抓下来的图片。而验证集和测试集是用户上传的图片。结果许多网页上的猫咪图片分辨率很高,很专业,后期制作精良,而用户上传的照片可能是用手机随意拍摄的,像素低,比较模糊,这两类数据有所不同,针对这种情况,根据经验,我建议大家要确保验证集和测试集的数据来自同一分布,关于这个问题我也会多讲一些。因为你们要用验证集来评估不同的模型,尽可能地优化性能。如果验证集和测试集来自同一个分布就会很好。 但由于深度学习算法需要大量的训练数据,为了获取更大规模的训练数据集,我们可以采用当前流行的各种创意策略,例如,网页抓取,代价就是训练集数据与验证集和测试集数据有可能不是来自同一分布。但只要遵循这个经验法则,你就会发现机器学习算法会变得更快。我会在后面的课程中更加详细地解释这条经验法则。 最后一点,就算没有测试集也不要紧,测试集的目的是对最终所选定的神经网络系统做出无偏估计,如果不需要无偏估计,也可以不设置测试集。所以如果只有验证集,没有测试集,我们要做的就是,在训练集上训练,尝试不同的模型框架,在验证集上评估这些模型,然后迭代并选出适用的模型。因为验证集中已经涵盖测试集数据,其不再提供无偏性能评估。当然,如果你不需要无偏估计,那就再好不过了。 在机器学习中,如果只有一个训练集和一个验证集,而没有独立的测试集,遇到这种情况,训练集还被人们称为训练集,而验证集则被称为测试集,不过在实际应用中,人们只是把测试集当成简单交叉验证集使用,并没有完全实现该术语的功能,因为他们把验证集数据过度拟合到了测试集中。如果某团队跟你说他们只设置了一个训练集和一个测试集,我会很谨慎,心想他们是不是真的有训练验证集,因为他们把验证集数据过度拟合到了测试集中,让这些团队改变叫法,改称其为“训练验证集”,而不是“训练测试集”,可能不太容易。即便我认为“训练验证集“在专业用词上更准确。实际上,如果你不需要无偏评估算法性能,那么这样是可以的。 所以说,搭建训练验证集和测试集能够加速神经网络的集成,也可以更有效地衡量算法地偏差和方差,从而帮助我们更高效地选择合适方法来优化算法。
  • [其他] 分享一种一种新的 NLP 范式
    一种新的 NLP 范式:先预训练、再调优正如 Krizhevsky 等人于 2011 年发表的开创性工作「ImageNet Classification with Deep Convolutional Neural Networks」一夜之间掀起了计算机视觉领域的革命,深度学习在自然语言处理领域的应用同样也处于爆炸性的快速增长期。从 2015 到 2017 年,NLP 领域中的大多数任务都可以通过一个相对简单的范式来解决:通过某种连续的向量表征嵌入文本输入,对这些表征进行编码,对编码后的表征应用注意力机制,对任务进行预测。Matthew Honnibal 的博文(https://explosion.ai/blog/deep-learning-formula-nlp)对介绍了这种范式。虽然从概念上说很简单,但「嵌入、编码、注意、预测」的范式似乎在 NLP 领域势不可挡,在所有类型的任务(例如机器翻译、问答系统、自然语言推理等等)上都取得了目前最先进的性能。这样的范式在过去一段时间内,似乎是无所不能的。现在,NLP 领域可谓是「城头变幻大王旗」了。随着强大的预训练表征的出现,一些使用语言建模目标进行训练(例如,ELMO,https://arxiv.org/abs/1802.05365),OpenAI GPT(https://s3-us-west-2.amazonaws.com/openai-assets/research-covers/language-unsupervised/language_understanding_paper.pdf),以及 BERT(https://arxiv.org/pdf/1810.04805.pdf)的 NLP 技术已经可以被直接使用,它们在大规模数据上进行预训练,然后在一些较小的领域内的语料库上针对任务进行调优。实际上,这种策略已经成功地在现有的 NLP 对比基准实验中取得了目前最先进的性能。在本届 ACL 上,这种策略的主导地位被一些已经发表的工作,以及人们对于 NLP 领域研究现状的普遍态度进一步强化了。其中,Dai 和 Yang 等人的工作试图进一步推动基于 Transformer 的超级模型的发展,极大地提升它们的运行速度,实现目前最先进的模型性能。这种新范式的另一个非常具有代表性的工作是 Liu 和 He 等人提出的「Multi-Task Deep Neural Networks for Natural Language Understanding」,他们利用一个基于 BERT 的架构成功登顶 GLUE 对比基准排行榜。(目前排名第3)除了这些工作本身,围绕会议产生的最多的讨论是,如果使用像 BERT这样的训练方法,研究者们之前提出的许多架构可以实现几个百分点的提升。那么问题来了:这种新的范式是否使许多 NLP 领域在建模方面的创新变得不值一提了?针对该问题,我个人持否定态度。总的来说,仍然有很多工作没有得到充分的研究,而这些工作对于推进 NLP 领域在未来的发展是至关重要的。下面,我将列举出其中的一些工作。转自,MrBear,https://www.leiphone.com/category/academic/6e0VKaqUCAEhjj0q.html
  • [热门活动] 华为开发者大会2021(Cloud) 大数据训练营·学员招募
    华为开发者大会2021(Cloud)即将到来,华为云数据使能团队为你准备了大数据训练营,欢迎提前报名咨询~训练营内容:1、清华大学老师介绍大数据教学最新变革方向2、华为云DAYU 专家介绍数据治理方法论、价值和实践案例 3、实际演练:基于华为云DAYU平台演示数据治理过程参加训练营你将获得:1、训练营期间免费使用华为云部分资源2、初步掌握数据治理的概念和实操流程3、免费抽奖机会
  • [热门活动] HCIA-IoT 职业认证训练营活动圆满收官,快来填写满意度调查问卷啦!
    HCIA-IoT 职业认证训练营活动圆满收官,快来填写满意度调查问卷啦!
  • HCIA-IoT职业认证训练营积分汇总来啦
    https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=120502最终积分出来了,参加的可以查看了,差一点点就可以拿实物了。。不过豆豆也不错
  • [其他] 多分类学习
    三种拆分策略:一对一(OvO)一对其余(OvR)多对多(MvM)一对一 将类别两两配对生成 \frac {N(N-2)}{2} 个分类器一对其余 每次将一个类别视为正例,其余视为反例,因此一共会生成 N 个分类器但是,一对一的 训练开销 通常小于 一对其余,因为一对一只用到了两个类的训练数据多对多分类常用纠错输出码(ECOC)常见编码矩阵:二元码,三元码(加上停用类,不带入计算)将类别进行随机拆分,拆分为两类:正例和反例,形成很多个二分类器任意两个分类器越 ”不相同“,训练结果越好,思想类似于 Bagging,训练多个高多样性的分类器最后这些分类器对同一个样本预测,将预测结果分别计算编码距离(海明距离 / 欧式距离),将编码距离最小的类作为最终结果同一个分类任务, ECOC编码越长,分类器之间的相似性就会越小,因此容错能力越好同等长度的编码, 任意两个类别的编码距离越大,容错能力越好
  • [其他] 分享算法——一种用于sql生成模型的数据匿名化编码方法
    一种用于sql生成模型的数据匿名化编码方法论文名称:Data-Anonymous Encoding for Text-to-SQL Generation作者:Zhen Dong1 , Shizhao Sun , Hongzhi Liu , Jian-Guang Lou ,Dongmei Zhang发表时间:2019/11/7论文链接:https://www.aclweb.org/anthology/D19-1543.pdf推荐原因1、为了优化从文本中生成机器语言(此处是sql语句)的效率,作者提出了一种基于序列标注的两阶段模型对文本进行匿名化(anonymous encoding)的预处理,减少了文本的长度,并且提取了文本的词与数据表之间的语义关系.为了更高效地进行训练,作者采用了数据集的一小部分进行人工标注,以此训练出的模型来初始化最终的模型,对于其他的数据,作者仅从sql中抽取出无序的colname, cell等数据,并提出了一种基于奖励机制的隐监督(implicit supervision)学习方法来进行训练。此外,作者还提及了一种基于变分推断思路的训练方法,意图将文本匿名化模型与用于生成sql的语义解析模型联合训练来提供模型的效率2 、作者提出的匿名化方法无论从效率还是从准确度的角度,相比之前的方法都得到了很大的提高3 、序列标注,尤其是与bert相结合的序列标注,是一种直观且有效的训练模型,需要大量标注良好的数据是其一大软肋,作者提出的隐监督训练方案的思路很值得一读转自,AI研习社,https://www.leiphone.com/category/academic/Is2BSkPUrXDA4Qt9.html
总条数:5195 到第
上滑加载中