Учитывая список токенов, введите:
>>> tokenized_text = "[CLS] my dog is cute [SEP] he likes slack ##ing [SEP]".split()
>>> tokenized_text
['[CLS]', 'my', 'dog', 'is', 'cute', '[SEP]', 'he', 'likes', 'slack', '##ing', '[SEP]']
Цель состоит в том, чтобы создать индекс на срок до каждого [SEP]
слева направо, найти токены [SEP]
, а затем постепенно добавить1 после каждого [SEP]
, поэтому желаемые выходные индексы для списка tokenize_text
выше:
[0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1]
Я пробовал:
# Find the indices of `[SEP]`.
>>> sep_indices = np.array(np.where(np.array(tokenized_text) == "[SEP]"))[0]
>>> sep_indices
array([ 5, 10])
>>> prev = 0
>>> out =[]
>>> for i, idx in enumerate(sep_indices):
... for _ in range(idx-prev):
... out.append(i)
... prev = idx
...
>>> out = [0] + out[:-1]
>>> out
[0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1]
Но есть ли более простой способдобиться правильного вывода?