Google BERT для NLP: заменить иностранные символы в vocab.txt, чтобы добавить слова? - PullRequest
0 голосов
/ 06 февраля 2019

Я уточняю модель BERT, но мне нужно добавить несколько тысяч слов.Я знаю, что можно заменить ~ 1000 [unused#] строк в верхней части vocab.txt, но я также заметил, что в файле есть тысячи одиночных иностранных символов (юникод), которые я никогда не буду использовать.Для тонкой настройки, возможно ли заменить их моими словами, точной настройкой, и модель по-прежнему работает правильно?

1 Ответ

0 голосов
/ 19 июня 2019

Вес неиспользованных слов по существу случайным образом инициализируется только потому, что они не использовались.Если вы просто замените их своими собственными словами, но не будете проводить предварительную подготовку в корпусе, относящемся к вашему домену, то это по существу останется только случайным.Так что, если вы замените и продолжите тонкую настройку, ИМО не принесет много пользы.

Позвольте мне указать вам на проблему с github .По словам автора статьи:

Моя рекомендация будет состоять в том, чтобы просто использовать существующий словарный запас вокаба и выполнить предварительную триангуляцию для дополнительных шагов по тексту в домене, и он должен изучить композиционность "длясвободно".Имейте в виду, что с словарным запасом слов в основном нет слов из словарного запаса, и вы действительно не знаете, какие слова были замечены в предварительном обучении и нет.Тот факт, что слово было разбито на кусочки, вовсе не означает, что оно встречается редко, на самом деле многие слова, разбитые на кусочки, были замечены более 5000 раз в данных предварительной подготовки.

Но если вы хотите добавитьБольше слов вы можете: (a) Просто замените жетоны "[unusedX]" на свой словарный запас.Так как они не использовались, они фактически случайным образом инициализируются.(b) Добавьте его в конец вокаба и напишите скрипт, который генерирует новую контрольную точку, идентичную предварительно обученной контрольной точке, но с большим вокабом, где новые вложения инициализируются случайным образом (для инициализации мы использовали tf.truncated_normal_initializer (StdDev = 0,02)).Это, вероятно, потребует обхода с помощью некоторых вызовов tf.concat () и tf.assign ().

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...