我正在使用 Huggingface BERT 来执行 NLP 任务。我的文本包含被分成子词的公司名称。
tokenizer = BertTokenizerFast.from_pretrained('bert-base-uncased')
tokenizer.encode_plus("Somespecialcompany")
output: {'input_ids': [101, 2070, 13102, 8586, 4818, 9006, 9739, 2100, 102], 'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0, 0], 'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1]}
Run Code Online (Sandbox Code Playgroud)
现在,我想将这些名称添加到标记器 ID 中,这样它们就不会被分割。
tokenizer.add_tokens("Somespecialcompany")
output: 1
Run Code Online (Sandbox Code Playgroud)
这将分词器的长度从 30522 扩展到 30523。
因此,所需的输出将是新的 ID:
tokenizer.encode_plus("Somespecialcompany")
output: 30522
Run Code Online (Sandbox Code Playgroud)
但输出与之前相同:
output: {'input_ids': [101, 2070, 13102, 8586, 4818, 9006, 9739, 2100, 102], 'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0, 0], 'attention_mask': [1, …Run Code Online (Sandbox Code Playgroud) bert-language-model huggingface-transformers huggingface-tokenizers
我有一个句子,我需要返回特定单词左右两侧 N 个 BERT 标记对应的文本。
from transformers import BertTokenizer
tz = BertTokenizer.from_pretrained("bert-base-cased")
sentence = "The Natural Science Museum of Madrid shows the RECONSTRUCTION of a dinosaur"
tokens = tz.tokenize(sentence)
print(tokens)
>>['The', 'Natural', 'Science', 'Museum', 'of', 'Madrid', 'shows', 'the', 'R', '##EC', '##ON', '##ST', '##R', '##UC', '##TI', '##ON', 'of', 'a', 'dinosaur']
Run Code Online (Sandbox Code Playgroud)
我想要的是获取与令牌马德里左侧和右侧的4个令牌相对应的文本。所以我想要标记: ['Natural', 'Science', 'Museum', 'of', 'Madrid', 'shows', 'the', 'R', '##EC'] 然后将它们转换为原文。在本例中,它将是“马德里自然科学博物馆展示 REC”。
有没有办法做到这一点?
python tokenize bert-language-model huggingface-transformers huggingface-tokenizers
我的代码是:
import torch
from transformers import BertTokenizer
from IPython.display import clear_output
Run Code Online (Sandbox Code Playgroud)
我在行中遇到错误from transformers import BertTokenizer:
ImportError: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by /mnt/home/wbj/anaconda3/envs/pytorch/lib/python3.8/site-packages/tokenizers/tokenizers.cpython-38-x86_64-linux-gnu.so)
Run Code Online (Sandbox Code Playgroud)
我找到了一个答案,问题是由于文件引起的/lib/x86_64-linux-gnu/libm.so.6,当我使用代码时,strings /lib/x86_64-linux-gnu/libm.so.6 | grep GLIBC_我得到了输出
GLIBC_2.2.5
GLIBC_2.4
GLIBC_2.15
GLIBC_2.18
GLIBC_2.23
GLIBC_PRIVATE
Run Code Online (Sandbox Code Playgroud)
该文件不支持 GLIBC_2.29。我该如何解决这个问题?
我已经按照 Hugging Face 使用 BERT 进行屏蔽语言建模的教程进行操作,但我不确定如何实际部署该模型。
教程:https://github.com/huggingface/notebooks/blob/master/examples/language_modeling.ipynb
我已经使用自己的数据集训练了模型,效果很好,但我不知道如何实际使用该模型,因为遗憾的是,笔记本中没有包含如何执行此操作的示例。
在 Hugging Face 网站上,这是示例中使用的代码;因此,我想用我的模型做这件事:
>>> from transformers import pipeline
>>> unmasker = pipeline('fill-mask', model='bert-base-uncased')
>>> unmasker("Hello I'm a [MASK] model.")
[{'sequence': "[CLS] hello i'm a fashion model. [SEP]",
'score': 0.1073106899857521,
'token': 4827,
'token_str': 'fashion'},
{'sequence': "[CLS] hello i'm a role model. [SEP]",
'score': 0.08774490654468536,
'token': 2535,
'token_str': 'role'},
{'sequence': "[CLS] hello i'm a new model. [SEP]",
'score': 0.05338378623127937,
'token': 2047,
'token_str': 'new'},
{'sequence': "[CLS] hello i'm a super model. [SEP]", …Run Code Online (Sandbox Code Playgroud) 我想在 jupyter Notebook 中导入 Transformer,但出现以下错误。出现这个错误的原因是什么?我的Python版本是3.8
ImportError:无法从“typing_extensions”导入名称“TypeAlias”
我也更新了typing-extensions库版本,但是问题没有解决
我正在使用 Faiss 来索引我的巨大数据集嵌入,即从 bert 模型生成的嵌入。我想增量添加嵌入,如果我仅使用 faiss.IndexFlatL2 添加它,它就可以正常工作,但问题是在保存它时它的大小太大。所以我尝试使用 faiss.IndexIVFPQ,但它需要在添加数据之前训练嵌入,所以我无法增量添加它,我必须先计算所有嵌入,然后训练并添加它,它有问题,因为所有数据应该保存在 RAM 中直到我写它。有什么办法可以逐步做到这一点。这是我的代码:
# It is working fine when using with IndexFlatL2
def __init__(self, sentences, model):
self.sentences = sentences
self.model = model
self.index = faiss.IndexFlatL2(768)
def process_sentences(self):
result = self.model(self.sentences)
self.sentence_ids = []
self.token_ids = []
self.all_tokens = []
for i, (toks, embs) in enumerate(tqdm(result)):
# initialize all_embeddings for every new sentence (INCREMENTALLY)
all_embeddings = []
for j, (tok, emb) in enumerate(zip(toks, embs)):
self.sentence_ids.append(i)
self.token_ids.append(j)
self.all_tokens.append(tok)
all_embeddings.append(emb)
all_embeddings = np.stack(all_embeddings) # Add embeddings …Run Code Online (Sandbox Code Playgroud) 假设我们有一个这样的模板句子:
我们有一个形容词列表来填补空白,例如:
请注意,其中之一是空字符串。
目标是比较在给定句子上下文的情况下选择最有可能描述“房子”的单词的概率。如果更有可能什么都没有,也应该考虑到这一点。
我们可以预测每个单词填空的概率,但是我们如何预测没有形容词来描述“房子”的可能性呢?
预测一个单词的概率:
from transformers import BertTokenizer, BertForMaskedLM
import torch
from torch.nn import functional as F
# Load BERT tokenizer and pre-trained model
tokenizer = BertTokenizer.from_pretrained('bert-large-uncased')
model = BertForMaskedLM.from_pretrained('bert-large-uncased', return_dict=True)
targets = ["yellow", "large"]
sentence = "The [MASK] house is our meeting place."
# Using BERT, compute probability over its entire vocabulary, returning logits
input = tokenizer.encode_plus(sentence, return_tensors = "pt")
mask_index = torch.where(input["input_ids"][0] == tokenizer.mask_token_id)[0]
with torch.no_grad():
output = model(**input)
# …Run Code Online (Sandbox Code Playgroud) 运行此代码时:embedding_matrix = torch.stack(embeddings)
我收到这个错误:
RuntimeError: stack expects each tensor to be equal size, but got [7, 768] at entry 0 and [8, 768] at entry 1
Run Code Online (Sandbox Code Playgroud)
我正在尝试通过以下方式使用 BERT 进行嵌入:
split_sent = sent.split()
tokens_embedding = []
j = 0
for full_token in split_sent:
curr_token = ''
x = 0
for i,_ in enumerate(tokenized_sent[1:]):
token = tokenized_sent[i+j]
piece_embedding = bert_embedding[i+j]
if token == full_token and curr_token == '' :
tokens_embedding.append(piece_embedding)
j += 1
break
sent_embedding = torch.stack(tokens_embedding)
embeddings.append(sent_embedding)
embedding_matrix = torch.stack(embeddings) …Run Code Online (Sandbox Code Playgroud) 我按以下方式使用 Huggingface 的句子 BERT:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer('all-MiniLM-L6-v2')
model.max_seq_length = 512
model.encode(text)
Run Code Online (Sandbox Code Playgroud)
当text很长且包含超过 512 个标记时,不会抛出异常。我假设它会自动将输入截断为 512 个标记。
当输入长度大于时如何使其抛出异常max_seq_length?
此外, 的最大可能是max_seq_length多少all-MiniLM-L6-v2?
nlp bert-language-model huggingface-transformers huggingface-tokenizers sentence-transformers