BertPun c (восстановление пунктуации с помощью BERT) - PullRequest
0 голосов
/ 19 марта 2020

Я нашел скрипт https://github.com/nkrnrnk/BertPunc для восстановления пунктуации. И у меня есть один вопрос об этом методе.

Я кратко объясню логику c автора. Для каждого слова назначается один из четырех токенов: Другое (0), ПЕРИОД (1), КОММА (2), ВОПРОС (3). Далее все слова конвертируются в токены BERT. Вот пример:

  2045  0
  2003  0
  2200  0
  2210  0
  3983  0
  2301  0
  2974  0
  1999  0
  2068  2

Далее мы делаем отступы. Мы устанавливаем сегмент (например, восемь слов) и для каждого слова мы берем два слова перед токеном и четыре слова после токена. Также мы добавляем токен заполнения после каждого слова. Для самого первого слова нет слов раньше. Поэтому слово берется с конца. Аналогично, для последнего слова нет слов после, и поэтому слово берется с самого начала. Вот пример этого.

[1999, 2068, 2045, 0, 2003, 2200, 2210, 3983] 0
[2068, 2045, 2003, 0, 2200, 2210, 3983, 2301] 0
[2045, 2003, 2200, 0, 2210, 3983, 2301, 2974] 0
[2003, 2200, 2210, 0, 3983, 2301, 2974, 1999] 0
[2200, 2210, 3983, 0, 2301, 2974, 1999, 2068] 0
[2210, 3983, 2301, 0, 2974, 1999, 2068, 2045] 0
[3983, 2301, 2974, 0, 1999, 2068, 2045, 2003] 0
[2301, 2974, 1999, 0, 2068, 2045, 2003, 2200] 0
[2974, 1999, 2068, 0, 2045, 2003, 2200, 2210] 2

В первом столбце содержатся токены, а во втором столбце символы пунктуации. В первом столбце «0» соответствует заполнению. Далее мы делаем TensorDataset, а затем DataLoader. Во втором столбце «0» соответствует «другому», а «2» соответствует «периоду». Наконец, мы обучаем модель:

for inputs, labels in data_loader_train:
       inputs, labels = inputs.cuda(), labels.cuda()
       output = model(inputs)

Алгоритм работает хорошо, но я не понимаю следующее. Какой смысл ставить прокладку посередине? Может быть, мы можем сделать восстановление пунктуации с BERT более простым способом?

...