标签: huggingface-transformers

Huggingface 的 BERT 标记器未添加填充标记

从文档中并不完全清楚,但我可以看到它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)

tokenize bert-language-model huggingface-transformers

3
推荐指数
1
解决办法
4153
查看次数

无法加载带有变压器包的 SpanBert 模型

我有一些关于使用转换器包加载 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.json
  • model_file -> pytorch_model.bin
  • vocab_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

您对正确加载预训练模型有什么建议吗?任何建议都非常感谢。谢谢!

python bert-language-model huggingface-transformers

3
推荐指数
1
解决办法
889
查看次数

Bert 预训练模型每次给出随机输出

我试图在 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

3
推荐指数
1
解决办法
783
查看次数

使用拥抱面变压器模型作为第一层的保存和加载张量流模型的问题

您好,我在保存和加载张量流模型时遇到一些严重的问题,该模型是拥抱面部变压器+一些自定义层进行分类的组合。我正在使用最新的 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)

machine-learning keras tensorflow huggingface-transformers

3
推荐指数
1
解决办法
2111
查看次数

无法从 Transformer 导入 BertModel

我试图从 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

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

来自 HuggingFace 的 BertWordPieceTokenizer 与 BertTokenizer

我有以下代码片段并试图了解 BertWordPieceTokenizer 和 BertTokenizer 之间的区别。

BertWordPieceTokenizer(基于 Rust)

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)
  1. 为什么编码在两者中的工作方式不同?在 BertWordPieceTokenizer 中,它给出了 …

nlp bert-language-model huggingface-transformers huggingface-tokenizers

3
推荐指数
1
解决办法
4382
查看次数

我们是否应该使用 Huggingface(预)训练一个 BERT 无框模型的小写输入数据?

我们是否应该使用 Huggingface(预)训练一个 BERT 无框模型的小写输入数据?我查看了 Thomas Wolf ( https://github.com/huggingface/transformers/issues/92#issuecomment-444677920 ) 的回复,但不完全确定他是否是这个意思。

如果我们小写文本会发生什么?

nlp deep-learning pytorch huggingface-transformers

3
推荐指数
1
解决办法
1317
查看次数

在哪里可以获得 BERT 的预训练词嵌入?

我知道 BERT 的总词汇量为 30522,其中包含一些单词和子词。我想获得 BERT 的初始输入嵌入。所以,我的要求是获取一个大小表[30522, 768],我可以通过 token id 对其进行索引以获取其嵌入。我在哪里可以得到这张桌子?

embedding bert-language-model huggingface-transformers

3
推荐指数
1
解决办法
2430
查看次数

Transformer库缓存路径没有改变

我已经尝试过但它对我不起作用。我正在使用这个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 目录中。

python sentiment-analysis huggingface-transformers

3
推荐指数
1
解决办法
3338
查看次数

下载拥抱脸预训练模型

在 Colab Notebook 上下载预训练模型后,它会在我重置 Notebook 变量后消失。有没有办法下载模型以供第二次使用?

tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
Run Code Online (Sandbox Code Playgroud)

python nlp google-colaboratory huggingface-transformers

3
推荐指数
1
解决办法
3244
查看次数