Опыт использования open-source инструментов Natural Language

advertisement
Опыт использования open-source
инструментов
Natural Language Processing
на медицинском корпусе
Максим Брегеда
Data Scientist
Expasoft
Новосибирск
14.05.2015
1
IBM Watson, 2014
IBM is building two versions of Watson in oncology
1) Trained in lung, colorectal, and breast cancer field
Memorial Sloan Kettering Cancer Center (NY) In beta-testing!!
2) Trained in leukemia field
The University of Texas MD Anderson Cancer Center.
Knowledge from:
• medical journals
• textbooks
• treatment
guidelines
Treatment Plan
Patient’s EHR
2
Машинное обучение в медицине
Примеры задач ML и решаемых медицинских проблем:
Дискретная классификация
• Задачи медицинской диагностики
Непрерывная регрессия
• Прогнозирование рисков осложнений (вероятность)
Кластеризация
• Обнаружение сходных групп клинических случаев
• Задачи эпидемиологии
3
Какие бывают данные?
Данные
Тип
EHR, заключения
неструктурированный текст
Фото, рентген, УЗИ, MRI, PET
изображения
Результаты анализов, показатели
жизнедеятельности
структурированный текст
числа
Диагностика по методу В.М.Успенского (ЭКГ).
К.Воронцов, 2014
И др.
4
Машинное обучение в медицине
1.
2.
3.
4.
5.
6.
7.
Выбор моделей (model selection)
Сбор данных (data collection)
Предобработка (data pre-processing)
Выбор/создание признаков (feature engineering)
Обучение моделей (learning)
Анализ результатов и повышение качества моделей
Эксплуатация
5
Машинное обучение в медицине
1.
2.
3.
4.
5.
6.
7.
Выбор моделей (model selection)
Сбор данных (data collection)
Предобработка (data pre-processing)
Выбор/создание признаков (feature engineering)
Обучение моделей (learning)
Анализ результатов и повышение качества моделей
Эксплуатация
Если мы хотим работать с неструктурированным текстом?
= NLP,
Natural Language Processing
6
Цель доклада
Рассказать об опыте применения некоторых
open-source инструментов для процессинга
медицинских текстовых корпусов на
русском языке.
7
Общепринятая практика: NLP pipeline
текст на естественном языке обрабатывается конвейером
8
Общепринятая практика: NLP pipeline
9
Общепринятая практика: NLP pipeline
From: IBM Watson: Clinical Decision Support. Dr. Martin Kohn. IBM Research, 2011.
10
На чем разрабатывать конвейер?
Apache UIMA
Unstructured Information Management Architecture: Java
(IBM Watson!)
Более прикладные фреймворки:
•
•
•
•
General Architecture for Text Engineering (GATE): Java
Natural Language Toolkit (NLTK): Python
Stanford CoreNLP (CoreNLP): Java
И множество других: https://nlpub.ru/Обработка_текста
11
На чем разрабатывать конвейер?
• Apache UIMA
• GATE
• NLTK
• Stanford CoreNLP
• …
Что общего?
• Конструкторы базовых блоков (моделей)
• Используют Machine Learning
• Open-source (academic license)
12
На чем разрабатывать конвейер?
• Apache UIMA
• GATE
• NLTK
• Stanford CoreNLP
• …
Что общего?
•
•
•
•
Конструкторы базовых блоков (моделей)
Используют Machine Learning
Open-source (academic license)
Не поддерживают русский язык
13
Практическая часть
NLP для русского корпуса
1. Ресурсные проблемы
2. проблемы кодировки
(проблемы кодировок  )
3. Вопросы hardware
4. Практика построения конвейера медицинских
текстов
5. Некоторые результаты
14
1. Ресурсные проблемы
Для английского языка
WordNet (1985)
•
•
•
lexical database for the English languageю
BSD лицензия (допускает проприетарное коммерческое
использование ПО)
155K слов
Задачи: (word sense disambiguation, similarity between words – важный
этап пониманию текста)
Treebanks:: Penn Treebank (1992)
•
•
Свободная лицензия
Задачи: POS, dependency parsing
Медицинский домен:
UMLS (1986) коллекция тезаурусов
•
•
•
Свободная академическая лицензия
Задачи медицинской информатики
Ежемесячное обновление!
15
1. Ресурсные проблемы
Для английского языка
• Это стандарты в NLP
• Причем не единственные
• + Много датасетов (WallStreet journal
etc.)
16
1. Ресурсные проблемы
Что для русского?
Тезаурус РуТез
• web-интерфейс урезанной lite-версии на сайте
СинТагРус
• История обновлений не публикуется
• Подписать лицензионное соглашение
• Отослать его и скан паспорта - возможно дадут доступ
OpenCorpora (crowd source) морфологически, синтаксически и
семантически размеченный корпус русскоязычных текстов
• перспектива русскоязычного NLP-сообщества!
http://www.opencorpora.org
Датасеты: Диалог пытается создавать.
• Не выкладывают в свободный доступ.
17
1. Ресурсные проблемы
Объемы корпусов меньше
(объем не панацея!)
• составные слова
• коллокации
• синонимия
• омонимия
• гипоним/гипероним
• мероним/холоним
• логическое следование
• и т.д.
Закрытость данных не позволяет
оценить качество наполнения
корпуса в различных
приложениях.
“car pool”
А ведь у нас
специализированный
домен!
18
1. Ресурсные проблемы
Кто виноват?
• Там начали раньше
• Быстро выложили в свободный доступ
• Русский язык богаче и сложнее
Что делать?
• Работать с чем есть
• Собрать свой корпус
• Переводить (UMLS)
• Поддерживать инициативы вроде OpenCorpora
19
2. проблемы кодировки
Кодировка
Отсуствие поддержки юникода ядром Windows делает невозможной
разработку NLP-моделей:
• Требуется быстро пробовать множество сторонних
утилит/алгоритмов/фреймворков
• Костыли вводящие поддержку unicode решают проблемы только
Microsoft-программ (в основном утилит в составе ОС)
• English-speaking пользователи никогда в жизни не выходят за
пределы ASCII
• Проблема «символ Я = EOF» (преждевременное прерывание чтения
C++, stdin, и проч.)
• Вопросы на StackOverflow обсуждают между собой неанглоговорящие пользователи, в каждой кодовой таблице свои
экзотические проблемы
20
2. проблемы кодировки
Забудьте про Windows (и Mac OS тоже)
Используйте Unix!
Рекомендации по OS
•
•
•
•
•
•
Server OS (Ubuntu/Debian)
Поддержка юникода в ядре
Десктоп/сервер на UNIX мало чем отличаются
Минимум ненужных утилит изначально
Опыт работы/установки/компиляции под unix
Вы сможете участвовать в этапе запуска решения в production (там
будет серверная ОС)
21
2. проблемы кодировки
Рекомендации по кодировке
• Только UTF-8 !
• Знать «матчасть»
The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About
Unicode and Character Sets (No Excuses!)
http://www.joelonsoftware.com/articles/Unicode.html
http://quantifyingmemory.blogspot.ru/2013/11/top-seven-tips-for-processing-foreign.html
22
2. проблемы кодировки
Рекомендации по кодировке (продолжение)
• Делать валидацию кодировки исходных текстов
Google for “UTF-8 validation”
Есть готовые библиотеки Python, Java
«Эй, но это задача для программистов продакшен-решения!»
Не совсем. Мы работаем с Big Data, недельный расчет модели
вылетает с исключением «illegal utf-8 character» - неприятно
23
3. Распространенный миф о Hardware
«Для серьезного data science нужен мощный кластер и
HADOOP» = заблуждение
Серьезный не всегда значит большой.
Продакшен – да.
Для прототипирования моделей, проверки гипотез и экспериментов на
корпусе размером с Википедию вполне хватит:
• Современный десктоп Corei5-i7 (4 ядра)
• Вирутализация Oracle VM Box / VMware / MS Virtual PC – привычная
ОС на хосте, unix на гостевой.
• Как можно больше оперативной памяти (парсеры зависимостей
могут много «есть»)
half
24
3. Распространенный миф о Hardware
«Для серьезного data science нужен мощный кластер и
HADOOP» = заблуждение
Исключения:
1. Для серьезной работы с Deep Convolution Nets
понадобится GPU (Nvidia Cuda) – ускорение десятки
раз. (Мощно, на не критично, Tesla K20 - 170K руб.).
2. Случай действительно Big Data: Аренда
выч.мощностей в облаке on-demand для расчета
готовых отлаженных моделей (Amazon AWS etc…)
3. Быстрый кластер можно собрать своими силами
(Apache Storm!)
25
Вкратце об Apache UIMA
В паре слов об архитектуре
Связь сущностей и аннотаций и их представление в CAS
26
Вкратце об Apache UIMA
Analysis Engine = NLP procedure
CAS = Common Analysis Structure
CPE = main pipeline processor
27
4. Конвейер на Apache UIMA
28
4. Конвейер на Apache UIMA
29
4. Конвейер на Apache UIMA
Конвейер: более детально
•
•
•
•
•
•
•
•
•
Cleaning
Sentence detection
Tokenization
Lemmatization
POS
Сhunking
Dependency parsing
Entity/fact extraction (NER)
Domain-specific tasks (у нас специализация – Медицинский домен)
30
4. Конвейер на Apache UIMA
Пример результатов работы конвейера (xml)
Модели: Sentence detector + tokenizer
31
4. Конвейер на Apache UIMA
Как это выглядит на практике?
Обычное Java приложение в Eclipse.
32
4. Конвейер на Apache UIMA
Как это выглядит на практике?
Обычное Java приложение в Eclipse.
Устанавливаем:
• IDE Eclipse
• UIMA Eclipse Plugins (устанавливается из репозитория Maven)
• Скачиваем Framework: UIMA SDK (или из maven)
Несколько утилит в составе UIMA:
• Collection Processing Manager – создание CPE
• Component Descriptor Editor – редактор настроек в XML
• CAS visual debugger (CVD) – запуск AE и анализ результатов
Официальная документация по UIMA = must read!
33
4. Конвейер на Apache UIMA
Классическая UIMA
Преимущества:
• Фундаментальная архитектура, низкого уровня
• Популярная (IBM Watson!)
• Кросс-платформенная Java (не для всех: Utf-8/Windows)
• Хорошо документирована
• Все можно написать самому
Недостатки:
• Устаревший стек технологий (XML файлы)
• Все нужно писать самому
+ Хотелось бы специализации на медицинской тематике
34
Выход?
Использовать специализированные фреймворки:
• UIMA Fit – библиотека-расширение (забываем об XML)
• cTAKES (базируется на UIMA Fit)
• DKPro (базируется на UIMA Fit)
35
UIMA FIT
36
Apache cTAKES
Homepage:
http://ctakes.apache.org
Wiki docs:
https://cwiki.apache.org/confluence/
display/CTAKES/cTAKES
LVG – lexical variant generator, based on UMLS Specialist
37
Apache cTAKES
38
Apache cTAKES
Проблемы/особенности:
• Существенная интеграция с UMLS
• Английский язык моделей
• Плохая документация
• Почти все переписывать
Плюсы:
• Много идей что должно входить в конвеер медицинских текстов
(NegEx)
39
DKPro Core
В итоге был выбран DKPro Core
https://code.google.com/p/dkpro-core-asl/ (Apache Licensed components)
https://code.google.com/p/dkpro-core-gpl/ (GNU Licensed components)
DKPro:
• проект по интеграции разнородных внешних NLP-компонентов
(моделей)
• философия: быстрое прототипирование NLP-моделей и
воспроизводство результатов (за счет централизованного model
setup)
• Open-source (maven, GitHub)
• Обновление (добавление новых моделей)
• Не привязан к процессингу только английского текста (хотя этот
язык доминирует среди моделей)
40
DKPro Core
DKPro Core (детали):
• Использует UIMA FIT
• Поддержка языков Java, Python, Groovy.
Две версии:
1. первая содержит только компоненты,
распространяющихся под лицензией Apache (ASL)
больше моделей!
2. вторая - только компоненты распространяюшщиеся под
публичной лицензией (GNU).
Списки моделей:
• https://code.google.com/p/dkpro-core-asl/
• https://code.google.com/p/dkpro-core-gpl/
41
DKPro Core
42
DKPro Core
Пример кода конвейера
43
Практические результаты
•
•
•
•
•
•
•
•
•
Cleaning (R)
Sentence detection (DKPro)
Tokenization (DKPro)
Lemmatization (DKPro + mystem)
POS (DKPro + mystem)
Сhunking
Dependency parsing
Entity/fact extraction (NER)
Domain-specific tasks (у нас специализация –
Медицинский домен)
• Корпус 56К записей EHR
• 8 часов работы (VM Core i5 2 ядра, 4 Гб, Host: SQL-сервер)
• Лематизатор/POS ~ 99%
44
Практические результаты
Cleaning
• Валидация кодировки
• Удалены стоп-слова (top 100 по статистике
OpenCorpora)
• Удалены лишние пробелы
45
Практические результаты
Sentence detection
DKPro модель в принципе работает, крайне плохо здесь:
«операция проведена в 2005 г. без осложнений»
DKPro использует Apache OpenNLP SD
В основе MaxEnt (байесовский классификатор)
Перетренирован на корпусе OpenCorpora (93K предложений)
Существенное сокращение числа ошибок типа «…2005 г.».
Дальнейшие пути повышения точности:
• исп.медицинский корпус (сокращения мед.терминов, единицы
измерения и т.д.)
• совмещение rule-based (рег.выражения)
46
Практические результаты
Tokenization
Использован DKPro – модель OpenNlpSegmenter
(Tokenizer)
• MaxEnt классификатор
• Натренирован на англоязычном корпусе
• Хорошо справляется
47
Практические результаты
Lemmatization
Лемма – начальная форма слова (им.падеж, ед.число)
Что есть для русского языка?
•
Яндекс mystem
match по префиксному дереву trie
Своя лицензия (есть версия для research)
https://tech.yandex.ru/mystem
•
Pymorthy2
MIT-лицензия, open-source!
реализация DAWG/DAFSA (space efficient trie)
https://pymorphy2.readthedocs.org/en/latest/
http://habrahabr.ru/post/176575/
•
Solarix
проприетарный, free demo, версия для research
Алгоритмы ML
http://solarix.ru
Эти же инструменты делают анализ частей речи (POS)
48
Практические результаты
Lemmatization
Поддержки этого нет для UIMA/DKPro
Нужно:
• Самим написать Analysis Engine
• Решать проблему снятия омонимии
Все совр. морфологические анализаторы выдают ранжирование
значений омонима при разборе (точность = ?)
Lemmatization
Использован Яндекс mystem: лемматизатор и POS-таггер
Прекрасно справляется с мед.терминологией (морфологические правила
единые для языка?).
Пример вывода для «стали»
[{"text":"стали","analysis":[
{"lex":"становиться","gr":"V,нп=прош,мн,изъяв,сов"},
{"lex":"сталь","gr":"S,жен,неод=пр,ед"},
{"lex":"сталь","gr":"S,жен,неод=вин,мн"},
{"lex":"сталь","gr":"S,жен,неод=дат,ед"},
{"lex":"сталь","gr":"S,жен,неод=род,ед"},
{"lex":"сталь","gr":"S,жен,неод=им,мн"}]}]
Технически: CLI (+параметры): вызов из bash >> stdout
Корпус > 50К документов (EHR) ~ 8 часов VirtualBox Ubuntu Server, Rобертка, Core i5, 2 ядра, 16Гб ОЗУ (Host: SQL-сервер)
50
Medical domain-specific tasks
Это направление дальнейшей работы
Детектирование отрицания (очень важно!)
cTAKES исп. NegEx – negation detection algorithm
Детектирование неточных утверждений («возможно, вероятно»)
Опечатки (Spell Correction) достаточно просто
1.
2.
3.
Detection mispelled term (частота по корпусу)
Generate list of candidates to replace (UMLS Specialist Lexicon / Wordnet (secondary src)
Rank them (distance)
Медицинские онтологии для русского языка
Перевод UMLS = ?
Омонимия
Не очень острая проблема для мед.терминологии
И т.д.
51
1.
2.
3.
4.
Практические результаты
Маленький корпус
1000 документов (EHR) Кардиохирургия
Обработан конвейером
Word2vec 200 dims
Проекция T-SNE для визуализации
Lemmatization
Поддержки этого нет для UIMA/DKPro
Нужно:
• Самим написать Analysis Engine
• Решать проблему снятия омонимии
Все совр. морфологические анализаторы выдают ранжирование
значений омонима при разборе (точность = ?)
Практические результаты
Примеры кластеров
Слева: кластер беременности, здесь кроме однокоренных
отнесены "неделя" и аббревиатура "нед"
Внизу: кластер гипертонии: семантически близки все
возможные "гипер *тонии *тензии" и "риск". Термин
"эссенциальный" вызвал вопросы, но оказалось есть
"эссенциальная гипертония" (95 % всех случаев).
Практические результаты
Примеры кластеров
Вверху: кластер протезирования.
Из интересного тут: "Тромбэктомия" операция по удалению тромботических
масс из ранее установленного протеза.
"Карбоникс" - марка протезов.
Практические результаты
Здесь не использовано:
• ни одного классфикатора
• ни одной нейросети, кроме примитивной word2vec
только NLP-конвейер (а уже интересная семантика!)
ОСНОВНОЙ РЕЗУЛЬТАТ
Имеем признаки для более сложных моделей ML
(в промышленных масштабах):
•
•
•
•
•
•
Предложение
Токен
Лемма
Морфологическая информация
Частичное снятие омонимии
Статистика семантической близости
Основные выводы
Предложены практические рекомендации для исследователей в области
NLP русского языка по выбору программного open-source инструментария,
организации рабочей среды и аппаратной инфраструктуры. Также
рассмотрены некоторые аспекты, специфические для текстов медицинской
тематики.
Показана практическая целесообразность использования UIMA Common
Analysis Structure (CAS) в качестве модели представления знаний в
медицинском домене.
Использование фреймворка DKPro (основан на Apache UIMA) показало
высокую скорость разработки NLP-моделей за счет унификации и
повторного использования кода, а также интеграции лучших современных
алгоритмов обработки текста.
Показано что поддержка русского языка достаточно нетрудозатратно
реализуема в DKPro как за счет перетренировки стандартных моделей, так
и за счет интеграции программных компонент в конвейер (Яндекс mystem).
Спасибо
Спасибо за внимание!
Вопросы?
Download