我正在尝试从 Transformer 库导入 BertTokenizer,如下所示:
import transformers
from transformers import BertTokenizer
from transformers.modeling_bert import BertModel, BertForMaskedLM
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误:
我使用的是 Transformer 版本 3.5.1,因为我对更新版本有问题,可以在此处找到。
有谁知道如何解决这一问题?除了将变压器库更新到最新版本(不幸的是,这会导致更多错误)。
任何帮助表示赞赏!
python importerror bert-language-model huggingface-transformers
我正在尝试使用 Huggingface Transformers 使用自定义数据集训练分类模型,但我不断收到错误。最后一个错误似乎可以解决,但我不知何故不明白如何解决。我究竟做错了什么?
我用以下方式对数据进行编码
model_name = "dbmdz/bert-base-italian-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_name, do_lower_case = True)
def encode_data(texts):
return tokenizer.batch_encode_plus(
texts,
add_special_tokens=True,
return_attention_mask=True,
padding = True,
truncation=True,
max_length=200,
return_tensors='pt'
)
Run Code Online (Sandbox Code Playgroud)
然后我创建我的数据集
import torch
class my_Dataset(torch.utils.data.Dataset):
def __init__(self, encodings, labels):
self.encodings = encodings
self.labels = torch.tensor(labels)
def __getitem__(self, idx):
item = {key: val[idx] for key, val in self.encodings.items()}
item['labels'] = self.labels[idx]
print(item)
return item
def __len__(self):
return len(self.labels)
Run Code Online (Sandbox Code Playgroud)
所以我有
encoded_data_train = encode_data(df_train['text'].tolist())
encoded_data_val = encode_data(df_val['text'].tolist())
encoded_data_test = encode_data(df_test['text'].tolist())
dataset_train = my_Dataset(encoded_data_train, df_train['labels'].tolist())
dataset_val …Run Code Online (Sandbox Code Playgroud) 我的代码工作正常,当我今天尝试在不更改任何内容的情况下运行它时,出现以下错误: TypeError: argmax(): argument 'input' (position 1) must be Tensor, not str
如果可以提供帮助,将不胜感激。
下面是我收到错误的代码片段。我正在使用 BERT mdoel
start_scores, end_scores = model(torch.tensor([input_ids]), # 代表我们输入文本的标记。 token_type_ids=torch.tensor( [segment_ids])) # 区分问题和answer_text的段ID
# ======== Reconstruct Answer ========
# Find the tokens with the highest `start` and `end` scores.
answer_start = torch.argmax(start_scores)
answer_end = torch.argmax(end_scores)
Run Code Online (Sandbox Code Playgroud) 我知道GPT使用Transformer解码器,BERT使用Transformer编码器,T5使用Transformer编码器-解码器。但是有人可以帮我理解为什么GPT只使用解码器,BERT只使用编码器,而T5两者都使用?
仅使用编码器而不使用解码器、使用解码器而不使用编码器以及同时使用编码器和解码器可以做什么?
我是 NLP 新手,所以任何帮助都会很好:D 谢谢!
如何用随机权重初始化 BERT?我想在掩码语言建模任务中比较多语言、单语言和随机初始化 BERT 的性能。而在前一种情况下,它非常简单:
from transformers import BertTokenizer, BertForMaskedLM
tokenizer_multi = BertTokenizer.from_pretrained('bert-base-multilingual-cased')
model_multi = BertForMaskedLM.from_pretrained('bert-base-multilingual-cased')
model_multi.eval()
tokenizer_mono = BertTokenizer.from_pretrained('bert-base-cased')
model_mono = BertForMaskedLM.from_pretrained('bert-base-cased')
model_mono.eval()
Run Code Online (Sandbox Code Playgroud)
我不知道如何加载随机权重。
提前致谢!
总的来说,我是机器学习的新手。我目前正在尝试使用 BERT 和 Transformers 进行情感分析的教程https://curiousily.com/posts/sentiment-analysis-with-bert-and-hugging-face-using-pytorch-and-python/
我不知道如何解决这个问题。我尝试过减少纪元数量、增加批量大小、重新整理我的数据(已排序)并增加验证拆分。到目前为止还没有任何效果。我什至尝试过改变不同的学习率,但我现在使用的是最小的。
下面是我的代码:
PRE_TRAINED_MODEL_NAME = 'TurkuNLP/bert-base-finnish-cased-v1'
tokenizer = BertTokenizer.from_pretrained(PRE_TRAINED_MODEL_NAME)
MAX_LEN = 40
#Make a PyTorch dataset
class FIDataset(Dataset):
def __init__(self, texts, targets, tokenizer, max_len):
self.texts = texts
self.targets = targets
self.tokenizer = tokenizer
self.max_len = max_len
def __len__(self):
return len(self.texts)
def __getitem__(self, item):
text = str(self.texts[item])
target = self.targets[item]
encoding = self.tokenizer.encode_plus(
text,
add_special_tokens=True,
max_length=self.max_len,
return_token_type_ids=False,
pad_to_max_length=True,
return_attention_mask=True,
return_tensors='pt',
)
return {
'text': text,
'input_ids': encoding['input_ids'].flatten(),
'attention_mask': encoding['attention_mask'].flatten(),
'targets': torch.tensor(target, dtype=torch.long)
}
#split test …Run Code Online (Sandbox Code Playgroud) python sentiment-analysis bert-language-model huggingface-transformers overfitting-underfitting
我在这里通过冻结除分类器层之外的所有层来微调预训练模型。我使用 pytorch 将权重文件保存为 .bin 格式。
现在,有没有办法加载我重新训练的分类器层的参数,而不是加载 400mb 的预训练模型?顺便说一句,我知道我必须加载原始的预训练模型,我只是不想加载整个微调模型。由于内存问题。
我可以从 state_dict 访问最后一层的参数,如下所示,但是如何将它们保存在单独的文件中以便稍后使用它们以减少内存使用量?
model = PosTaggingModel(num_pos_tag=num_pos_tag)
state_dict = torch.load("model.bin")
print("state dictionary:",state_dict)
with torch.no_grad():
model.out_pos_tag.weight.copy_(state_dict['out_pos_tag.weight'])
model.out_pos_tag.bias.copy_(state_dict['out_pos_tag.bias'])
Run Code Online (Sandbox Code Playgroud)
这是模型类:
class PosTaggingModel(nn.Module):
def __init__(self, num_pos_tag):
super(PosTaggingModel, self).__init__()
self.num_pos_tag = num_pos_tag
self.model = AutoModel.from_pretrained("dbmdz/bert-base-turkish-cased")
for name, param in self.model.named_parameters():
if 'classifier' not in name: # classifier layer
param.requires_grad = False
self.bert_drop = nn.Dropout(0.3)
self.out_pos_tag = nn.Linear(768, self.num_pos_tag)
def forward(self, ids, mask, token_type_ids, target_pos_tag):
o1, _ = self.model(ids, attention_mask = mask, token_type_ids = token_type_ids)
bo_pos_tag = self.bert_drop(o1) …Run Code Online (Sandbox Code Playgroud) 是否可以将从 SentenceTransformer 派生的句子表示解码回句子?
请参阅文档中的示例
from sentence_transformers import SentenceTransformer
model = SentenceTransformer('paraphrase-MiniLM-L6-v2')
#Our sentences we like to encode
sentences = ['This framework generates embeddings for each input sentence',
'Sentences are passed as a list of string.',
'The quick brown fox jumps over the lazy dog.']
#Sentences are encoded by calling model.encode()
embeddings = model.encode(sentences)
Run Code Online (Sandbox Code Playgroud)
我想解码表示以获得句子
embedding = [[-1.76214352e-01 1.20600984e-01 -2.93624014e-01 -2.29858071e-01
-8.22928399e-02 2.37709314e-01 ... 3.39985073e-0]]
sentence = model.decode(embedding)
print(sentence)
Run Code Online (Sandbox Code Playgroud)
'This framework generates embeddings for each input sentence'
Run Code Online (Sandbox Code Playgroud) 我感兴趣的是如何从 BERT 模型中获取不同句子中词嵌入的相似度(实际上,这意味着词在不同场景下具有不同的含义)。
例如:
sent1 = 'I like living in New York.'
sent2 = 'New York is a prosperous city.'
Run Code Online (Sandbox Code Playgroud)
我想从sent1和sent2中获取cos(纽约,纽约)的值,即使短语“纽约”相同,但它出现在不同的句子中。我从https://discuss.huggingface.co/t/generate-raw-word-embeddings-using-transformer-models-like-bert-for-downstream-process/2958/2得到了一些直觉
但我仍然不知道我需要提取哪一层的嵌入以及如何计算上面示例的 cos 相似度。
在此先感谢您的任何建议!
我一直在做一篇关于我的引文分类的论文。我刚刚实现了用于引文分类的 Bert 模型。我有 4 个输出类,我给出一个输入句子,我的模型返回一个输出,告诉引用的类别。现在我的主管给了我另一项任务。
您必须搜索是否可以使用手动功能扩展 BERT 或任何变压器模型。例如,您当前给出一个句子作为唯一输入,后跟其类别。如果你可以给出一个句子和一些其他特征作为输入怎么办?就像我们在其他分类器中所做的那样?
我需要一些关于这个问题的指导。我怎样才能在我的 Bert 模型中添加额外的特征,并且该特征将是分类的而不是数字的。
text-classification bert-language-model huggingface-transformers
python ×5
nlp ×2
generative-pretrained-transformer ×1
importerror ×1
python-3.x ×1
pytorch ×1
text ×1