Масштабная классификация по нескольким меткам с использованием ExtremeText

В этом посте мы описываем метод, используемый в Synapse Medicine для автоматического перевода запроса на естественном языке в термины MeSH.

Авторы Axelle Rondepierre, Julien Jouganous из Synapse Medicine

Какова цель проекта?

В рамках моей магистерской программы прикладной математики и науки о данных в INSA Toulouse я присоединился к Synapse Medicine на 6-месячную стажировку. Synapse Medicine - французский стартап, целью которого является разработка платформы искусственного интеллекта для организации и обеспечения доступности информации о лекарствах. Он предоставляет врачам интеллектуального виртуального помощника, способного ответить на любые вопросы о лекарствах. Он также может проанализировать рецепт по картинке и дать информацию о противопоказаниях. Synapse Medicine работает над несколькими проектами, чтобы удовлетворить потребности врачей, фармацевтов и пациентов.

Один из этих проектов касается базы данных PubMed. PubMed включает несколько миллионов статей по биомедицине, каждая из которых проиндексирована с помощью контролируемого словаря под названием Medical Subject Headings (MeSH). Этот словарь дает подробную информацию о темах, затронутых в статье, и позволяет производить оптимальный поиск в базе данных. Однако у этой системы есть недостатки: 1) каждая статья вручную индексируется профессионалами-людьми, что приводит к значительным задержкам публикации, 2) словарь MeSH обновляется ежегодно, но уже проиндексированные статьи не проверяются на предмет обновлений, 3) действительно эффективный поиск требует знания Словарь MeSH.

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

Что такое словарь MeSH?

Национальная медицинская библиотека создала словарь MeSH, и он используется с 1960 года. Тезаурус MeSH 2019 года содержит 29 351 термин, называемый дескрипторами, и ежегодно обновляется (модификация, удаление, перенос терминов). Термины MeSH относятся к основным темам, затронутым в статье, и обеспечивают более эффективный поиск в PubMed.

Термины MeSH расположены в древовидной структуре, состоящей из 16 категорий.

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

1 MeSH → 1 ID → 1 или несколько номеров дерева

Предварительная обработка наборов данных и ярлыков

NLM предоставляет базу данных из нескольких миллионов статей в виде файлов XML. Информация предоставляется для каждой статьи, такая как название, аннотация (если есть), даты публикации и рецензирования, идентификатор MeSH и связанные условия. Для наших нужд мы решили сохранить заголовок, аннотацию, MeSH ID и термины в файле из почти 9 миллионов статей.

Распределение набора данных

Для почти 9 миллионов статей можно использовать 25 940 различных терминов с очень неравномерным распределением. Несбалансированность условий MeSH обусловлена:

  1. Недопредставленность определенных категорий:

2. Низкочастотное использование определенных терминов MeSH:

Предварительная обработка этикеток для дисбаланса

1. Чтобы решить проблему недопредставленных категорий, мы решили удалить две наиболее распространенные категории (B01: Eukaryota, M01: Persons) и их дочерние категории.

2. Чтобы решить проблему низкой частоты использования терминов MeSH, мы решили подняться вверх по дереву, чтобы сгруппировать некоторые термины под одним и тем же, но более общим термином. Каждый термин MeSH, встречающийся менее чем в 100 статьях, будет заменен на более высокий термин в дереве. Это повторялось до тех пор, пока этот термин не появился как минимум в 100 статьях или пока этот термин не стал началом ветки. Как показано в таблице ниже, несколько терминов можно заменить одним и тем же, но более общим термином.

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

Классификация по нескольким меткам с помощью ExtremeText

Наша проблема теперь состоит в том, чтобы назначить список терминов MeSH для данного запроса. Мы использовали обучающий набор из 4 508 105 статей и 20 042 различных термина.

Сначала мы попытались обучить алгоритм логистической регрессии, используя метод One-vs-Rest. Это означает, что классификатор обучается для каждой метки, например 20 042 классификатора, и это делает время вычислений слишком большим (более 15 часов только для 300 000 статей). Поэтому мы заглянули в нейронные сети.

Затем мы попытались обучить сеть LSTM, которая в настоящее время является золотым стандартом для задач НЛП. Опять же, время вычислений было слишком большим (более 12 часов для всего набора обучающих данных), и это выглядело как насыщение сети. С самого начала обучения функция потерь была очень низкой. Это можно объяснить разреженностью выходного вектора (более 20 000 этикеток и всего 11 в среднем на статью). Чтобы иметь низкий уровень ошибок, модель должна только предсказать 0 для всех меток. Насыщение также могло произойти из-за слишком маленькой сети, но с моим оборудованием я не мог обучить большую сеть за разумное время вычислений.

