В настоящее время существует огромное количество программных библиотек для автоматической обработки текстовых данных - распространяемых как по коммерческой лицензии, так и находящихся в свободном доступе. Эти программные средства охватывают широкий круг задач: машинный перевод, автоматическое реферирование, создание баз знаний, разметка корпусов текстов, поиск информации и др. Их эффективность для некоторых задач впечатляет, особенно если каким-либо образом задействовано мнение пользователей (например, на определенных поисковых сайтах).
Важное место занимают расширяемые системы, предназначенные для обработки произвольных видов данных, которые могут гибко настраиваться пользователем. Наиболее популярные из них - это GATE, NLTK и Apache UIMA.
UIMA - одна из наиболее зрелых программных платформ для реализации индустриальных решений в области текстовой аналитики, разработанная IBM и ASF. Аббревиатура UIMA - это сокращение от Unstructured Information Management Architecture (архитектура управления неструктурированной информацией). Данная библиотека является программной реализацией фреймворка для анализа неструктурированного контента, такого как текст, видео- и аудио- данные. Неструктурированная информация на данный момент является самым крупным, наиболее актуальным и быстрорастущим источником информации, который доступен для предприятий и правительства.
Мотивация к созданию такой системы заключалась в создании общей платформы для неструктурированных данных, чтобы способствовать повторному использованию компонентов анализа и уменьшения дублирования в разработке анализаторов. Подключаемая архитектура UIMA позволяет легко подключить собственные компоненты анализа и объединить их вместе с другими. Задача полного анализа (с использованием неструктурированных данных), как например, задача поиска, является не монолитной задачей, а многоступенчатым процессом, в котором различные модули должны опираться друг на друга, чтобы получить мощную цепочку анализа. В некоторых случаях аннотаторы от разных разработчиков должны работать вместе, чтобы произвести необходимые результаты. С применением UIMA нет необходимости знать детали того, как разные аннотаторы работают в сборе. Библиотека UIMA берет на себя заботу за интеграцию и взаимодействие нескольких аннотаторов между собой.
Таким образом, основная цель UIMA заключается в преобразовании неструктурированной информации в структурированный вид, путем организации механизмов анализа, для выявления сущностей или отношений, и тем самым позволяя построить мост между неструктурированным и структурированным мирами.
Актуальность проблемы
Библиотека Apache UIMA предоставляет огромные возможности для организации эффективной обработки больших объемов неструктурированных данных. Однако создание и развертывание такой высокопроизводительной системы, а также последующая поддержка и конфигурирование для удовлетворения различных функциональных и нефункциональных требований к такому программному продукту требует глубокого понимания процессов, происходящих внутри фреймворка Apache UIMA. Более того, даже при разработке сравнительно небольшого приложения для обработки текстов на естественном языке с помощью этой библиотеки, разработчик сталкивается с проблемой поддержки множества ХМЬ-файлов[2]. Для иллюстрации этой проблемы, рассмотрим примитивное приложение, предназначенное для разбиения текста на предложения. Ниже приведен список действий, который должен выполнить разработчик для реализации данной задачи, следуя традиционному подходу:
1. Написать XML-дескриптор, описывающий систему типов для конкретной задачи (в данном случае - класс Sentence).
2. Запустить утилиту JCasGen (входит в состав UIMA) для генерации Java-классов из дескриптора системы типов.
3. Реализовать анализатор для выделения предложений в тексте.
4. Написать XML-дескриптор, описывающий созданный анализатор.
5. Реализовать CAS Consumer для обеспечения требуемого вывода полученных результатов.
6. Написать еще один XML-дескриптор, который описывает этот CAS Consumer.
7. Написать XML-дескриптор для компоненты, которая бы считывала входные данные (Collection Reader).
8. Написать XML-дескриптор, описывающий конвейер (pipeline), состоящий из предыдущих модулей.
9. И, наконец, вызвать Collection Processing Manager, передав в него дескриптор файл конвейера.
Отчетливо видно, что почти для каждого Java класса в приложении должен быть создан дублирующий файл xml с описанием. При каждом изменении кода, xml файл также должен быть редактирован. Это создает неудобства как во время разработки системы, так и во время последующей поддержки.
Эту проблему в некоторой степени решают существующие библиотеки, построенные на платформе Apache UIMA, в первую очередь это UIMAFit, разрабатываемый тем же Apache Foundation. UIMAFit позволяет избежать ненужное дублирование логики приложения и сводит использование xml файлов к минимуму. Несмотря на то, что эта библиотека кардинально изменяет взаимодействие с фреймворком UIMA, упрощая разработку и добиваясь минимального количества кода, UIMAFit лишь является оберткой над стандартной библиотекой Apache UIMA. Однако использование UIMAFit не решает проблему с написанием xml-дескрипторов для системы типов, лишь автоматизируя сам процесс запуска утилиты JCasGen.
В рамках данной дипломной работы автором были решены следующие задачи:
• Проведен анализ и сравнение существующих на момент публикации инструментов для анализа текстовых данных на платформе Apache UIMA.
• Разработан предметно-ориентированный язык, позволяющий минимальным количеством кода разработать NLP-приложение с сохранением возможности гибкой настройки каждой из компонент приложения.
• Разработан механизм автоматической генерации XML- дескрипторов системы типов и соответствующих Java-классов, что значительно ускоряет время разработки приложения.
1. UIMA Tutorial and Developers' Guides [Электронный ресурс] URL:http: //uima. apache. org/d/uimaj -
current/tutorials and users guides.html(Дата обращения: 15.03.2016).
2. Apache uimaFIT™ Guide and Reference [Электронный ресурс] URL: https: //uima.apache.org/d/uimafit-current/tools.uimafit.book.html (Дата обращения: 18.03.2016).
3. Richardet R., Chappelier J., Telefont M. Bluima: a UIMA-based NLP Toolkit for Neuroscience [Электронный ресурс] // Lausanne, Switzerland.
- 2015, 22 pages. URL: http://ceur-ws.org/Vol-1038/paper_7.pdf(Дата обращения: 11.03.2016).
4. Eckart de Castilho R., Gurevych I. A broad-coverage collection of portable NLP components for building shareable analysis pipelines [Электронный ресурс] // German Institute for Educational Research and Educational Information. - 2014, 11 pages. URL: http://glicom.upfedu/OIAF4HLT//pdf/OIAF4HLT01.pdf(Дата обращения: 20.03.2016).
5. NLTK 3.0 documentation / Natural Language T oolkit.
URL:http: //www. nltk. org[Электронный ресурс] (Дата обращения: 21.04.2016).
6. Landefeld R. JULIELAB DB Mapper // Jena University Language &Information Engineering (JULIE) Lab, Jena, Germany.
URL:http://www.julielab.de[Электронный ресурс] (Дата обращения: 20.03.2016).
7. GATE - General Architecture for Text Engineering [Электронный ресурс]. - URL: https://gate.ac.uk/(Дата обращения: 20.03.2016).
8. Маслов А. В. Системы автоматической обработки текстов на естественном языке: лингвистические аспекты и перспективы развития // Вестник МГЛУ. 2014. № 13. С. 167-170.
9. A collection of software components for natural language processing (NLP) based on the Apache UIMA framework [Электронный ресурс] URL: https://dkpro.github.io/dkpro-core/(Дата обращения: 20.04.2016)
10. Burmako E. What are Macros Good For? [Электронный ресурс] URL: http://scalamacros.org/paperstalks/2013-07-17-WhatAreMacrosGoodFor.pdf(Дата обращения: 27.04.2016)
11. M. Schor. An Effective, Java-Friendly Interface for the Unstructured Management Architecture (UIMA) Common Analysis System // IBM RC23176, IBM T.J.Watson Research Center, Yorktown Heights, N.Y. (2004).