标签: bert-language-model

SSLError: HTTPSConnectionPool(host='huggingface.co', port=443): 超过最大重试次数,网址:/dslim/bert-base-NER/resolve/main/tokenizer_config.json

由于 SSL 证书错误,我在从 HuggingFace 加载预训练的 BERT 模型时遇到以下问题。

错误:

SSLError: HTTPSConnectionPool(host='huggingface.co', port=443): 超过最大重试次数,网址为:/dslim/bert-base-NER/resolve/main/tokenizer_config.json (由 SSLError(SSLCertVerificationError(1, '[ SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败:证书链中的自签名证书 (_ssl.c:1108)')))

导致问题的行是:

tokenizer = AutoTokenizer.from_pretrained("dslim/bert-base-NER")
Run Code Online (Sandbox Code Playgroud)

源代码:

from transformers import AutoTokenizer, AutoModelForTokenClassification
from transformers import AutoModelForCausalLM, AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("dslim/bert-base-NER")
model = AutoModelForTokenClassification.from_pretrained("dslim/bert-base-NER")
Run Code Online (Sandbox Code Playgroud)

我希望在 Windows 上的 jupyter 实验室中运行代码时下载预先训练的模型。

python-3.x bert-language-model huggingface-transformers huggingface-tokenizers huggingface

11
推荐指数
2
解决办法
3万
查看次数

使用经过训练的 BERT 模型和数据预处理

当使用 pytorch 中预先训练的 BERT 嵌入(然后进行微调)时,是否应该像任何标准 NLP 任务一样对输入模型的文本数据进行预处理?

例如,应该执行词干提取、删除低频单词、去大写字母化,还是应该将原始文本简单地传递给“transformers.BertTokenizer”?

nlp pytorch bert-language-model

10
推荐指数
2
解决办法
8504
查看次数

持续预训练与使用 MLM 微调语言模型

我有一些自定义数据想用来进一步预训练BERT 模型。到目前为止,我\xe2\x80\x99已经尝试了以下两种方法:

\n
    \n
  1. MLM从预训练的 BERT 检查点开始,继续使用 Masked Language Modeling ( ) + Next Sentence Prediction ( ) 头进行预训练NSP(例如使用BertForPreTraining模型)
  2. \n
  3. 从具有目标的预训练 BERT 模型开始MLM(例如,使用BertForMaskedLM模型,假设我们不需要 NSP 来进行预训练部分。)
  4. \n
\n

但我\xe2\x80\x99m仍然感到困惑,如果使用BertForPreTrainingBertForMaskedLM实际上对 BERT 进行持续预训练,或者这只是两个分别使用 MLM+NSP 和 MLM 微调 BERT 的模型。使用 MLM+NSP 微调 BERT 或使用这两个头持续预训练之间是否有任何区别,或者这是我们需要测试的东西?

\n

我已经审查了类似的问题,例如这个问题,但我仍然想确保从技术上讲,从初始检查点持续预训练模型与使用相同的目标/头对其进行微调之间是否存在差异。

\n

nlp deep-learning pre-trained-model bert-language-model huggingface-transformers

10
推荐指数
2
解决办法
1万
查看次数

如何向标记器添加新的特殊标记?

我想构建一个多类分类模型,将会话数据作为 BERT 模型的输入(使用 bert-base-uncased)。

提问:我想问一个问题。
答:当然可以,问吧。
询问:今天天气怎么样?
答:天气很好,阳光明媚。
问题:好的,很高兴知道。
回答:您还想了解其他信息吗?

除此之外,我还有两个输入。

我想知道是否应该在对话中添加特殊标记,以使其对 BERT 模型更有意义,例如:

[CLS]QUERY:我想问一个问题。[EOT]
答案:当然可以,问吧。[EOT]
查询:今天天气怎么样?[EOT]
答案:天气很好,阳光明媚。[EOT]
查询:好的,很高兴知道。[EOT]
解答:您还想了解其他信息吗?[九月]

但我无法添加新的 [EOT] 特殊令牌。
或者我应该为此使用 [SEP] 令牌?

编辑:重现步骤

from transformers import AutoTokenizer, AutoModelForSequenceClassification
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
model = AutoModelForSequenceClassification.from_pretrained("bert-base-uncased")

