"Начиная"

Языковые модели - это открытые сети знаний ... но их сложно использовать!

Присоединяйтесь ко мне, когда я погрузюсь в последнюю исследовательскую работу по созданию графов знаний с использованием языковых моделей на основе преобразователей.

В этой статье мы рассмотрим последнюю исследовательскую работу по построению графов знаний из текста с использованием языковых моделей на основе преобразователей. Документ, который мы рассмотрим, называется Языковые модели - это открытые графы знаний, где авторы утверждают, что в документе показано, как построить графы знаний (KG) из предварительно обученных языковых моделей (например, BERT, GPT-2). / 3), без присмотра человека .

Последняя часть, в которой утверждается, что люди не участвуют в процессе, меня очень взволновала. Сказав это, я научился относиться к таким заявлениям с недоверием. Я решил исследовать этот метод дальше, экспериментируя с различными компонентами конвейера, предложенного в статье. Идея состоит в том, чтобы понять влияние каждого шага в конвейере на конкретном примере предметной области и оценить, требуется ли какой-либо надзор со стороны экспертов в предметной области или специалистов по данным.

Примечание. Я предполагаю, что вы знакомы с концепцией графов знаний и языковых моделей на основе преобразователей. Вкратце, как указано здесь, граф знаний (KG) представляет собой набор взаимосвязанных описаний сущностей - объектов и событий реального мира или абстрактных концепций (например, документов). Это позволяет нам моделировать реальный мир в виде графа, который затем может быть рассмотрен, чтобы утверждать факты о мире. Чтобы узнать больше о моделях на основе трансформаторов, обратитесь к посту Джея Аламмара здесь и здесь. Вы также можете обратиться к моему сообщению За пределами классификации с трансформаторами и обнимающим лицом, где я подробно рассмотрю эти модели, особенно механизмы внимания, в которых хранится большая часть знаний.

Без лишних слов, приступим! :)

Большинство ведущих компаний начали использовать сети знаний (KG) для организации, управления и расширения знаний о своем бизнесе. Хотя большинство компаний довольно далеко продвинулись в заполнении KG экземплярами из различных источников структурированных данных, им сложно сделать то же самое из неструктурированных источников, таких как текст. Извлечение и построение знаний из текста с использованием методов, основанных на машинном обучении (ML) и обработке естественного языка (NLP), было в центре внимания многих ведущих университетов и исследователей. Давайте начнем с рассмотрения подхода, которому обычно придерживается большинство исследователей, с высоты птичьего полета ниже. Процесс является стандартным для отрасли, и вы можете найти множество публикаций и выступлений, но я нашел здесь один доклад (слегка устаревший, но очень простой и краткий): Talk

Как видно на рисунке выше, процесс начинается с синтаксического анализа и обогащения текста метаданными, такими как теги POS, именованные объекты, деревья синтаксического анализа зависимостей и т. Д. Следующим шагом является определение упоминаний в тексте (т.е. частей текста), которые, скорее всего, могут квалифицируются как сущности в графе знаний. Это называется обнаружением упоминания. Затем это передается через компоновщик сущностей, который находит наиболее вероятные сущности-кандидаты из целевого KG, а затем устраняет неоднозначность, запуская логику сверху (это может быть ML, справочные словари, сопоставление строк и т. Д.), Чтобы сопоставить каждое упоминание с конкретный узел в целевом KG. Последний шаг - придумать тщательно разработанные лингвистические особенности, основанные на обогащении, сделанном на шаге 1, и сущностях, использующих методы машинного обучения, логику первого порядка или необработанные правила, чтобы придумать наиболее вероятные отношения. Затем устраненные неоднозначные сущности и отношения создаются как выходные триплеты (например, субъект, предикат и объект) для связывания в граф.

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

Использование языковых моделей для построения графа знаний

Совсем недавно исследовательское сообщество начало изучать, как использовать глубокое обучение для создания языковых функций, которые традиционно создавались людьми. Давайте посмотрим на одну из таких работ - «Языковые модели - это открытые графы знаний» Чэнгуана Ванга, Сяо Лю, Дон Сонг. В Интернете есть несколько ресурсов, которые более подробно объясняют этот документ, но его также легко читать. Я попытаюсь пройти высокий уровень статьи, а затем сконцентрируюсь на экспериментах с предложенным конвейером.

