为变压器微调组织数据
Organize data for transformer fine-tuning
我有一个同义词和非同义词的语料库。这些存储在 python 个词典列表中,例如 {"sentence1": <string>, "sentence2": <string>, "label": <1.0 or 0.0> }
。请注意,这个词(或句子)不必是标记器中的单个标记。
我想微调一个基于 BERT 的模型来接受两个句子,例如:[[CLS], <sentence1_token1>], ...,<sentence1_tokenN>, [SEP], <sentence2_token1>], ..., <sentence2_tokenM>, [SEP]]
并预测“标签”(0.0 到 1.0 之间的测量值)。
组织此数据以促进拥抱面变换器微调的最佳方法是什么?
编码时可以使用 Tokenizer __call__
方法连接两个句子。
如果您使用的是 PyTorch 实现,这里有一个示例:
import torch
from transformers import AutoTokenizer
sentences1 = ... # List containing all sentences 1
sentences2 = ... # List containing all sentences 2
labels = ... # List containing all labels (0 or 1)
TOKENIZER_NAME = "bert-base-cased"
tokenizer = AutoTokenizer.from_pretrained(TOKENIZER_NAME)
encodings = tokenizer(
sentences1,
sentences2,
return_tensors="pt"
)
labels = torch.tensor(labels)
然后您可以创建自定义数据集以在训练中使用它:
class CustomRealDataset(torch.utils.data.Dataset):
def __init__(self, encodings, labels):
self.encodings = encodings
self.labels = labels
def __getitem__(self, idx):
item = {key: value[idx] for key, value in self.encodings.items()}
item["labels"] = self.labels[idx]
return item
def __len__(self):
return len(self.labels)
我有一个同义词和非同义词的语料库。这些存储在 python 个词典列表中,例如 {"sentence1": <string>, "sentence2": <string>, "label": <1.0 or 0.0> }
。请注意,这个词(或句子)不必是标记器中的单个标记。
我想微调一个基于 BERT 的模型来接受两个句子,例如:[[CLS], <sentence1_token1>], ...,<sentence1_tokenN>, [SEP], <sentence2_token1>], ..., <sentence2_tokenM>, [SEP]]
并预测“标签”(0.0 到 1.0 之间的测量值)。
组织此数据以促进拥抱面变换器微调的最佳方法是什么?
编码时可以使用 Tokenizer __call__
方法连接两个句子。
如果您使用的是 PyTorch 实现,这里有一个示例:
import torch
from transformers import AutoTokenizer
sentences1 = ... # List containing all sentences 1
sentences2 = ... # List containing all sentences 2
labels = ... # List containing all labels (0 or 1)
TOKENIZER_NAME = "bert-base-cased"
tokenizer = AutoTokenizer.from_pretrained(TOKENIZER_NAME)
encodings = tokenizer(
sentences1,
sentences2,
return_tensors="pt"
)
labels = torch.tensor(labels)
然后您可以创建自定义数据集以在训练中使用它:
class CustomRealDataset(torch.utils.data.Dataset):
def __init__(self, encodings, labels):
self.encodings = encodings
self.labels = labels
def __getitem__(self, idx):
item = {key: value[idx] for key, value in self.encodings.items()}
item["labels"] = self.labels[idx]
return item
def __len__(self):
return len(self.labels)