Маскирование только определенных c слов с помощью Huggingface - PullRequest
0 голосов
/ 10 июля 2020

Какой была бы наилучшая стратегия для маски только с указанием c слов во время обучения LM?

Моя цель - динамически замаскировать во время пакетной обработки только слова, представляющие интерес, которые я ранее собрал в списке.

Я уже изучал функцию mask_tokens() в DataCollatorForLanguageModeling class, которая является функцией, фактически маскирующей токены во время каждой партии, но Я не могу найти эффективного и умного способа замаскировать только определенные c слова и соответствующие им идентификаторы.

Я попробовал один наивный подход, состоящий в сопоставлении всех идентификаторов каждой партии со списком идентификаторов слов для маскировки. Однако подход for-l oop отрицательно сказывается на производительности.

.

Побочная проблема с пробелом с префиксом слова - уже исправлена ​​

Спасибо @ amdex1 и @cronoik за помощь с побочной проблемой. Эта проблема возникла из-за того, что токенизатор не только разбивает одно слово на несколько токенов, но также добавляет специальные символы, если слово не встречается в начале предложения. Например:

Слово «Валькирия»:

  • в начале предложений разделяется на ['V', 'alky', 'ria'] с соответствующими идентификаторами: [846, 44068, 6374].
  • в то время как в середине предложения как ['ĠV', 'alky', 'ria'] с соответствующие ID: [468, 44068, 6374],

Решается установкой add_prefix_space=True в токенизаторе.

...