Мне дали большой CSV, каждая строка которого представляет собой набор токенов BERT, сделанных с обнимающим лицом BertTokenizer (https://huggingface.co/transformers/main_classes/tokenizer.html). 1 строка этого файла выглядит следующим образом:
101, 108, 31278, 90939, 70325, 196, 199, 71436, 10107, 29190, 10107, 106, 16680, 68314, 10153, 17015, 15934, 10104, 108, 10233, 12396, 14945, 10107, 10858, 11405, 13600, 13597, 169, 57343, 64482, 119, 119, 119, 100, 11741, 16381, 10109, 68830, 10110, 20886, 108, 10233, 11127, 21768, 100, 14120, 131, 120, 120, 188, 119, 11170, 120, 12132, 10884, 10157, 11490, 12022, 10113, 10731, 10729, 11565, 14120, 131, 120, 120, 188, 119, 11170, 120, 162, 11211, 11703, 12022, 11211, 10240, 44466, 100886, 102
и таких строк 9 миллионов
Теперь я пытаюсь получить вложения из этих токенов, например: this:
def embedding:
tokenizer = BertTokenizer.from_pretrained('bert-base-multilingual-cased', do_lower_case=False)
model = BertModel.from_pretrained('bert-base-multilingual-cased')
input_ids = torch.tensor([101, 108, 31278, 90939, 70325, 196, 199, 71436, 10107, 29190, 10107, 106, 16680, 68314, 10153, 17015, 15934, 10104, 108, 10233, 12396, 14945, 10107, 10858, 11405, 13600, 13597, 169, 57343, 64482, 119, 119, 119, 100, 11741, 16381, 10109, 68830, 10110, 20886, 108, 10233, 11127, 21768, 100, 14120, 131, 120, 120, 188, 119, 11170, 120, 12132, 10884, 10157, 11490, 12022, 10113, 10731, 10729, 11565, 14120, 131, 120, 120, 188, 119, 11170, 120, 162, 11211, 11703, 12022, 11211, 10240, 44466, 100886, 102]).unsqueeze(0) # Batch size 1
outputs = model(input_ids)
last_hidden_states = outputs[0][0][0] # The last hidden-state is the first element of the output tuple
Вывод этого - вложение, соответствующее линии. Размер 768 * 1 тензор. Семантически все в порядке. Но когда я делаю это для полного файла, получается 768 * 9,0000,000 torch tensors
. Таким образом, я получаю ошибку памяти даже на большой машине с 768 ГБ ОЗУ. Вот как я называю эту функцию: tokens['embeddings'] = tokens['text_tokens'].apply(lambda x: embedding(x))
tokens
- это фрейм данных pandas с 9 миллионами строк, каждая из которых содержит токены BERT.
Можно ли уменьшить размер скрытых единиц по умолчанию, который здесь равен 768: https://huggingface.co/transformers/main_classes/model.html
Спасибо за помощь.