我是 PyTorch 的新手,最近我一直在尝试使用 Transformers。我正在使用 HuggingFace 提供的预训练分词器。
我成功下载并运行它们。但如果我尝试保存它们并再次加载,则会发生一些错误。
如果我用来 AutoTokenizer.from_pretrained下载分词器,那么它就可以工作。
[1]: tokenizer = AutoTokenizer.from_pretrained('distilroberta-base')
text = "Hello there"
enc = tokenizer.encode_plus(text)
enc.keys()
Out[1]: dict_keys(['input_ids', 'attention_mask'])
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用保存它tokenizer.save_pretrained("distilroberta-tokenizer")并尝试在本地加载它,则会失败。
[2]: tmp = AutoTokenizer.from_pretrained('distilroberta-tokenizer')
---------------------------------------------------------------------------
OSError Traceback (most recent call last)
/opt/conda/lib/python3.7/site-packages/transformers/configuration_utils.py in get_config_dict(cls, pretrained_model_name_or_path, **kwargs)
238 resume_download=resume_download,
--> 239 local_files_only=local_files_only,
240 )
/opt/conda/lib/python3.7/site-packages/transformers/file_utils.py in cached_path(url_or_filename, cache_dir, force_download, proxies, resume_download, user_agent, extract_compressed_file, force_extract, local_files_only)
266 # File, but it doesn't exist.
--> 267 raise EnvironmentError("file {} not found".format(url_or_filename))
268 else:
OSError: file …Run Code Online (Sandbox Code Playgroud) python deep-learning pytorch huggingface-transformers huggingface-tokenizers
我有一个关于“即时”标记化的问题。这个问题是通过阅读“如何使用 Transformers 和 Tokenizers 从头开始训练新的语言模型”引发的。最后有这样一句话:“如果您的数据集非常大,您可以选择动态加载和标记示例,而不是作为预处理步骤”。我尝试提出一个将datasets和结合起来的解决方案tokenizers,但没有找到一个好的模式。
我想解决方案需要将数据集包装到 Pytorch 数据集中。
作为文档中的具体示例
import torch
class SquadDataset(torch.utils.data.Dataset):
def __init__(self, encodings):
# instead of doing this beforehand, I'd like to do tokenization on the fly
self.encodings = encodings
def __getitem__(self, idx):
return {key: torch.tensor(val[idx]) for key, val in self.encodings.items()}
def __len__(self):
return len(self.encodings.input_ids)
train_dataset = SquadDataset(train_encodings)
Run Code Online (Sandbox Code Playgroud)
如何利用标记器的矢量化功能通过“即时”标记化来实现这一点?
当我运行 demo.py 时
\nfrom transformers import AutoTokenizer, AutoModel\n \ntokenizer = AutoTokenizer.from_pretrained("distilbert-base-multilingual-cased")\nmodel = AutoModel.from_pretrained("distilbert-base-multilingual-cased", return_dict=True)\n# print(model)\ndef count_parameters(model):\n return sum(p.numel() for p in model.parameters() if p.requires_grad)\nprint(count_parameters(model))\ninputs = tokenizer("\xe5\x8f\xb2\xe5\xaf\x86\xe6\x96\xaf\xe5\x85\x88\xe7\x94\x9f\xe4\xb8\x8d\xe5\x9c\xa8\xef\xbc\x8c\xe4\xbb\x96\xe5\x8e\xbb\xe7\x9c\x8b\xe7\x94\xb5\xe5\xbd\xb1\xe4\xba\x86\xe3\x80\x82Mr Smith is not in. He ________ ________to the cinema", return_tensors="pt")\nprint(inputs)\noutputs = model(**inputs)\nprint(outputs)\nRun Code Online (Sandbox Code Playgroud)\n代码显示
\n{'input_ids': tensor([[ 101, 2759, 3417, 4332, 2431, 5600, 2080, 3031, 10064, 2196,\n 2724, 5765, 5614, 3756, 2146, 1882, 12916, 11673, 10124, 10472,\n 10106, 119, 10357, 168, 168, 168, 168, 168, 168, 168,\n 168, 168, 168, 168, 168, 168, …Run Code Online (Sandbox Code Playgroud) multilingual distilbert huggingface-transformers huggingface-tokenizers
我正在尝试在线程上运行一个拥抱脸模型,模式完全是“cardiffnlp/twitter-roberta-base-sentiment”。但与此同时,我只想要它的一个实例,因为就时间而言,它真的很昂贵。
换句话说,我有多个 CSV 文件(几千个),每个文件都有大约 20k-30k 行,我希望所有这些文件中的每一行都由 Huggingface 模型执行,正如您可能已经想象到的那样我不想为每个线程实例化模型的原因(每个线程仅用于读取一行并将其写入数据库中)。我的方法的问题是,当我运行代码时,我会因为 Huggingface 模型而出现错误。
运行时错误:已借用
你们中的任何人都可以帮助我了解如何修复它吗?
抱脸型:
class EmotionDetection(object):
def __init__(self, model_name="cardiffnlp/twitter-roberta-base-sentiment"):
self.model_name = model_name
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name)
self.classifier = TextClassificationPipeline(model=model, tokenizer=tokenizer, return_all_scores=True,
task="sentiment-analysis", device=0)
def get_emotion_by_label(self, label: str):
if label == "LABEL_0":
return "negative"
elif label == "LABEL_1":
return "neutral"
elif label == "LABEL_2":
return "positive"
else:
print("SOMETHING IS WRONG")
return ""
def get_emotion(self, phrase):
results = self.classifier(phrase)
res = dict()
for result in results:
for emotion in …Run Code Online (Sandbox Code Playgroud) python multithreading threadpool huggingface-transformers huggingface-tokenizers
我正在使用 T5 模型和分词器来执行下游任务。我想向标记生成器添加某些空格,例如行结尾(\\t)和制表符(\\t)。添加这些标记可以工作,但不知何故标记器总是忽略第二个空格。因此,它将序列标记\xe2\x80\x9c\\n\\n\xe2\x80\x9d为单行结尾,并将序列"\\n\\n\\n\\n"标记为两个行结尾,依此类推。请参阅下文进行重现。
from transformers import T5Tokenizer\ntokenizer = T5Tokenizer.from_pretrained("t5-large")\ntokenizer.add_tokens(["\\n"])\n\ntokenizer.encode("\\n") # returns [32100, 1] as expected\ntokenizer.encode("\\n\\n") # returns [32100, 1] but expected would be [32100, 32100, 1]\ntokenizer.encode("\\n\\n\\n\\n") # returns [32100, 32100, 1] but expected would be [32100, 32100, 32100, 32100, 1]\nRun Code Online (Sandbox Code Playgroud)\n这种行为背后的原因是什么?这是一个错误还是与分词器工作原理相关的东西?我注意到这只发生在添加的空格上,而不会发生在其他字符上。
\n有没有办法防止分词器忽略重复的空格?
\nhuggingface-transformers huggingface-tokenizers sentencepiece
colab:https://colab.research.google.com/drive/1poFdFYmkR_rDM5U5Z2WWjTepMQ8h vzNc?usp=sharing
HF falcon 教程有以下行:
tokenizer.pad_token = tokenizer.eos_token
Run Code Online (Sandbox Code Playgroud)
我觉得很奇怪。pad 和 eos 是相同的,但为什么首先要在它们之间做出区分呢?
请注意,这样做 pad = eos. 这意味着在微调期间,模型永远不会被训练为输出 eos(最有可能),因为 eos 被视为填充令牌并且不会反向传播:
I just observed that when I set tokenizer.pad_token = tokenizer.eos_token during training, the model won't stop generating during inference, since it was trained to not output the eos token (per discussions above).
Run Code Online (Sandbox Code Playgroud)
我看到了这个(这里https://github.com/huggingface/transformers/issues/22794):
tokenizer.add_special_tokens({'pad_token': '[PAD]'})
Run Code Online (Sandbox Code Playgroud)
但这假设模型有 pad_token。我认为必须进行额外的检查,确保它确实具有 pad_token 的嵌入,以便不存在运行时错误(〜从嵌入“表”/矩阵提取矩阵中的类型错误)。
但如果这样做,可能需要注意初始化新令牌,以便它主导生成: https: //nlp.stanford.edu/~johnhew/vocab-expansion.html
代码:
tokenizer.pad_token = tokenizer.eos_token
Run Code Online (Sandbox Code Playgroud)
该死的,这仍然不起作用:
UserWarning: You …Run Code Online (Sandbox Code Playgroud) machine-learning pytorch huggingface-transformers huggingface-tokenizers huggingface
我正在使用 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
我按以下方式使用 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
我对生成式人工智能非常陌生。我有 64GB RAM 和 20GB GPU。我使用了 Huggingface 的一些开源模型,并使用 Python 简单地用开箱即用的模型提示并显示结果。我使用将模型下载到本地save_pretrained,然后尝试从本地加载模型。有用。但每次运行 python 文件都需要 10 多分钟才能显示结果。
有一个步骤Loading checkpoint shards每次需要6-7分钟。我做错了什么吗?为什么它每次都必须加载一些东西,即使模型是从本地引用的。
我尝试使用local_files_only=True, cache_dir=cache_dir, low_cpu_mem_usage=True, max_shard_size="200MB",没有解决时间问题。
如何在用户可用的情况下直接提示已保存的模型而不需要太多延迟。任何帮助将不胜感激
h2o huggingface-transformers huggingface-tokenizers huggingface llama
python ×3
huggingface ×2
pytorch ×2
distilbert ×1
gpt-2 ×1
h2o ×1
llama ×1
multilingual ×1
nlp ×1
threadpool ×1
tokenize ×1