从文档中并不完全清楚,但我可以看到它BertTokenizer是用 初始化的pad_token='[PAD]',所以我假设当你用 编码时add_special_tokens=True它会自动填充它。鉴于此pad_token_id=0,我0在以下内容token_ids中看不到任何s :
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased', do_lower_case=True)
tokens = tokenizer.tokenize(text)
token_ids = tokenizer.encode(text, add_special_tokens=True, max_length=2048)
# Print the original sentence.
print('Original: ', text)
# Print the sentence split into tokens.
print('\nTokenized: ', tokens)
# Print the sentence mapped to token ids.
print('\nToken IDs: ', token_ids)
Run Code Online (Sandbox Code Playgroud)
输出:
Original: Toronto's key stock index ended higher in brisk trading on Thursday, extending Wednesday's rally despite being weighed down by losses …Run Code Online (Sandbox Code Playgroud) 我有一些关于使用转换器包加载 SpanBert 的问题。
我从SpanBert GitHub Repo 和vocab.txtBert下载了预训练文件。这是我用于加载的代码:
model = BertModel.from_pretrained(config_file=config_file,
pretrained_model_name_or_path=model_file,
vocab_file=vocab_file)
model.to("cuda")
Run Code Online (Sandbox Code Playgroud)
在哪里
config_file -> config.jsonmodel_file -> pytorch_model.binvocab_file -> vocab.txt但我得到了UnicodeDecoderError上面的代码说'utf-8' codec can't decode byte 0x80 in position 0: invalid start byte
我还尝试使用此处提到的方法加载 SpanBert 。但它回来了OSError: file SpanBERT/spanbert-base-cased not found。
您对正确加载预训练模型有什么建议吗?任何建议都非常感谢。谢谢!
我试图在 Huggingface bert 变压器之后添加一个额外的层,所以我BertForSequenceClassification在我的nn.Module网络中使用。但是,与直接加载模型相比,我看到模型给了我随机输出。
模型 1:
from transformers import BertForSequenceClassification
model = BertForSequenceClassification.from_pretrained('bert-base-uncased', num_labels = 5) # as we have 5 classes
import torch
from transformers import BertTokenizer
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
input_ids = torch.tensor(tokenizer.encode(texts[0], add_special_tokens=True, max_length = 512)).unsqueeze(0) # Batch size 1
print(model(input_ids))
Run Code Online (Sandbox Code Playgroud)
出去:
(tensor([[ 0.3610, -0.0193, -0.1881, -0.1375, -0.3208]],
grad_fn=<AddmmBackward>),)
Run Code Online (Sandbox Code Playgroud)
模型 2:
import torch
from torch import nn
class BertClassifier(nn.Module):
def __init__(self):
super(BertClassifier, self).__init__()
self.bert = BertForSequenceClassification.from_pretrained('bert-base-uncased', num_labels = 5)
# as we have 5 …Run Code Online (Sandbox Code Playgroud) python-3.x pytorch bert-language-model huggingface-transformers
您好,我在保存和加载张量流模型时遇到一些严重的问题,该模型是拥抱面部变压器+一些自定义层进行分类的组合。我正在使用最新的 Huggingface Transformers Tensorflow keras 版本。其想法是使用 distilbert 提取特征,然后通过 CNN 运行特征来进行分类和提取。为了获得正确的分类,我已经做好了一切工作。
问题在于训练后保存模型,然后再次加载模型。
我正在使用tensorflow keras和tensorflow版本2.2
以下是设计模型、训练模型、评估模型然后保存和加载模型的代码
bert_config = DistilBertConfig(dropout=0.2, attention_dropout=0.2, output_hidden_states=False)
bert_config.output_hidden_states = False
transformer_model = TFDistilBertModel.from_pretrained(DISTIL_BERT, config=bert_config)
input_ids_in = tf.keras.layers.Input(shape=(BERT_LENGTH,), name='input_token', dtype='int32')
input_masks_in = tf.keras.layers.Input(shape=(BERT_LENGTH,), name='masked_token', dtype='int32')
embedding_layer = transformer_model(input_ids_in, attention_mask=input_masks_in)[0]
x = tf.keras.layers.Bidirectional(
tf.keras.layers.LSTM(50, return_sequences=True, dropout=0.1,
recurrent_dropout=0, recurrent_activation="sigmoid",
unroll=False, use_bias=True, activation="tanh"))(embedding_layer)
x = tf.keras.layers.GlobalMaxPool1D()(x)
outputs = []
# lots of code here to define the dense layers to generate the outputs
# .....
# .....
model = Model(inputs=[input_ids_in, input_masks_in], outputs=outputs) …Run Code Online (Sandbox Code Playgroud) 我试图从 Transformer 导入 BertModel,但失败了。这是我正在使用的代码
from transformers import BertModel, BertForMaskedLM
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误
ImportError: cannot import name 'BertModel' from 'transformers'
Run Code Online (Sandbox Code Playgroud)
谁能帮我解决这个问题吗?
python nlp pytorch bert-language-model huggingface-transformers
我有以下代码片段并试图了解 BertWordPieceTokenizer 和 BertTokenizer 之间的区别。
from tokenizers import BertWordPieceTokenizer
sequence = "Hello, y'all! How are you Tokenizer ?"
tokenizer = BertWordPieceTokenizer("bert-base-uncased-vocab.txt")
tokenized_sequence = tokenizer.encode(sequence)
print(tokenized_sequence)
>>>Encoding(num_tokens=15, attributes=[ids, type_ids, tokens, offsets, attention_mask, special_tokens_mask, overflowing])
print(tokenized_sequence.tokens)
>>>['[CLS]', 'hello', ',', 'y', "'", 'all', '!', 'how', 'are', 'you', 'token', '##izer', '[UNK]', '?', '[SEP]']
Run Code Online (Sandbox Code Playgroud)
from transformers import BertTokenizer
tokenizer = BertTokenizer("bert-base-cased-vocab.txt")
tokenized_sequence = tokenizer.encode(sequence)
print(tokenized_sequence)
#Output: [19082, 117, 194, 112, 1155, 106, 1293, 1132, 1128, 22559, 17260, 100, 136]
Run Code Online (Sandbox Code Playgroud)
nlp bert-language-model huggingface-transformers huggingface-tokenizers
我们是否应该使用 Huggingface(预)训练一个 BERT 无框模型的小写输入数据?我查看了 Thomas Wolf ( https://github.com/huggingface/transformers/issues/92#issuecomment-444677920 ) 的回复,但不完全确定他是否是这个意思。
如果我们小写文本会发生什么?
我知道 BERT 的总词汇量为 30522,其中包含一些单词和子词。我想获得 BERT 的初始输入嵌入。所以,我的要求是获取一个大小表[30522, 768],我可以通过 token id 对其进行索引以获取其嵌入。我在哪里可以得到这张桌子?
我已经尝试过,但它对我不起作用。我正在使用这个Git 存储库。我正在构建一个桌面应用程序,不希望用户下载模型。我想通过构建来运送模型。我知道 Transformers 库会寻找cache/torch/transformers. 如果不存在,请下载它。我还知道你可以cache_dir在 中传递参数pre_trained。我正在尝试这个。
cache = os.path.join(os.path.abspath(os.getcwd()), 'Transformation/Annotators/New Sentiment Analysis/transformers')
os.environ['TRANSFORMERS_CACHE'] = cache
if args.model_name_or_path is None:
args.model_name_or_path = 'barissayil/bert-sentiment-analysis-sst'
#Configuration for the desired transformer model
config = AutoConfig.from_pretrained(args.model_name_or_path, cache_dir=cache)
Run Code Online (Sandbox Code Playgroud)
我已经尝试了上述问题中的解决方案,并尝试了cache_dir。Transformer 文件夹与analyze.py 位于同一目录中。整个存储库和转换器文件夹位于 New Sentiment Analysis 目录中。
在 Colab Notebook 上下载预训练模型后,它会在我重置 Notebook 变量后消失。有没有办法下载模型以供第二次使用?
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
Run Code Online (Sandbox Code Playgroud)