首页

职称论文知识库

首页 职称论文知识库 问题

bert是哪篇论文在哪发表的

发布时间:

bert是哪篇论文在哪发表的

论文题目:Lexicon Enhanced Chinese Sequence Labeling Using BERT Adapter 论文地址: 这是一篇自表于2021 ACL(NLP顶会)的论文。论文提出将字典融入BERT网络层记作字典加强BERT(Lexicon Enhanced BERT,LEBERT) ,用于提升中文标注效果。新模型在命名实体识别、分词、成份标注实验中均达到了目前最佳水平。 由于存在分词(CWS)问题,中文面临更大的挑战,对多数任务,以字为单位比以词为单位效果更好。 目前大多优化方法都是修改上层(网络末端),而未修改核心网络。文中提出的方法利用字典得到更多可能的分词,动态计算最佳分词方法,并修改了网络的Transformers层,如图-1中的右图所示: 模型的核心结构如图-2所示,相对于BERT,LEBERT有两个明显差别: (1)输入变成了字符特征+字典特征 (2)字典适配层在Transformer层之间 文中方法将基础的字符序列扩展成字符+词对序列,设句S由字符c组成:Sc={c1,c2,c3,...,cn},在字典D中找到在句中包含字符c所有可能的词ws,如图-3所示: 最终生成序列: s_cw={(c1,ws1),(c2,ws2),...(cn,wsn)} 将字符和词信息融入BERT网络的字典适配层,方法如图-4所示: 字典适配层有两个输入:字符和词对,即上图中的h和x,其中h是前一个transformer层输出的字符向量,x是m个可能包含该字符的词组成的词嵌入,其中j是m中的第j个词: 其中e是预训练得到的词向量映射表。 为了对齐长短不一的序列,对词向量进行非线性变换如下: 其中W1是大小为dc-dw的矩阵,W2是大小dc-dc的矩阵,b1和b2是偏移,dw是词向量的维度,c是隐藏层的维度。 由图-3可知,一个字可能对应多个词,对于不同的任务,最匹配的词可能并不相同。 具体算法是使用vi表示第i个字符对应的所有词表,m是该字符可能对应的词个数,计算注意力attention如下: 其中W是注意力权重矩阵。 然后对每个词乘其权重加和,得到位置i对应的词表示: 最终,将词典信息与字符的向量相加,得到了该位置的新向量: 处理后的数据再送入dropout层和归一化层继续处理。 将字符输入词嵌入层,加入token, segment和position信息,然后将该层输出的词嵌入输入Transformer层:输出的 是第l个隐藏层的输出,LN是归一化层,HMAttn是多头注意力机制,FFN是两个前馈网络层,使用ReLU作为激活函数。 在k-th和(k+1)-th Transformer之间加入字典信息考虑到标签的前后关系,使用CRF层来预测最终的标签,将最后一个隐藏层h的输出作为输入,计算输出层O: 然后将输出层代入CRF模型,计算标签y的概率p。 训练时给出句子S和标签Y,计算全句的负对数似然作为误差。 解码时,使用维特比算法计算得分最高的序列。 论文针对命名实体识别NER,分词CWS、位置POS标注进行了实验,实验数据如表-1所示(中文NLP常用实验数据)。 图-5展示了相对于BERT和基于BERT的最新模型,文中模型误差的减少情况。 除了与其它模型比较之外,论文还比较了LEBERT方法与在组装模型的Bert+Word方法的差异。

