機械学習技術 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 を選んでダウンロードし、
ダウンロードしたらファイルを解凍し、解凍してできたディレクトリに移動して、スクリプトファイルとモデルを指定してコマンドラインで動かすものとなる。
あるいは、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();
}
}
固有名抽出や文書分類の機能は、検索技術と組み合わせることができる。
コメント
[…] 1.音声認識ツールCMU Sphinx(広く利用されている音声認識プログラム)Juicer(重み付き有限状態トランスデューサを利用した音声認識デコーダ)Julius(音声認識システムの開発・研究のためのオープンソースの高性能な汎用大語彙連続音声認識エンジン)2.言語モデルIRSTLM(言語モデルの学習・格納ツール)kenlm(メモリ効率とスピードを重視した言語モデル保持ツール)Kylm(重み付き有限状態トランスデューサーの出力や未知語の文字ベースモデル化などの機能が揃っている言語モデルツールキット。Javaで実装)RandLM(乱択データ構造であるBloom Filterを用いることで、膨大な言語モデルを少ないメモリで保持するツールキット)SRILM(効率的なn-gram言語モデルツールキット。様々な平滑化手法(Kneser-Neyなど)、クラス言語モデル、複数のモデルの補間等の機能が揃っている)3.言語処理ライブラリNLTK(Pythonで書かれた言語処理ライブラリ)OpenNLP(Javaで書かれた一般的な言語処理ライブラリ)参考記事Stanford CoreNLP(Stanford大学で作られたNLPツールを含めたライブラリ)4.読み推定KyTea(単語分割と読み推定の機能が揃っているテキスト解析ツールキット)mpaligner(発音推定システムを学習する時に必要となる文字・発音対応をアライメントするツール)Phonetisaurus(WFSTに基づく表記⇔発音変換ツールキット)5.句構造解析Berkeley Parser(PCFGの構文解析器。英語、アラビア語、中国語、フランス語、ドイツ語、ブルガリア語などのモデル付き)Charniak Parser(英語用のCFGパーザ)Egret(圧縮森やn-bestリストを出力できる確率的正則文法(PCFG)の構文解析器)EVALB(句構造解析結果の評価スクリプト)Stanford Parser(CFG解析と係り受け解析を同時に行う構文解析器。英語・中国語・アラビア語・フランス語・ドイツ語のモデルあり)6.形態素解析Chasen(HMMを用いた形態素解析器)JUMAN(日本語の形態素解析器。品詞等以外にも様々な意味情報を付与する)参考記事KyTea(分野適応可能で未知語にロバストな形態素解析器)MeCab(条件付き確率場(CRF)を用いた形態素解析エンジン)Sen(Javaで書かれた形態素解析システム)Sudachi(ワークスアプリケーションズによるエンジン、最近公開されたので辞書が新しく、高速化が特徴)7.有限状態モデルKyfd(重み付き有限状態トランスデューサ(WFST)で構築されたテキスト処理システムのためのデコーダ)OpenFST(重み付き有限状態トランスデューサ(WFST)の様々なアルゴリズムを実装したライブラリ。有限状態モデルを利用したシステムの構築に便利)8.機械翻訳アライメントBerkeley Aligner(教師ありと教師なしアライメントを両方実装した単語アライメントプログラム)GIZA++(IBMモデルを実装した標準的な単語アライメントツール)pialign(Inversion transduction grammar (ITG)に基づいたフレーズアライメントツール。精度を保ちながらコンパクトなモデルが学習できるのが特長)9.機械翻訳デコーダcdec(最近の木ベース・森ベース機械翻訳の研究成果を実装したデコーダ)Joshua(統語ベース翻訳のためのデコーダ)Moses(標準的な機械翻訳デコーダ。フレーズベースと木ベースの機械翻訳に対応)Travatar(統語情報を用いる翻訳のためのtree-to-stringデコーダ)10.機械翻訳評価METEOR(類義語、語幹正規化、並べ替え情報などを考慮したMETEOR評価尺度を計算するツール)multeval(複数の評価基準に基づく統計的有意性を考慮した機械翻訳の評価ツール)RIBES(機械翻訳結果の並べ換えの精度を評価するプログラム)11.機械学習AROW++(Adaptive Regularization of Weight Vectorsというノイズにロバストなオンライン学習器の実装)Classias(オンライン学習、バッチ学習に基づいた様々な分類器を実装したライブラリ。)CRF++(系列解析で用いられる条件付き確率場(CRF)のツールキット。素性テンプレートを簡単に指定できるので、さまざまな素性で実験をするのに便利)CRFsuite(高速な学習を実現している条件付き確率場(CRF)の実装)LIBLINEAR(線形SVMやロジスティック回帰などの分類器を実装したライブラリ。学習は非常に速い)LIBSVM(様々なオプションをサポートするSVM学習ツール)Mallet(自然言語処理のための機械学習ツールキット。隠れマルコフモデル(HMM)、最大エントロピーマルコフモデル(MEMM)、条件付確率場(CRF)などの機能がある。JAVAで実装)SVM-Light(効率的なSVMライブラリー)Weka(様々な学習アルゴリズムを実装した機械学習ライブラリ)12.係り受け解析CaboCha(Cascaded Chunkingに基づく日本語の係り受け解析器)KNP(日本語の係り受け解析と格解析器)参考記事MaltParser(Shift-Reduceに基づく係り受け解析器)MSTParser(最小極大木に基づく係り受け解析器) […]
[…] OpenNLP オープンソースの自然言語処理ツール […]