Основная идея этой статьи - минимизировать участие людей в процессе создания графов знаний из текстовых данных. Авторы предполагают, что модели на основе преобразователей, такие как BERT или GPT2, обладают способностью изучать и хранить знания о предметной области, которые могут быть преобразованы в структурированный граф знаний. Они продолжают тестировать это на наборе данных TAC Knowledge Base Population (KBP) и Викиданных и публикуют обнадеживающие результаты по KG, используя предложенный метод.

Предлагаемый подход состоит из двух этапов Match & Map (MaMa). Давайте посмотрим, как они изменяют конвейер, который мы обсуждали выше:

Место, в котором этот подход отличается от предыдущих методов, - это использование механизмов внимания для определения триплетов кандидатов в тексте. Веса внимания, которые предварительно обученные модели на основе трансформаторов узнали во время обучения, дают нам представление о взаимосвязи между различными терминами в тексте. Эти веса, применяемые к якорным терминам (фрагментам существительных) из стандартной библиотеки, такой как spaCy, предоставляют возможные факты кандидатов (голова, отношение, хвост), которые затем могут быть устранены с помощью стандартного компоновщика сущностей, такого как REL .

Ниже приводится диаграмма, взятая непосредственно из статьи. Он показывает, как работает процесс сопоставления, выполняя поиск по лучу, чтобы найти тройки с наивысшим совокупным баллом.

Давайте сделаем еще один шаг и создадим детализированную версию предлагаемого конвейера на основе кода, предоставленного здесь (в документе не приводятся некоторые мелкие детали).

Как видно из приведенного выше потока, конвейер включает в себя гораздо больше, чем просто пропуск предложений через LM. Хотя LM может помочь нам генерировать факты-кандидаты, не менее важно настроить другие части конвейера. Все остальные части конвейера пытаются использовать предварительно обученные модели из таких библиотек, как spaCy, REL и Flair.

Эксперимент

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

Мы выберем один пример, в котором общие области и здравоохранение частично совпадают:

Второй пример касается здравоохранения:

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

Исходный код из статьи можно найти здесь: Исходный код

Я раздвоил репо и внес некоторые изменения, а именно - оболочку для запуска и визуализации вывода с помощью тире, поддержку запуска scispaCy Named Entity Recognizer (NER) и Entity Linker, а также возможность запускать различные языковые модели, поддерживаемые библиотекой Hugging face transformers. Вот ссылка на мое разветвленное репо (все еще в ветке, так как я добавляю больше вещей для экспериментов и в конечном итоге буду объединен с основным)

1. Готовые:

  • Чанки существительных для якорных терминов, найденные с использованием модели en_core_web_md из spaCy
  • модель bert-large-cased для языковой модели
  • Библиотека REL для связывания сущностей с графом знаний викиданных 2019
  • Пример предложения: Одна вещь, которую многие люди не знают об актере Роберте Де Ниро, известном своими печально известными ролями крутого парня в таких фильмах, как «Хорошие парни» и «Таксист», - это то, что он болеет раком 15 лет. выживший. В 2003 году у Де Ниро был диагностирован рак простаты, когда ему было 60 лет. Но благодаря регулярному обследованию на рак, которое привело к тому, что его врачи обнаружили болезнь на ранней стадии, актера быстро вылечили - и он смог продолжить свою плодотворную актерскую карьеру. em>

Как видите, он нашел только 1 триплет и смог связать его с объектами википедии:

head: «Robert_De_Niro», отношение: «диагностировать», tail: «Prostate_cancer», достоверность: 0,16

Примечание. Вы можете просто добавить к сущности префикс https://en.wikipedia.org/wiki/, чтобы просмотреть страницу википедии для этой сущности. Например: «https://en.wikipedia.org/wiki/Prostate_cancer

2. Используйте именованные сущности в дополнение к существительным для идентификации текста привязки (шаг 3 на рисунке 3).

Авторы используют фрагменты существительных из spaCy для определения якорных терминов, которые затем используются для поиска триплетов. Мы видели, что готовая реализация генерирует только один триплет. В большинстве предыдущих исследований на этом этапе использовались именованные сущности (см. Шаг 1 на рисунке 1, где рассказывается об общем подходе), поэтому давайте также воспользуемся распознавателем именованных сущностей (NER), чтобы помочь процессу. Давайте воспользуемся spaCy, чтобы предоставить нам именованные сущности в дополнение к существительным фрагментам (мы удаляем любые перекрывающиеся части). Давайте посмотрим, что получается из того же предложения:

