(转)格局打开,带你解锁 prompt 的花式用法
今天我想要分享的是在工业实践中使用 prompt 的一些实践和心得体会。话不多说,我们直接开始。
初次关注到 prompt 是在去年GPT-3发布之后,我读到了一篇论文,It’ s Not Just Size That Matters: Small Language Models Are Also Few-Shot Learners ,了解我的小伙伴都会知道,虽然我是一个预训练语言模型的使用者,甚至生产者,但对于超大规模的语言模型,我一直持相对否定的态度,所以这篇文章的标题就相当吸引我,并且读下来之后,隐隐感觉,将文本理解任务转换为预训练的任务形式,再使用预训练语言模型,去做这个任务,这个思路简直太无懈可击了!利用它,我们可以更轻松地完成很多工作,又不必去面对例如样本类别均衡之类的数据分布上的困扰。
但当时却没有勇气直接应用起来。
到了今年,prompt 成为了一个相当火热的方向,在那篇 prompt 综述[1]出来了之后,我们知道,prompt 已经成气候了,它已经被很多工作验证是有用的了,也终于下定了决心,在我们的项目中尝试使用它,并看一下它到底有多么神奇。用过之后,不得不说,真香 ...
(转)美团商品知识图谱的构建及应用
在互联网新零售的大背景下,商品知识图谱作为新零售行业数字化的基石,提供了对于商品相关内容的立体化、智能化、常识化的理解,对上层业务的落地起到了至关重要的作用。相比于美团大脑中围绕商户的知识图谱而言,在新零售背景下的商品知识图谱需要应对更加分散、复杂的数据和业务场景,而这些不同的业务对于底层知识图谱都提出了各自不同的需求和挑战。美团作为互联网行业中新零售的新势力,业务上已覆盖了包括外卖、商超、生鲜、药品等在内的多个新零售领域,技术上在相关的知识图谱方面进行了深入探索。本文将对美团新零售背景下零售商品知识图谱的构建和应用进行介绍。
背景
近年来,人工智能正在快速地改变人们的生活,背后其实有两大技术驱动力:深度学习和知识图谱。我们将深度学习归纳为隐性的模型,它通常是面向某一个具体任务,比如说下围棋、识别猫、人脸识别、语音识别等等。通常而言,在很多任务上它能够取得很优秀的结果,同时它也有一些局限性,比如说它需要海量的训练数据,以及强大的计算能力,难以进行跨任务的迁移,并且不具有较好的可解释性。在另一方面,知识图谱作为显示模型,同样也是人工智能的一大技术驱动力,它能够广泛地适用于不同的任务。相比 ...
R-Drop-Regularized Dropout for Neural Networks
近年来,深度神经网络在各个领域都取得了令人瞩目的成功。在训练大规模的模型时,正则化技术是防止模型过拟合现象不可缺少的模块,同时具备提升模型的泛化(generalization)能力,其中,Dropout 是一个常见的正则化技术。本文作者在Dropout方法的基础上提出了一个正则方法R-Drop(Regularized Dropout),通过在一个batch中,每个数据样本经过两次带有 Dropout 的同一个模型,并使用 KL-divergence 约束两次的输出一致。实验结果表明,R-Drop在5个常用的包含 NLP 和 CV 的任务上(一共18个数据集)取得了不错的效果。
论文地址: https://arxiv.org/pdf/2106.14448.pdf
论文源码地址: https://github.com/dropreg/R-Drop
方法
本文作者提出的R-Drop模型结构如下所示:
具体来说,当给定训练数据D={xi,yi}(i=1)nD=\lbrace x_i,y_i \rbrace_{(i=1)}^nD={xi,yi}(i=1)n 后,对于每个训练样本 xi ...
ConSERT-A Contrastive Framework for Self-Supervised Sentence Representation Transfer
尽管基于BERT的模型在诸多NLP任务中取得了不错的性能(通过有监督的Fine-tune),但其自身计算的句向量(不经过Fine-tune,而是直接通过对所有词向量求平均)往往被约束在一个很小的区域内,表现出很高的相似度(这种现象一般叫做"model Collapse"), 因而难以反映出两个句子的语义相似度。本文作者提出了一种基于对比学习的句子表示方法ConSERT (a Contrastive Framework for Self-Supervised SEntence Representation Transfer),通过在目标领域的无监督语料上微调,使模型生成的句子表示与下游任务的数据分布更加适配。实验结果表明,ConSERT在句子语义匹配任务上取得了state-of-the-art结果,并且在少样本场景下仍表现出较强的性能提升。
论文地址: https://arxiv.org/pdf/2105.11741.pdf
论文源码地址: https://github.com/yym6472/ConSERT
介绍
句向量表示学习在自然语言处理(NLP)领域占据重 ...
Lexicon Enhanced Chinese Sequence Labelling Using BERT Adapter
近年来,将外部词汇信息特征与预训练模型相融合是提高序列标注任务(如NER)效果的重要方法之一,比如FLAT、WC-LSTM等,但是,现有方法仅通过浅层模型表示和随机初始化的序列层融合词汇特征,并未与预训练模型如BERT进行融合。本文作者提出了用于中文序列标签的Lexicon增强BERT(LEBERT),通过一个Lexicon adapter层将外部词汇信息直接融合到BERT层中,与现有方法相比,LEBERT模型有助于在BERT的较低层进行深度词汇知识融合。实验结果表明,该模型在多个中文序列标注任务上取得了state-of-the-art结果。
论文地址: https://arxiv.org/pdf/2105.07148.pdf
论文源码地址: https://github.com/liuwei1206/LEBERT
介绍
常见一种将词汇信息与预训练模型相融合的方案是将预训练模型(如BERT)输出与词汇特征通过一个融合层(比如线性层)得到融合向量。如下图a所示:
本文作者认为该方案并没有充分利用到预训练模型的表示能力,因为外部词汇信息未融合到预训练模型之中,于是提出了另一种融合方案 ...
(转)对比学习(Contrastive Learning):研究进展精要
对比学习(Contrastive Learning)最近一年比较火,各路大神比如Hinton、Yann LeCun、Kaiming He及一流研究机构比如Facebook、Google、DeepMind,都投入其中并快速提出各种改进模型:Moco系列、SimCLR系列、BYOL、SwAV……,各种方法相互借鉴,又各有创新,俨然一场机器学习领域的军备竞赛。对比学习属于无监督或者自监督学习,但是目前多个模型的效果已超过了有监督模型,这样的结果很令人振奋。
我想,NLP领域的Bert模型,对于这波图像领域的对比学习热潮,是具有启发和推动作用的。我们知道,Bert预训练模型,通过MLM任务的自监督学习,充分挖掘了模型从海量无标注文本中学习通用知识的能力。而图像领域的预训练,往往是有监督的,就是用ImageNet来进行预训练,但是在下游任务中Fine-tuning的效果,跟Bert在NLP下游任务中带来的性能提升,是没法比的。
“但是,既然NLP这样做(自监督,无需标注数据)成功了,图像领域难道就不能成功吗?”我相信,追寻这个问题的答案,应该是促使很多人,从图像领域的有监督预训练,向自监督预训练 ...
An Analysis of Simple Data Augmentation for Named Entity Recognition
现有NLP的数据增强大致有两条思路:一个是加噪,另一个是回译,均为有监督方法。加噪即为在原数据的基础上通过替换词、删除词等方式创造和原数据相类似的新数据。回译则是将原有数据翻译为其他语言再翻译回原语言,由于语言逻辑顺序等的不同,回译的方法也往往能够得到和原数据差别较大的新数据。本文借鉴sentence-level的传统数据增强方法,探究了不同的数据增强方法对NER任务的影响,发现:在低资源条件下,数据增强效果增益比较明显,而在充分数据条件下,数据增强可能会带来噪声,导致指标下降。
论文地址: https://arxiv.org/pdf/2010.11683.pdf
论文源码地址: https://github.com/abdulmajee/coling2020-data-augmentation
方法
在本文中,作者借鉴了sentence-level的传统数据增强方法,将传统的文本增强方法应用于NER任务中,并进行全面分析与对比。主要有以下4种数据增强方法(如下图所示):
Label-wise token replacement (LwTR):即相同标签的token替换,通过一个 ...
FixMatch:Simplifying Semi-Supervised Learning with Consistency and Confidence
本篇博文我们主要关注半监督学习,在实际应用环境中,获得高质量的标注数据是比较耗时和昂贵的,往往都是小部分标注数据和大量的无标注数据,除了高效利用标注数据,还需要将大量的无标注数据发挥出价值。半监督学习(Semi-supervised learning,SSL)是一种学习方法,其使用少量标注的数据和大量未标注的数据进行学习,从而得到一个高质量模型。本文作者提出一种名为FixMatch的半监督学习算法,通过对每一张没有标注的图片进行弱增强和强增强,首先对弱增强产生的数据通过模型产生伪标签,当模型的预测得分高于一定的阈值时,伪标签作为该样本标签,并与强增强数据模型预测结果进行计算损失。实验结果表明,FixMatch在众多的半监督学习方法中达到了最好的效果。仅用了250张标注数据,在CIFAR-10数据集上达到了94.93%的准确率;仅用了40张标注数据,在CIFAR-10数据集上达到了88.61%的准确率(每个标签仅4张标注数据)。
论文地址: https://arxiv.org/abs/2001.07685
论文源码地址: https://github.com/google-resear ...
StructBERT-Incorporating Languages structures into pre-training for deep language understading
BERT的两个任务主要是MLM和NSP,虽然取得了先进的性能,但是作者认为其并未充分利用句子的语言结构。作者将语言结构信息引入到预训练任务中,提出了一种新型的上下文表示模型-StructBERT,本质上,StructBERT的模型架构和BERT一样,不同点在于新增了两个预训练目标来增强模型的预训练,即:Word Structural Objective和Sentence Structural Objective
论文地址: https://arxiv.org/pdf/1908.04577v3.pdf
论文源码地址: https://github.com/alibaba/AliceMind/tree/main/StructBERT
方法
本文作者提出的StructBERT模型结果如下所示:
具体来说,原模型还是BERT,主要在预训练任务上做了改进,主要有:WSO和SSO。
Word Structural Objective
BERT无法直接显式的对单词顺序和高阶依赖性建模。而将一句话中的单词打乱,一个好的语言模型应该能够通过重组单词顺序恢复句子的正确排列。为了能在StructBE ...
NLP领域有哪些国际顶级会议?
如今在人工智能时代,一项新技术的出现往往能够颠覆某个产品甚至是某个行业,从而诞生新的独角兽公司甚至是行业巨头企业,比如国内近几年计算机视觉领域火热的CV四小龙(商汤、旷视、依图、云从)。
而NLP领域,由于技术、商业应用场景等诸多因素的限制,目前还没有出现独角兽级别的公司。但这并不意味着NLP没有发展前景,正如比尔盖茨所言“NLP是人工智能皇冠上的明珠”,是一项非常值得人们all in的事业。
因此,作为NLP领域的从业者,必须要时刻关注学术界or大厂AI Lab最新的科研动态,了解技术发展的趋势,以便提早做好产品规划以及技术预研。
对于NLPer而言,了解科研动态最好的方法就是关注顶会论文,与NLP相关的比较有影响力的顶会主要有ACL、EMNLP、NAACL、COLING、ICLR、AAAI、CoNLL、NLPCC等。
其中,ACL、NAACL、EMNLP、COLING被称为是NLP领域的四大顶会。ACL、NAACL以及EMNLP均由ACL(Association of Computational Linguistics)主办,而COLING则由ICCL(International ...
On Layer Normalization in the Transformer Architecture
近年来,Transformer 网络结构广泛应用于自然语言处理的各项任务,并且获得了非常好的效果。然而 Transformer 结构的优化非常困难,其具体表现有 warm-up 阶段超参数敏感、优化过程收敛速度慢等问题。本文作者从理论上详细分析了 Transformer 结构优化困难的原因,通过将 Layer Normalization 放到残差连接中的两个子层之前,并且在整个网络最后输出之前也增加一个 Layer Normalization 层来对梯度进行归一化,即 Pre-LN Transformer,可以让 Transformer 彻底摆脱 warm-up 阶段,并且大幅加快训练的收敛速度。
论文地址: https://www.microsoft.com/en-us/research/uploads/prod/2020/07/2002.04745.pdf
方法
在优化 Transformer 结构时,除了设置初始学习率与它的衰减策略,往往还需要在训练的初始阶段设置一个非常小(接近0)的学习率,让它经过一定的迭代轮数后逐渐增长到初始的学习率,这个过程也被称作 warm-up 阶段 ...
美团搜索中NER技术的探索与实践
命名实体识别(Named Entity Recognition,简称NER),又称作“专名识别”,是指识别文本中具有特定意义的实体,主要包括人名、地名、机构名、专有名词等。NER是信息提取、问答系统、句法分析、机器翻译、面向Semantic Web的元数据标注等应用领域的重要基础工具,在自然语言处理技术走向实用化的过程中占有重要的地位。在美团搜索场景下,NER是深度查询理解(Deep
Query Understanding,简称 DQU)的底层基础信号,主要应用于搜索召回、用户意图识别、实体链接等环节,NER信号的质量,直接影响到用户的搜索体验。
背景
下面将简述一下实体识别在搜索召回中的应用。在O2O搜索中,对商家POI的描述是商家名称、地址、品类等多个互相之间相关性并不高的文本域。如果对O2O搜索引擎也采用全部文本域命中求交的方式,就可能会产生大量的误召回。我们的解决方法如下图1所示,让特定的查询只在特定的文本域做倒排检索,我们称之为“结构化召回”,可保证召回商家的强相关性。举例来说,对于“海底捞”这样的请求,有些商家地址会描述为“海底捞附近几百米”,若采用全文本域检索这些商家就 ...
MobileBERT-a Compact Task-Agnostic BERT for Resource-Limited Devices
在蒸馏之后对学生模型再进行微调,进一步提升能力。
随着NLP模型的大小增加到数千亿个参数,创建这些模型的更紧凑表示的重要性也随之增加。知识蒸馏成功地实现了这一点,在一个例子中,教师模型的性能的96%保留在了一个小7倍的模型中。然而,在设计教师模型时,知识的提炼仍然被认为是事后考虑的事情,这可能会降低效率,把潜在的性能改进留给学生。
此外,在最初的提炼后对小型学生模型进行微调,而不降低他们的表现是困难的,这要求我们对教师模型进行预训练和微调,让他们完成我们希望学生能够完成的任务。因此,与只训练教师模型相比,通过知识蒸馏训练学生模型将需要更多的训练,这在推理的时候限制了学生模型的优点。
如果在设计和训练教师模型的过程中,将知识的提炼放在首要位置和中心位置,会有什么可能呢?我们能否设计并成功地训练一个“假定”要被蒸馏的模型,蒸馏后的版本能否成功地在任何下游任务上进行微调?这是我们在本文中总结的MobileBERT: a Compact Task-Agnostic BERT for Resource-Limited Devices中提出的一些问题。据作者说目前还没有与任务无关的轻量级预训练模型 ...
Boundary Enhanced Neural Span Classification for Nested Named Entity Recognition
命名实体识别任务(NER)是NLP领域的一个研究热点。大部分使用序列标记框架来解决该问题,但是序列标记框架通常难以检测出嵌套的实体。基于Span的方法可以很容易地检测出不同子序列中的嵌套实体,因此适用于解决嵌套NER问题。然而,现有的基于Span的方法有两个主要问题。第一,对所有子序列进行分类识别在计算上很昂贵,而且在推理上效率很低。第二,基于Span的方法主要集中在学习Span表示,但缺乏明确的边界监督。针对上述两个问题,本文提出了一种边界增强型neural span 分类模型。除了对Span进行分类之外,还加入一个额外的边界检测任务来预测那些作为实体边界的单词。并在多任务学习框架下进行联合训练,在附加边界监督的情况下增强了跨度表示。此外,边界检测模型能够生成高质量的候选跨度,大大降低了推理过程的时间复杂度。
本文主要解决嵌套NER问题,如下所示:
数据集中每一个单词不再只有一个标签,可能存在多种标签。本文提出的BENSC模型的主要思想为:在给定一个句子,首先,对word进行语义编码,其次利用多任务学习思想联合训练边界检测模型和Span分类模型。边界检测模型主要预测每个词是否实体的 ...
聊聊工业界中如何求解NER问题
NER是一个已经解决了的问题吗?或许,一切才刚刚开始。
例如,面对下面笔者在工作中遇到的12个关于NER的系列问题,你有什么好的trick呢?不着急,让我们通过本篇文章,逐一解答以下问题:
Q1、如何快速有效地提升NER性能(非模型迭代)?
Q2、如何在模型层面提升NER性能?
Q3、如何构建引入词汇信息(词向量)的NER?
Q4、如何解决NER实体span过长的问题?
Q5、如何客观看待BERT在NER中的作用?
Q6、如何冷启动NER任务?
Q7、如何有效解决低资源NER问题?
Q8、如何缓解NER标注数据的噪声问题?
Q9、如何克服NER中的类别不平衡问题?
Q10、如何对NER任务进行领域迁移?
Q11、如何让NER系统变得“透明”且健壮?
Q12、如何解决低耗时场景下的NER任务?
工业界中的NER问题为什么不易解决?
众所周知,命名实体识别(Named Entity Recognition,NER)是一项基础而又重要的NLP任务,往往作为信息抽取、问答对话、机器翻译等方向的或显式或隐式的基础任务。或许在很多人眼里,NER似乎只是一个书本概念,跟句法分析一样存在感不强。 ...
产品级深度学习系统入门指南
部署产品级的深度学习模型充满挑战,其难度远远超过训练一个性能不俗的模型。为了部署一个产品级的深度学习系统,还需要设计和开发以下几个部分(见下图):
本文可以作为一篇工程指南去构建一个产品级的深度学习系统,并且该系统可以部署在真实的生产环境中。
本文借鉴了如下文章:
Full Stack Deep Learning Bootcamp (by Pieter Abbeel at UC Berkeley, Josh Tobin at OpenAI, and Sergey Karayev at Turnitin), TFX workshop by Robert Crowe, and Pipeline.ai’s Advanced KubeFlow Meetup by Chris Fregly.
Machine Learning Projects 机器学习项目
[译者注]原作者在文中既使用了Mechine Learning(机器学习),又使用了Deep Learning(深度学习,大部分工具可以两者都适用)
有趣的真相 :flushed: fact: 85%的AI项目会失败. 1 潜在的原因如 ...
地理文本处理技术在高德的演进
地图App的功能可以简单概括为定位,搜索,导航三部分,分别解决在哪里,去哪里,和怎么去的问题。高德地图的搜索场景下,输入的是,地理相关的检索query,用户位置,App图面等信息,输出的是,用户想要的POI。如何能够更加精准地找到用户想要的POI,提高满意度,是评价搜索效果的最关键指标。
一个搜索引擎通常可以拆分成query分析、召回、排序三个部分,query分析主要是尝试理解query表达的含义,为召回和排序给予指导。
地图搜索的query分析不仅包括通用搜索下的分词,成分分析,同义词,纠错等通用NLP技术,还包括城市分析,wherewhat分析,路径规划分析等特定的意图理解方式。
常见的一些地图场景下的query意图表达如下:
query分析是搜索引擎中策略密集的场景,通常会应用NLP领域的各种技术。地图场景下的query分析,只需要处理地理相关的文本,多样性不如网页搜索,看起来会简单一些。但是,地理文本通常比较短,并且用户大部分的需求是唯一少量结果,要求精准度非常高,如何能够做好地图场景下的文本分析,并提升搜索结果的质量,是充满挑战的。
整体技术架构
类似于通用检索的架构,地 ...
(转)组建技术团队的一些思考
68d4c704ab608d783d8a8a5d59eda75a87edb4142e54b5833dd4933ea86f97dfc57d4fccf0a24157a2245041e4c81ba0cab66c0cefce8e9167aaa5d4963ccad8f5454d1a12d66642fc27e7da97bacbbe738cf0161727b36d35eb66c63865f28dc90bf2f0c7f8fe85c485a71ca6c4f084c36a29f6f28e6a6b8d2201acdaf146d2738738c80cc37f917b7a13420b4afffad721fbb9ddc6ad49d2ba97ee44aad0aa665b019e6c15d9f5c2d187f1ac1ad6041e9b317af62117870b9ad064c0f4a1200c520ec53b5a018d6860fad37bb9ef426e58b251203159a3d5b63c65009faa6466380d127ae63ce72e64ce8a1d404e82d6d9bbc2ffcda4f28 ...
利用 GitHub+Actions 自动部署 Hexo 博客
3a325dc39ad404746d7c8526f2f7a082e343685b54a9c7fb3c42d6c3b33f10fba8d374db088f643c182a00234d17603d5bf9c3c506caa12c0ae31713ece6005b366634e84b2bada3d200c81e2ae763f39cf9a090af062b11f772eede9cd73c53d34738cb32e5db74c88342587052593d7711ffed03c9a80d365fc121443c8de78eb5bee354489060d7b8580df3489a5bded256b3e89ec32be93ddd5407b019c92152809e277e55aaf4e2a69d5c3fe33a0e7e4f4bd7882147bafe07e79ba7a14cd2ad373c7c82773917465eabb9a50ac6aa24f622bc456fbbab69f20377f506b7bdd34dca6eb4210ac476f060b182fb30158babf60b891e373 ...
Fine-Tuning Pretrained Language Models ,Weight Initializations, Data Orders, and Early
当前的预训练模型如BERT都分为两个训练阶段:预训练和微调。但很多人不知道的是,在微调阶段,随机种子不同会导致最终效果呈现巨大差异。本文探究了在微调时参数初始化、训练顺序和early stopping对最终效果的影响,发现:参数初始化和训练顺序在最终结果上方差巨大,而early stopping可以节省训练开销。这启示我们去进一步探索更健壮、稳定的微调方式。
论文地址: https://arxiv.org/pdf/2002.06305.pdf
介绍
当前所有的预训练模型都分为两个训练阶段:预训练和微调。预训练就是在大规模的无标注文本上,用掩码语言模型(MLM)或其他方式无监督训练。微调,就是在特定任务的数据集上训练,比如文本分类。
然而,尽管微调使用的参数量仅占总参数量的极小一部分(约0.0006%),但是,如果对参数初始化使用不同的随机数种子,或者是用不同的数据训练顺序,其会对结果产生非常大的影响——一些随机数直接导致模型无法收敛,一些随机数会取得很好的效果。
比如,下图是在BERT上实验多次取得的结果,远远高于之前BERT的结果,甚至逼近更先进的预训练模型。似乎微调阶段会对最终效 ...
NEZHA-Neural Contextualized Representation for Chinese Language Understanding
预训练模型在捕捉深度语境表征方面的成功是有目共睹的。本文提出一个面向中文NLU任务的模型,名为NEZHA(NEural contextualiZed representation for CHinese lAnguage understanding,面向中文理解的神经语境表征模型,哪吒)。NEZHA相较于BERT有如下改进:
函数式相对位置编码
全词覆盖
混合精度训练
训练过程中使用 LAMB 优化器
前两者是模型改进,后两者是训练优化。
NEZHA在以下数个中文自然处理任务上取得了SOTA的结果:
命名实体识别(人民日报NER数据集)
句子相似匹配(LCQMC,口语化描述的语义相似度匹配)
中文情感分类(ChnSenti)
中文自然语言推断(XNLI)
介绍
预训练模型大部分是基于英文语料(BooksCorpus和English Wikipedia),中文的预训练模型目前现有如下几个:Google的中文BERT(只有base版)、ERNIE-Baidu、BERT-WWM(科大讯飞)。这些模型都是基于Transformer,且在遮蔽语言模型(MLM)和下一句预测(NSP)这两 ...
pip下载python包,离线安装
pip download 和 pip install 有着相同的解析和下载过程,不同的是,pip install 会安装依赖项,而 pip download 会把所有已下载的依赖项保存到指定的目录 ( 默认是当前目录 ),此目录稍后可以作为值传递给 pip install --find-links 以便离线或锁定下载包安装。适合在离线服务器上继续安装python模块,主要步骤如下:
首先在联网的环境中安装相同python环境,可使用conda创建虚拟环境
1conda create -n envir_name python=3.7
在虚拟环境中进行pip download下载所依赖包
1pip download tensorflow==2.11.0 -i https://pypi.tuna.tsinghua.edu.cn/simple/ -d ./tensorflow2/
将下载的包的名字输出到 requirements.txt中
1ls tensorflow2 > requirements.txt
离线安装
1pip install --no-index --f ...
ALBERT-A Lite BERT For Self-Supervised Learning Of Language Representations
对于预训练模型来说,提升模型的大小能够提高下游任务的效果,然而如果进一步提升模型规模,势必会导致显存或者内存出现OOM的问题,长时间的训练也可能导致模型出现退化的情况。这次的新模型不再是简单的的升级,而是采用了全新的权重共享机制,反观其他升级版BERT模型,基本都是添加了更多的预训练任务,增大数据量等轻微的改动。ALBERT模型提出了两种减少内存的方法,同时提升了训练速度,其次改进了BERT中的NSP的预训练任务。
从ResNet论文可知,当模型的层次加深到一定程度后继续加深层深度会带来模型的效果下降,与之类似,如下图所示;
将BERT的hidden size增加,结果效果变差。因此,ALBERT模型三种手段来提升效果,又能降低模型参数量大小。
Embedding因式分解
从模型的角度来说,WordPiece embedding的参数学习的表示是上下文无关的,而隐藏层则学习的表示是上下文相关的。在之前的研究成果中表明,BERT及其类似的模型的好效果更多的来源于上下文信息的捕捉,因而,理论上来说隐藏层的表述包含的信息应该更多一些,隐藏层的大小应比embedding大,若让embed ...
2019达观杯信息提取第九名方案
2019达观杯信息提取第九名方案介绍以及代码地址
代码
代码地址: github
方案
Lookahead Optimizer k steps forward, 1 step back
快来试试 Lookahead 最优化方法啊,调参少、收敛好、速度还快,大牛用了都说好。
最优化方法一直主导着模型的学习过程,没有最优化器模型也就没了灵魂。好的最优化方法一直是 ML 社区在积极探索的,它几乎对任何机器学习任务都会有极大的帮助。
从最开始的批量梯度下降,到后来的随机梯度下降,然后到 Adam 等一大帮基于适应性学习率的方法,最优化器已经走过了很多年。尽管目前 Adam 差不多已经是默认的最优化器了,但从 17 年开始就有各种研究表示 Adam 还是有一些缺陷的,甚至它的收敛效果在某些环境下比 SGD 还差。
为此,我们期待更好的标准优化器已经很多年了…
最近,来自多伦多大学向量学院的研究者发表了一篇论文,提出了一种新的优化算法——Lookahead。值得注意的是,该论文的最后作者 Jimmy Ba 也是原来 Adam 算法的作者,Hinton 老爷子也作为三作参与了该论文,所以作者阵容还是很强大的。
Lookahead 算法与已有的方法完全不同,它迭代地更新两组权重。直观来说,Lookahead 算法通过提前观察另一个优化器生成的「fast weights」序列,来选择 ...
RoBERTa-A Robustly Optimized BERT Pretraining Approach
预训练的语言模型在这俩年取得了巨大的突破,但是如何比较各预训练模型的优劣显然是一个很有挑战的问题,主要是太烧钱了。本文研究了一些预训练参数和训练批大小对BERT模型的影响。发现,BERT远远没有被充分训练,用不同的预训练参数,都会对最后的结果产生不同的影响,并且最好的模型达到了SOTA。
介绍
预训练模型,例如 ELMo、GPT、BERT、XLM、XLNet 已经取得了重要进展,但要确定方法的哪些方面贡献最大是存在挑战的。训练在计算上是昂贵的,很难去做大量的实验,并且预训练过程中使用的数据量也不一致。
本文对 BERT 预训练过程进行了大量重复实验研究,其中包括对超参数调整效果和训练集大小的仔细评估。 发现 BERT 的训练不足,并提出了一种改进的方法来训练BERT模型(称之为RoBERTa),该模型可以匹敌或超过所有后 BERT 方法的性能。模型的修改很简单,它们包括:
训练模型更大,具有更大的训练批次,更多的数据
删除下一句预测的目标
对更长的序列进行训练
动态改变应用于训练数据的masking形式
总的来说,本文贡献如下
提出了一组重要的 BERT 设计选择和训练策略,并 ...
Pointer Networks
我们知道,Seq2Seq的出现很好地解开了以往的RNN模型要求输入与输出长度相等的约束,而其后的Attention机制(content-based)又很好地解决了长输入序列表示不充分的问题。尽管如此,这些模型仍旧要求输出的词汇表需要事先指定大小,因为在softmax层中,词汇表的长度会直接影响到模型的训练和运行速度。
Pointer Networks(指针网络)同样是Seq2Seq范式,它主要解决的是Seq2Seq Decoder端输出的词汇表大小不可变的问题。换句话说,传统的Seq2Seq无法解决输出序列的词汇表会随着输入序列长度的改变而改变的那些问题,某些问题的输出可能会严重依赖于输入,在本文中,作者通过计算几何学中三个经典的组合优化问题:凸包(Finding convex hulls)、三角剖分(comupting Delaunay triangulations)、TSP(Travelling Salesman Problem),来演示了作者提出的PtrNets模型。
论文地址: https://arxiv.org/pdf/1506.03134.pdf
上图,我们求解凸包问题 ...
MASS-Masked Sequence to Sequence Pre-training for Language Generation
BERT通常只训练一个encoder用于自然语言理解,而GPT的语言模型通常是训练一个decoder。如果要将BERT或者GPT用于序列到序列的自然语言生成任务,通常只有分开预训练encoder和decoder,因此encoder-attention-decoder结构没有被联合训练,attention机制也不会被预训练,而decoder对encoder的attention机制在这类任务中非常重要,因此BERT和GPT在这类任务中只能达到次优效果。
如上图 所示,encoder将源序列 XXX 作为输入并将其转换为隐藏表示的序列,然后decoder通过attention机制从encoder中抽象出隐藏表示的序列信息,并自动生成目标序列文本 YYY。
本文针对文本生成任务, 在BERT的基础上,提出了Masked Sequence to Sequence pre-training(MASS),MASS采用encoder-decoder框架以预测一个句子片段,其中encoder端输入的句子被随机masked连续片段,而decoder端需要生成该masked的片段,通过这种方式MASS能够 ...
Transformer-XL Attentive Language Models Beyond a Fixed-Length Context
目前在自然语言处理领域,Transformer的编码能力超越了RNN,但是对长距离依赖的建模能力仍然不足。在基于LSTM的模型中,为了建模长距离依赖,提出了门控机制和梯度裁剪,目前可以编码的最长距离在200左右。在基于Transformer的模型中,允许词之间直接self-attention,能够更好地捕获长期依赖关系,但是还是有限制,本文将主要介绍Transformer-XL,并基于PyTorch框架从头实现Transformer-XL。
原始Transformer
细想一下,BERT在应用Transformer时,有一个参数sequence length,也就是BERT在训练和预测时,每次接受的输入是固定长度的。那么,怎么输入语料进行训练时最理想的呢?当然是将一个完整的段落一次性输入,进行特征提取了。但是现实是残酷的,这么大的Transformer,内存是消耗不起的。所以现有的做法是,对段落按照segment进行分隔。在训练时:
当输入segment序列比sequence length短时,就做padding。
当输入segment序列比sequence length长时就做切 ...
Ubuntu 18.04环境下搭建SSR
本篇博文主要记录在ubuntu 18.04环境下搭建SSR过程。
下载ssr客户端
12cd ~git clone https://github.com/ssrbackup/shadowsocksr
配置ssr文件
123cd shadowsocksrsudo cp config.json /etc/shadowsocks.jsonsudo gedit /etc/shadowsocks.json
配置信息如下
1234567891011121314151617181920212223{ "server": “0.0.0.0”, //服务器ip地址 "server_ipv6": "::", "server_port": 443, //服务器端口 "local_address": "127.0.0.1", "local_port": 1080, "password" ...
Multi-Sample Dropout for Accelerated Training and Better Generalization
论文"Multi-Sample Dropout for Accelerated Training and Better Generalization"提出了一种Dropout的新用法,Multi-Sample Dropout可以加快训练速度以及产生更好的结果,本文我们将使用pytorch框架进行实验.
Dropout是一种简单但有效的正则化技术,能够使深度神经网络(DNN)产生更好的泛化效果,因此它广泛用于基于DNN的任务。在训练过程,Dropout随机丢弃一部分神经元以避免过拟合。Multi-Sample Dropout可以说是原始Dropout的一种增强版本.即多次丢弃一部分神经元,并求平均获得最终结果.整个结构如下所示:
实验
本节,我们将对Multi-Sample Dropout进行实验,使用数据主要是CIFAR10,模型为ResNet,优化器为Adma.文件说明:
12345├── nn.py # 模型文件├── progressbar.py # 进度条文件├── run.py #主程序├── tools.py # 常用工具├── traini ...
标签平滑
在机器学习或者深度学习实验中,我们通常使用大量的正则化技术,比如L1,L2,Dropout等来防止模型发生过拟合问题,在分类问题中,模型往往可以正确的预测训练样本,但是泛化能力比较弱,本文将讨论作为分类问题经常使用的正则化技术–标签平滑。
方法
假设有一个分类模型,预测观测样本xxx属于KKK个类别的概率。对于观测样本xxx,采用qθ(y∣x)q_{\theta}(y|x)qθ(y∣x)表示模型对xxx的预测的概率分布,且∑y=1Kqθ(y∣xi)=1\sum_{y=1}^K q_{\theta}(y|x_i)=1∑y=1Kqθ(y∣xi)=1,其中θ\thetaθ为模型参数。p(y∣x)p(y|x)p(y∣x)表示模型输出yyy的真实分布,且∑y=1Kp(y∣xi)=1\sum_{y=1}^K p(y|x_i)=1∑y=1Kp(y∣xi)=1。
通常进行分类任务时,我们采用交叉熵损失函数,使模型预测的概率分布qθ(y∣x)q_{\theta}(y|x)qθ(y∣x)尽量接近真实的概率分布p(y∣x)p(y|x)p(y∣x),即:
Hi(p,qθ)=−∑y=1Kp(y∣ ...
深度学习权重初始化
神经网络训练过程中的参数学习是基于梯度下降法进行优化的。梯度下降法需要在开始训练时给每一个权重赋一个初始值。这个初始值的选取十分关键。
权重初始化
在感知器和logistic回归的训练中,我们一般将权重全部初始化为0。但是这在神经网络的训练中会存在一些问题。因为如果权重都为0,在第一遍前向计算时,所有的隐层神经元的激活值都相同。这样会导致深层神经元没有区分性。这种现象也称为对称权重现象。
随机初始化权重的一个问题是如何选取随机初始化的区间。如果权重取的太小,一是会导致神经元的输入过小,经过多层之后信号就慢慢消失了;二是还会使得Sigmoid 型激活函数丢失非线性的能力。以Logistic 函数为例,在0 附近基本上是近似线性的。这样多层神经网络的优势也就不存在了。如果权重取的太大,会导致输入状态过大。对于Sigmoid 型激活函数来说,激活值变得饱和,从而导致梯度接近于0。
因此,要高效地训练神经网络,给权重选取一个合适的随机初始化区间是非常重要的。一般而言,权重初始化的区间应该根据神经元的性质进行差异化的设置。如果一个神经元的输入连接很多,它的每个输入连接上的权重就应该小一些,以避 ...
训练神经网络不得不看的33个技巧
据说开始训练神经网络很容易,许多库和框架都以可以用30行的奇迹代码片段解决你的数据问题而自豪,给人一种即插即用的(错误)印象。常见的做法是:
123>>> your_data = # plug your awesome dataset here>>> model = SuperCrossValidator(SuperDuper.fit, your_data, ResNet50, SGDOptimizer)# conquer world here
通常可以获得简洁的API和抽象。比如:
123>>> r = requests.get('https://api.github.com/user', auth=('user', 'pass'))>>> r.status_code200
这很酷!开发者勇敢地承担了理解查询字符串、url、GET/POST请求、HTTP连接等重担,并在很大程度上隐藏了几行代码背后的复杂性。这是我们所熟悉和期望的。
不幸的是,神经网络不 ...
Contextual String Embeddings for Sequence Labeling
文章在CoNLL03 NER的F1值超过BERT达到了93.09左右,名副其实的state-of-art。考虑到BERT训练的数据量和参数量都极大,而该文方法只用一个GPU训了一周,就达到了state-of-art效果,值得花时间看看,总的来说,作者基于词的上下文字符级语言模型得到该词的表示,该模型的主要好处有:
可以在大型无标签数据集下进行训练。
利用上下文字符嵌入,可以更好地处理罕见和拼写错误的单词。
利用上下文字符嵌入,可以得到多义词的不同语境嵌入。
总的来说,使用BiLSTM模型,用动态embedding取代静态embedding,character-level的模型输出word-level的embedding. 每个词的embedding和具体任务中词所在的整句sequence都有关,算是解决了静态embedding在一词多义方面的短板,综合了上下文信息。另外该模型产生的隐藏状态输出可以用于下游任务中,比如NER任务,如下所示;
目前三种主流embedding:
A. 经典embedding
B. character-level 基于特定任务的embedding,不 ...
基于PyTorch实现word2vec模型
word2vec是google于2013年的《Distributed Representations of Words and Phrases and their Compositionality 》以及后续的《Efficient Estimation of Word Representations in Vector Space 》两篇文章中提出的一种高效训练词向量的模型, 基本出发点是上下文相似的两个词,它们的词向量也应该相似, 比如香蕉和梨在句子中可能经常出现在相同的上下文中,因此这两个词的表示向量应该就比较相似。本文前部分主要从理论方面介绍word2vec,后半部分主要基于PyTorch框架实现word2vec模型(skip-gram)。
word2vec理论
word2vec模型中比较重要的概念是词汇的上下文, 说白了就是一个词周围的词, 比如wtw_twt的范围为1的上下文就是wt−1w_{t-1}wt−1和wt+1w_{t+1}wt+1,在word2vec中提出两个模型(假设上下文窗口为3)
CBOW(Continuous Bag-of-Word): 以上下文词 ...
Transformer原理和实现
所谓 ”工预善其事,必先利其器“, BERT之所以取得这么惊才绝艳的效果,很大一部分原因源自于Transformer。为了后面更好、更快地理解BERT模型,这一节从Transformer的开山鼻祖说起,先来跟着”Attention is All You Need[1]“ 这篇文章,走近transformer的世界,在这里你再也看不到熟悉的CNN、RNN的影子,取而代之的是,你将看到Attention机制是如何被发挥的淋漓尽致、妙至毫颠,以及它何以从一个为CNN、RNN跑龙套的配角实现华丽逆袭。对于Bert来说,transformer真可谓天纵神兵,出匣自鸣!
看完本文,你大概能够:
掌握Encoder-Decoder框架
掌握残差网络
掌握BatchNormalization(批归一化)和LayerNormalization(层归一化)
掌握Position Embedding(位置编码)
当然,最重要的,你能了解Transformer的原理和代码实现。
Notes: 本文代码参考哈弗大学的The Annotated Transformer
Encoder-Decoder框架
E ...
self—attention
本系列文章希望对google BERT模型做一点解读。打算采取一种由点到线到面的方式,从基本的元素讲起,逐渐展开。
讲到BERT就不能不提到Transformer,而self-attention则是Transformer的精髓所在。简单来说,可以将Transformer看成和RNN类似的特征提取器,而其有别于RNN、CNN这些传统特征提取器的是,它另辟蹊径,采用的是attention机制对文本序列进行特征提取。
所以我们从self-Attention出发。
Attention is all your need
尽管attention机制由来已久,但真正令其声名大噪的是google 2017年的这篇名为《attention is all your need》的论文。
让我们从一个简单的例子看起:
假设我们想用机器翻译的手段将下面这句话翻译成中文:
“The animal didn’t cross the street because it was too tired”
当机器读到“it”时,“it”代表“animal”还是“street”呢?对于人类来讲,这是一个极其简单的问题,但是对 ...
认识交叉熵损失
交叉熵(cross entropy)是深度学习中常用的一个概念,一般用来求目标与预测值之间的差距,下面将主要介绍交叉熵损失。
交叉熵损失函数
理想地,我们希望神经网络可以从错误中快速地学习。在实践中,这种情况经常出现吗?为了回答这个问题,让我们看看一个小例子。这个例子包含一个只有一个输入的神经元:
我们会训练这个神经元来做一件非常简单的事:让输入1 转化为0。当然,这很简单了,手工找到合适的权重和偏置就可以了,不需要什么学习算法。然而,看起来使用梯度下降的方式来学习权重和偏置是很有启发的。所以,我们来看看神经元如何学习。
为了让这个例子更明确,我们会首先将权重和偏置初始化为0.6 和0.9。这些就是一般的开始学习的选择,并没有任何刻意的想法。一开始的神经元的输出是0.82,所以这离我们的目标输出0.0 还差得很远。从下图来看看神经元如何学习到让输出接近0.0 的。注意这些图像实际上是正在进行梯度的计算,然后使用梯度更新来对权重和偏置进行更新,并且展示结果。设置学习速率η=0.15\eta =0.15η=0.15 进行学习,一方面足够慢的让我们跟随学习的过程,另一方面也保证了学习的时 ...
cw2vec Learning Chinese Word Embeddings with Stroke n-gram Information
cw2vec是蚂蚁金服2018年提出的基于笔画的中文词的embedding 方法。文中作者提到利用笔画级别的信息对于改进中文词语嵌入的学习至关重要。具体来说,首先将词转化为笔画序列,然后通过对笔画序列进行n-gram来捕获中文单词的语义和形态信息。
实现的代码地址: https://github.com/lonePatient/cw2vec-pytorch
1.介绍
我们知道,在中文中,每个单词的字符个数往往比英文单词少,每个字符包含了丰富的语义信息。但是字符级的信息足以恰当地捕捉单词的语义信息吗?是否还有其他有用的信息可以从单词和字符中提取出来,以更好地捕抓单词的语义?例如,两个单词“木材”和“森林”在语义上紧密相关。然而,“木材”由“木”和材”两个字符组成,而“森林”由“森”和“林 ”两个字符组成。如果仅考虑字符级信息,很显然该两个单词由不同的字符组成,那么在这两个单词之间是没有共享的信息。另外,如图1(a)所示,“日”作为“智”的一部分,但是几乎不包含与"智"相关的任何语义信息。除了传统的偏旁部首,再来看看另一种形式,如图1(b)所示,“智”被分解为“矢”, ...