Определение типов для деambiguization сущностей

Читать статью
Artwork of a jaguar pacing on an elevated highway, the sun setting under a purple gradient sky

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

Например, для предложения вроде «хищник увидел, как ягуар пересекает джунгли», вместо того чтобы пытаться напрямую понять, означает ли слово «ягуар» автомобиль, животное или что-то еще, система играет в »20 вопросов» с заранее выбранным набором категорий. Такой подход значительно превосходит современные аналоги на нескольких наборах данных для снятия омонимии сущностей.

Мы достигаем точности 94.88% на CoNLL (YAGO) (предыдущие лучшие результаты:  91.50% и 91.70%) и 90.85% на соревновании TAC KBP 2010 (предыдущие лучшие результаты:  87.20% и 87.70%). В предыдущих методах использовались распределенные представления. Типы могут справиться с этими задачами почти идеально, так как идеальное прогнозирование типов дало бы точность в 98,6–99%.

Общий обзор

Наша система выполняет следующие шаги:

  1. Извлечь каждую внутреннюю ссылку Википедии, чтобы определить для каждого слова набор возможных сущностей, на которые оно может ссылаться. Например, встречая ссылку [jaguar](https://en.wikipedia.org/wiki/Jaguar) на странице Википедии, мы делаем вывод, что https://en.wikipedia.org/wiki/Jaguar — одно из значений слова «ягуар».
  2. Пройти по дереву категорий Википедии (используяграф знаний Wikidata), чтобы определить для каждой сущности набор категорий, к которым она принадлежит. Например, внизу страницы Википедии о машинах Jaguar указаны следующие категории (которые в свою очередь имеют собственные категории, такие как Automobiles): «British brands | Car brands | Jaguar cars | Jaguar vehicles».
  3. Выбрать список из примерно 100 категорий в качестве системы «типов» и оптимизировать этот выбор категорий так, чтобы они компактно выражали любую сущность. Мы знаем отображение сущностей в категории, поэтому, имея систему типов, мы можем представить каждую сущность как 100-мерный бинарный вектор, указывающий на принадлежность к каждой категории.
  4. Используя каждую внутреннюю ссылку Википедии и ее окружающий контекст, создать обучающие данные, сопоставляющие слово с контекстом со 100-мерным бинарным представлением соответствующей сущности, и обучить нейросеть предсказывать это отображение. Это связывает воедино предыдущие шаги: ссылки Википедии сопоставляют слово с сущностью, категории для каждой сущности известны из шага 2, а на шаге 3 были выбраны категории для нашей системы типов.
  5. На этапе тестирования, получая на вход слово и окружающий контекст, вывод нашей нейросети можно интерпретировать как вероятность того, что слово принадлежит к каждой категории. Если бы нам был известен точный набор принадлежностей к категориям, мы бы сузили круг до одной сущности (при условии удачно выбранных категорий). Но вместо этого мы должны сыграть в вероятностные 20 вопросов: использовать теорему Байеса, чтобы рассчитать шанс того, что слово разрешает омонимию в каждую из возможных сущностей.

Другие примеры

Вот еще несколько примеров работы нашей системы:

Очистка данных

Граф знаний Wikidata можно превратить в источник обучающих данных для сопоставления мелкогранулированных сущностей с типами. Мы рекурсивно применяем его отношение instance of, чтобы определить набор типов для любой заданной сущности — например, любой дочерний узел человека имеет тип «человек». Википедия также может предоставлять сопоставление сущностей с типами через свои category link.

Статистика внутренних ссылок Википедии дает хорошую оценку вероятности того, что конкретная фраза относится к определенной сущности. Тем не менее, эти данные зашумлены, поскольку Википедия часто ссылается на конкретный экземпляр типа, а не на сам тип (анафора — например, «король» → Карл I Стюарт) или ссылается с псевдонима (метонимия). Это приводит к взрывному росту связанных сущностей (например, у слова «король» 974 связанные сущности) и искажению частоты ссылок (например, «королева» ссылается на группу Queen 4920 раз, на Елизавету II — 1430 раз, а на монарха — всего 32 раза).

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

После этого процесса количество связанных сущностей для слова «король» сокращается с 974 до 14, в то время как число ссылок от слова «королева» к монарху увеличивается с 32 до 3553.

Создание эффективной системы типов

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

Нам нужно выбрать типы, которые являются различимыми (чтобы быстро сужать возможный набор сущностей) и при этом простыми для обучения (чтобы окружающий контекст был информативен для нейросети при определении типа). Мы руководствуемся двумя эвристиками: обучаемостью (среднее значение показателей площади под кривой [AUC] для классификатора, обученного предсказывать принадлежность к типу) и точностью оракула (насколько хорошо мы разрешали бы омонимию сущностей при идеальном прогнозировании всех типов).

Эволюция системы типов

Мы обучаем бинарные классификаторы предсказывать принадлежность к каждому из 150 000 наиболее распространенных типов в нашем датасете с учетом окна контекста. Площадь под кривой (AUC) классификатора становится «оценкой обучаемости» для этого типа. Высокий показатель AUC означает, что тип легко предсказать по контексту; низкая производительность может указывать на нехватку обучающих данных или на то, что оконное окружение слова малополезно (обычно это свойственно для неестественных категорий, таких как ISBN). На обучение нашей полной модели уходит несколько дней, поэтому в качестве прокси для расчета «оценки обучаемости» мы используем гораздо меньшую модель, обучение которой занимает всего 2,5 секунды.

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

Чтобы лучше визуализировать, какие аспекты проектирования системы типов даются легко, а какие — с трудом, мы предлагаем вам попробовать свои силы в ее создании ниже. Выбрав домен высокого уровня, вы можете начать изучение неоднозначных примеров. Возможные варианты ответа показаны в виде кружков на верхнем ряду, а правильный ответ — цветной кружок (наведите курсор, чтобы увидеть его название). В нижнем ряду находятся типы, которые вы можете использовать. Линии, соединяющие верхний ряд с нижним — это отношения наследования. Выберите нужные вам связи. Как только у вас наберется достаточно связей, чтобы отделить правильный ответ от остальных, омонимия в примере будет разрешена.

Нейросетевая система типов

Используя лучшее решение из нашей оптимизации системы типов, мы теперь можем размечать данные из Википедии с помощью меток, сгенерированных системой типов. Используя эти данные (в наших экспериментах — по 400 млн токенов для английского и французского языков), мы можем обучить двунаправленную LSTM для независимого предсказания принадлежности ко всем типам для каждого слова. В исходном тексте Википедии мы имеем супервизию только по внутренним ссылкам, однако этого достаточно для обучения глубокой нейросети предсказанию принадлежности к типам с F1-мерой более 0,91.

Одна из наших систем типов, обнаруженная с помощью лучевого поиска (beam search), включает такие типы, как Aviation,  Clothing и Games (а также удивительно специфичные, например 1754 in Canada, что указывает на то, что 1754 год был насыщен событиями в датасете из 1000 статей Википедии, на котором она обучалась); вы также можете посмотреть полную систему типов.

Инференс

Прогнозирование сущностей в документе обычно основывается на метрике «согласованности» между различными сущностями (например, оценке того, насколько каждая сущность подходит к остальным), что составляет O(N^2) от длины документа. Напротив, время работы нашей системы составляет O(N), поскольку нам нужно лишь искать каждую фразу в префиксном дереве (trie), сопоставляющем фразы с их возможными значениями. Мы ранжируем каждую из возможных сущностей в соответствии с частотой ссылок в Википедии, уточняя рейтинг взвешиванием каждой сущности по ее правдоподобию в рамках классификатора типов. Новые сущности могут быть добавлены простым указанием их принадлежности к типам (человек, животное, страна происхождения, временной период и т. д.).

Дальнейшие шаги

Наш подход имеет множество отличий от предыдущих работ по этой проблеме. Нам интересно, насколько эффективно сквозное обучение распределенных представлений по сравнению с разработанным нами подходом на основе вывода типов. Системы типов в данном случае были обнаружены с использованием небольшой подборки Википедии; масштабирование на всю Википедию может позволить создать систему типов с широким спектром применения. Надеемся, наш код покажется вам полезным!

Если вы хотите помочь в продвижении подобных исследований, пожалуйста, подайте заявку в OpenAI!

Полный текст статьи читайте на OpenAI