Я хочу решить задачу прогнозирования стресса с предварительно обученным русским бертом.
Входные данные выглядят так:
граммов сверху|000100000001000
Нули означают отсутствие стресса. Единицы представляют характер стрессовой позиции.
Я хочу отобразить его как слово -> индекс числа гласных
Так будет вроде граммов -> 1 сверху -> 1
Итак, для каждого токена это должен быть линейный слой с softmax.
Я понимаю эту часть, но мне сложно иметь дело с предварительной обработкой текста, потому что текстовый токенизатор может разбить слово на токены подслов.
Токенизатор принимает входную строку и возвращает такие токены
bert_tokenizer.encode(‘граммов сверху’) -> [101, 44505, 26656, 102]
Итак, как получить сопоставление позиций между входными символами и словами?
Желаемый результат должен быть таким: [[0, 7], [8, 14]]
Я пытался читать документы https://huggingface.co/transformers/main_classes/tokenizer.html</ а>
И нашел функцию convert_ids_to_tokens Она работает как
encoded = bert_tokenizer.encode(‘граммов сверху’) bert_tokenizer.convert_ids_to_tokens(encoded) -> [‘[CLS]’, ‘граммов’, ‘сверху’, ‘[SEP]’]
Но я не уверен, как использовать исходную строку и индексы напряжения для вычисления номера позиции напряжения для токена.
Источник: