web-dev-qa-db-ja.com

OpenNLP対Stanford CoreNLP

私はこれら2つのパッケージを少し比較していて、どちらに進むべきかわかりません。簡単に探しているのは、

  1. 名前付きエンティティの認識(人、場所、組織など)。
  2. 性別の識別。
  3. まともなトレーニングAPI。

私が言えることから、OpenNLPとStanford CoreNLPは非常によく似た機能を公開しています。ただし、Stanford CoreNLPはより多くのアクティビティを持っているように見えますが、OpenNLPは過去6か月間に数回のコミットしか行っていません。

私が見たところによると、OpenNLPは新しいモデルをトレーニングする方が簡単で、その理由だけでももっと魅力的かもしれません。しかし、私の質問は、NLP機能をJavaアプリに追加するための基礎として、他の人が何から始めるのかということです。

13
Mike Thomsen

完全な開示では、私はCoreNLPへの貢献者なので、これは偏った答えです。しかし、あなたの3つの基準に関する私の見解では:

  1. Named Entity Recognition:正確さと使いやすさの両方において、CoreNLPがここで明らかに勝っていると私は思います。 1つは、OpenNLPにはNERタグごとにモデルがあるのに対し、CoreNLPは単一のアノテーターですべてのタグを検出します。さらに、SUTimeを使用した時間解像度は、CoreNLPの優れた特典です。正確に言うと、私の逸話的な経験では、CoreNLPは汎用テキストでより優れています。

  2. 性別の識別。どちらのツールも、この面については不十分に文書化されていると思います。 OpenNLPにはGenderModelクラスがあるようです。 CoreNLPには性別アノテーターがあります。

  3. トレーニングAPI。 OpenNLPトレーニングAPIは、既製のトレーニングではなく使いやすいと思います。ただし、CoNLLファイルからモデルをトレーニングするなど、やりたいことがすべてある場合は、どちらも簡単です。 CoreNLPを使用すると、私が試した他のツールよりもトレーニング速度が速くなる傾向がありますが、正式にベンチマークを行ったわけではないので、細かいことを考慮してください。

14
Gabor Angeli

ここで少し遅れましたが、最近、スタンフォードはGPLライセンスであるという事実に基づいてOpenNLPを検討しています。プロジェクトに問題がなければ、スタンフォードはしばしばNLPのベンチマーク/最先端技術と呼ばれます。

とはいえ、事前トレーニング済みモデルのパフォーマンスは、非常にドメイン固有であるため、ターゲットテキストに依存します。ターゲットテキストがモデルのトレーニングに使用したデータと類似している場合は、適切な結果が得られるはずですが、そうでない場合は、モデルを自分でトレーニングする必要があり、トレーニングデータに依存します。

OpenNlpの長所は、非常に拡張可能であり、他のライブラリと簡単に使用できるように作成されており、統合のための優れたAPIを備えていることです。トレーニングは、OpenNLP( 私はそれについてここに書きました-かなりお粗末な生成されたデータセットで私は食べ物を特定する適切な結果を得ることができました )、そしてそれは非常に設定可能です-あなたは非常にトレーニングに関するすべてのパラメーターを設定できます簡単に使用できるアルゴリズムの範囲があります(パーセプトロン、最大エントロピー、 、スナップショットバージョンでは、単純ベイズ )が追加されています)

自分でモデルをトレーニングする必要がある場合は、OpenNlpを試してみて、比較のためだけにどのように機能するかを確認することを検討します。微調整するとかなりまともな結果が得られるからです。

8
rhinds