Как мы видим, использование именованных сущностей оказывает значительное влияние, поскольку позволяет генерировать больше триплетов.

Примечание: вы также можете видеть, что компоновщик сущностей (REL) делает все возможное, чтобы идентифицировать сущности для различных упоминаний, и тот факт, что у нас больше упоминаний, чем необходимо, может вызвать шум. Например, у нас есть упоминание многие люди, которое было изменено на « Незабываемое_ (Nat_King_Cole_song) », 60 лет Было преобразовано в «Леттризм ». Хотя здесь мы не сделали явных попыток отфильтровать определенные типы сущностей из spaCy, мы можем сделать это на основе требований варианта использования, которые должны удалить многие нежелательные упоминания и, следовательно, отношения. Это типичный компромисс между затратами и выгодой, который необходимо найти в сценарии использования.

Давайте теперь попробуем использовать это на конкретном примере из сферы здравоохранения:

Конъюнктивит - это воспаление тонкой прозрачной оболочки (конъюнктивы), покрывающей белок глаза и внутреннюю поверхность век. Конъюнктивит, широко известный как «розовый глаз», чаще всего вызывается вирусом, но также может быть вызван бактериальной инфекцией, аллергией (например, на косметику, пыльцу) и химическим раздражением.

Модель по умолчанию en_core_web_md на этот раз не производит много, даже после добавления именованных сущностей в процесс -

Давайте переключимся на предварительно обученный NER для конкретной предметной области, который был обучен на наборе данных по здравоохранению от allenai и выпущен здесь: scispaCy

Как мы видим выше, специфичный для домена NER генерирует больше триплетов. Есть несколько неправильных троек, которые также извлекаются, и пара причин, по которым это может произойти:

  1. Порог, используемый для фильтрации триплетов, низкий (по умолчанию 0,005), что возвращает намного больше отношений. Мы рассмотрим влияние порога ниже в статье.
  2. Уверенность в триплетах (созданных на основе внимания) также зависит от типа используемого LM. Эта модель была в основном обучена на общем наборе данных, таком как Википедия (а не конкретно о здравоохранении), и, следовательно, возможно, не видели эти термины достаточное количество раз.

Переключение на другую модель scispaCy для идентификации именованных сущностей дает нам существенно разные результаты:

Наблюдение: очевидно, что та же языковая модель произвела гораздо больше триплетов, когда мы использовали релевантную именованную модель сущностей для выбора якорных терминов, а не только куски существительных или использовали NER по умолчанию из SpaCy. Это показывает, что просто подключи и работай непросто, и специалисту по анализу данных / эксперту по НЛП необходимо заранее выбрать правильный метод для определения текста привязки, что может потребовать некоторых экспериментов или обучения.

3. Выберите соответствующий линкер сущностей (шаг 8 на рисунке 3).

Давайте запустим пример домена о конъюнктивите с помощью компоновщика сущностей по умолчанию (REL). REL имеет возможность выбрать год корпуса википедии (я выбрал wiki_2019), который затем сопоставляет упоминания с сущностями в версии википедии 2019 года. Посмотрим на результат:

На рисунке выше мы видим, что он неплохо справляется с разрешением сущностей. Это потому, что мы выбрали пример с хорошо известными концепциями, на которые есть ссылки в wikipedia KG. Давайте выберем сложное предложение из той же области -

Phenylketonuria (PKU) and mild hyperphenylalaninemia (MHP) are allelic disorders caused by mutations in the gene encoding phenylalanine hydroxylase (PAH).

Приведенный выше график был сгенерирован путем передачи предложения через модель bert-large-cased, модель en_core_sci_lg из scispaCy для именованных сущностей и компоновщик сущностей REL. Мы видим, что компоновщик сущностей хорошо работает с некоторыми сущностями, но не работает с другими. Такие сущности, как «Mutant_ (Marvel_Comics)» или «National_Movement_Party» явно неверны.

Приведенный ниже график был сгенерирован с использованием той же конфигурации, за исключением компоновщика сущностей scispaCy, который был создан для определения концепций в области здравоохранения. Компоновщик сущностей scispaCy также позволяет нам отображать концепции в различные графы знаний в области медицины. В качестве цели я выбрал UMLs KG. Мы видим, что этот компоновщик сущностей неплохо справился с устранением неоднозначности узлов. Здесь, опять же, настройка порога может удалить ряд неверных триплетов, что обсуждается в следующем разделе.

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

