Для реализации того, что вы говорите в pyTorch, потребуется адаптация преобразователя Transformer:
1) Определить пользовательский токенизатор, который разбивает слова на вложения символов (вместо вложения слов или кусочков)
2) Определить маску для каждого слова (аналогично тому, как использовалась оригинальная бумага для маскировки будущих токенов в декодере), чтобы заставить модель ограничиваться контекстом слова (на первом этапе)
3) Затем используйте традиционный Transformer с маской (эффективно ограничивающей контекст на уровне слов).
4) Затем отбросьте маску и снова примените Transformer (контекст уровня предложения).
.
О чем следует быть осторожным:
1) Помните, что длина выходного сигнала кодировщика Transformer всегда равна размеру входного сигнала (декодер способен генерировать более длинные или более короткие последовательности). Таким образом, на первом этапе у вас будут не вложения на уровне слов (как показано на диаграмме), а вложения на уровне символов. Если вы хотите объединить их в вложения на уровне слов, вам понадобится дополнительный промежуточный шаг декодера или слияние встраиваний с использованием пользовательской стратегии (например, выученная взвешенная сумма или использование чего-то похожего на токен BERT).
2) Вы можете столкнуться с проблемами эффективности. Помните, что Transformer - это O (n ^ 2), поэтому чем длиннее последовательность, тем она дороже в вычислительном отношении. В оригинальном Transformer, если у вас было предложение длиной 10 слов, то Thansformer должен был иметь дело с последовательностью из 10 токенов. Если вы используете вложения по частям, ваша модель будет работать с ~ 15 последовательностями токенов. Но если вы используете встраивания на уровне символов, я предполагаю, что вы будете иметь дело с ~ 50 последовательностями токенов, которые могут оказаться неосуществимыми для длинных предложений, поэтому вам, возможно, придется усечь свой ввод (и вы потеряете все длинные термин сила зависимости внимания моделей).
3) Вы уверены, что у вас будет представительный вклад, добавив Transformer уровня персонажа? Transformer стремится обогащать встраивания на основе контекста (окружающих встраиваний), поэтому в оригинальной реализации использовались встраивания на уровне слов. BERT использует встраивания по частям, чтобы использовать языковые закономерности в связанных словах, а GPT-2 использует Byte-Pais-Embeddings (BPE), которые я не рекомендую в вашем случае, потому что он больше подходит для предсказания следующего токена , В каком случае, по вашему мнению, какая информация будет захвачена при встраивании изученных символов, чтобы ее можно было эффективно разделить между символами слова? Как вы думаете, это будет богаче, чем использование выученного вложения для каждого слова или части слова? Я думаю, это то, что вы пытаетесь выяснить ... верно?