当前位置:   article > 正文

OpenNLP-引言

opnlp

#第一章 引言#

##概述##

Apache OpenNLP包是一个基于机器学习的工具,用于处理自然语言。它支持常用的NLP任务,例如分词(tokenization),句子切分(sentence segementation),命名试题提取(named entity extraction),chunking,句法分析(parsing),coreference resolution。要构建更加高级的文本处理服务,这些任务通常是必须的。OpenNLP还包括最大熵和基于感知的机器学习。

OpenNLP项目的目标是为上述任务创建一个成熟的工具集。另外一个目标是为各种各样的语言提供大量的预构建(pre-build)模型,和从这些模型派生的带注解的文本资源。

##通用包结构##

OpenNLP包括许多组件,让你可以构建一个完整的自然语言处理管道。这些组件包括:sentence detector, tokenizer, name finder, document categorizer, part-of-speech tagger, chunker, parser, coreference resolution。组件包含(不同的)部件,允许你执行独立的自然语言处理任务,例如训练一个模型,或者经常评估一个模型。通过他的API很容易理解他们的每一个工具。此外,(OpenNLP)提供了一个命令行(CLI),可以方便的进行试验和训练。

##API 通用例子##

OpenNLP组件具有相似的API。通常,执行一个任务,你应该提供一个模型和一个输入。

通常,通过为一个模型类的构造函数提供一个具有模型的FileInputStream来加载一个模型。

  1. InputStream modelIn = new FileInputStream("lang-model-name.bin");
  2. try {
  3. SomeModel model = new SomeModel(modelIn);
  4. }
  5. catch (IOException e) {
  6. //handle the exception
  7. }
  8. finally {
  9. if (null != modelIn) {
  10. try {
  11. modelIn.close();
  12. }
  13. catch (IOException e) {
  14. }
  15. }
  16. }

在模型被加载后,这个组件工具自身可以被实例化。

ToolName toolName = new ToolName(model);

在这个工具被实例化之后,这个处理任务可以被执行。对这个工具,输入输出格式是特定的,但是,通常,输出时一个String数组,输入是一个String或者String数组。

String output[] = toolName.executeTask("This is a sample text.");

##命令行接口 (CLI)##

###概述###

OpenNLP提供了一个命令行脚本,对它的所有工具来说作为一个独特的切入点。脚本位于OpenNLP二进制包的bin目录下。包含Windows版本:opennlp.bat和Linux以及Linux兼容的系统:opennlp。

###安装###

OpenNLP脚本使用JAVA_CMD和JAVA_HOME变量来决定使用哪一个命令来执行Java虚拟机。

OpenNLP脚本使用“OPENNLP_ HOME“变量来决定OpenNLP二进制包的位置。推荐使用这个变量指向当前OpenNLP版本二进制包,并且更新PATH变量,使其包含 $OPENNLP _HOME/bin 或者 %OPENNLP _ HOME%\bin 。

这样的配置允许方便的调用OpenNLP。下面的例子假设做了这样的配置。

###通用例子###

Apache OpenNLP提供了一个通用的命令行脚本来访问它所有的工具:

$ opennlp

这个脚本打印当前包的版本并且列出所有可用的工具:

  1. OpenNLP <VERSION>. Usage: opennlp TOOL
  2. where TOOL is one of:
  3. Doccat learnable document categorizer
  4. DoccatTrainer trainer for the learnable document categorizer
  5. DoccatConverter converts leipzig data format to native OpenNLP format
  6. DictionaryBuilder builds a new dictionary
  7. SimpleTokenizer character class tokenizer
  8. TokenizerME learnable tokenizer
  9. TokenizerTrainer trainer for the learnable tokenizer
  10. TokenizerMEEvaluator evaluator for the learnable tokenizer
  11. TokenizerCrossValidator K-fold cross validator for the learnable tokenizer
  12. TokenizerConverter converts foreign data formats (namefinder,conllx,pos) to native OpenNLP format
  13. DictionaryDetokenizer
  14. SentenceDetector learnable sentence detector
  15. SentenceDetectorTrainer trainer for the learnable sentence detector
  16. SentenceDetectorEvaluator evaluator for the learnable sentence detector
  17. SentenceDetectorCrossValidator K-fold cross validator for the learnable sentence detector
  18. SentenceDetectorConverter converts foreign data formats (namefinder,conllx,pos) to native OpenNLP format
  19. TokenNameFinder learnable name finder
  20. TokenNameFinderTrainer trainer for the learnable name finder
  21. TokenNameFinderEvaluator Measures the performance of the NameFinder model with the reference data
  22. TokenNameFinderCrossValidator K-fold cross validator for the learnable Name Finder
  23. TokenNameFinderConverter converts foreign data formats (bionlp2004,conll03,conll02,ad) to native OpenNLP format
  24. CensusDictionaryCreator Converts 1990 US Census names into a dictionary
  25. POSTagger learnable part of speech tagger
  26. POSTaggerTrainer trains a model for the part-of-speech tagger
  27. POSTaggerEvaluator Measures the performance of the POS tagger model with the reference data
  28. POSTaggerCrossValidator K-fold cross validator for the learnable POS tagger
  29. POSTaggerConverter converts conllx data format to native OpenNLP format
  30. ChunkerME learnable chunker
  31. ChunkerTrainerME trainer for the learnable chunker
  32. ChunkerEvaluator Measures the performance of the Chunker model with the reference data
  33. ChunkerCrossValidator K-fold cross validator for the chunker
  34. ChunkerConverter converts ad data format to native OpenNLP format
  35. Parser performs full syntactic parsing
  36. ParserTrainer trains the learnable parser
  37. BuildModelUpdater trains and updates the build model in a parser model
  38. CheckModelUpdater trains and updates the check model in a parser model
  39. TaggerModelReplacer replaces the tagger model in a parser model
  40. All tools print help when invoked with help parameter
  41. Example: opennlp SimpleTokenizer help