print(tokenizer.all_special_tokens) # --> ['[UNK]', '[SEP]', '[PAD]', '[CLS]', '[MASK]']
print(tokenizer.all_special_ids)    # --> [100, 102, 0, 101, 103]

num_added_toks = tokenizer.add_tokens(['[EOT]'])
model.resize_token_embeddings(len(tokenizer))  # --> Embedding(30523, 768)

tokenizer.convert_tokens_to_ids('[EOT]')  # --> 30522

text_to_encode = '''QUERY: I want to ask a question. [EOT]
ANSWER: Sure, ask away. …
Run Code Online (Sandbox Code Playgroud)

bert-language-model huggingface-tokenizers sentencepiece

10
推荐指数
1
解决办法
2万
查看次数

使用 Huggingface/transformers (torch) 输出 bert-base-uncased 的注意力

我正在关注一篇关于基于 BERT 的词汇替换的论文(特别是尝试实现等式(2)——如果有人已经实现了整篇论文,那就太好了)。因此,我想要获得最后一个隐藏层(我唯一不确定的是输出中各层的顺序:最后一个第一个还是第一个第一个?)以及来自基本 BERT 模型(bert-base-uncased)的注意力。

然而,我有点不确定Huggingface/transformers 库是否真的输出了 bert-base-uncased 的注意力(我使用的是 torch,但我愿意使用 TF)?

根据我读到的内容,我预计会得到一个元组(logits、hidden_​​states、attentions),但通过下面的示例(例如在 Google Colab 中运行),我得到的长度是 2。

我是否误解了我所得到的或以错误的方式处理这件事?我做了明显的测试并使用了output_attention=Falseoutput_attention=True虽然output_hidden_states=True确实似乎按预期添加了隐藏状态)并且我得到的输出没有任何变化。这显然是我对图书馆的理解的一个不好的迹象,或者表明存在问题。

import numpy as np
import torch
!pip install transformers

from transformers import (AutoModelWithLMHead, 
                          AutoTokenizer, 
                          BertConfig)

bert_tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
config = BertConfig.from_pretrained('bert-base-uncased', output_hidden_states=True, output_attention=True) # Nothign changes, when I switch to output_attention=False
bert_model = AutoModelWithLMHead.from_config(config)

sequence = "We went to an ice cream cafe and had a chocolate ice cream."
bert_tokenized_sequence = …
Run Code Online (Sandbox Code Playgroud)

python attention-model bert-language-model huggingface-transformers

9
推荐指数
2
解决办法
1万
查看次数

使用自定义 X 和 Y 数据训练 TFBertForSequenceClassification

我正在处理一个 TextClassification 问题,为此我正在尝试在 huggingface-transformers 库中给出的 TFBertForSequenceClassification 上训练我的模型。

我按照他们的github页面上给出的示例进行操作,我能够使用给定的示例数据运行示例代码tensorflow_datasets.load('glue/mrpc')。但是,我无法找到有关如何加载我自己的自定义数据并将其传入 model.fit(train_dataset, epochs=2, steps_per_epoch=115, validation_data=valid_dataset, validation_steps=7).

我如何定义我自己的 X,对我的 X 进行标记化并使用我的 X 和 Y 准备 train_dataset。其中 X 代表我的输入文本,Y 代表给定 X 的分类类别。

样本训练数据框:

    text    category_index
0   Assorted Print Joggers - Pack of 2 ,/ Gray Pri...   0
1   "Buckle" ( Matt ) for 35 mm Width Belt  0
2   (Gagam 07) Barcelona Football Jersey Home 17 1...   2
3   (Pack of 3 Pair) Flocklined Reusable Rubber Ha...   1
4   (Summer …
Run Code Online (Sandbox Code Playgroud)

nlp pytorch tensorflow2.0 bert-language-model huggingface-transformers

9
推荐指数
3
解决办法
1203
查看次数

如何使用 BertForMaskedLM 或 BertModel 来计算句子的困惑度?

我想使用 BertForMaskedLM 或 BertModel 来计算句子的困惑度,所以我编写了这样的代码:

\n
import numpy as np\nimport torch\nimport torch.nn as nn\nfrom transformers import BertTokenizer, BertForMaskedLM\n# Load pre-trained model (weights)\nwith torch.no_grad():\n    model = BertForMaskedLM.from_pretrained(\'hfl/chinese-bert-wwm-ext\')\n    model.eval()\n    # Load pre-trained model tokenizer (vocabulary)\n    tokenizer = BertTokenizer.from_pretrained(\'hfl/chinese-bert-wwm-ext\')\n    sentence = "\xe6\x88\x91\xe4\xb8\x8d\xe4\xbc\x9a\xe5\xbf\x98\xe8\xae\xb0\xe5\x92\x8c\xe4\xbd\xa0\xe4\xb8\x80\xe8\xb5\xb7\xe5\xa5\x8b\xe6\x96\x97\xe7\x9a\x84\xe6\x97\xb6\xe5\x85\x89\xe3\x80\x82"\n    tokenize_input = tokenizer.tokenize(sentence)\n    tensor_input = torch.tensor([tokenizer.convert_tokens_to_ids(tokenize_input)])\n    sen_len = len(tokenize_input)\n    sentence_loss = 0.\n\n    for i, word in enumerate(tokenize_input):\n        # add mask to i-th character of the sentence\n        tokenize_input[i] = \'[MASK]\'\n        mask_input = torch.tensor([tokenizer.convert_tokens_to_ids(tokenize_input)])\n\n        output = model(mask_input)\n\n        prediction_scores = output[0]\n        softmax = nn.Softmax(dim=0)\n …
Run Code Online (Sandbox Code Playgroud)

nlp transformer-model pytorch bert-language-model huggingface-transformers

9
推荐指数
1
解决办法
7694
查看次数

为什么 BERT 模型必须保持 10% MASK 代币不变?

我正在阅读 BERT 模型论文。在预训练 BERT 模型时的 Masked Language Model 任务中,论文称模型会随机选择 15% 的 token。在选择的标记(Ti)中,80%将被[MASK]标记替换,10%Ti不变,10%Ti被另一个单词替换。我认为模型只需要替换为[MASK]或其他单词就足够了。为什么模型必须随机选择一个单词并保持不变?预训练过程仅预测 [MASK] 标记还是预测整个随机标记的 15%?

nlp deep-learning bert-language-model

9
推荐指数
1
解决办法
3416
查看次数

python中的子句提取/长句分割

我目前正在开展一个涉及句子向量的项目(来自 RoBERTa 预训练模型)。当句子很长时,这些向量的质量较低,并且我的语料库包含许多带有子句的长句子。

我一直在寻找子句提取/长句分割的方法,但令我惊讶的是,没有一个主要的 NLP 软件包(例如 spacy 或 stanza)提供开箱即用的功能。

我想这可以通过使用 spacy 或 stanza 的依赖解析来完成,但正确处理各种复杂的句子和边缘情况可能会非常复杂。

我遇到过使用 spacy实现ClausIE 信息提取系统,它可以执行类似的操作,但它尚未更新并且无法在我的计算机上运行。

我也遇到过这个用于简化句子的存储库,但是当我在本地运行它时,我收到了斯坦福 coreNLP 的注释错误。

有没有我忽略的明显的包/方法?如果没有,是否有一种简单的方法可以使用 stanza 或 spacy 来实现此目的?

python nlp stanford-nlp spacy bert-language-model

9
推荐指数
1
解决办法
6586
查看次数

如何将现有的huggingface-transformers模型使用到spacy中?

我来这里是想问你们是否可以将现有的经过训练的 Huggingface-transformers 模型与 spacy 一起使用。

我的第一个天真的尝试是通过加载它spacy.load('bert-base-uncased'),它不起作用,因为 spacy 需要一定的结构,这是可以理解的。

现在我试图弄清楚如何使用该spacy-transformers库来加载模型,创建 spacy 结构,并从那时起将其用作正常的 spacy 感知模型。

我不知道这是否可能,因为我找不到有关该主题的任何信息。我尝试阅读文档,但我发现的所有指南、示例和帖子都是从 spacy/en_core_web_sm 这样的 spacy 结构化模型开始的,但该模型最初是如何创建的?我相信有人必须用 spacy 重新训练一切。

我可以向你寻求帮助吗?

谢谢。

spacy bert-language-model spacy-transformers huggingface-transformers

9
推荐指数
1
解决办法
3137
查看次数