OpenNLP

機械学習技術 Clojure デジタルトランスフォーメーション技術 人工知能技術 確率的生成モデル サポートベクトルマシン スパースモデリング トピックモデル Python 深層学習技術 自然言語処理サマリー 本ブログのナビ

OpenNLP

Apache OpenNLPは、 Apache Software Foundation のもとで管理されているオープンソース製品で、自然言語処理のための教師あり学習ツールセットとなる。提供する機能としては、「Language Detector」,「Sentence Detector」,「Tokenizer」,「Name Finder」,「Document Categorizer」,「Part-of-Speech Tagger」,「Lemmatizer」,「Chunker」,「Parser」等基本的な自然言語処理ツールとしてはほぼ揃っている。

古いバージョンでは日本語が対応していなかったが、新しいバージョン1.9.0から正式に日本語がサポートされるようになった。

Language Detectorは自然言語で書かれたテキストが「何語」で書かれているかを自動判別する機能で、日本語、英語、ドイツ語、フランス語、ロシア語、アラビア語、中国語、韓国語など103言語をカバーしている。

Sentence Detectorは文章の中から文を切り出すもので、文検出トレーニングツールを使って学習することができる。

Tokenizerは単語、句読点、数字等のトークンに分割するツールで上記と同様にトレーニングツールを用いて学習することが可能となる。Apacheでは似たようなものとしてlucineのプラグインとしても使われているkuromoji(形態素解析ツール)がある。

Name Finderは固有名抽出器ともよばれ、自然言語で書かれたテキストにある人名、地名、組織名などの固有名詞を属性(固有名詞タイプ)付きで抽出するものとなる。

固有名抽出例

固有名詞タイプは、人名など一般的なものから、病名、料理名、イベント名など、アプリケーションに応じてさまざまなタイプを使うことができるが、コーパスは独自に準備する必要がある。

Document Categorizerは、自然言語で書かれた文書に分類ラベルを自動付与する機能となる。たとえば文書を投稿するサイトで、投稿された文書に自動的に「スポーツ」「芸能」「政治」「経済」などのラベルを自動付与するなどができる。

OpenNLPの利用は、一番シンプルなものは、OpenNLP 1.9.0 を下記サイトからapache-opennlp-1.9.0-bin.tar.gz を選んでダウンロードし、

Download - Apache OpenNLP
Apache OpenNLP is a machine learning based toolkit for the processing of natural language text.

ダウンロードしたらファイルを解凍し、解凍してできたディレクトリに移動して、スクリプトファイルとモデルを指定してコマンドラインで動かすものとなる。

あるいは、JavaかJava互換のプログラム(Clojure,Scala等)で動かす手段もある。

public class NamedEntitySample {
 
  public static void main(String[] args) throws Exception {
    String SRC = "故障 者 リスト 入り し て い た エンゼルス ・ 大谷 翔 平 投手 ( 2 3 ) が 戦列 復帰 。";
    String[] sentence = SRC.split("\\s+");
 
    try (InputStream modelIn = new FileInputStream("ja-ner.bin")){  /* 1 */
      TokenNameFinderModel model = new TokenNameFinderModel(modelIn);
      NameFinderME nameFinder = new NameFinderME(model);            /* 2 */
      Span[] spans = nameFinder.find(sentence);                     /* 3 */
      for(Span span: spans){
        System.out.printf("Span(%d,%d,%s)=\"%s\"\n", span.getStart(), span.getEnd(), span.getType(), str(sentence, span));
      }
    }
  }
 
  static String str(String[] sentence, Span span){
    StringBuilder sb = new StringBuilder();
    for(int i = span.getStart(); i < span.getEnd(); i++){
      sb.append(sentence[i]);
    }
    return sb.toString();
  }
}

固有名抽出や文書分類の機能は、検索技術と組み合わせることができる。

モバイルバージョンを終了
タイトルとURLをコピーしました