K-BERT: Enabling Language Representation with Knowledge Graph

https://arxiv.org/pdf/1909.07606v1.pdf

Когда - 17 сентября 2019



🕶 В чем крутость

Важно и нужно хорошо решать задачи на текстах. Часто это делают, используя языковые модели (например BERT), которые учат векторные представления слов и предложений, исходя из совстречаемости слов в текстах. Но иногда языковой модели сложно хорошо обучиться, особенно в случае текстов с большим количеством терминов. Например, если мы хотим определить истинность утверждения "Парацетомол лечит простуду", то языковая модель скорее всего не поможет достаточно хорошо - небольшое количество текстов содержат одновременные упоминания слов "парацетамол" и "простуда". В статье авторы предлагают включать в обучение сети онтологии - набор слов и взаимотношений между ними (например - "Парацетомол - лекарство от простуды"). Такие онтологии составлены специалистами для многих областей знаний. В итоге авторы получили улучшение метрик на ряде задач (например, на 3% в NER на медицинских текстах) и выложили свой код, причем модель, включающая предобученный энкодер BERT и произвольную онтологию любой области знаний, дообучается вычислительно просто.



🔦 Подробности

🌲 Дерево слов

На вход модели даются предложения - последовательность слов, и онтологии - тройки слово-связь-слово. Например, предложение - "Тим Кук поедет в Пекин", онтология - "Пекин - столица Китая" и "Кук - CEO Apple". Затем из предложения мы делаем дерево - если в онтологии содержится слово из предложения - мы достраиваем ветвление от слова из предложения (например, "Кук") к связанному слову из онтологии (например, "Apple") через связь (например, "CEO")

🔝 Вектора в BERT

Модель BERT использут разные виды векторных представлений - среди них вектор для каждого слова, и номер для позиции каждого слова. Дерево вытягивается в последовательность следующим образом - сначала вставляются слова из веток текущего слова, а потом уже слова, идущие за текущим словом в предложении (Тим Кук CEO Apple поедет в Пекин столицу Китая) (смотри картинку под постом) . Позиционные эмбеддинги учитывают структуру предложения - словам из веток и словам, идущим за словом в предложении, мы даем одинаковый номер (Тим -1, Кук -2, CEO -3, Apple - 4, поедет - 3 и тд)

🤡 Маскированный аттеншн

Однако, чтобы не учитывать при обучении векторных представлений слова в предложении связи и слова из онтологий других слов в предложении, нужно немного трансформировать слой внимания (Слово "Кук" не должно ничего знать про "столицу Китая"). Предлагается сделать квадратную матрицу, в которой указать, занулять ли вес внимания двух слов в дереве или нет (это гладким образом пробрасывается через добавление минус бесконечности к скалярному произведению запроса и ключа в коэффициенте внимания)



💡 Что в итоге

1) В последнее время выходит много статей на тему улучшений и различных применений энкодера модели BERT. BERT - это круто

2) Теперь можно просто взять код авторов https://github.com/autoliuweijie/K-BERT, онтологию по специфичной теме, предобученную модель BERT и улучшить качество на своей задаче бесплатно и без смс