模型:
bert-base-multilingual-uncased
预训练模型,使用掩码语言建模(MLM)目标,在覆盖最大维基百科的102种语言上进行训练。它于 this paper 年提出,并于 this repository 年首次发布。该模型不区分英文大小写。
免责声明:发布BERT的团队没有为该模型编写模型卡片,因此这个模型卡片是由Hugging Face团队编写的。
BERT是一个使用自监督方式在大规模多语言数据上预训练的transformers模型。这意味着它仅在原始文本上进行了预训练,没有以任何方式通过人工标记它们(这就是为什么它可以使用大量公开可用的数据),使用自动化过程从这些文本中生成输入和标签。更准确地说,它通过两个目标进行了预训练:
这种方式使得模型可以学习训练集中语言的内部表示,并且可以用于提取对下游任务有用的特征:例如,如果您有一个带有标记句子的数据集,您可以使用BERT模型生成的特征作为输入来训练标准分类器。
您可以直接使用原始模型进行掩码语言建模或下一句预测,但它主要用于在下游任务中进行微调。查看 model hub 以寻找您感兴趣的任务的微调版本。
请注意,此模型主要用于基于整个(可能屏蔽)句子进行决策的任务,例如序列分类,标记分类或问题回答。对于文本生成等任务,您应该查看像GPT2这样的模型。
您可以使用此模型直接进行掩码语言建模的管道:
>>> from transformers import pipeline >>> unmasker = pipeline('fill-mask', model='bert-base-multilingual-uncased') >>> unmasker("Hello I'm a [MASK] model.") [{'sequence': "[CLS] hello i'm a top model. [SEP]", 'score': 0.1507750153541565, 'token': 11397, 'token_str': 'top'}, {'sequence': "[CLS] hello i'm a fashion model. [SEP]", 'score': 0.13075384497642517, 'token': 23589, 'token_str': 'fashion'}, {'sequence': "[CLS] hello i'm a good model. [SEP]", 'score': 0.036272723227739334, 'token': 12050, 'token_str': 'good'}, {'sequence': "[CLS] hello i'm a new model. [SEP]", 'score': 0.035954564809799194, 'token': 10246, 'token_str': 'new'}, {'sequence': "[CLS] hello i'm a great model. [SEP]", 'score': 0.028643041849136353, 'token': 11838, 'token_str': 'great'}]
以下是如何在PyTorch中使用此模型获取给定文本特征的方法:
from transformers import BertTokenizer, BertModel tokenizer = BertTokenizer.from_pretrained('bert-base-multilingual-uncased') model = BertModel.from_pretrained("bert-base-multilingual-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-multilingual-uncased') model = TFBertModel.from_pretrained("bert-base-multilingual-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-multilingual-uncased') >>> unmasker("The man worked as a [MASK].") [{'sequence': '[CLS] the man worked as a teacher. [SEP]', 'score': 0.07943806052207947, 'token': 21733, 'token_str': 'teacher'}, {'sequence': '[CLS] the man worked as a lawyer. [SEP]', 'score': 0.0629938617348671, 'token': 34249, 'token_str': 'lawyer'}, {'sequence': '[CLS] the man worked as a farmer. [SEP]', 'score': 0.03367974981665611, 'token': 36799, 'token_str': 'farmer'}, {'sequence': '[CLS] the man worked as a journalist. [SEP]', 'score': 0.03172805905342102, 'token': 19477, 'token_str': 'journalist'}, {'sequence': '[CLS] the man worked as a carpenter. [SEP]', 'score': 0.031021825969219208, 'token': 33241, 'token_str': 'carpenter'}] >>> unmasker("The Black woman worked as a [MASK].") [{'sequence': '[CLS] the black woman worked as a nurse. [SEP]', 'score': 0.07045423984527588, 'token': 52428, 'token_str': 'nurse'}, {'sequence': '[CLS] the black woman worked as a teacher. [SEP]', 'score': 0.05178029090166092, 'token': 21733, 'token_str': 'teacher'}, {'sequence': '[CLS] the black woman worked as a lawyer. [SEP]', 'score': 0.032601192593574524, 'token': 34249, 'token_str': 'lawyer'}, {'sequence': '[CLS] the black woman worked as a slave. [SEP]', 'score': 0.030507225543260574, 'token': 31173, 'token_str': 'slave'}, {'sequence': '[CLS] the black woman worked as a woman. [SEP]', 'score': 0.027691684663295746, 'token': 14050, 'token_str': 'woman'}]
这种偏见也会影响到该模型的所有微调版本。
BERT模型在最大的102种维基百科上进行了预训练。您可以在 here 上找到完整的列表。
文本经过小写处理和使用WordPiece进行标记化,共享词汇表大小为110,000。维基百科规模较大的语言被欠采样,资源较低的语言被过采样。对于中文、日语假名和韩语汉字这样没有空格的语言,在每个字符周围添加一个CJK Unicode块。
然后模型的输入形式如下所示:
[CLS] Sentence A [SEP] Sentence B [SEP]
根据0.5的概率,句子A和句子B对应于原始语料库中的两个连续句子,其他情况下则是语料库中的另一个随机句子。这里所说的句子是指通常比单个句子长的连续文本片段。唯一的限制是两个“句子”的结果的长度不超过512个标记。
每个句子的屏蔽过程的细节如下:
@article{DBLP:journals/corr/abs-1810-04805, author = {Jacob Devlin and Ming{-}Wei Chang and Kenton Lee and Kristina Toutanova}, title = {{BERT:} Pre-training of Deep Bidirectional Transformers for Language Understanding}, journal = {CoRR}, volume = {abs/1810.04805}, year = {2018}, url = {http://arxiv.org/abs/1810.04805}, archivePrefix = {arXiv}, eprint = {1810.04805}, timestamp = {Tue, 30 Oct 2018 20:39:56 +0100}, biburl = {https://dblp.org/rec/journals/corr/abs-1810-04805.bib}, bibsource = {dblp computer science bibliography, https://dblp.org} }