これは非常に広範な質問であるため、StackOverflow の形式にはほとんど適合しませんが、それでも試してみたいと思います。
まず、NLP について一言 NLP
の分野で成熟したツールが広く利用できること自体、誤解を招く可能性があります。確かに、たとえばPOS タグ付けやチャンキングから、たとえば自動要約や名前付きエンティティ認識まで、すべて/ほとんどの NLP 機能 がカバーされており、さまざまなライブラリのロジックとサポート データによって一般的に十分に機能します。ただし、これらの構成要素から現実世界のソリューションを構築するのは簡単なことではありません。次のことを行う必要があります。
- 特定の変換の結果が後続のプロセスの入力にフィードされる、ある種のパイプラインまたはチェーンに沿ってソリューションを設計します。
- 個々のプロセスを構成します。これらの計算フレームワークは十分に確立されていますが、トレーニング/参照コーパス、オプションの調整パラメーターなどの基礎となるデータに非常に敏感です。
- 適切な機能/プロセスを選択して検証します。
上記は、テキストからのセマンティック要素の抽出と処理に関連するソリューションの一部にとって特に困難です (情報抽出全般だけでなく、相互参照の曖昧さの解消、関係抽出、感情分析なども含まれます)。これらの NLP 関数とさまざまなライブラリの対応する実装は、構成が難しくなる傾向があり、ドメイン依存のパターンや発話レベルの変動、さらにはサポートするコーパスの「形式」の変動に敏感です。
一言で言えば、NLP ライブラリは、質問で言及されている「質問応答システム」などのアプリケーションに不可欠な構成要素を提供しますが、多くの「接着剤」と、接着剤を適用する方法と場所に関する多くの裁量が必要です (適切な用量とともに)。ナレッジ表現の問題などの非 NLP テクノロジーについては、以下で説明します)。
知識表現
について 上で示唆したように、POS タグ付けだけでは NLP パイプラインの十分な要素ではありません。基本的に、POS タグ付けは、テキスト内の各単語に関する情報を追加し、その単語の [可能性の高い] 文法上の役割を示します (名詞 vs 形容詞 vs 動詞 vs 代名詞など)。この POS 情報は、可能な限り非常に役立ちます。たとえば、テキストを論理的に関連する単語グループに分割したり、辞書、分類法、オントロジーで個々の単語をより正確に検索したりします。
ある種の「質問応答システム」に必要な情報抽出と基礎となる知識表現の種類を説明するために、さまざまなセマンティック検索エンジンで使用される一般的な形式について説明します。ただし、この形式はセマンティック検索の規範的というよりも概念的なものである可能性があり、エキスパート システムや翻訳マシンなどの他のアプリケーションではさらに別の形式の知識表現が必要になることに注意してください。
アイデアは、サポート データ (単純なレキシコンの単純な「ルックアップ テーブル」から、分類法のツリー状構造、特殊言語で表現されたオントロジーまで) と共に NLP 手法を使用して、テキストからエンティティのトリプレットを抽出することです。構造は次のとおりです。 :
- エージェント: 何かまたは誰かが何かを「している」
- 動詞 : 何が行われているのか
- オブジェクト : 「実行」が行われる人またはアイテム (または、より一般的には、「実行」に関する情報の補完)
例:
cat/Agent eat/Verb mouse/Object.
John-Grisham/agent write/verb The-Pelican-Brief/目的の
牛/エージェントの農産物/動詞 milk/目的
さらに、「事実」と呼ばれることもあるこの種のトリプレットは、通常は動詞の意味論に基づいて編成された特定の意味パターンに対応するさまざまなタイプに分類できます。たとえば、" Cause-Effect " ファクトには因果関係を表す動詞があり、" Contains " ファクトにはコンテナとコンテナの関係を意味する動詞があります。" Definition " ファクトはエージェント/サブジェクトが定義されているパターン用です部分的に]オブジェクトによって(たとえば、「猫は哺乳類です」)など。
このような事実のデータベースを照会して、質問への回答を提供したり、同義語の置換や質問への回答の関連性を向上させるなどのさまざまなスマートやサービスを提供したりする方法を容易に想像できます (単純なキーワード マッチングと比較して)。
本当に難しいのは、テキストから事実を抽出することです。そのために、多くの NLP 関数が使用されています。たとえば、NLP パイプラインのステップの 1 つは、代名詞をそれらが参照する名詞で置き換えることです (照応解決、またはより一般的には NLP 用語での相互参照解決)。もう 1 つのステップは、名前付きエンティティ (名前、地理的場所、本の名前など) を特定することです ( NLP 用語ではNER )。もう 1 つのステップは、「AND」で結合された句を書き直して、暗示される文法要素を繰り返すことによって事実を作成することです。
たとえば、上記のジョン・グリシャムの例は、次のようなテキストの抜粋から来た可能性があります。
Author J. Grisham was born in Arkansas. He wrote "A time to Kill" in 1989 and "The Pelican Brief" in 1992"
取得することはJohn-Grisham/Agent wrote/Verb The-Pelican-Brief/Object
(とりわけ)以下を意味します:
- 「J. Grisham」と「The Pelican Brief」を特定の実体として特定。
- 2 番目のセンテンスの「He」を「John-Grisham」に置き換えます。
- 2 番目のセンテンスを 2 つの事実として書き直します。
- 「1992年」の部分を削除します(または、別の事実、「時間の事実」を作成します:「ペリカンブリーフ/エージェントは時間に関連する/動詞年-1992/オブジェクト」)(ところで、これは
1992
タイプ「年」の時間実体であると識別したことも意味します。)
簡単に言えば、情報抽出は、比較的限定されたドメインに適用する場合や、ライブラリで利用可能な既存の NLP 関数を利用する場合でも、複雑なタスクです。確かに、形容詞と動詞から名詞を単に識別するよりも、はるかに「厄介な」アクティビティです ;-)