论文标题:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding 论文链接: BERT(Bidirectional Encoder Representations from Transformers)通过预训练来学习无标注数据中的深度双向表示,预训练结束后通过添加一个额外的输出层进行微调,最终在多个NLP任务上实现了SOTA。 预训练语言模型在实践中证明对提高很多自然语言处理任务有效,其中包括句子层级的任务,比如自然语言推断(natural language inference)和复述(paraphrasing),还有token层级的任务,比如命名实体识别(named entity recognition)和问答(question answering)。 在下游任务中应用预训练语言模型表示的方法有两种:feature-based的方法和fine-tuning的方法。举例来说,ELMo这种预训练语言模型使用feature-based的方法,通过将ELMo的预训练的表示作为额外的特征输入到特定于任务的模型中去;GPT使用fine-tuning的方法,通过引入少量的特定于任务的参数,在下游任务中训练时所有的预训练参数。 截止BERT之前的预训练语言模型都是单向的(unidirectional),包括GPT和ELMo,这样的方法对句子层级的任务不是最优的,而且对于token层级的任务比如问答非常有害。BERT使用masked language model(MLM)的方法来预训练,这种方法能够训练一个双向的(directional)语言模型。除了masked language model的预训练的方法,BERT还使用了next sentence prediction的预训练方法。 BERT的使用分为两个阶段:预训练(pre-training)和微调(fine-tuning)。预训练阶段模型通过两种不同的预训练任务来训练无标注数据。微调阶段模型使用预训练参数初始化,然后使用下游任务(downstream task)的标注数据来微调参数。 BERT的一个显著特点是它在不同的任务上有统一的架构,使用时只需要在BERT后面接上下游任务的结构即可使用。 BERT的模型架构是一个多层双向的Transformer的encoder。我们标记模型的层数(每一层是一个Tranformer的block)为 ,模型的hidden size为 ,self-attention head的数量为 。两个比较通用的BERT架构为 和 。 对比GPT,BERT使用了双向self-attention架构,而GPT使用的是受限的self-attention, 即限制每个token只能attend到其左边的token。 BERT的输入表示能够是一个句子或者是一个句子对,这是为了让BERT能够应对各种不同的下游任务。BERT的输入是一个序列,该序列包含一个句子的token或者两个句子结合在一起的token。 具体地,我们会将输入的自然语言句子通过 WordPiece embeddings 来转化为token序列。这个token序列的开头要加上 [CLS] 这个特殊的token,最终输出的 [CLS] 这个token的embedding可以看做句子的embedding,可以使用这个embedding来做分类任务。 由于句子对被pack到了一起,因此我们需要在token序列中区分它们,具体需要两种方式: ①在token序列中两个句子的token之间添加 [SEP] 这样一个特殊的token; ②我们为每个token添加一个用来学习的embedding来区分token属于句子A还是句子B,这个embedding叫做segment embedding。 具体地,BERT的输入由三部分相加组成:token embeddings、segment embeddings和position embeddings。如下图所示: BERT使用两个无监督的任务进行预训练,分别是Masked LM和Next Sentence Prediction(NSP)。如下图所示,我们定义输入的embedding为 ,BERT最终输出的 [CLS] 的embedding为 ,最终输出的第 个token的embedding为 。 我们有理由相信一个深度双向模型比left-to-right模型和left-to-right和right-to-left简单连接的模型的效果更加强大。不幸的是,标准的条件语言模型只能够够left-to-right或者right-to-left地训练,这是因为双向条件会使每个token能够间接地“看到自己”,并且模型能够在多层上下文中简单地预测目标词。 为了能够双向地训练语言模型,BERT的做法是简单地随机mask掉一定比例的输入token(这些token被替换成 [MASK] 这个特殊token),然后预测这些被遮盖掉的token,这种方法就是Masked LM(MLM),相当于完形填空任务(cloze task)。被mask掉的词将会被输入到一个softmax分类器中,分类器输出的维度对应词典的大小。在预训练时通常为每个序列mask掉15%的token。与降噪自编码器(denoising auto-encoders)相比,我们只预测被mask掉的token,并不重建整个输入。 这种方法允许我们预训练一个双向的语言模型,但是有一个缺点就是造成了预训练和微调之间的mismatch,这是因为 [MASK] 这个token不会在微调时出现。为了缓解这一点,我们采取以下做法:在生成训练数据时我们随机选择15%的token进行替换,被选中的token有80%的几率被替换成 [MASK] ,10%的几率被替换成另一个随机的token,10%的几率该token不被改变。然后 将使用交叉熵损失来预测原来的token。 一些重要的NLP任务如Question Answering (QA)或者Natural Language Inference (NLI)需要理解句子之间的关系,而这种关系通常不会被语言模型直接捕捉到。为了使得模型能够理解句子之间的关系,我们训练了一个二值的Next Sentence Prediction任务,其训练数据可以从任何单语语料库中生成。具体的做法是:当选择句子A和句子B作为训练数据时,句子B有50%的几率的确是句子A的下一句(标签是 IsNext ),50%的几率是从语料库中随机选择的句子(标签是 NotNext )。 [CLS] 对应的最后一个隐层输出向量被用来训练NSP任务,这个embedding就相当于sentence embedding。虽然这个预训练任务很简单,但是事实上在微调时其在QA和NLI任务上表现出了很好的效果。在前人的工作中,只有sentence embedding被迁移到下游任务中,而BERT会迁移所有的参数来初始化下游任务模型。 Transformer的self-attention机制允许BERT建模多种下游任务。对于包含句子对的任务,通常的做法是先独立地对句子对中的句子进行编码,然后再应用双向交叉注意(bidirectional cross attention)。而BERT使用self-attention机制统一了这两个过程,这是因为对拼接起来的句子对进行self-attention有效地包含了两个句子之间的双向交叉注意(bidirectional cross attention)。 对于每个任务来说,我们只需要将任务特定的输入输出插入到BERT中然后端到端地微调即可。举例子来说,BERT的预训练输入句子A和句子B在微调时可以类比为: ①paraphrasing任务中的句子对; ②entailment任务中的hypothesis-premise对; ③question answering任务中的question-passage对; ④text classification或者sequence tagging任务中的text-∅对(也就是只输入一个text,不必一定需要两个句子)。 对于BERT的输出,对于一些token-level的任务,BERT的token表示将被输入到一个输出层,比如sequence tagging或者question answering任务;对于entailment或者sentiment analysis这样的任务,可以将 [CLS] 对应的表示输入到一个输出层。 我们使用 [CLS] 这个token的最后一层的隐层向量 作为聚合的表示,可以认为是sentence embedding。在微调时只引入一个新的权重 ,这里的 代表标签的数量,然后计算标准分类损失 。下图展示了BERT在GLUE上的效果: 在这个数据集上,我们将question和passage拼接起来作为一个输入序列(中间是 [SEP] )。在微调时引入一个start向量 和一个end向量 ,计算 和 的点积然后通过 函数作为word 是答案的span起始位置的概率: 。答案的终止位置也做上述类似处理。从 到 的候选区间的得分记作 ,我们挑选 的最大得分区间作为预测的结果。下图展示了BERT在SQuAD v1.1上的效果: SQuAD v2.0有的question在提供的passage中没有答案存在。在微调时我们设置没有答案的问题的span的起始和结束位置都是 [CLS] 这个token,也就是start和end的可能性空间包含进了 [CLS] 的位置。在预测时,我们比较没有答案的span得分 和最优的有答案得分 。当 时,我们预测这是一个有答案的问题,这里的 用来在dev set上选择最优的 。下图展示了BERT在SQuAD v2.0上的效果: 微调时我们为BERT构建4个输入序列,每一个是所给的句子(句子A)和一个可能的延续(句子B)。然后引入一个向量,该向量和每一个输入对应的 [CLS] 的embedding的点积再通过一个 层来得到每个选择的得分。下图展示了BERT在SWAG上的效果:

2019 年可以说是「预训练模型」流行起来的一年。自 BERT 引发潮流以来,相关方法的研究不仅获得了 EMNLP 大会最佳论文等奖项,更是在 NLP、甚至图像领域里引领了风潮。

去年也有很多 游戏 AI 取得了超越人类的水平。人工智能不仅已经玩转德州扑克、星际争霸和 Dota2 这样复杂的 游戏 ,还获得了 Nature、Science 等顶级期刊的肯定。

机器之心整理了去年全年 在人工智能、量子计算等领域里最为热门的七项研究 。让我们以时间的顺序来看:

第一个重磅研究出现在 2 月,继发布刷新 11 项 NLP 任务记录的 3 亿参数量语言模型 BERT 之后,谷歌 OpenAI 于 2019 年 2 月再次推出了一种更为强大的模型,而这次的模型参数量达到了 15 亿。这是一种 大型无监督语言模型 ,能够生产连贯的文本段落,在许多语言建模基准上取得了 SOTA 表现。此外,在没有任务特定训练的情况下,该模型能够做到初步的阅读理解、机器翻译、问答和自动摘要。

该模型名为 GPT-2,它是基于 Transformer 的大型语言模型,包含 15 亿参数、在一个 800 万网页数据集上训练而成。训练 GPT-2 有一个简单的目标:给定一个文本中前面的所有单词,预测下一个单词。GPT-2 是对 GPT 模型的直接扩展,在超出 10 倍的数据量上进行训练,参数量也多出了 10 倍。

