Как извлекать значения из неструктурированного текста

Вопрос или проблема

Я разрабатываю инструмент, который должен извлекать интересующие значения из неструктурированных текстовых записей. Набор данных состоит из несколько сотен тысяч медицинских записей. Каждая запись относительно короткая (около 100 символов).

Каждая текстовая запись содержит ключевое слово MI (или TI или AO) и соответствующее значение. Значение иногда является числом, а иногда выражается человеческим языком.

Некоторые записи очень очевидны. Некоторые записи более сложные или неоднозначные, в этом случае конечный пользователь инструмента (врач) должен иметь возможность заставить мой инструмент “обучиться” правильному значению.

Вот несколько примеров с моими комментариями

Записи данных Ожидаемое извлеченное значение Комментарии
значение MI равно 1 1.0
MI = 1 1.0
MI > 1 1.5
MI < 1 0.5
Следов MI не найдено 0.0
Следов MI не найдено 0.0
Следы MI/TI найдены 0.5
MI/TI/AO до 4 3.5
MI/TI/AO до 4 3.5
MI 2-[3] 2.5
MI, вероятно, 2. Градиент MI 170torr 2 Этот пример показывает, что числовое значение, следующее за MI, не всегда представляет его значение. Здесь 170 не является искомым значением. Это 2
DOMV без MS/MI в хлопке, но узкий MI ?? Здесь я на самом деле не знаю, каково значение. Только пользователь инструмента сможет сказать, каково значение в этом случае

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

Еще одно важное требование заключается в том, что то, что мы ищем, должно быть настраиваемым. Иногда мы ищем MI, иногда TI.

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

Это работает, и я могу находить около 90% случаев. Однако у этого есть следующие недостатки:

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

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

Я, конечно, мог бы написать пользовательский интерфейс для добавления/настройки/удаления правил (регулярных выражений), но это также может быть непросто

Я задумался, есть ли способ обойтись без явных правил if/else, а вместо этого обучить модель, которая затем будет использоваться для поиска значений.

Я не знаю много о NLP/AI или ML, поэтому, возможно, кто-то мог бы направить меня в правильном направлении. Например

  • Является ли NLP или NER концепцией, которую стоит использовать здесь?
  • Какие могут быть онлайн-сервисы или инструменты/библиотеки с открытым исходным кодом с API, которые можно было бы использовать?

Одним из вариантов является система разметки данных. Цель системы разметки данных – позволить менее техническим пользователям сопоставлять необработанные данные с установленными признаками. Пример пакета – snorkel.

Ответ или решение

Извлечение значений из неструктурированного текста в медицинских записях: Подходы и инструменты

Введение

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

Проблематика

Данные медицинские записи, состоящие из сотен тысяч коротких текстовых записей, содержат ключевые слова (например, MI, TI, AO) и соответствующие значения. Однако значения могут быть представлены как в числовом, так и в текстовом формате, что усложняет задачу. Кроме того, существует необходимость в обучении системы на основании обратной связи от пользователей — врачей, которые могут указать правильные значения в ambigous случаях.

Текущие ограничения

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

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

Потенциальные решения

Для улучшения процесса извлечения значений, рассмотрите следующие подходы:

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

  2. Обработка естественного языка (NLP):

    • Named Entity Recognition (NER): Подход с использованием NLP, который позволяет выявлять и классифицировать ключевые сущности в тексте. Модели NER могут быть обучены для распознавания MI, TI и AO и соответствующих значений. Среди доступных библиотек — spaCy, NLTK, и Hugging Face Transformers.
    • Сентимент- и контекстный анализ: Использование моделей глубокого обучения для анализа контекста, чтобы правильно интерпретировать значения в амбициозных случаях.
  3. Обучение на примерах:
    Опробуйте методы машинного обучения, такие как модели на основе деревьев решений или глубокие нейронные сети, которые могут учитывать контекст и связи между словами. Используйте размеченные данные для обучения модели, чтобы улучшить точность извлечения значений.

  4. Интерфейсы для пользователей:
    Разработайте простой интерфейс, позволяющий врачам вносить корректные значения для сложных случаев. Это не только ускорит процесс, но и поможет в дальнейшем обучении и улучшении модели.

  5. Онлайн-сервисы и API:
    Рассмотрите использование облачных решений для NLP и обработки текста, таких как:

    • Google Cloud Natural Language API
    • IBM Watson NLU
    • Microsoft Azure Text Analytics

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

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...