×

PyTorch教程16.6之针对序列级和令牌级应用程序微调BERT

消耗积分:0 | 格式:pdf | 大小:0.36 MB | 2023-06-05

分享资料个

在本章前面的章节中,我们为自然语言处理应用设计了不同的模型,例如基于 RNNs、CNNs、attention 和 MLPs。当存在空间或时间限制时,这些模型很有用,但是,为每个自然语言处理任务制作一个特定模型实际上是不可行的。15.8 节中,我们介绍了一种预训练模型 BERT,它需要对各种自然语言处理任务进行最少的架构更改。一方面,在提出建议时,BERT 改进了各种自然语言处理任务的最新技术水平。另一方面,如 第 15.10 节所述,原始 BERT 模型的两个版本带有 1.1 亿和 3.4 亿个参数。因此,当有足够的计算资源时,我们可以考虑为下游自然语言处理应用程序微调 BERT。

在下文中,我们将自然语言处理应用程序的一个子集概括为序列级和标记级。在序列层面,我们介绍了如何在单个文本分类和文本对分类或回归中将文本输入的 BERT 表示转换为输出标签。在令牌级别,我们将简要介绍文本标记和问答等新应用,并阐明 BERT 如何表示其输入并转换为输出标签。在微调期间,BERT 在不同应用程序中所需的“最小架构更改”是额外的全连接层。在下游应用程序的监督学习期间,额外层的参数是从头开始学习的,而预训练 BERT 模型中的所有参数都经过微调。

16.6.1。单一文本分类

