Как извлечь информацию из огромного массива данных

Как извлечь информацию, содержащуюся в нескольких предложениях, из сотен тысяч документов? Как вы аннотируете огромный корпус текста?

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

Датасет: шнур-19

Набор данных cord-19 содержит более 500 000 исследовательских работ о COVID-19 и других заболеваниях, связанных с коронавирусом, собранных и регулярно обновляемых институтом AllenAI. Данные, использованные для этого руководства, прошли обработку, аналогичную той, что показана в репозитории github для набора данных: https://github.com/allenai/cord19.

Наша цель — найти основные факторы риска, упомянутые в медицинских документах, для тяжелого течения COVID.

Как мы продолжим аннотировать это?

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

Для изучения и аннотирования этого набора данных мы используем библиотеку с открытым исходным кодом DataQA, библиотеку на основе Python и React для исследования и маркировки данных. Этот пакет python включает в себя систему текстового поиска elasticsearch и может быть легко установлен с помощью pip.

Сначала мы создаем проект для распознавания именованных объектов и загружаем данные.

После того, как наши документы были загружены и проиндексированы, нам нужно сузить список некоторых абзацев, которые могут содержать нужную нам информацию. Для этого мы можем создать наше первое правило. Правило следующее: документ должен содержать предложение со словом «фактор риска» и одним из множества известных факторов риска, таких как «возраст», «ожирение» и т. д.

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

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

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

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

Создание NER с помощью Spacy

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

Затем код для обучения нашего NER выглядит следующим образом. Мы используем конвейер Spacy, добавляем сегментатор предложений для определения границ предложений и заменяем шаг NER по умолчанию новым, который имеет только «фактор риска» как сущность. Затем обучайте конвейер мини-пакетами, чтобы избежать переобучения.

Поиск новых упоминаний о факторах риска

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

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

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

[('diabetes', 87),
 ('hypertension', 84),
 ('age', 79),
 ('obesity', 67),
 ('smoking', 36),
 ('sex', 27),
 ('cardiovascular disease', 27),
 ('gender', 27),
 ('older age', 20),
 ('copd', 19),
 ('asthma', 18),
 ('male sex', 18),
 ('chronic kidney disease', 16),
 ('chronic obstructive pulmonary disease', 14),
 ('bmi', 13),
 ('pneumonia', 13),
 ('therapy', 12),
 ('cardiovascular', 11),
 ('cancer', 11),
 ('diabetes mellitus', 11)]

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

А как насчет долгого ковида?

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

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

После быстрого поиска мы нашли ряд статей, в которых упоминался женский пол, возраст, увеличение ИМТ и количество симптомов, о которых сообщалось в первую неделю, в качестве прогностических признаков того, разовьется ли у кого-то с COVID-19 затяжной COVID.

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