Поэтому нам нужно было найти более подходящее решение для нашей проблемы: ExtremeText!

Что такое ExtremeText?

ExtremeText - это расширение FastText, библиотеки с открытым исходным кодом, разработанной Facebook для классификации текста и встраивания слов. ExtremeText адаптирован для классификации по нескольким меткам, даже с очень большим количеством этикеток. Он работает только с процессорами и имеет отличную производительность с точки зрения времени вычислений. Это связано с тем, что обучение выполняется одновременно во всех доступных потоках.

Архитектура ExtremeText

ExtremeText - нейронная сеть с единственным скрытым слоем. Его архитектура состоит из двух частей: одна для предварительной обработки, а другая для классификации. Это простой линейный классификатор. Часть предварительной обработки состоит из преобразования заданного документа в качестве входных данных в вектор с использованием усредненного словесного представления. Затем вектор представления задается как вход скрытого слоя. Наконец, предсказанные метки даются благодаря вероятностному дереву меток (PLT) в качестве уровня классификации, подходящего для большого количества меток (сигмоид может использоваться вместо PLT, если количество меток не слишком велико).

Как работает ExtremeText?

Прежде всего, ExtremeText нужен особый формат данных для обучения и тестирования. Данные должны быть в текстовых файлах, где каждая строка представляет статью, в следующем формате:

__label__ ‹X› __label__ ‹Y›… ‹Text›

где X и Y - метки статьи (текста), как показано на рисунке ниже.

Библиотека предоставляет два метода оценки производительности модели: тест и прогноз.

  1. test метод: этот метод требует ввода текстового файла (отформатированного, как описано выше) и количества k меток для прогнозирования. Он возвращает номер примера, точность и отзыв. Точность показывает долю этикеток, которые были признаны релевантными: она измеряет способность системы отклонять нерелевантные этикетки. В свою очередь, отзыв дает долю найденных релевантных ярлыков: он измеряет способность системы возвращать все соответствующие ярлыки.

2. Метод предсказать: этот метод требует ввода строки (или списка строк), количества меток для прогнозирования k и порогового значения. Он возвращает список из k меток (или список результатов, обычно получаемых для одной строки) с вероятностью, превышающей выбранный порог, и список соответствующих вероятностей.

Результаты

Как только данные будут в ожидаемом формате, мы можем поиграть с различными параметрами (скорость обучения, эпоха, диаграммы…). Я использовал этот метод тестирования, чтобы отфильтровать различные модели, варьируя эти параметры. Между точностью и отзывом нас больше интересует точность, потому что мы хотим, чтобы предсказанные метки были хорошо предсказаны.

В таблице ниже показаны точность и отзывчивость для различных моделей и для k = 2 и k = 5.

Модель с предварительно обработанными данными (красная линия) будет базовой, потому что модель, обученная без предварительной обработки, дает худшие результаты и имеет большее время вычислений. Предварительная обработка состоит из выделения слов и удаления игнорируемых слов и знаков препинания. Далее мы сравнили модели, изменяя один параметр за раз (всегда используя предварительно обработанные данные).

  • Для размера векторов слов (от значения по умолчанию 100 до 300) и арности, например максимального количества дочерних узлов (от значения по умолчанию 2 до 10), даже если результаты показывают небольшое улучшение точности, мы предпочли чтобы сохранить значения по умолчанию, потому что время вычисления значительно увеличилось.
  • Для n-граммов мы в конечном итоге получили хорошие результаты с точностью 0,83 для последней модели в таблице, используя значения по умолчанию для всех параметров и 50 эпох.

Давайте посмотрим на точность и отзыв в соответствии с порогом, изменяющимся от 0 до 1 для последней модели, используя 3 грамма и обученные на 50 эпохах (из-за разреженного вывода кривая ROC не является хорошей метрикой).

На рисунке выше показано, что порог около 0,4 дает хорошие результаты с точностью около 0,95 и отзывом около 0,43. Как объяснялось выше, для нас важнее иметь хорошую точность, потому что мы хотим быть уверены в своем прогнозе.

Вот прогноз, полученный для порога 0,4 для экземпляра тестового набора данных PubMed:

title: «Патогенетические механизмы цирроза печени при большой талассемии: световые и электронные микроскопические исследования».

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

Дополнительная литература

FastText: https://fasttext.cc/ и https://github.com/facebookresearch/fastText

Https://www.nlm.nih.gov/pubs/techbull/nd18/nd18_whats_new_mesh_2019.html