NLP:スペルチェック-内観(パート4)

(パート1、2、3 )4番目のパートでは、トークン化された文以外の文法のチェックについて説明します。



すでに述べたように、文章をトークンとPOSマークアップに分割すると、テキストの文法的な正確さをチェックするための簡単なツールを作成できます。 少なくとも、LanguageTool Open Officeプラグインはそれだけで機能します。 明らかに、ラベル付きトークンのレベルで多くのエラーを捕捉できます。 ただし、モジュールの機能を超えて、それほど広範囲のエラークラスが残っていないことも明らかです。 少なくとも主題と述語の調整のような単純なことをしてください:「女性は犬を愛しました」、「犬は女性を愛しました」、「女性は犬を愛しました」...ルールのパターンを作る方法多かれ少なかれ単語の順序が明確な英語は難しく、ロシア語について話す必要はまったくありません。



LanguageToolの作成者は、個別の文法パターンを定式化しようとします。 実際には、限られた数のケースで機能する非常に複雑な構造が得られます。 例:



<token postag = "SENT_START" > </ token>

<token postag = "DT" > </ token>

<token postag = "NNS" > </ token>

<token postag = "VBZ" > </ token>



*このソースコードは、 ソースコードハイライターで強調表示されました。


「文は定義語で始まり、次に複数形の名詞、次に単数形の第三者の動詞が来る。」 「猫は牛乳を飲む」などの断片は、この定義に該当します。 明らかに、動詞は一人称形式(飲み物)でなければなりません。 ご覧のとおり、このルールは文の先頭でのみ機能し、明確に定義された状況でのみ機能します。 おそらく、著者は誤検知を避けるために再保険をかけています(「名詞+動詞」のすべてのペアが「主題+述語」という形式の束ではないことは明らかです)。



自然言語パーサー(パーサー)を使用したより信頼性の高いオプションがあります。



解析について

パーサーは、入力文の単語間のリンクのツリーを構築するモジュールです。 「私は大きな犬が大好き」というフレーズに対するこのようなツリーの例は、ノートの第2部に記載されています。







単語をどのように組み合わせるかについては、さまざまなアイデアがあります。 単語間の直接のエッジの代わりに、たとえば、文の複合メンバーを強調表示できます。







チョムスキーはこのアプローチを推進し、今でも英語を話す研究者に人気があります。 ただし、特にヨーロッパでは、単語間リンク(依存リンク)の支持者が増えています。これは、チョムスキーツリーは、より自由な語順を持つ言語にはあまり適していないと考えられているためです(そして、ヨーロッパにはそのような言語がたくさんあります)。



おそらく、パーサーで最初のギャグが動作していました。 適切なパーサーを見つけるのは困難です(ちなみに、文分割機能とPOSタグ機能もありますが、補助ライブラリがあるため、自分ですばやく作成できます)。 まだ実用的なプロジェクトがあり、このモジュールが(a)C / C ++であるようにします(プロジェクト全体がその上にあるため)。 (b)無料または手頃な費用でした。 (c)サポートされている依存関係リンク。 (d)新しい言語に適応できた。



検索に多くの時間を費やし、多くのパーサーをテストしました。 完全な混乱があります-誰かがパーサー(LGPL)に執着せず、​​誰かが非現実的なお金を望んでいます(私は100と30万ユーロの価格と呼ばれます-私の意見では、これは善悪を超えています)、そして誰かに売上の割合が必要です。 パーサーはシステムのメインモジュールになりますが、そうではなく、文法チェックモジュールの一部にすぎません!



数か月前、 MaltParserプロジェクトに集中することにしました。 作者が選択した言語であるJavaを除き、すべての人に適しています(いわゆる非投影接続もサポートしています)。 私はすでに弾丸を噛んでC ++でコードを書き直す準備をしていました(そして多くのコードがあります...)、つい最近LDParと呼ばれる新しいプロジェクトが作成されました 。 彼が構文解析の品質をどのように扱っているかわかりませんが、他の基準によればそれは適合します。 中国人は世界を救います! まあ、または少なくとも私たちのプロジェクト:)



実際、ここでパーサーを使用して分析される文法規則の特定の例を提供する準備はできていません-このモジュールの実験を開始しました。 しかし、最も単純なアイデアはすでに明確になっています。 たとえば、サブジェクトと述語の互換性を確認する方法(英語の場合):



ツリーのルートを取得し、ルートが動詞であることを確認します-これが述語です。

これに関連する最初の名詞または代名詞を探しています-これが主題です。

顔と番号の互換性を確認します。



明らかな潜在的な問題のうち、不正確な文の解析の理解できない品質に名前を付けることができます。 つまり、パーサーが単語Iを考慮し、「犬がいます」という文の主語および述語である必要があるかどうかはすぐにはわかりません。 このトピックに関する研究は行われる必要がありますが、ありません。 コメントでは、エラーのあるコーパスが何らかの形で言及されました(J. Fosterによる)-ここで、いくつかのパーサーを個人的にテストしました。 それらのほとんどはエラーのあるフレーズも正しく解析しますが、質問をさらに研究しても間違いなく害はありません。



それで、今日は終わりです。次のパートでは、トライバンクについてもう少しお話します。



All Articles