Диффузия + NLP 🤝
💡 Рад поделиться интересным подходом к задаче Named Entity Recognition (NER) с использованием диффузионной модели. Будет особенно интересно тем, кто привык решать задачи NER через BIOES-схему.
📖 Обычно диффузионные модели применяются для генерации изображений (например, Kandinsky, Stable Diffusion). В таких моделях картинка восстанавливается из случайного шума в "направлении" того текста, который в неё подали
🤔 В нашем случае ситуация аналогична: 1. Сначала через BERT-подобную модель получаются эмбеддинги текста. 2. Затем генерируется матрица шума размером 2xN, где N — общее количество именованных сущностей, которые модель может найти в тексте. 3. Матрица имеет два столбца, поскольку по ней будут предсказаны границы сущностей (левая и правая). 4. Каждая граница предсказывается отдельной полносвязной сетью, которая на вход получает эмбеддинги текста и матрицу 2xN. 5. Предсказание представляет собой распределение вероятностей по токенам, откуда через argmax определяется граница сущности.
В результате получается список индексов токенов-границ. Например, для матрицы 2x7 часть границ будет отброшена по следующим причинам:
- низкая вероятность
- правая граница расположена перед левой
- дублирующиеся границы
Пусть останется три границы:
- (1,4)
- (19,19)
- (7,9)
Конкретный класс сущности предсказывается еще одной полносвязной сетью по той же матрице 2xN:
- (1,4) → Location
- (19,19) → Person
- (7,9) → Organisation
Визуализация этого процесса в закрепленной картинке
👀 Вот такой интересный аналог привычной BIOES-схемы.
За подробностями смотри статью и код: paper — https://aclanthology.org/2023.acl-long.215.pdf github — https://github.com/tricktreat/DiffusionNER
P.S. Эту статью показал мне научный руководитель в процессе работы над моим дипломом, где мы применили эту идею к похожей задаче с немного иной спецификой. В следующем посте расскажу подробнее...