自然言語分析:文法表記





特に自然言語で書かれたテキストの機械理解の分野では、AIにかなり長い間興味を持っています。 ご存知のように、テキスト分析の古典的な理論では、このプロセスを3つの段階に分けています。





通常、最初の段階は解決されます。 ほとんどのテキストに見られる単語の大部分をカバーする詳細な形態学的辞書があります。 さらに、一般的な言語には、未知の単語形式を分類するために十分な精度で許可するルールがあります。



解析の状況はもっと複雑です。 既存のアナライザーは、複雑な場合に正確かつ正確であると主張することはできません。 品質の高い製品のほとんどは、プロプライエタリライセンスの下でリリースされています(これは、ロシア語にもかなり当てはまります。英語では、問題はそれほど深刻ではないようです)。 したがって、自然言語の機械テキストの理解を進めるには、高品質で手頃なパーサーが必要です。



ニューラルネットワークの分野での深い知識がなかったため、私はよりよく踏まれた道に従うこと、つまりBNFのような文法表記法を開発し、その助けを借りて記述された文法規則を使用するアナライザーを実装することにしました。 この観点から、実際に役立つアナライザーを開発するときの主な作業は、十分なルールシステムを構築することです(これは完全にはほど遠い)。 次の投稿では、実装されたアナライザーのデバイスについて説明しますが、ここでは、開発された文法表記に焦点を当てたいと思います。



文法表記の基本



特定のテキストを考慮して、研究を開始することにしました。 1892年に彼が書いたA. S.チェーホフの有名な物語である第6区を選びました。 判明したように、すでに最初の文から始まって、チェーホフの提案の複雑さに関連して非常に重大な困難に遭遇しました。 構文解析の特定の例を検討する前に、私はプロの言語学者でも言語学者でもないことを警告する必要があります。したがって、私の分析は学術的な観点から間違っている可能性があります。 私の目標は、文の一般的な構造を特定することであり、学校のカリキュラムに適した構文解析を準備することではありません。



     ,    ,    .
      
      





これは、主題(建物)、それに関連する定義(小規模)、およびゴボウ、イラクサ、麻の森全体に囲まれた参加者の売上高、およびそれに関連する述語(立っている)と状況(病院の庭で)で構成される単純な文です。



この文を2つの大きな部分に分けましょう。



これで、最初の文を正常に解析するいくつかの文法規則の概要を説明できます。



 sentence: - "{predicate_group} {subject_group}." predicate_group: - "{adverbial_modifier} {predicate}" subject_group: - "{attribute} {subject}, {participial_phrase}"
      
      





文法はYAML形式で記述されています。 この形式はルールの編集に便利で、アナライザーで使用されます。 非終端の定義は、コロンで終わる名前で始まります。 これには、この非終端記号に対応する1つ以上の規則が続きます。 ルールは、端末と非端末のシーケンスです。 ルール内の非終端は「{nonterminal_name}」として示されます。 たとえば、非終端「文」の唯一の規則は、非終端「predical_group」、終端「」、非終端「subject_group」、終端「。」のシーケンスで構成されます。



私たちの文法は、使用される非終端記号の多くを定義しないことに加えて、最も重要な構文上の制限も考慮していません。 たとえば、この文法と矛盾しない完全に間違った文を次に示します。



      ,    ,    .
      
      





実際、この文法では、最も重要な特性、特にcasenumberおよびgenderの制限が考慮されていません。 必要な制限を追加して、ルールを変更しましょう。



 sentence: - "{predicate_group number=@1 gender=@2} {subject_group number=@1 gender=@2}." predicate_group: - "{adverbial_modifier} {predicate !number !gender !tense}" subject_group: - "{attribute} {subject case=nomn !number=@1 !gender=@2}, {participial_phrase number=@1 gender=@2}"
      
      





上記の表記では、一部の非端末には属性があります。 属性には、直接指定された値を持つことができます。たとえば、文ルールのpredicate_group非終端記号のcase属性は、名義(主格、主格)でなければなりません。



属性名は感嘆符で始まる場合があります。 そのような属性の値は、対応する非端末から外部の非端末にエクスポートされます。この規則は考慮されています。 たとえば、predicate_groupは、文のルールの属性number、gender、gender、およびtenseをエクスポートする必要がありますが、これらの値はこのレベルでは定義できないため、インポートします非終端「述語」からの値。



値自体(このレベルでは定義できないことが多い)に関係なく、異なる非終端規則の属性が同じ値を持つことが必要な場合があります。 これらの場合、@記号が前に付いた特別な値が使用されます。 たとえば、文の規則では、非終端記号predicate_groupとsubject_groupは同じ番号と性別を持っている必要があります。 さらに、特別な値を持つ属性もエクスポートできます(名前の前に感嘆符が付いています)。



属性制約のゆるみ



ロシア語では、動詞の形式は対応する名詞の性別に依存し、過去形(「猫を食べる」、「猫を食べる」)にありますが、現在または未来の時制(「猫を食べる」、「猫を食べる」)に依存しません。 毎回個別のルールを作成することでこの法則を説明できますが、属性制限の緩さを使用する方が簡単です:この属性が対応する非終端の1つで定義されていない場合、属性制限は無視されます。



このルールを示す例を示します。 「cat ate」、「cat ate」、「cat eats」、「cat eats」などのフレーズを解析するには、次のルールを使用します。



 - "{noun case=nomn number=@1 gender=@2} {verb number=@1 gender=@2}"
      
      





現在時制の場合、動詞形式(「食べる」)には性別の属性がありません。したがって、属性の厳密な制限がないため、性別の制限は無視されます。 この手法は、number属性にも役立ちます。複数形に個別のルールを追加する必要はありません(動詞の性別は複数形に定義されていないため、対応する制限は無視されます)。 実際には、このアプローチにより、文法のサイズと複雑さを大幅に削減できます。



属性への値の割り当て



場合によっては、後で制約で使用できる属性に値を割り当てる必要があります。 例:



 - "@{number=plur}{noun}  {noun}"
      
      





このルールは、2つの名詞(「elephant and pug」)をリストするための複数形を確立します。 属性値の割り当ては、ルールの先頭にあり、「@」記号が前に付いており、対応する即値を持つ属性の列挙が含まれています。



字句ターミナル



最低レベルの非端末は、次のように定義できます。



 predicate: ... - "@{number=sing gender=femin tense=past}" - "@{number=sing gender=masc tense=past}" - "@{number=plur tense=past}" ...
      
      





ただし、膨大な数の単語形式があるため、このアプローチはあまり現実的ではありません。 ワードフォーム端末は、形態学的辞書から抽出する必要があります。 したがって、そのような単語形式はルールにリストされていませんが、属性値のセットによって示されます。



 predicate: - "{pos=verb !number !gender !tense}"
      
      





ご覧のとおり、このような表記法は属性への値の割り当てに似ていますが、後者とは異なり、「@」記号で始まっておらず、ルールの任意の部分に含めることができます。 上記の規則は、属性「pos」(品詞、品詞)の値が「動詞」(動詞)である字句端末(単語形式)に対応します。



All Articles