私はJava、Pascal、PERL、SQL、およびRのバックグラウンドがあり、そのバックグラウンドから、テキストから概念を自動または半自動で抽出し、結果を統計的に分析可能なものに変換するための合理的に抵抗の少ない道を見つけたいと考えています。必要に応じて新しい言語を学ぶため)。数千ページのテキストに対していくつかの NLP タスクを実行する必要があると思います。特に、POS 処理、名詞句の識別、語義の曖昧さの解消などです。後者は、精度を高めるために半教師付き機械学習が必要になる可能性があると私は信じています。私が抱えている問題は、実践的な学習をどこから始めるかということですNLP? コースを受講したり、NLP の本を読んだりすると、NLP のタスクがどのように実行されるかについて、今必要以上に詳しく知る必要があるようです。NLP が何をするのか、どのくらい正確なのか、そしてどのような代替手段があるのかを知る必要があるだけです。既存の NLP フレームワークに飛び込むと、行き詰まるようです。私はPOS処理にGATEを使用しましたが、出力は、さらに処理する方法がわからないXMLか、統計データを生成するためにSQLで操作するのが面倒なpostgresqlのいずれかでした。また、当時の GATE には語義を抽出する良い方法がありませんでした。
3 に答える
私は現在、NLTK、NLTK の本、およびスタンフォード CoreNLP ソフトウェアについてある程度の経験を積んできたので、実用的な関心を持つ人が NLP を行う方法について役立つ情報を追加できると思います。
私の最初の目標は、NLP がどのように機能するかの核心 (少なくとも特別な関心分野以外) を学ぶ必要なく、いくつかの NLP タスクを完了し、適切に完了することでした。その目標を達成するには、スタンフォードの CoreNLP ソフトウェアから始めればよかったのです。多かれ少なかれ最先端の作業を行い、ソフトウェアにテキストを入力して出力を取得する方法を学ぶことは非常に簡単です. NLTK は、出力の品質の点で CoreNLP に劣っており、(私が知る限り) 統計的コロケーション分析以外のすべてについて、CoreNLP はより幅広い実用的なアルゴリズムを備えています。
たとえば、NLTK で名詞句をチャンク化するには、正規表現をプログラムするか、機械学習ルーチンをトレーニングする必要があります。構文解析については、さまざまな構文解析の方法を学び、適用できる複数の文法があります。どれが最高なのか、利用可能なものが最新のものなのか、私にははっきりしません。CoreNLP では、解析を要求すると、非常に有能な解析のように見えるものが得られます。解析により名詞句が識別されるため、名詞句の識別に関する私の問題は解決されます。
最終的には、自分ができる限り最適な方法で物事を行っているかどうか、特定のデータをトレーニングする必要があるかどうかについて、さらに学ぶ必要があることは間違いありません。しかし、私は実際的な問題を抱えており、NLP がその問題に対処できるかどうかを確認する必要があります。後で戻ってギャップを埋めることができます。したがって、今のところ、単純に使用されている CoreNLP が私のニーズを満たしています。
CoreNLP は結果を XML または注釈オブジェクトに出力するため、Java でこれらを処理する方法を学ぶ必要があります。そして、追加の処理を行って結果を追加する方法を学ぶ必要があります。
NLTK の本は、NLP の核心を学ぶことに興味がある人にとっては、優れた実践的な本になるでしょう。また、言語データが NLTK によってどのように表現および操作されるかを確認できたことは役に立ちましたが、最終的には Java での処理が異なります。Java は、大規模で複雑なタスクにもおそらくより便利です。言語はより構造化されており、Python よりも桁違いに高速です。最後に、CoreNLP にはパイプラインがあります。テキストを入力し、必要な注釈の種類を指定すると、最終的な成果が得られます。NLTK では、多数の異なる注釈 (POS、見出し語、解析など) を互いに積み重ねる方法があまり明確ではありません。