
- 积分
- 278
- 金豆
- 粒
- 魅力
- 点
- 威望
- 点
- 大洋
- 枚
该用户从未签到
升级
  44.5%
 送鲜花( 0)  砸鸡蛋( 0)
|
提示您:未得到智伍应用正式版的授权,部门功能受到影响!
尊重的用户,您好!!
非常感谢您能安装智伍应用旗下的产物,为了产物的可连续发展和升级,云收罗已经开始按天收费,发起购买200天,免费赠予400天,一共600天,均匀天天仅需1.67元。
向用户收费是为了给用户更可靠的保障和服务,所收取的费用重要用于产物的正常运作、不停研发和改进,盼望各位用户可以或许明白和支持。
购买正式版授权请打开下面的网址自助购买:
www.zhiwu55.com/authorization/buy_end_time.php?hzw_appid=B4592D53D254F99549C9FBF696104B22
购买之后,主动开通正式版授权,新收罗的内容不会再出现未购买授权的提示信息,同时智伍应用旗下全部含云收罗功能的产物,都无需再次购买云收罗的正式版授权,即云收罗的授权可以在智伍应用的各个产物那边通用!
假如您已经购买了正式版,照旧会出现未购买授权的提示,大概有别的题目,请接洽智伍应用官方在线客服QQ/微信:2085244671
作者 Jay Alammar
伊瓢 编译
量子位 出品 | 公众号 QbitAI
BERT,作为天然语言处置惩罚范畴的C位选手,总是NLPer们逃不外的一环。
但是,假如是履历匮乏、底子单薄的选手,想玩转BERT照旧有点难的。
如今,科技博主Jay Alammar创作了一篇《第一次利用BERT的图形化指南》,用非常简朴清楚的方式先容了怎样上手BERT,从BERT的原理到现实操纵的过程都有图示,乃至图比代码都多。量子位为各人编译搬运如下~
这篇文章重要以用BERT的变体对句子举行分类为例,先容了BERT的利用方式。
末了的传送门处另有Colab的地点。
数据集:SST2
起首,我们必要用到SST2数据集,内里的句子来自于一些影戏批评。
假如批评者对影戏表现肯定赞赏,就会有“1”的标签;
假如批评者不喜好这个影戏,发表了负面批评,就会有“0”的标签。
数据集里的影戏批评是用英文写的,大概长如许:
句子情绪分类模子
如今,借助SST2影评数据集,我们必要创建一个主动对英文句子举行分类的模子。
假如判定是肯定的、正面的,就标注1;假如判定是否定的、负面的,就标注0。
大抵的逻辑是如许的:
输入一句话,颠末影戏批评句子分类器,输出积极或悲观的效果。
这个模子现实上是两个模子构成的。
DistilBERT负责处置惩罚句子,提取信息,然后通报给下一个模子,这是“抱抱脸公司”(HuggingFace)做的一个开源BERT版本,比力轻量级而且运行快,性能和原版差不多。
下一个模子就是一个根本的逻辑回归模子,它的输入是DistilBERT的处置惩罚效果,输出积极或悲观的效果。
我们在两个模子之间通报的数据是巨细为768的向量,可以把这个向量当成可以用来分类的句子嵌入。
模子的练习过程
固然我们会用到两个模子,但是我们只必要练习逻辑回归模子就行了,DistilBERT可以直接用预练习好的版本。
不外,这个模子从来都没有针对句子分类使命被练习或微调过,我们从通用目的BERT获取一些句子分类本领,尤其是对于第一个位置的BERT输出而言(与[CLS]token相干),这是BERT的第二个练习目的,接下来就是句子分类了,这个目的好像是练习模子将全句意义封装到第一位置的输出位置。
这个Transformer库为我们提供了DistilBERT的实行和模子的预练习版本。
教程概述
这是本篇教程的整个筹划,我们先用练习过的DistilBERT来天生2000个句子的句子嵌入。
之后就不消再碰DistilBERT了,这里都是Scikit Learn,我们在这个数据集上做通例的练习和测试:
针对第一个模子也就是DistilBERT举行练习测试,创建我们练习用的数据集并评估第二个模子也就是逻辑回归模子。
然后在练习集上练习逻辑回归模子:
单个猜测是怎样举行的
在研究代码表明怎样练习模子之前,我们先看看一个练习后的模子怎样举行猜测。
我们试着给这句话举行分类猜测:
a visually stunning rumination on love
关于爱情的视觉上令人赞叹的反省
第一步,用BERT tokenizer把句子分为两个token;
第二步,我们参加句子分类用的特别token(第一个位置的是[CLS],句子竣事的位置是[SEP])。
第三步,tokenizer用嵌入表中的ID取代每个token,成为练习模子的组件。
留意,tokenizer是在这一行代码里完成全部步调的:
1tokenizer.encode("a visually stunning rumination on love", add_special_tokens=True)如今我们的输入句子是可以通报给DistilBERT的得当状态了。
这个步调可视化起来长如许:
从DistilBERT颠末
输入向量从DistilBERT颠末,输出每个输入token的向量,每个向量有768个数字构成。
由于这是个句子分类的使命,以是我们忽视掉除第一个向量之外的其他内容(第一个向量和[CLS]token相干),然后把第一个向量作为逻辑回归模子的输入。
从这里开始,逻辑回归模【*****智伍应用提示您:未购买正式版授权,功能受到影响!!请根据最上面的引导提示,自助购买正式版授权,主动开通!!在线客服微信:ccccyyyy4444,官方网站:zhiwu55.com*****】,把这个向量举行分类。
这个猜测盘算的过程是如许的:
代码
如今,开始看这整个过程的代码,背面你也可以在传送门里看到GitHub代码和Colab上的可运行版本。
起首,导入trade工具。
1import numpy as np
2import pandas as pd
3import torch
4import transformers as ppb # pytorch transformers
5from sklearn.linear_model import LogisticRegression
6from sklearn.model_selection import cross_val_score
7from sklearn.model_selection import train_test_split你可以在GitHub里找到这个数据集,以是我们可以直接把它导入到pandas dataframe里。
1df = pd.read_csv('https://github.com/clairett/pytorch-sentiment-classification/raw/master/data/SST2/train.tsv', delimiter='\t', header=None)可以直接用df.head() 检察dataframe的前五行,看看数据集长啥样。
1df.head()然后就输出:
导入预练习DistilBERT模子和tokenizer
1model_class, tokenizer_class, pretrained_weights = (ppb.DistilBertModel, ppb.DistilBertTokenizer, 'distilbert-base-uncased')
2
3## Want BERT instead of distilBERT? Uncomment the following line:
4#model_class, tokenizer_class, pretrained_weights = (ppb.BertModel, ppb.BertTokenizer, 'bert-base-uncased')
5
6# Load pretrained model/tokenizer
7tokenizer = tokenizer_class.from_pretrained(pretrained_weights)
8model = model_class.from_pretrained(pretrained_weights)如今可以对这个数据集tokenize了。
留意,这一步和上面的例子差别,例子只处置惩罚了一个句子,但是我们要批处置惩罚全部的句子。
Tokenization
1tokenized = df[0].apply((lambda x: tokenizer.encode(x, add_special_tokens=True)))这一步让每个句子都酿成ID列表。
数据集是当前的列表(大概pandas Series/DataFrame),在DistilBERT处置惩罚它之前,我们必要给全部向量同一规格,给短句子加上token 0。
填上0之后,如今就有了一个成形的矩阵/张量可以投喂给BERT了:
用DistilBERT处置惩罚
如今,为添补的token矩阵创造一个输入张量,发送给DistilBERT。
1input_ids = torch.tensor(np.array(padded))
2
3with torch.no_grad():
4 last_hidden_states = model(input_ids)运行这一步之后,last_hidden_states保存DistilBERT的输出。
打开BERT的输出张量
解压缩这个3-d输出张量,先查抄它的尺寸:
回首处置惩罚句子的过程
每行都和我们数据集里的一个句子关联,回首一下,整个处置惩罚过程是如许的:
挑出紧张部门
关于句子分类,我们只对BERT的[CLS] token输出感爱好,以是我们只挑出紧张部门就行了。
下面是从3D张量里挑出我们必要的2D张量的办法:
1# Slice the output for the first position for all the sequences, take all hidden unit outputs
2features = last_hidden_states[0][:,0,:].numpy()如今的特性是个2D numpy数组,内里有我们数据集里全部句子的句子嵌入。
逻辑回归数据集
如今我们有BERT的输出了,前面逻辑回归模子已经已经练习好了。下图的798列是特性,标签是初始数据集内里的。
在完成传统的呆板学习练习测试后,我们可以拿逻辑回归模子再举行练习。
1labels = df[1]
2train_features, test_features, train_labels, test_labels = train_test_split(features, labels)将数据分为练习集/测试集:
接下来,在练习集上练习逻辑回归模子:
1lr_clf = LogisticRegression()
2lr_clf.fit(train_features, train_labels)如今模子练习完了,用测试集给它打分:
1lr_clf.score(test_features, test_labels)得出的模子正确度为81%。
Score Benchmarks
作为参考,这个数据集现在的最高正确率得分为96.8.
在这个使命里,DistilBERT可以练习来提拔分数,这个过程叫做微调(fine-tuning),可以更新BERT的权重,来实现更好的分类句子。
微调后的DistilBERT可以实现90.7的正确率,完备的BERT模子能到达94.9的正确率。
传送门
A Visual Guide to Using BERT for the First Time
https://jalammar.github.io/a-visual-guide-to-using-bert-for-the-first-time/
代码
https://github.com/jalammar/jalammar.github.io/blob/master/notebooks/bert/A_Visual_Notebook_to_Using_BERT_for_the_First_Time.ipynb
Colab
https://colab.research.google.com/github/jalammar/jalammar.github.io/blob/master/notebooks/bert/A_Visual_Notebook_to_Using_BERT_for_the_First_Time.ipynb
DistilBERT
https://medium.com/huggingface/distilbert-8cf3380435b5
— 完 —
量子位 QbitAI · 头条号签约
关注我们,第一时间获知前沿科技动态 |
|