从我读到的文献来看,
Bert Base 有 12 个编码器层和 12 个注意力头。Bert Large 有 24 个编码器层和 16 个注意力头。
为什么 Bert Large 有 16 个注意力头?
我正在尝试使用BERTopic分析文档的主题分布,BERTopic执行后,我想计算每个文档各自主题下的概率,我应该怎么做?
# define model
model = BERTopic(verbose=True,
vectorizer_model=vectorizer_model,
embedding_model='paraphrase-MiniLM-L3-v2',
min_topic_size= 50,
nr_topics=10)
# train model
headline_topics, _ = model.fit_transform(df1.review_processed3)
# examine one of the topic
a_topic = freq.iloc[0]["Topic"] # Select the 1st topic
model.get_topic(a_topic) # Show the words and their c-TF-IDF scores
Run Code Online (Sandbox Code Playgroud)
下面是主题图像 1之一的单词及其 c-TF-IDF 分数
我应该如何将结果更改为如下主题分布,以便计算主题分布分数并确定主要主题? 图2
我想问一下如何改变训练模型的嵌入大小。
我有一个训练有素的模型models/BERT-pretrain-1-step-5000.pkl。现在,我正在向标记器添加一个新标记[TRA],并尝试使用resize_token_embeddings相关标记。
from pytorch_pretrained_bert_inset import BertModel #BertTokenizer
from transformers import AutoTokenizer
from torch.nn.utils.rnn import pad_sequence
import tqdm
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
model_bert = BertModel.from_pretrained('bert-base-uncased', state_dict=torch.load('models/BERT-pretrain-1-step-5000.pkl', map_location=torch.device('cpu')))
#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(['[TRA]'], special_tokens=True)
model_bert.resize_token_embeddings(len(tokenizer)) # --> Embedding(30523, 768)
print('[TRA] token id: ', tokenizer.convert_tokens_to_ids('[TRA]')) # --> 30522
Run Code Online (Sandbox Code Playgroud)
但我遇到了错误:
AttributeError: 'BertModel' object has no attribute 'resize_token_embeddings'
Run Code Online (Sandbox Code Playgroud)
我认为这是因为model_bert(BERT-pretrain-1-step-5000.pkl)我有不同的嵌入大小。我想知道是否有任何方法可以适应我修改后的标记器的嵌入大小以及我想用作初始权重的模型。
多谢!!
word-embedding pytorch bert-language-model huggingface-transformers huggingface-tokenizers
我使用 Huggingface 中的以下分类模型:
model = AutoModelForSequenceClassification.from_pretrained("dbmdz/bert-base-german-cased", num_labels=2).to(device)
Run Code Online (Sandbox Code Playgroud)
据我了解,这会在预训练模型的末尾添加一个密集层,该模型有 2 个输出节点。但是之前的所有预训练层都被冻结了吗?或者微调时它们也会更新吗?我在文档中找不到有关该信息的信息...
那么我还需要做这样的事情吗?:
for param in model.bert.parameters():
param.requires_grad = False
Run Code Online (Sandbox Code Playgroud) 我在这里训练bert模型。下面的代码是我用来训练的,当我加载保存的模型进行预测时,它显示了这个错误。有人可以帮我吗?
import tensorflow as tf
import logging
from tensorflow.keras.layers import (
Dense,
Flatten,
Conv1D,
Dropout,
Input,)
from tensorflow.keras.models import Sequential
from tensorflow.keras.optimizers import Adam
from tensorflow.keras import Model
from tensorflow.keras import regularizers
from transformers import BertTokenizer, TFBertModel
import pandas as pd
from sklearn.model_selection import train_test_split
import numpy as np
from tqdm import tqdm
tqdm.pandas()
import re
import random
try:
tpu = tf.distribute.cluster_resolver.TPUClusterResolver()
tf.config.experimental_connect_to_cluster(tpu)
tf.tpu.experimental.initialize_tpu_system(tpu)
strategy = tf.distribute.experimental.TPUStrategy(tpu)
except ValueError:
strategy = tf.distribute.get_strategy() # for CPU and single GPU …Run Code Online (Sandbox Code Playgroud) neural-network deep-learning keras tensorflow bert-language-model
我刚读完Transformer论文和BERT论文。但无法弄清楚为什么 BERT 论文中提到的 Transformer 是单向的,而 BERT 是双向的。由于他们不使用循环网络,因此解释方向并不那么简单。任何人都可以提供一些线索吗?谢谢。
我想使用Bert 训练21类文本分类模型。但是我的训练数据很少,因此下载了一个类似的数据集,其中包含5个类的数据集,包含200万个样本。t并使用由bert提供的无条件预训练模型对下载的数据进行了微调。并获得了约98%的验证准确性。现在,我想将此模型用作我的小型自定义数据的预训练模型。但是shape mismatch with tensor output_bias from checkpoint reader由于检查点模型有5个类,而我的自定义数据有21个类,因此出现错误。
NFO:tensorflow:Calling model_fn.
INFO:tensorflow:Running train on CPU
INFO:tensorflow:*** Features ***
INFO:tensorflow: name = input_ids, shape = (32, 128)
INFO:tensorflow: name = input_mask, shape = (32, 128)
INFO:tensorflow: name = is_real_example, shape = (32,)
INFO:tensorflow: name = label_ids, shape = (32, 21)
INFO:tensorflow: name = segment_ids, shape = (32, 128)
Tensor("IteratorGetNext:3", shape=(32, 21), dtype=int32)
WARNING:tensorflow:From /home/user/Spine_NLP/bert/modeling.py:358: calling dropout (from tensorflow.python.ops.nn_ops) with keep_prob is deprecated and will be …Run Code Online (Sandbox Code Playgroud)nlp text-classification deep-learning tensorflow bert-language-model
0
我正在使用 BERT Word Embeddings 进行带有 3 个标签的句子分类任务。我正在使用 Google Colab 进行编码。我的问题是,由于我每次重新启动内核时都必须执行嵌入部分,有没有办法在生成这些词嵌入后保存它?因为,生成这些嵌入需要很多时间。
我用来生成 BERT Word Embeddings 的代码是 -
[get_features(text_list[i]) for text_list[i] in text_list]
Run Code Online (Sandbox Code Playgroud)
在这里,gen_features 是一个函数,它为我的列表 text_list 中的每个 i 返回词嵌入。
我读到将嵌入转换为凹凸不平的张量,然后使用 np.save 可以做到。但我实际上不知道如何编码。
请帮忙。
我有一个包含段落的数据集,我需要将其分为两类。这些段落通常有 3-5 句话长。其中绝大多数的长度不到 500 字。我想利用BERT来解决这个问题。
我想知道我应该如何使用 BERT 来生成这些段落的向量表示,尤其是将整个段落传递给 BERT 是否可以?
此处和此处对相关问题进行了翔实的讨论。这些讨论集中在如何使用 BERT 来表示整个文档。在我的例子中,段落并没有那么长,确实可以在不超过 512 的最大长度的情况下传递给 BERT。但是,BERT 是在句子上进行训练的。句子是相对独立的意义单位。我想知道将多个句子输入 BERT 是否与模型的设计目的没有根本冲突(尽管这似乎是定期进行的)。
nlp text-classification bert-language-model huggingface-transformers
我正在尝试为文档分类构建模型。我正在BERT与PyTorch.
我得到了带有以下代码的 bert 模型。
bert = AutoModel.from_pretrained('bert-base-uncased')
Run Code Online (Sandbox Code Playgroud)
这是训练的代码。
for epoch in range(epochs):
print('\n Epoch {:} / {:}'.format(epoch + 1, epochs))
#train model
train_loss, _ = modhelper.train(proc.train_dataloader)
#evaluate model
valid_loss, _ = modhelper.evaluate()
#save the best model
if valid_loss < best_valid_loss:
best_valid_loss = valid_loss
torch.save(modhelper.model.state_dict(), 'saved_weights.pt')
# append training and validation loss
train_losses.append(train_loss)
valid_losses.append(valid_loss)
print(f'\nTraining Loss: {train_loss:.3f}')
print(f'Validation Loss: {valid_loss:.3f}')
Run Code Online (Sandbox Code Playgroud)
这是我的 train 方法,可通过 object 访问modhelper。
def train(self, train_dataloader):
self.model.train()
total_loss, total_accuracy = 0, 0
# …Run Code Online (Sandbox Code Playgroud) python deep-learning pytorch bert-language-model huggingface-transformers