GPT-2 展示了一系列普适而强大的能力,包括生成当前最佳质量的条件合成文本,其中我们可以将输入馈送到模型并生成非常长的连贯文本。此外,GPT-2 优于在特定领域(如维基百科、新闻或书籍)上训练的其它语言模型,而且还不需要使用这些特定领域的训练数据。在 知识问答、阅读理解、自动摘要和翻译等任务 上,GPT-2 可以从原始文本开始学习,无需特定任务的训练数据。虽然目前这些下游任务还远不能达到当前最优水平,但 GPT-2 表明如果有足够的(未标注)数据和计算力,各种下游任务都可以从无监督技术中获益。

最后,基于大型通用语言模型可能会产生巨大的 社会 影响,也考虑到模型可能会被用于恶意目的,在发布 GPT-2 时,OpenAI 采取了以下策略: 仅发布 GPT-2 的较小版本和示例代码,不发布数据集、训练代码和 GPT-2 模型权重 。

机器学习顶会的最佳论文,总会引起人们的广泛讨论。在今年 6 月于美国加州举办的 ICML 2019(国际机器学习大会)上,由苏黎世联邦理工学院(ETH)、德国马普所、谷歌大脑共同完成的《Challenging Common Assumptions in the Unsupervised Learning of Disentangled Representations》获得了其中一篇最佳论文。研究者在论文中提出了一个与此前学界普遍预测相反的观点:对于任意数据,拥有相互独立表征(解耦表征)的无监督学习是不可能的。

论文链接:

在这篇论文中,研究者冷静地审视了该领域的最新进展,并对一些常见的假设提出了质疑。

首先,研究者表示从理论上来看,如果不对模型和数据进行归纳偏置,无监督学习解耦表征基本是不可能的;然后他们在七个不同数据集进行了可复现的大规模实验,并训练了 12000 多个模型,包括一些主流方法和评估指标;最后,实验结果表明,虽然不同的方法强制执行了相应损失「鼓励」的属性,但如果没有监督,似乎无法识别完全解耦的模型。此外,增加的解耦似乎不会导致下游任务学习的样本复杂度的下降。

研究者认为,基于这些理论,机器学习从业者对于超参数的选择是没有经验法则可循的,而在已有大量已训练模型的情况下, 无监督的模型选择仍然是一个很大的挑战 。

去年 6 月,来自德国波恩-莱茵-锡格应用技术大学和谷歌大脑的研究者发表了一篇名为《Weight Agnostic Neural Networks》的论文,进而引爆了机器学习圈。在该论文中,他们提出了一种神经网络架构搜索方法, 这些网络可以在不进行显式权重训练的情况下执行各种任务 。

论文链接:

通常情况下,权重被认为会被训练成 MNIST 中边角、圆弧这类直观特征,而如果论文中的算法可以处理 MNIST,那么它们就不是特征,而是函数序列/组合。对于 AI 可解释性来说,这可能是一个打击。很容易理解,神经网络架构并非「生而平等」,对于特定任务一些网络架构的性能显著优于其他模型。但是相比架构而言,神经网络权重参数的重要性到底有多少?

来自德国波恩-莱茵-锡格应用技术大学和谷歌大脑的一项新研究提出了一种神经网络架构搜索方法,这些网络可以在不进行显式权重训练的情况下执行各种任务。

为了评估这些网络,研究者使用从统一随机分布中采样的单个共享权重参数来连接网络层,并评估期望性能。结果显示,该方法可以找到少量神经网络架构,这些架构可以在没有权重训练的情况下执行多个强化学习任务,或 MNIST 等监督学习任务。

BERT 带来的影响还未平复,CMU 与谷歌大脑 6 月份提出的 XLNet 在 20 个任务上超过了 BERT 的表现,并在 18 个任务上取得了当前最佳效果。

来自卡耐基梅隆大学与谷歌大脑的研究者提出新型预训练语言模型 XLNet,在 SQuAD、GLUE、RACE 等 20 个任务上全面超越 BERT。

作者表示, BERT 这样基于去噪自编码器的预训练模型可以很好地建模双向语境信息,性能优于基于自回归语言模型的预训练方法 。然而,由于需要 mask 一部分输入,BERT 忽略了被 mask 位置之间的依赖关系,因此出现预训练和微调效果的差异(pretrain-finetune discrepancy)。

基于这些优缺点,该研究提出了一种泛化的自回归预训练模型 XLNet。XLNet 可以:1)通过最大化所有可能的因式分解顺序的对数似然,学习双向语境信息;2)用自回归本身的特点克服 BERT 的缺点。此外,XLNet 还融合了当前最优自回归模型 Transformer-XL 的思路。

延伸阅读:

2019 年 7 月,在无限制德州扑克六人对决的比赛中,德扑 AI Pluribus 成功战胜了五名专家级人类玩家。Pluribus 由 Facebook 与卡耐基梅隆大学(CMU)共同开发,实现了前辈 Libratus(冷扑大师)未能完成的任务,该研究已经登上了当期《科学》杂志

据介绍,Facebook 和卡内基梅隆大学设计的比赛分为两种模式:1 个 AI+5 个人类玩家和 5 个 AI+1 个人类玩家,Pluribus 在这两种模式中都取得了胜利。如果一个筹码值 1 美元,Pluribus 平均每局能赢 5 美元,与 5 个人类玩家对战一小时就能赢 1000 美元。职业扑克玩家认为这些结果是决定性的胜利优势。 这是 AI 首次在玩家人数(或队伍)大于 2 的大型基准 游戏 中击败顶级职业玩家 。

在论文中,Pluribus 整合了一种新的在线搜索算法,可以通过搜索前面的几步而不是只搜索到 游戏 结束来有效地评估其决策。此外,Pluribus 还利用了速度更快的新型 Self-Play 非完美信息 游戏 算法。综上所述,这些改进使得使用极少的处理能力和内存来训练 Pluribus 成为可能。 训练所用的云计算资源总价值还不到 150 美元 。这种高效与最近其他人工智能里程碑项目形成了鲜明对比,后者的训练往往要花费数百万美元的计算资源。

