Как объединить две токенизированные последовательности Берта - PullRequest
0 голосов
/ 03 августа 2020

Допустим, у меня есть две токенизированные последовательности BERT:

seq1 = tensor([[ 101,  2023,  2003,  1996, 23032,   102]])
seq2 = tensor([[ 101, 2023, 2003, 6019, 1015,  102]])

Это создается с помощью токенизатора huggingface:

seq = torch.tensor(tokenizer.encode(text=query, add_special_tokens=True)).unsqueeze(0)

Как лучше всего объединить токенизированные последовательности, чтобы получить одну финальную последовательность, в которой токены [sep] автоматически увеличиваются?

Например:

combined = tensor([[ 101,  2023,  2003,  1996, 23032,   102,  2023,  2003,  6019,  1015,
           102]])

Кажется, что мне нужно l oop через и увеличить специальные токены, но это также кажется хаки.

1 Ответ

1 голос
/ 04 августа 2020

Есть несколько вариантов достижения того, что вы ищете. Вы можете, например, использовать вход test_pair токенизатора, если вы можете работать со строками напрямую. Вы также можете объединить тензоры с помощью torch.cat . Взгляните на пример ниже:

import torch
from transformers import BertTokenizer

tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')

query1= 'hello stackoverflow'
query2= 'hello huggingface'
#creating an input pair with the original strings
print(tokenizer.encode(text = query1, text_pair=query2, return_tensors='pt'))

seq1 = tokenizer.encode(text=query1, return_tensors='pt')
seq2  = tokenizer.encode(text=query2, return_tensors='pt')
#concatenating existing tensors 
print(torch.cat((seq1, seq2[:, 1:]),dim=1))

Вывод:

tensor([[  101,  7592,  9991,  7840, 12314,   102,  7592, 17662, 12172,   102]])
tensor([[  101,  7592,  9991,  7840, 12314,   102,  7592, 17662, 12172,   102]])
...