单文本分类以单个文本序列作为输入并输出其分类结果。除了我们在本章中学习的情感分析之外,语言可接受性语料库(CoLA)也是一个用于单一文本分类的数据集,判断给定的句子是否在语法上可以接受(Warstadt et al . , 2019例如,“我应该学习。” 是可以接受的,但“我应该学习”。不是。

https://file.elecfans.com/web2/M00/AA/48/pYYBAGR9PNKAOMgOAAIY3BeUoOE245.svg

图 16.6.1针对单一文本分类应用微调 BERT,例如情感分析和测试语言可接受性。假设输入的单个文本有六个标记。

15.8 节描述了 BERT 的输入表示。BERT 输入序列明确表示单个文本和文本对,其中特殊分类标记“”用于序列分类,特殊分类标记“”标记单个文本的结尾或分隔一对文本. 如图 16.6.1所示 ,在单文本分类应用中,特殊分类标记“”的 BERT 表示对整个输入文本序列的信息进行编码。作为输入单个文本的表示,它将被送入一个由全连接(密集)层组成的小型 MLP,以输出所有离散标签值的分布。

16.6.2。文本对分类或回归

我们还在本章中研究了自然语言推理。属于文本对分类,对一对文本进行分类的一类应用。

以一对文本作为输入但输出连续值, 语义文本相似度是一种流行的文本对回归任务。该任务测量句子的语义相似性。例如,在语义文本相似性基准数据集中,一对句子的相似性得分是从 0(无意义重叠)到 5(意义等同)的有序尺度Cer等人,2017 年目标是预测这些分数。来自语义文本相似性基准数据集的示例包括(句子 1、句子 2、相似性分数):

  • “一架飞机正在起飞。”,“一架飞机正在起飞。”,5.000;

  • “一个女人在吃东西。”,“一个女人在吃肉。”,3.000;

  • “一个女人在跳舞。”,“一个男人在说话。”,0.000。

https://file.elecfans.com/web2/M00/AA/48/pYYBAGR9PNWACEqbAAJBAxhpDWo066.svg

图 16.6.2为文本对分类或回归应用微调 BERT,例如自然语言推理和语义文本相似性。假设输入文本对有两个和三个标记。

图16.6.1中的单一文本分类相比,图16.6.2中用于文本对分类的微调BERT在输入表示上有所不同。对于语义文本相似性等文本对回归任务,可以应用微不足道的更改,例如输出连续的标签值并使用均方损失:它们在回归中很常见。

16.6.3。文本标记

现在让我们考虑标记级任务,例如文本标记,其中为每个标记分配一个标签。在文本标注任务中,词性标注根据词在句子中的作用为每个词分配一个词性标签(例如,形容词和限定词)。例如,根据 Penn Treebank II 标签集,句子“John Smith's car is new”应该被标记为“NNP(名词,专有单数)NNP POS(所有格结尾)NN(名词,单数或质量)VB (动词,基本形式)JJ(形容词)”。

https://file.elecfans.com/web2/M00/AA/48/pYYBAGR9PNmAPTV9AAOwL_0zfyY715.svg

图 16.6.3为文本标记应用微调 BERT,例如词性标记。假设输入的单个文本有六个标记。

文本标记应用程序的微调 BERT 如图 16.6.3所示。图 16.6.1相比,唯一的区别在于在文本标记中,输入文本的每个标记的 BERT 表示被馈送到相同的额外全连接层以输出标记的标签,例如部分 -词性标签。

16.6.4。问答

问答作为另一个token级的应用,体现了阅读理解能力。例如,斯坦福问答数据集 (SQuAD v1.1) 由阅读文章和问题组成,其中每个问题的答案只是与问题相关的文章中的一段文本(文本跨度)(Rajpurkar 等人,2008 , 2016 年). 为了解释,请考虑一段话“一些专家报告说口罩的功效尚无定论。然而,口罩制造商坚称,他们的产品,如 N95 口罩,可以抵御病毒。” 以及“谁说N95口罩可以防病毒?”的问题。答案应该是段落中的文本跨度“面具制造商”。因此,SQuAD v1.1 的目标是在给定一对问题和段落的情况下预测段落中文本跨度的开始和结束。

https://file.elecfans.com/web2/M00/A9/CD/poYBAGR9PNyAASIyAANglldmxo0985.svg

图 16.6.4为问答微调 BERT。假设输入文本对有两个和三个标记。

为了微调 BERT 以进行问答,问题和段落分别打包为 BERT 输入中的第一和第二文本序列。为了预测文本跨度的开始位置,相同的附加全连接层将从位置通道转换任何标记的 BERT 表示i进入标量分数 si. 这样所有passage token的得分通过softmax操作进一步转化为概率分布,使得每个token位置i在段落中分配了一个概率pi作为文本跨度的开始。预测文本跨度的结束与上述相同,只是其附加的全连接层中的参数独立于预测开始的参数。预测结束时,位置的任何通道令牌i由相同的全连接层转换为标量分数ei. 图 16.6.4描述了用于问答的微调 BERT。

对于问答,监督学习的训练目标与最大化地面实况开始和结束位置的对数似然一样简单。在预测跨度时,我们可以计算分数si+ej对于位置的有效跨度i定位j(i≤j), 并输出得分最高的跨度。

16.6.5。概括

  • BERT 需要对序列级和令牌级自然语言处理应用进行最小的架构更改(额外的全连接层),例如单个文本分类(例如,情感分析和测试语言可接受性)、文本对分类或回归(例如,自然语言推理和语义文本相似性)、文本标记(例如,词性标记)和问题回答。

  • 在下游应用程序的监督学习期间,额外层的参数是从头开始学习的,而预训练 BERT 模型中的所有参数都经过微调。

16.6.6。练习

  1. 让我们为新闻文章设计一个搜索引擎算法。当系统收到查询(例如,“冠状病毒爆发期间的石油工业”)时,它应该返回与查询最相关的新闻文章的排名列表。假设我们有大量新闻文章和大量查询。为了简化问题,假设已为每个查询标记了最相关的文章。我们如何 在算法设计中应用负采样(参见第 15.2.1 节)和 BERT?

  2. 我们如何利用 BERT 训练语言模型?

  3. 我们可以在机器翻译中利用 BERT 吗?

Discussions


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.lene-v.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'PyTorch教程16.6之针对序列级和令牌级应用程序微调BERT',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.lene-v.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);