Pluribus 的自我博弈结果被称为蓝图策略。在实际 游戏 中,Pluribus 使用搜索算法提升这一蓝图策略。但是 Pluribus 不会根据从对手身上观察到的倾向调整其策略。

在人工智能之外的量子计算领域,去年也有重要的研究突破。2019 年 9 月,谷歌提交了一篇名为《Quantum supremacy using a programmable superconducting processor》的论文自 NASA 网站传出,研究人员首次在实验中证明了量子计算机对于传统架构计算机的优越性:在世界第一超算 Summit 需要计算 1 万年的实验中,谷歌的量子计算机只用了 3 分 20 秒。因此,谷歌宣称实现「量子优越性」。之后,该论文登上了《自然》杂志 150 周年版的封面。

这一成果源自科学家们不懈的努力。谷歌在量子计算方向上的研究已经过去了 13 年。2006 年,谷歌科学家 Hartmut Neven 就开始 探索 有关量子计算加速机器学习的方法。这项工作推动了 Google AI Quantum 团队的成立。2014 年,John Martinis 和他在加利福尼亚大学圣巴巴拉分校(UCSB)的团队加入了谷歌的工作,开始构建量子计算机。两年后,Sergio Boixo 等人的论文发表,谷歌开始将工作重点放在实现量子计算优越性任务上。

如今,该团队已经构建起世界上第一个超越传统架构超级计算机能力的量子系统,可以进行特定任务的计算。

量子优越性实验是在一个名为 Sycamore 的 54 量子比特的完全可编程处理器上运行的。该处理器包含一个二维网格,网格中的每个量子比特与其他四个相连。量子优越性实验的成功归功于谷歌改进了具有增强并行性的双量子比特门,即使同时操作多个门,也能可靠地实现记录性能。谷歌使用一种新型的控制旋钮来实现这一性能,该旋钮能够关闭相邻量子比特之间的交互。此举大大减少了这种多连通量子比特系统中的误差。此外,通过优化芯片设计来降低串扰,以及开发避免量子比特缺陷的新控制校准,谷歌进一步提升了性能。

虽然 AI 没有打败最强人类玩家 Serral,但其研究的论文仍然登上了 Nature。2019 年 10 月底,DeepMind 有关 AlphaStar 的论文发表在了当期《Nature》杂志上,这是人工智能算法 AlphaStar 的最新研究进展,展示了 AI 在「没有任何 游戏 限制的情况下」已经达到星际争霸Ⅱ人类对战天梯的顶级水平,在 Battle.net 上的排名已超越 99.8%的活跃玩家 。

回顾 AlphaStar 的发展历程,DeepMind 于 2017 年宣布开始研究能进行即时战略 游戏 星际争霸Ⅱ的人工智能——AlphaStar。2018 年 12 月 10 日,AlphaStar 击败 DeepMind 公司里的最强玩家 Dani Yogatama;12 月 12 日,AlphaStar 已经可以 5:0 击败职业玩家 TLO 了(TLO 是虫族玩家,据 游戏 解说们认为,其在 游戏 中的表现大概能有 5000 分水平);又过了一个星期,12 月 19 日,AlphaStar 同样以 5:0 的比分击败了职业玩家 MaNa。至此,AlphaStar 又往前走了一步,达到了主流电子竞技 游戏 顶级水准。

根据《Nature》论文描述,DeepMind 使用通用机器学习技术(包括神经网络、借助于强化学习的自我博弈、多智能体学习和模仿学习)直接从 游戏 数据中学习。AlphaStar 的 游戏 方式令人印象深刻——这个系统非常擅长评估自身的战略地位,并且准确地知道什么时候接近对手、什么时候远离。此外,论文的中心思想是将 游戏 环境中虚构的自我博弈扩展到一组智能体,即「联盟」。

联盟这一概念的核心思想是:仅仅只是为了赢是不够的。相反,实验需要主要的智能体能够打赢所有玩家,而「压榨(exploiter)」智能体的主要目的是帮助核心智能体暴露问题,从而变得更加强大。这不需要这些智能体去提高它们的胜率。通过使用这样的训练方法,整个智能体联盟在一个端到端的、完全自动化的体系中学到了星际争霸Ⅱ中所有的复杂策略。

2019 年在 AI 领域的各个方向上都出现了很多技术突破。新的一年,我们期待更多进展。

此外,机器之心于 2019 年 9 月底推出了自己的新产品 SOTA 模型,读者可以根据自己的需要寻找机器学习对应领域和任务下的 SOTA 论文,平台会提供论文、模型、数据集和 benchmark 的相关信息。

bert论文发表在哪

一是联系期刊。二是联系发表论文的网站。三是联系代发编辑。怎么说呢,这三种途径都可以。如果要分析的话,第一种审稿周期长(半个月一个月的才回复),稿件不容易通过,虽然在官网上放心点,但是价格有点贵。第二种进去网站就有销售跟着,问你需要什么。我曾经问过价钱,500的版面费要价1000,看来网站的广告费用都是我们自己交的啊。第三种一般都是和期刊合作的编辑,价格是最低的,审稿快,就是要小心甄别。

