窝牛号

基于transformer的BERT模型来做完形填空,直接无敌了

BERT是一个基于Transformer的模型,以自监督的方式在大型英语数据集上进行预训练。 这意味着BERT模型仅对原始文本数据进行预训练,没有人为的干预。其BERT模型通过自动过程从这些数据集中生成输入数据和标签。确切的说,BERT模型是为了两个目标而进行预训练的。:

BERT

屏蔽语言建模 (MLM):取一个句子,模型随机屏蔽输入中 15% 的单词,然后通过模型运行训练,并预测屏蔽的单词。 这与传统的循环神经网络 (RNN) 不同,传统的循环神经网络通常会一个接一个的输入单词,也不同于 GPT 等自回归模型。

句子预测(NSP):模型在预训练期间连接屏蔽两个句子作为输入。数据有时2个句子是相邻的句子,有时则不是,模型需要进行训练,来判断2个句子的相关性。

BERT模型最初发布了2个版本,用于区分大小写和不区分大小写的输入文本。随着模型的发布,中文和多语言模型也随之推出。本期我们就基于上面的模型来看看BERT是如何进行完形填空的。

在使用BERT模型前,我们需要在自己的环境下安装Transformers模型,其安装也很简单,只需输入如下命令即可。

!pip install transformers &39;&39;&39;

安装完成transformers后,我们新建一个py文件,并输入如下代码。

from transformers import pipeline masker = pipeline(&39;, model=&39;) masker(&34;)

首先我们从transformers库中导入pipeline,并使用pipeline建立一个大语言模型,此模型基于BERT训练好的bert-large-uncased模型,代码运行时会自动下载相关预训练模型。

Downloading (…)lve/main/config.json: 100% 571/571 [00:00<00:00, 9.51kB/s] Downloading model.safetensors: 100% 1.34G/1.34G [00:10<00:00, 66.7MB/s] Some weights of the model checkpoint at bert-large-uncased were not used when initializing BertForMaskedLM: [&39;, &39;] - This IS expected if you are initializing BertForMaskedLM from the checkpoint of a model trained on another task or with another architecture (e.g. initializing a BertForSequenceClassification model from a BertForPreTraining model). - This IS NOT expected if you are initializing BertForMaskedLM from the checkpoint of a model that you expect to be exactly identical (initializing a BertForSequenceClassification model from a BertForSequenceClassification model). Downloading (…)okenizer_config.json: 100% 28.0/28.0 [00:00<00:00, 1.68kB/s] Downloading (…)solve/main/vocab.txt: 100% 232k/232k [00:00<00:00, 13.6MB/s] Downloading (…)/main/tokenizer.json: 100% 466k/466k [00:00<00:00, 18.9MB/s]

模型下载完成后,我们就可以使用此模型进行完形填空了。遥想当年,英语完形填空都是失分的部分,有了BERT模型,还害怕完形填空吗。模型运行完成后,会根据预测的标签进行打分,按照分数进行排序,并反馈给用户。

[{&39;: 0.7969249486923218, &39;: 7501, &39;: &39;, &39;: &39;}, {&39;: 0.12373805791139603, &39;: 5458, &39;: &39;, &39;: &39;}, {&39;: 0.024669542908668518, &39;: 24907, &39;: &39;, &39;: &39;}, {&39;: 0.009496119804680347, &39;: 18025, &39;: &39;, &39;: &39;}, {&39;: 0.007678327150642872, &39;: 9069, &39;: &39;, &39;: &39;}]

这里hungry一词的概率最高,其得分是0.797分,也是我们最想要的一个单词。当然BERT模型也有中文模型,我们也可使用中文模型进行完形填空。

from transformers import pipeline masker = pipeline(&39;, model=&39;) masker(&34;)

同样的一句话,我们让模型进行中文的预测,可以看到,其准确度大大降低了,且结果并不是很好,毕竟一个英文模型来进行中文的训练与预测还需要符合中文的一些逻辑。

[{&39;: 0.2919280230998993, &39;: 2564, &39;: &39;, &39;: &39;}, {&39;: 0.2616089880466461, &39;: 7662, &39;: &39;, &39;: &39;}, {&39;: 0.09715332090854645, &39;: 5168, &39;: &39;, &39;: &39;}, {&39;: 0.04737318679690361, &39;: 1962, &39;: &39;, &39;: &39;}, {&39;: 0.043192725628614426, &39;: 4956, &39;: &39;, &39;: &39;}]

本站所发布的文字与图片素材为非商业目的改编或整理,版权归原作者所有,如侵权或涉及违法,请联系我们删除

窝牛号 wwww.93ysy.com   沪ICP备2021036305号-1