tensorflow所有机器学习工具(为JaxPyTorch)
tensorflow所有机器学习工具(为JaxPyTorch)BERT 是一种以自我监督的方式在大量英语数据语料库上进行预训练的变形金刚模型。这意味着它仅在原始文本上进行了预训练,没有人以任何方式标记它们(这就是它可以使用大量公开可用数据的原因),并通过自动过程从这些文本生成输入和标签。更准确地说,它经过预训练有两个目标:型号说明Transformers 提供 API 以快速下载并在给定文本上使用这些预训练模型,在您自己的数据集上对其进行微调,然后在我们的模型中心与社区共享它们。同时,定义架构的每个 python 模块都是完全独立的,可以进行修改以实现快速研究实验。Transformers 由三个最流行的深度学习库(Jax、PyTorch和TensorFlow)提供支持,它们之间实现了无缝集成。在加载模型以与另一个进行推理之前,先用其中一个训练您的模型很简单。使用掩码语言建模 (MLM) 目标的英语语言预训练模型。
《开源精选》是我们分享Github、Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的一个支持最热门的深度学习库Jax、PyTorch和TensorFlow的预训练模型。
Transformers 提供了数千个预训练模型来执行不同形式的任务,例如文本、视觉和音频。
这些模型可应用于:
- 文本,用于文本分类、信息提取、问答、摘要、翻译、文本生成等任务,支持 100 多种语言。
- 图像,用于图像分类、对象检测和分割等任务。
- 音频,用于语音识别和音频分类等任务。
Transformer 模型还可以结合多种模式执行任务,例如表格问答、光学字符识别、从扫描文档中提取信息、视频分类和视觉问答。
Transformers 提供 API 以快速下载并在给定文本上使用这些预训练模型,在您自己的数据集上对其进行微调,然后在我们的模型中心与社区共享它们。同时,定义架构的每个 python 模块都是完全独立的,可以进行修改以实现快速研究实验。
Transformers 由三个最流行的深度学习库(Jax、PyTorch和TensorFlow)提供支持,它们之间实现了无缝集成。在加载模型以与另一个进行推理之前,先用其中一个训练您的模型很简单。
使用示例- 使用 BERT 进行掩码单词补全
使用掩码语言建模 (MLM) 目标的英语语言预训练模型。
型号说明
BERT 是一种以自我监督的方式在大量英语数据语料库上进行预训练的变形金刚模型。这意味着它仅在原始文本上进行了预训练,没有人以任何方式标记它们(这就是它可以使用大量公开可用数据的原因),并通过自动过程从这些文本生成输入和标签。更准确地说,它经过预训练有两个目标:
- 掩蔽语言建模(MLM):取一个句子,模型随机掩蔽输入中 15% 的单词,然后通过模型运行整个被掩蔽的句子,并且必须预测被掩蔽的单词。这不同于通常一个接一个地看到单词的传统循环神经网络 (RNN),也不同于像 GPT 这样在内部掩盖未来标记的自回归模型。它允许模型学习句子的双向表示。
- 下一句预测 (NSP):模型在预训练期间将两个蒙面句子作为输入连接起来。有时它们对应于原文中相邻的句子,有时则不是。然后,该模型必须预测这两个句子是否相互跟随。
通过这种方式,模型学习了英语的内部表示,然后可以用于提取对下游任务有用的特征:例如,如果你有一个标记句子的数据集,你可以使用 BERT 产生的特征来训练一个标准分类器模型作为输入。
预期用途和限制
您可以将原始模型用于掩码语言建模或下一句预测,但它主要用于在下游任务上进行微调。查看模型中心以查找您感兴趣的任务的微调版本。
请注意,此模型主要针对使用整个句子(可能被屏蔽)做出决策的任务进行微调,例如序列分类、标记分类或问答。对于诸如文本生成之类的任务,您应该查看 GPT2 之类的模型。
如何使用
您可以将此模型直接用于掩码语言建模的管道:
from transformers import pipeline
unmasker = pipeline('fill-mask' model='bert-base-uncased')
unmasker("Hello I'm a [MASK] model.")
[{'sequence': "[CLS] hello i'm a fashion model. [SEP]"
'score': 0.1073106899857521
'token': 4827
'token_str': 'fashion'}
{'sequence': "[CLS] hello i'm a role model. [SEP]"
'score': 0.08774490654468536
'token': 2535
'token_str': 'role'}
{'sequence': "[CLS] hello i'm a new model. [SEP]"
'score': 0.05338378623127937
'token': 2047
'token_str': 'new'}
{'sequence': "[CLS] hello i'm a super model. [SEP]"
'score': 0.04667217284440994
'token': 3565
'token_str': 'super'}
{'sequence': "[CLS] hello i'm a fine model. [SEP]"
'score': 0.027095865458250046
'token': 2986
'token_str': 'fine'}]
以下是如何使用此模型在 PyTorch 中获取给定文本的特征:
from transformers import BertTokenizer BertModel
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained("bert-base-uncased")
text = "Replace me by any text you'd like."
encoded_input = tokenizer(text return_tensors='pt')
output = model(**encoded_input)
在 TensorFlow 中:
from transformers import BertTokenizer TFBertModel
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = TFBertModel.from_pretrained("bert-base-uncased")
text = "Replace me by any text you'd like."
encoded_input = tokenizer(text return_tensors='tf')
output = model(encoded_input)
限制和误差
即使用于该模型的训练数据可以被描述为相当中性,该模型也可能有偏差的预测:
>>> from transformers import pipeline
>>> unmasker = pipeline('fill-mask' model='bert-base-uncased')
>>> unmasker("The man worked as a [MASK].")
[{'sequence': '[CLS] the man worked as a carpenter. [SEP]'
'score': 0.09747550636529922
'token': 10533
'token_str': 'carpenter'}
{'sequence': '[CLS] the man worked as a waiter. [SEP]'
'score': 0.0523831807076931
'token': 15610
'token_str': 'waiter'}
{'sequence': '[CLS] the man worked as a barber. [SEP]'
'score': 0.04962705448269844
'token': 13362
'token_str': 'barber'}
{'sequence': '[CLS] the man worked as a mechanic. [SEP]'
'score': 0.03788609802722931
'token': 15893
'token_str': 'mechanic'}
{'sequence': '[CLS] the man worked as a salesman. [SEP]'
'score': 0.037680890411138535
'token': 18968
'token_str': 'salesman'}]
>>> unmasker("The woman worked as a [MASK].")
[{'sequence': '[CLS] the woman worked as a nurse. [SEP]'
'score': 0.21981462836265564
'token': 6821
'token_str': 'nurse'}
{'sequence': '[CLS] the woman worked as a waitress. [SEP]'
'score': 0.1597415804862976
'token': 13877
'token_str': 'waitress'}
{'sequence': '[CLS] the woman worked as a maid. [SEP]'
'score': 0.1154729500412941
'token': 10850
'token_str': 'maid'}
{'sequence': '[CLS] the woman worked as a prostitute. [SEP]'
'score': 0.037968918681144714
'token': 19215
'token_str': 'prostitute'}
{'sequence': '[CLS] the woman worked as a cook. [SEP]'
'score': 0.03042375110089779
'token': 5660
'token_str': 'cook'}]
这种偏差也会影响该模型的所有微调版本。
训练数据
BERT 模型在 BookCorpus 上进行了预训练, BookCorpus是一个由 11 038 本书和英文维基百科(不包括列表、表格和标题)组成的数据集。
预处理
使用 WordPiece 和 30 000 的词汇量对文本进行小写和标记化。模型的输入则为:
[CLS] Sentence A [SEP] Sentence B [SEP]
以 0.5 的概率,句子 A 和句子 B 对应于原始语料库中的两个连续句子,而在其他情况下,它是语料库中的另一个随机句子。请注意,这里认为的句子是连续的文本跨度,通常比单个句子长。唯一的限制是包含两个“句子”的结果的总长度小于 512 个标记。
每个句子的掩蔽过程的详细信息如下:
- 15% 的令牌被屏蔽。
- 在 80% 的情况下,被屏蔽的标记被替换为[MASK].
- 在 10% 的情况下,被掩码的标记被替换为随机标记(不同),与它们替换的标记不同。
- 在剩下的 10% 的情况下,被屏蔽的令牌保持原样。
预训练
该模型在 Pod 配置中的 4 个云 TPU(总共 16 个 TPU 芯片)上进行了 100 万步的训练,批量大小为 256。序列长度限制为 90% 的步长为 128 个令牌,其余 10% 的步长为 512 个。使用的优化器是 Adam,学习率为 1e-4,β1=0.9\beta_{1} = 0.9β1=0 . 9和β2=0.999\beta_{2} = 0.999β2=0 . 9 9 9,权重衰减为 0.01,学习率预热 10 000 步,之后学习率线性衰减。
安装此存储库在 Python 3.6 、Flax 0.3.2 、PyTorch 1.3.1 和 TensorFlow 2.3 上进行了测试。
首先,使用您要使用的 Python 版本创建一个虚拟环境并激活它。
然后,您将需要至少安装 Flax、PyTorch 或 TensorFlow 之一。请参阅TensorFlow 安装页面、PyTorch 安装页面和/或Flax和Jax安装页面,了解您平台的特定安装命令。
当安装了这些后端之一时,可以使用 pip 安装变压器,如下所示:
pip install transformers
如果您想使用示例或需要代码的前沿并且不能等待新版本,则必须从 source 安装库。
—END—
开源协议:Apache-2.0
开源地址:https://github.com/huggingface/transformers