Apache OpenNLP

Материал из NLPub
(перенаправлено с «OpenNLP»)
Перейти к: навигация, поиск

Apache OpenNLP — интегрированный пакет инструментов обработки текста, работающих на основе машинного обучения.

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

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

OpenNLP.jpg

Доступность

Пакет Apache OpenNLP распространяется на условиях лицензии Apache License. Исходные коды доступны на официальном сайте проекта. Существует достаточно полная документация[1] как для пользователя, так и для разработчика интегрированных решений.

Установка

Для работы пакета требуется установленная среда выполнения Java (Java Runtime Environment).

Unix-подобные операционные системы

Сначала нужно скачать и распаковать архив:

% cd
% curl http://www.sai.msu.su/apache//incubator/opennlp/apache-opennlp-1.5.2-incubating-bin.tar.gz | tar zxv
apache-opennlp-1.5.2-incubating/lib/opennlp-maxent-3.0.2-incubating.jar
apache-opennlp-1.5.2-incubating/lib/opennlp-tools-1.5.2-incubating.jar
...
apache-opennlp-1.5.2-incubating/docs/opennlp-uima-descriptors/DateNameFinder.xml
apache-opennlp-1.5.2-incubating/docs/opennlp-uima-descriptors/PersonNameFinderTrainer.xml

Затем необходимо внести изменения в конце файла ~/.bashrc, чтобы обращаться к OpenNLP напрямую из командной строки:

export PATH=~/apache-opennlp-1.5.2-incubating/bin:$PATH

После перезагрузки оболочки можно проверить функционирование OpenNLP:

% opennlp          
Usage: opennlp TOOL
where TOOL is one of:
  Doccat                   learnable document categorizer
  DoccatTrainer            trainer for the learnable document categorizer
  DoccatConverter          
  DictionaryBuilder        builds a new dictionary
  SimpleTokenizer          character class tokenizer
  TokenizerME              learnable tokenizer
  TokenizerTrainer         trainer for the learnable tokenizer
  TokenizerMEEvaluator     evaluator for the learnable tokenizer
  TokenizerCrossValidator  K-fold cross validator for the learnable tokenizer
  TokenizerConverter       
  DictionaryDetokenizer    
  SentenceDetector         learnable sentence detector
  SentenceDetectorTrainer  trainer for the learnable sentence detector
  SentenceDetectorEvaluatorevaluator for the learnable sentence detector
  SentenceDetectorCrossValidator     K-fold cross validator for the learnable sentence detector
  SentenceDetectorConverter
  TokenNameFinder          learnable name finder
  TokenNameFinderTrainer   trainer for the learnable name finder
  TokenNameFinderEvaluator 
  TokenNameFinderCrossValidator    K-fold cross validator for the learnable Name Finder
  TokenNameFinderConverter converts foreign data formats to native format
  CensusDictionaryCreator  Converts 1990 US Census names into a dictionary
  POSTagger                learnable part of speech tagger
  POSTaggerTrainer         trains a model for the part-of-speech tagger
  POSTaggerEvaluator       
  POSTaggerCrossValidator  K-fold cross validator for the learnable POS tagger
  POSTaggerConverter       
  ChunkerME                learnable chunker
  ChunkerTrainerME         trainer for the learnable chunker
  ChunkerEvaluator         Measures the performance of the Chunker model with the reference data
  ChunkerCrossValidator    K-fold cross validator for the chunker
  ChunkerConverter         converts foreign data formats to native format
  Parser                   performs full syntactic parsing
  ParserTrainer            trains the learnable parser
  BuildModelUpdater        trains and updates the build model in a parser model
  CheckModelUpdater        trains and updates the check model in a parser model
  TaggerModelReplacer      replaces the tagger model in a parser model
All tools print help when invoked with help parameter
Example: opennlp SimpleTokenizer help

Использование

Языковая классификация

Определение языка документа выполняется с использованием обученной модели. Для получения обученной модели необходимо скачать размеченные данные из параллельного корпуса, преобразовать их в формат OpenNLP и построить классификатор.

Документация OpenNLP предлагает использовать данные из Leipzig Corpora[2].

Преобразование данных в формат OpenNLP с сохранением в файл lang.model:

% opennlp DoccatConverter leipzig -lang en -data eng_wikipedia_2010_100K-sentences.txt >>lang.train
% opennlp DoccatConverter leipzig -lang ru -data rus_wikipedia_2010_100K-sentences.txt >>lang.train

Обучение модели на основе подготовленных данных. Модель будет сохранена в файл lang.model:

Для Mac OSX

% opennlp DoccatTrainer -lang x-unspecified -encoding MacRoman -data lang.train -model lang.model

Для Ubuntu Linux:

% ./opennlp DoccatTrainer -lang x-unspecified -encoding utf-8 -data lang.train -model lang.model


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

% opennlp Doccat lang.model
Loading Document Categorizer model ... done (0,285s)
Как поспал, братишка?
ru	Как поспал, братишка?
Scary monsters and nice sprites.
en	Scary monsters and nice sprites.


Average: 0,3 doc/s 
Total: 2 doc
Runtime: 6.643s                                                             

Ссылки

Примечания