OpenNLP工具具有相似的命令行结构和选项。要发现工具选项,运行它,不带任务参数:

$ opennlp ToolName

这个工具将会输入两个帮助块。

第一块描述了这个命令行工具的通用结构:

Usage: opennlp TokenizerTrainer[.namefinder|.conllx|.pos] [-abbDict path] ...  -model modelFile ...

这个命令行工具的通用结构包括必须的工具名(TokenizerTrainer),可选的格式参数([.namefinder|.conllx|.pos]),可选的参数([-abbDict path] ...)和必须的参数(-model modelFile ...)。

格式参数能够使直接处理非本地化数据,不用转换。每一个格式都有它自己的参数,如果相应的工具执行时不带参数或者带参数help,他们将会显示:

  1. $ opennlp TokenizerTrainer.conllx help
  2. Usage: opennlp TokenizerTrainer.conllx [-abbDict path] [-alphaNumOpt isAlphaNumOpt] ...
  3. Arguments description:
  4. -abbDict path
  5. abbreviation dictionary in XML format.
  6. ...

要转换当前格式,并制定一个特殊的格式,在工具名后面添加一个.,和格式的名字:

$ opennlp TokenizerTrainer.conllx -model en-pos.bin ...

第二个帮助信息块描述了独特的参数:

  1. Arguments description:
  2. -type maxent|perceptron|perceptron_sequence
  3. The type of the token name finder model. One of maxent|perceptron|perceptron_sequence.
  4. -dict dictionaryPath
  5. The XML tag dictionary file
  6. ...

大多数用于处理的工具都需要提供至少一个模型:

$ opennlp ToolName lang-model-name.bin

当工具通过这样方式执行,模型被加载,工具等待来自标准输入设备的输入。输入被处理,并且被打印到一个标准输出。

可以替代,或者说,最常用的使用方法是使用控制台输入输出重定向选项来提供一个输入或者输出文件:

$ opennlp ToolName lang-model-name.bin < input.txt > output.txt

大多数用于模型训练的工具需要首先提供一个模型名字,可选的一些训练选项(例如模型类型,迭代次数),和数据。

一个模型名称是一个文件名。

训练选项通常包括迭代次数,中断,abbreviations dictionary和其他一些东西。有时,可以通过一个训练选项文件提供这些选项。在这种情况下,这项选项将被忽略,并且来自文件的选项会被使用。

对于数据,你需要指定数据的路径(文件名),通常还需要指定语言和编码。

命令行下运行一个工具训练的通用例子大概是:

$ opennlp ToolNameTrainer -model en-model-name.bin -lang en -data input.train -encoding UTF-8

或者带格式:

  1. $ opennlp ToolNameTrainer.conll03 -model en-model-name.bin -lang en -data input.train \
  2. -types per -encoding UTF-8

大多数用于模型评估的工具类似于那些用于任务执行的工具,并且首先需要提供一个模型名字,可选的一些评估选项(例如是否打印被错误分类的例子),还有测试数据。命令行下运行一个评估的通用例子大概是:

$ opennlp ToolNameEvaluator -model en-model-name.bin -lang en -data input.test -encoding UTF-8

转载于:https://my.oschina.net/kingwjb/blog/312182

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/703092
推荐阅读
  

闽ICP备14008679号