4. Выберите правильный порог для фильтрации триплетов (шаг 7 на рисунке 3) и соответствующую языковую модель (шаг 2 на рисунке 3).

Наконец, давайте исследуем влияние переключения языковых моделей и пороговое значение, используемое для фильтрации триплетов. Эти два аспекта связаны, потому что выбор языковой модели определит средний порог, который будет работать для процесса фильтрации.

В документе дается некоторое представление о разнице между использованием модели, подобной BERT, и модели стиля GPT (авторегрессивной по своей природе). Они указывают на то, что модели, подобные BERT, лучше подходят для определения отношений, поскольку они двунаправлены по своей природе и видят токены в обоих направлениях, обучаясь предсказывать замаскированные токены. Это соответствовало моим экспериментам, и поэтому я решил сосредоточиться на моделях, основанных на BERT, для дальнейшего анализа.

Начнем с того же примера, который обсуждает конъюнктивит:

Конъюнктивит - это воспаление тонкой прозрачной оболочки (конъюнктивы), покрывающей белок глаза и внутреннюю поверхность век. Конъюнктивит, широко известный как «розовый глаз», чаще всего вызывается вирусом, но также может быть вызван бактериальной инфекцией, аллергией (например, на косметику, пыльцу) и химическим раздражением.

Мы будем экспериментировать с двумя моделями на основе трансформатора:

Специфическая языковая модель области здравоохранения от Hugging face (Ссылка): ‘ «bionlp / bluebert_pubmed_mimic_uncased_L-24_H-1024_A-16 ’’

Модель по умолчанию: bert-large-cased

Мы также попробуем три значения для порога: 0,005, 0,05 и 0,1.

Каждый приведенный ниже график является результатом одной из конфигураций, подробно описанных в приведенном ниже описании. Вы также можете увидеть верхнюю часть каждого рисунка, чтобы увидеть другие используемые параметры. Значения достоверности для каждого триплета отмечены на соответствующем краю шаблоном ‹relationName_confidenceScore›:

Наблюдение: графики почти идентичны для двух моделей, когда порог установлен на 0,005 (предложено авторами). Разница начинает проявляться, когда мы переходим к более высокому порогу 0,05. Модель для конкретной предметной области (bionlp / bluebert_pubmed_mimic_uncased_L-24_H-1024_A-16) показала большую уверенность в своих триплетах, когда порог был перемещен с 0,005 на 0,05 . Первоначально , я предполагал, что порог просто удалит некоторые существующие триплеты и оставит остальные как есть, но это было неправильное предположение. У большинства троек обновленные оценки были выше, чем раньше, когда порог был изменен с 0,005 на 0,05. Это означало бы, что поиск луча, который присваивает оценки каждому триплету, суммировал больше значений для каждого триплета из-за меньшего количества кандидатов.

В целом, существует компромисс между порогом и количеством триплетов, и эксперт по НЛП должен выбрать правильный порог, который существенно изменяет извлеченные триплеты.

Заключение

Отрадно видеть, что языковые модели могут использоваться для извлечения фактов-кандидатов из текста, но, как мы наблюдали в экспериментах выше, для специалиста по данным / эксперта по НЛП не менее важно настроить остальную часть конвейера на конкретный вариант использования. .

Получение правильных «знаний» во многом зависит от гораздо большего количества факторов, помимо подключения предварительно обученной LM, таких как:

  1. Определение правильных якорных терминов (фрагменты существительных, именованные объекты и т. Д.)
  2. Настройка соответствующих типов отношений (этот аспект не обсуждался в статье, но авторы также устанавливают ограничения на то, какие отношения допустимы на основе предопределенных словарей)
  3. Доступ к соответствующим предварительно обученным компоновщикам сущностей
  4. Настройка правильных порогов на тройню

использованная литература

  • Оригинал статьи: Ссылка
  • Исходный код: Ссылка
  • Модели-трансформеры от Hugging Face: Ссылка
  • Оригинальная статья REL Entity Linker: Link
  • REL Entity Linker Github: Ссылка
  • scispaCy: Ссылка
  • СПРАВОЧНИК по распознаванию именованных лиц (NER) в биомедицине: Ссылка
  • Dash от Plotly: Ссылка
  • Dash + Plotly для визуализации сети: Ссылка
  • Данные из:






https://www.kaggle.com/tboyle10/medicaltranscriptions