Автоматическое извлечение гиперонимической (гипонимической) связи

⚠️ В этой статье я в основном сосредоточусь на паттернах Херста, реализации и использовании для извлечения гипернимов. Однако я буду использовать распознавание именованных объектов (NER) и набор данных патентов; поэтому я рекомендую проверить мой предыдущий пост в этом цикле.



Узоры… узоры повсюду…

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

Полезность отношений гипонимов

гиперним — …слово с широким значением, составляющее категорию, в которую попадают слова с более конкретным значением;

гипоним — … перевернутое значение; слово, имеющее более конкретное значение, чем общий термин, применимый к нему.

Давайте сделаем пример для ясного понимания:

Здесь «компакт-диск» и «жесткий диск» — это гипоним «единиц хранения». Наоборот, «единицы хранения» — это гипероним от «компакт-диск» и «жесткий диск».

Такое лексическое отношение является важным строительным блоком для задач НЛП. Разнообразие этих заданий зависит от поставленной цели и может быть таким, как:

  • Прогнозирование таксономии: определение более широких категорий для терминов, построение отношений таксономии (например, WikiData GraphAPI)
  • Извлечение информации (IE):автоматический поиск конкретной информации из текста очень надежен в отношении искомых объектов.
  • Создание набора данных: передовые модели нуждаются в изучении примеров для определения отношений между объектами.

Модели Херста

Итак, как мы можем обнаружить и извлечь такое отношение? Пришло время поговорить о работе исследователя компьютерной лингвистики Марти Херст. Одно из ее самых популярных исследований посвящено созданию набора тестовых шаблонов, которые можно использовать для извлечения значимой информации из текста. Эти шаблоны широко известны как "Шаблоны Херста".

Мы можем формализовать этот шаблон как «X, который является Y», где X — это гипероним, а Y — это гипоним. Это был один из многих паттернов Hearst Patterns. Вот список, чтобы дать вам интуитивное представление об этой идее:

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

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

НО это не совсем так!

В этой статье исследовательской группы FB(Meta) показано, что

«…простые методы на основе шаблонов неизменно превосходят методы распределения на обычных наборах эталонных данных».

Иногда старых добрых надежных инструментов более чем достаточно 🛠

Реализация с помощью SpaCy

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

Данные

В качестве примера я буду использовать тексты патентов в подразделе G06K(Распознавание данных/представление данных) патентов. Кроме того, я обучил пользовательскую модель NER распознавать технические термины. Я подробно описал этот набор данных в своем предыдущем посте.

⚠️ Данные защищены авторским правом и безопасны для использования в коммерческих целях. В соответствии с USPTO: С учетом ограниченных исключений, отраженных в 37 CFR 1.71(d) & (e) и 1.84(s), текст и рисунки патента обычно не подпадают под ограничения авторского права.

Выполнение

Создание шаблонов внутри SpaCy довольно просто. Поскольку мы используем модель NER, мы можем полагаться на распознавание для фильтрации сущностей, которые не входят в нашу область интересов.

Шаблоны могут быть созданы в формате JSON. Вот пример их набора на основе Документации по сопоставлению правил SpaCy.

Вы можете видеть, что, указав ENT_TYPE, мы используем модель NER для сопоставления только слов в этом домене.

Реализация на Python довольно проста. Читаем текст, инициализируем matcher, читаем шаблоны из JSON и добавляем их в сопоставитель.

Просто, выполнив matcher(doc), мы извлекаем список гипернимных отношений. Вместе с извлеченными шаблонами мы получили некоторую информацию о совпадениях, например имена шаблонов (гипер\рипер в нашем случае) и является ли это многословным отношением.

Многословные шаблоны

Наиболее распространенная проблема, с которой мы сталкивались при использовании сопоставления и шаблонов, — это многословное гипернимное отношение.

Поскольку сопоставитель не может распознавать разные сущности под одним шаблоном, здесь мы предлагаем подсказку, которая может оказаться полезной ;)

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

Главный трюк в коде заключается в том, что мы создаем список с «продолжить слова» и проверяем предложение с несколькими совпадениями сущностей.

Результаты и примечания

Вуаля ✨! Извлекаем гипернимные отношения в пользовательском домене.

Полный код с подробным блокнотом и набором данных вы можете найти здесь:



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

Подтверждение

Особая благодарность моей команде в этом проекте: Марвану МАШРА и Гаэтану СЕРРЕ.