首先,你要确定好自己所要发表论文的期刊,罗列好大致有那几个。1.找适合你的期刊,上面都会表明投稿邮箱、联系电话、联系方式等,可自己联系。2.各大检索数据库查找,部分期刊在被收录的数据库的页面是有征稿函的.征稿函里一般有官方的联系方式,直接按格式整理,按要求投稿即可。3.查找期刊的官方网站,注意很多网站只是代理征稿网站或者网站,并不是真正的官网,而且有些期刊是没有官方网站的,可以联系查找主办单位的联系方式进行咨询。4.用搜索引擎搜索《期刊刊名》+征稿函.少部分期刊是会有编辑对外发布征稿信息的,但是这个就需要你自己擦亮眼睛进行分辨是不是真正的征稿信息了。5.找论文代理或者代投机构.万能的某宝或者百度,搜索XX发表,提醒你擦亮眼睛,很多很多很多。其他,你可以咨询身边已经成功投稿发表的朋友,既然已成功发表,渠道肯定没问题,比你自己摸索要非常省时省力。(资料来源:中国论文网http;//)

期刊有很多,但是要看你是发表什么专业方向的论文,期刊杂志还有栏目分类,如果实在搞不清楚的话那就去找早发表网发表论文吧,那里会告诉你你论文适合投什么样的期刊。

因为杂志社都是全国各地的,所以一般发表渠道基本都是在网上投稿,这方面我比较有经验,因为每年我们单位都发很多论文,有2个渠道,一般便宜点的,就是找到想发的杂志社然后去官网投稿,这样的话第一需要自己准备好论文,第二通过率比较低,第三期刊选择单一,发的篇数多的话需要更换刊物,不过价格便宜。第二个渠道,我是找的网上的专业网站发的,叫百姓论文网,价格是我问过最便宜的了,主要省事 一般我同事没有准备好论文的话,那块也能代笔,选择刊物也多样。所以我倾向于后者,主要不用操心。具体就知道这么多,希望对你有帮助,望采纳

谷歌的bert论文发表在哪

国内没办法直接上谷歌的网站 你可以搜索下载个E9代理加速器 这样就能上Google下载东西了

等会让他赶紧染发剂对人体

Google已经被大陆屏蔽了 你可以去Google香港的服务器

bert模型论文发表在哪个会议

国际会议,研讨会会议等等《数学建模及其应用》是中国工业与应用数学学会的会刊自创刊以来,杂志坚持刊登以建模为主要内容的应用数学研究成果,用数学建模及方法解决科学、工程技术和经济等应用问题以及建模教学研究的成果,为从事数学建模研究和教学的广大高校师生以及工业界相关专家提供了一个学习、借鉴及交流的平台。注重于数学建模方法和理论方面的学术性研讨,针对目前数学建模竞赛中的热点问题进行专题报告,探讨数学建模的发展趋势,让更多老师参与到数学建模的理论和方法研究,提高各高等学校数学建模研究和教学水平,创新学生数学建模活动,推动数学建模的快速发展。

论文题目:Lexicon Enhanced Chinese Sequence Labeling Using BERT Adapter 论文地址: 这是一篇自表于2021 ACL(NLP顶会)的论文。论文提出将字典融入BERT网络层记作字典加强BERT(Lexicon Enhanced BERT,LEBERT) ,用于提升中文标注效果。新模型在命名实体识别、分词、成份标注实验中均达到了目前最佳水平。 由于存在分词(CWS)问题,中文面临更大的挑战,对多数任务,以字为单位比以词为单位效果更好。 目前大多优化方法都是修改上层(网络末端),而未修改核心网络。文中提出的方法利用字典得到更多可能的分词,动态计算最佳分词方法,并修改了网络的Transformers层,如图-1中的右图所示: 模型的核心结构如图-2所示,相对于BERT,LEBERT有两个明显差别: (1)输入变成了字符特征+字典特征 (2)字典适配层在Transformer层之间 文中方法将基础的字符序列扩展成字符+词对序列,设句S由字符c组成:Sc={c1,c2,c3,...,cn},在字典D中找到在句中包含字符c所有可能的词ws,如图-3所示: 最终生成序列: s_cw={(c1,ws1),(c2,ws2),...(cn,wsn)} 将字符和词信息融入BERT网络的字典适配层,方法如图-4所示: 字典适配层有两个输入:字符和词对,即上图中的h和x,其中h是前一个transformer层输出的字符向量,x是m个可能包含该字符的词组成的词嵌入,其中j是m中的第j个词: 其中e是预训练得到的词向量映射表。 为了对齐长短不一的序列,对词向量进行非线性变换如下: 其中W1是大小为dc-dw的矩阵,W2是大小dc-dc的矩阵,b1和b2是偏移,dw是词向量的维度,c是隐藏层的维度。 由图-3可知,一个字可能对应多个词,对于不同的任务,最匹配的词可能并不相同。 具体算法是使用vi表示第i个字符对应的所有词表,m是该字符可能对应的词个数,计算注意力attention如下: 其中W是注意力权重矩阵。 然后对每个词乘其权重加和,得到位置i对应的词表示: 最终,将词典信息与字符的向量相加,得到了该位置的新向量: 处理后的数据再送入dropout层和归一化层继续处理。 将字符输入词嵌入层,加入token, segment和position信息,然后将该层输出的词嵌入输入Transformer层:输出的 是第l个隐藏层的输出,LN是归一化层,HMAttn是多头注意力机制,FFN是两个前馈网络层,使用ReLU作为激活函数。 在k-th和(k+1)-th Transformer之间加入字典信息考虑到标签的前后关系,使用CRF层来预测最终的标签,将最后一个隐藏层h的输出作为输入,计算输出层O: 然后将输出层代入CRF模型,计算标签y的概率p。 训练时给出句子S和标签Y,计算全句的负对数似然作为误差。 解码时,使用维特比算法计算得分最高的序列。 论文针对命名实体识别NER,分词CWS、位置POS标注进行了实验,实验数据如表-1所示(中文NLP常用实验数据)。 图-5展示了相对于BERT和基于BERT的最新模型,文中模型误差的减少情况。 除了与其它模型比较之外,论文还比较了LEBERT方法与在组装模型的Bert+Word方法的差异。

bert论文发表在

首先我会详细阐述 BERT 原理,然后简单介绍一下 ELMO 以及 GPT

BERT 全称为 B idirectional E ncoder R epresentation from T ransformer,是 Google 以 无监督的方式利用大量无标注文本 「炼成」的语言模型,其架构为 Transformer 中的 Encoder(BERT=Encoder of Transformer)

我在 Transformer 详解 中已经详细的解释了所有 Transformer 的相关概念,这里就不再赘述

以往为了解决不同的 NLP 任务,我们会为该任务设计一个最合适的神经网络架构并做训练,以下是一些简单的例子

不同的 NLP 任务通常需要不同的模型,而设计这些模型并测试其 performance 是非常耗成本的(人力,时间,计算资源)。如果有一个能 直接处理各式 NLP 任务的通用架构 该有多好?

随着时代演进,不少人很自然地有了这样子的想法,而 BERT 就是其中一个将此概念付诸实践的例子

Google 在预训练 BERT 时让它同时进行两个任务: 1. 漏字填空 2. 下个句子预测

对正常人来说,要完成这两个任务非常简单。只要稍微看一下前后文就知道完形填空任务中 [MASK] 里应该填 退了 ;而 醒醒吧 后面接 你没有妹妹 也十分合理(?)

接下来我会分别详细介绍论文中这两个任务的设计细节

在 BERT 中,Masked LM(Masked Language Model)构建了语言模型,简单来说,就是 随机遮盖或替换 一句话里面的任意字或词,然后让模型通过上下文预测那一个被遮盖或替换的部分,之后 做 Loss 的时候也只计算被遮盖部分的 Loss ,这其实是一个很容易理解的任务,实际操作如下:

这样做的好处是,BERT 并不知道 [MASK] 替换的是哪一个词,而且 任何一个词都有可能是被替换掉的,比如它看到的 apple 可能是被替换的词 。这样强迫模型在编码当前时刻词的时候 不能太依赖当前的词 ,而要考虑它的上下文,甚至根据上下文进行 "纠错"。比如上面的例子中,模型在编码 apple 时,根据上下文 my dog is,应该 把 apple 编码成 hairy 的语义而不是 apple 的语义

我们首先拿到属于上下文的一对句子,也就是两个句子,之后我们要在这两个句子中加一些特殊的 token: [CLS]上一句话[SEP]下一句话[SEP] 。也就是在句子开头加一个 [CLS] ,在两句话之间和句末加 [SEP] ,具体地如下图所示

可以看到,上图中的两句话明显是连续的。如果现在有这么一句话 [CLS] 我的狗很可爱 [SEP] 企鹅不擅长飞行 [SEP] ,可见这两句话就 不是连续的 。在实际训练中,我们会让这两种情况出现的数量为** 1:1**

Token Embedding 就是正常的词向量,即 PyTorch 中的 nn.Embedding() Segment Embedding 的作用是用 embedding 的信息让模型 分开上下句 ,我们给上句的 token 全 0,下句的 token 全 1,让模型得以判断上下句的起止位置,例如

Position Embedding 和 Transformer 中的不一样,不是三角函数,而是 学习出来的

BERT 预训练阶段实际上是将上述两个任务结合起来,同时进行,然后将所有的 Loss 相加,例如

BERT 的 Fine-Tuning 共分为 4 种类型,以下内容、图片均来自台大李宏毅老师 Machine Learning 课程 (以下内容 图在上,解释在下)

为什么要用CLS? 这里李宏毅老师有一点没讲到,就是为什么要用第一个位置,即 [CLS] 位置的 output。这里我看了网上的一些博客,结合自己的理解解释一下。因为 BERT 内部是 Transformer,而 Transformer 内部又是 Self-Attention, 所以 [CLS] 的 output 里面肯定含有整句话的完整信息 ,这是毋庸置疑的。但是 Self-Attention 向量中,自己和自己的值其实是占大头的,现在假设使用 的 output 做分类,那么这个 output 中实际上会更加看重 ,而 又是一个有实际意义的字或词,这样难免会影响到最终的结果。但是 [CLS] 是没有任何实际意义的,只是一个占位符而已,所以就算 [CLS] 的 output 中自己的值占大头也无所谓。当然你 也可以将所有词的 output 进行 concat,作为最终的 output

首先将问题和文章通过 [SEP] 分隔,送入 BERT 之后,得到上图中黄色的输出。此时我们还要训练两个 vector,即上图中橙色和黄色的向量。首先将橙色和所有的黄色向量进行 dot product,然后通过 softmax,看哪一个输出的值最大,例如上图中 对应的输出概率最大,那我们就认为 s=2

同样地,我们用蓝色的向量和所有黄色向量进行 dot product,最终预测得 的概率最大,因此 e=3。最终,答案就是 s=2,e=3

你可能会觉得这里面有个问题,假设最终的输出 s>e 怎么办,那不就矛盾了吗?其实在某些训练集里,有的问题就是没有答案的,因此此时的预测搞不好是对的,就是没有答案

以上就是 BERT 的详细介绍,参考以下文章

ELMo是Embedding from language Model的缩写,它通过无监督的方式对语言模型进行预训练来学习单词表示

这篇论文的想法其实非常简单,但是效果却很好。它的思路是用 深度的双向 Language Model 在大量未标注数据上训练语言模型 ,如下图所示

在实际任务中,对于输入的句子,我们使用上面的语言模型来处理它,得到输出向量,因此这可以看作是一种 特征提取 。但是 ELMo 与普通的 Word2Vec 或 GloVe 不同,ELMo 得到的 Embedding 是 有上下文信息 的

具体来说,给定一个长度为 N 的句子,假设为 ,语言模型会计算给定 的条件下出现 的概率:

传统的 N-gram 模型 不能考虑很长的历史 ,因此现在的主流是使用 多层双向 LSTM 。在时刻 ,LSTM 的第 层会输出一个隐状态 ,其中 , 是 LSTM 的层数。最上层是 ,对它进行 softmax 之后得到输出词的概率

类似的,我们可以用 一个反向 来计算概率:

通过这个 LSTM,我们可以得到 。我们的损失函数是这两个 LSTM 的 加和 :

这两个 LSTM 有各自的参数 和 ,而 Word Embedding 参数 和 Softmax 参数 是共享的

为了用于下游(DownStream)的特定任务,我们会把不同层的隐状态组合起来,具体组合的参数是根据不同的特定任务学习出来的,公式如下:

GPT 得到的语言模型参数不是固定的,它会根据特定的任务进行调整(通常是微调),这样的到的句子表示能更好的适配特定任务。它的思想也很简单,使用 单向 Transformer 学习一个语言模型 ,对句子进行无监督的 Embedding,然后 根据具体任务对 Transformer 的参数进行微调 。GPT 与 ELMo 有两个主要的区别:

这里解释一下上面提到的 单向 Transformer 。在 Transformer 的文章中,提到了 Encoder 与 Decoder 使用的 Transformer Block 是不同的。在 Decoder Block 中,使用了 Masked Self-Attention ,即句子中的每个词都只能对 包括自己在内的前面所有词进行 Attention ,这就是单向 Transformer。GPT 使用的 Transformer 结构就是将 Encoder 中的 Self-Attention 替换成了 Masked Self-Attention ,具体结构如下图所示

训练的过程也非常简单,就是将 n 个词的词嵌入 ( ) 加上位置嵌入 ( ),然后输入到 Transformer 中,n 个输出分别预测该位置的下一个词 这里的位置编码没有使用传统 Transformer 固定编码的方式,而是动态学习的

Pretraining 之后,我们还需要针对特定任务进行 Fine-Tuning。假设监督数据集合 的输入 是一个词序列 ,输出是一个分类的标签 ,比如情感分类任务

我们把 输入 Transformer 模型,得到最上层最后一个时刻的输出 ,将其通过我们新增的一个 Softmax 层(参数为 )进行分类,最后用 CrossEntropyLoss 计算损失,从而根据标准数据调整 Transformer 的参数以及 Softmax 的参数 。这等价于最大似然估计:

正常来说,我们应该调整参数使得 最大,但是 为了提高训练速度和模型的泛化能力 ,我们使用 Multi-Task Learning,同时让它最大似然 和

这里使用的 还是之前语言模型的损失(似然),但是使用的数据不是前面无监督的数据 ,而是使用当前任务的数据 ,而且只使用其中的 ,而不需要标签

针对不同任务,需要简单修改下输入数据的格式,例如对于相似度计算或问答,输入是两个序列,为了能够使用 GPT,我们需要一些特殊的技巧把两个输入序列变成一个输入序列

ELMo 和 GPT 最大的问题就是 传统的语言模型是单向的 —— 我们根据之前的历史来预测当前词。但是我们不能利用后面的信息。比如句子 The animal didn’t cross the street because it was too tired 。我们在编码 it 的语义的时候需要同时利用前后的信息,因为在这个句子中, it 可能指代 animal 也可能指代 street 。根据 tired ,我们推断它指代的是 animal 。但是如果把 tired 改成 wide ,那么 it 就是指代 street 了。传统的语言模型,都 只能利用单方向的信息 。比如前向的 RNN,在编码 it 的时候它看到了 animal 和 street ,但是它还没有看到 tired ,因此它不能确定 it 到底指代什么。如果是后向的 RNN,在编码的时候它看到了 tired ,但是它还根本没看到 animal ,因此它也不能知道指代的是 animal 。 Transformer 的 Self-Attention 理论上是可以同时关注到这两个词的,但是根据前面的介绍,为了使用 Transformer 学习语言模型,必须 用 Mask 来让它看不到未来的信息 ,所以它也不能解决这个问题的

根据上文内容预测下一个可能跟随的单词,就是常说的自左向右的语言模型任务,或者反过来也行,就是根据下文预测前面的单词,这种类型的LM被称为自回归语言模型。(GPT,ELMO)GPT 就是典型的自回归语言模型。ELMO尽管看上去利用了上文,也利用了下文,但是本质上仍然是自回归LM,这个跟模型具体怎么实现有关系。ELMO是做了两个方向(从左到右以及从右到左两个方向的语言模型),但是是分别有两个方向的自回归LM,然后把LSTM的两个方向的隐节点状态拼接到一起,来体现双向语言模型这个事情的。所以其实是两个自回归语言模型的拼接,本质上仍然是自回归语言模型。

自回归语言模型有优点有缺点,缺点是只能利用上文或者下文的信息,不能同时利用上文和下文的信息,当然,貌似ELMO这种双向都做,然后拼接看上去能够解决这个问题,因为融合模式过于简单,所以效果其实并不是太好。它的优点,其实跟下游NLP任务有关,比如生成类NLP任务,比如文本摘要,机器翻译等,在实际生成内容的时候,就是从左向右的, 自回归语言模型天然匹配这个过程 。而Bert这种DAE模式,在生成类NLP任务中,就面临训练过程和应用过程不一致的问题,导致 生成类的NLP任务到目前为止都做不太好 。

自回归语言模型只能根据上文预测下一个单词,或者反过来,只能根据下文预测前面一个单词。相比而言,Bert通过 在输入X中随机Mask掉一部分单词 ,然后预训练过程的主要任务之一是根据上下文单词来预测这些被Mask掉的单词,如果你对Denoising Autoencoder比较熟悉的话,会看出,这确实是典型的DAE的思路。那些被Mask掉的单词就是在输入侧加入的所谓噪音。类似Bert这种预训练模式,被称为DAE LM。

这种DAE LM的优缺点正好和自回归LM反过来,它能比较自然地融入双向语言模型,同时看到被预测单词的上文和下文,这是好处。缺点是啥呢? 主要在输入侧引入[Mask]标记,导致预训练阶段和Fine-tuning阶段不一致的问题 ,因为Fine-tuning阶段是看不到[Mask]标记的。DAE吗,就要引入噪音,[Mask] 标记就是引入噪音的手段,这个正常。

XLNet的出发点就是:能否 融合自回归LM和DAE LM两者的优点 。就是说如果站在自回归LM的角度,如何引入和双向语言模型等价的效果;如果站在DAE LM的角度看,它本身是融入双向语言模型的,如何抛掉表面的那个[Mask]标记,让预训练和Fine-tuning保持一致。当然,XLNet还讲到了一个Bert被Mask单词之间相互独立的问题。

论文标题:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding 论文链接: BERT(Bidirectional Encoder Representations from Transformers)通过预训练来学习无标注数据中的深度双向表示,预训练结束后通过添加一个额外的输出层进行微调,最终在多个NLP任务上实现了SOTA。 预训练语言模型在实践中证明对提高很多自然语言处理任务有效,其中包括句子层级的任务,比如自然语言推断(natural language inference)和复述(paraphrasing),还有token层级的任务,比如命名实体识别(named entity recognition)和问答(question answering)。 在下游任务中应用预训练语言模型表示的方法有两种:feature-based的方法和fine-tuning的方法。举例来说,ELMo这种预训练语言模型使用feature-based的方法,通过将ELMo的预训练的表示作为额外的特征输入到特定于任务的模型中去;GPT使用fine-tuning的方法,通过引入少量的特定于任务的参数,在下游任务中训练时所有的预训练参数。 截止BERT之前的预训练语言模型都是单向的(unidirectional),包括GPT和ELMo,这样的方法对句子层级的任务不是最优的,而且对于token层级的任务比如问答非常有害。BERT使用masked language model(MLM)的方法来预训练,这种方法能够训练一个双向的(directional)语言模型。除了masked language model的预训练的方法,BERT还使用了next sentence prediction的预训练方法。 BERT的使用分为两个阶段:预训练(pre-training)和微调(fine-tuning)。预训练阶段模型通过两种不同的预训练任务来训练无标注数据。微调阶段模型使用预训练参数初始化,然后使用下游任务(downstream task)的标注数据来微调参数。 BERT的一个显著特点是它在不同的任务上有统一的架构,使用时只需要在BERT后面接上下游任务的结构即可使用。 BERT的模型架构是一个多层双向的Transformer的encoder。我们标记模型的层数(每一层是一个Tranformer的block)为 ,模型的hidden size为 ,self-attention head的数量为 。两个比较通用的BERT架构为 和 。 对比GPT,BERT使用了双向self-attention架构,而GPT使用的是受限的self-attention, 即限制每个token只能attend到其左边的token。 BERT的输入表示能够是一个句子或者是一个句子对,这是为了让BERT能够应对各种不同的下游任务。BERT的输入是一个序列,该序列包含一个句子的token或者两个句子结合在一起的token。 具体地,我们会将输入的自然语言句子通过 WordPiece embeddings 来转化为token序列。这个token序列的开头要加上 [CLS] 这个特殊的token,最终输出的 [CLS] 这个token的embedding可以看做句子的embedding,可以使用这个embedding来做分类任务。 由于句子对被pack到了一起,因此我们需要在token序列中区分它们,具体需要两种方式: ①在token序列中两个句子的token之间添加 [SEP] 这样一个特殊的token; ②我们为每个token添加一个用来学习的embedding来区分token属于句子A还是句子B,这个embedding叫做segment embedding。 具体地,BERT的输入由三部分相加组成:token embeddings、segment embeddings和position embeddings。如下图所示: BERT使用两个无监督的任务进行预训练,分别是Masked LM和Next Sentence Prediction(NSP)。如下图所示,我们定义输入的embedding为 ,BERT最终输出的 [CLS] 的embedding为 ,最终输出的第 个token的embedding为 。 我们有理由相信一个深度双向模型比left-to-right模型和left-to-right和right-to-left简单连接的模型的效果更加强大。不幸的是,标准的条件语言模型只能够够left-to-right或者right-to-left地训练,这是因为双向条件会使每个token能够间接地“看到自己”,并且模型能够在多层上下文中简单地预测目标词。 为了能够双向地训练语言模型,BERT的做法是简单地随机mask掉一定比例的输入token(这些token被替换成 [MASK] 这个特殊token),然后预测这些被遮盖掉的token,这种方法就是Masked LM(MLM),相当于完形填空任务(cloze task)。被mask掉的词将会被输入到一个softmax分类器中,分类器输出的维度对应词典的大小。在预训练时通常为每个序列mask掉15%的token。与降噪自编码器(denoising auto-encoders)相比,我们只预测被mask掉的token,并不重建整个输入。 这种方法允许我们预训练一个双向的语言模型,但是有一个缺点就是造成了预训练和微调之间的mismatch,这是因为 [MASK] 这个token不会在微调时出现。为了缓解这一点,我们采取以下做法:在生成训练数据时我们随机选择15%的token进行替换,被选中的token有80%的几率被替换成 [MASK] ,10%的几率被替换成另一个随机的token,10%的几率该token不被改变。然后 将使用交叉熵损失来预测原来的token。 一些重要的NLP任务如Question Answering (QA)或者Natural Language Inference (NLI)需要理解句子之间的关系,而这种关系通常不会被语言模型直接捕捉到。为了使得模型能够理解句子之间的关系,我们训练了一个二值的Next Sentence Prediction任务,其训练数据可以从任何单语语料库中生成。具体的做法是:当选择句子A和句子B作为训练数据时,句子B有50%的几率的确是句子A的下一句(标签是 IsNext ),50%的几率是从语料库中随机选择的句子(标签是 NotNext )。 [CLS] 对应的最后一个隐层输出向量被用来训练NSP任务,这个embedding就相当于sentence embedding。虽然这个预训练任务很简单,但是事实上在微调时其在QA和NLI任务上表现出了很好的效果。在前人的工作中,只有sentence embedding被迁移到下游任务中,而BERT会迁移所有的参数来初始化下游任务模型。 Transformer的self-attention机制允许BERT建模多种下游任务。对于包含句子对的任务,通常的做法是先独立地对句子对中的句子进行编码,然后再应用双向交叉注意(bidirectional cross attention)。而BERT使用self-attention机制统一了这两个过程,这是因为对拼接起来的句子对进行self-attention有效地包含了两个句子之间的双向交叉注意(bidirectional cross attention)。 对于每个任务来说,我们只需要将任务特定的输入输出插入到BERT中然后端到端地微调即可。举例子来说,BERT的预训练输入句子A和句子B在微调时可以类比为: ①paraphrasing任务中的句子对; ②entailment任务中的hypothesis-premise对; ③question answering任务中的question-passage对; ④text classification或者sequence tagging任务中的text-∅对(也就是只输入一个text,不必一定需要两个句子)。 对于BERT的输出,对于一些token-level的任务,BERT的token表示将被输入到一个输出层,比如sequence tagging或者question answering任务;对于entailment或者sentiment analysis这样的任务,可以将 [CLS] 对应的表示输入到一个输出层。 我们使用 [CLS] 这个token的最后一层的隐层向量 作为聚合的表示,可以认为是sentence embedding。在微调时只引入一个新的权重 ,这里的 代表标签的数量,然后计算标准分类损失 。下图展示了BERT在GLUE上的效果: 在这个数据集上,我们将question和passage拼接起来作为一个输入序列(中间是 [SEP] )。在微调时引入一个start向量 和一个end向量 ,计算 和 的点积然后通过 函数作为word 是答案的span起始位置的概率: 。答案的终止位置也做上述类似处理。从 到 的候选区间的得分记作 ,我们挑选 的最大得分区间作为预测的结果。下图展示了BERT在SQuAD v1.1上的效果: SQuAD v2.0有的question在提供的passage中没有答案存在。在微调时我们设置没有答案的问题的span的起始和结束位置都是 [CLS] 这个token,也就是start和end的可能性空间包含进了 [CLS] 的位置。在预测时,我们比较没有答案的span得分 和最优的有答案得分 。当 时,我们预测这是一个有答案的问题,这里的 用来在dev set上选择最优的 。下图展示了BERT在SQuAD v2.0上的效果: 微调时我们为BERT构建4个输入序列,每一个是所给的句子(句子A)和一个可能的延续(句子B)。然后引入一个向量,该向量和每一个输入对应的 [CLS] 的embedding的点积再通过一个 层来得到每个选择的得分。下图展示了BERT在SWAG上的效果:

相关百科

热门百科

首页
发表服务