Earleyベクトルから構文木の森を再構築するにはどうすればよいですか?


9

Earleyベクトルを認識エンジンとして使用するのは非常に簡単です。文字列の最後に達したとき、位置0で開始された公理生成が完了したかどうかを確認するだけです。少なくとも1つある場合、文字列は受け入れられます。

Earleyベクトルを使用して解析ツリーを再構築することは、それほど明白ではありません。実際、私はアルゴリズムの手順がどのように機能するかを理解することはできません。さらに、私が見つけた唯一の参照はあいまいまたは超技術的なものでした。誰かがそれに光を当てることができますか?


2
見つけた参照、あいまいなもの、過度に専門的であると思われるものをリストアップすると役立ちます。そうでなければ、答えはあなたがすでに見つけた参照へのポインタである可能性があります。
Wandering Logic

1
アーリーが彼の最初の論文でベクトルと呼ぶものは、アーリーがベクトルと呼ぶものではないかもしれません。または、まったく同じ役割を果たしていない可能性があります。著者はアルゴリズムにバリエーションを導入しています。使用しているドキュメントへの参照を提供していないため、知る方法がありません ...とにかく、それらにアクセスできない場合があります。役立つ可能性があるのは、定義についてより明確にすることです。答えるとき、私はあなたがEarleyのものと同じ定義を使っていると思いました。
バブー14年

@babou、私が「アーリーベクトル」と呼んだのは、パーサーによって作成されたデータ構造の表形式の表現です。それは私の正式な言語の教授が言及するときに使用した用語でした。私の主要言語は英語ではないので、これは用語を翻訳するのにちょうど悪い試みかもしれないことに注意すべきです。私が言及したテクニカルリファレンスはEarleyの論文そのものです。私はそれに近づきましたが、私のような真の初心者にとっては少し怖かったです。
Stefano Sanfilippo 2014年

教授が「アーリーベクトル」を使って、アーリーが論文で「ベクトル」と呼んでいるものと同じ構造を意味しているかどうかを確認することをお勧めします。コミュニケーションに役立ちます。残りについては、ご覧のとおり、解析ツリーを回復できるように追加情報を保持する必要がありますが、Earleyは実際には詳細に触れません。現在、他のアルゴリズムがあり、Earleyのアルゴリズムの複雑さにより、このタイプの手法の重要なアイデアがいくらか隠されていると思います。幸運を。
バブー2014年

私の説明は役に立ちましたか、または技術的な部分のより詳細な説明が必要ですか?
バブー2014

回答:


9

Earleyの論文の用語と表記を使用しています。読んだ説明が異なる可能性があります。

O(n3)nO(n2)

O(n3)

O(ns+1)s右側の最も長いルールのサイズです。これが、他のアルゴリズムがバイナリ形式の文法を使用する理由です(必ずしもチョムスキー正規形(CNF)ではありません)。

実際、Earleyはバイナリ形式を暗黙的使用します。これは、3次時間の複雑性のために必要なためです。これは、州におけるルールドットの主要な役割の1つです。しかし、この暗黙のバイナリ形式は、元の構文ではなく、2値化された文法に従って構文解析とフォレストを生成します。これは、不明瞭さの主な原因であると私は思います。これについては、以下で詳しく説明します。

フォレストがどのように取得されるかを理解する1つの良い方法は、より単純なケースであるCYKアルゴリズムでフォレストを調べることです。認識エンジンとも呼ばれ、最後にパーサーアスペクトが追加されます。ウィキペディアで説明を見ることができます。フォレストを構築するために必要な情報は、「バックポインタ」のテーブルに格納されるものです。 バックポインタは基本的に、ある規則に従って文字列の構成要素を形成する部分文字列(関連付けられたシンボル)へのポインタです。これらは、部分文字列を解析するすべての可能な方法を提供します。CYKはバイナリ形式(通常はCNF)を使用するため、物事がより簡単になることを思い出してください。CYKパーサーは、基本的にEarleyと同じ動的プログラミング構造を持っていますが、はるかに単純です。ですから、それをよく理解することは大きな助けになるでしょう。

Earleyのアルゴリズムに戻ると、受け入れを決定するため、または解析ツリーとフォレストを構築するためにEarleyベクトルが必要だとは思いません。アーリーが彼の論文でベクトルと呼ぶものは、実装の3番目の段落の97ページにのみ現れます。複雑さを増すために、特定の文字列位置kを指す状態の検索を高速化するためのデバイスにすぎません。ただし、すべての情報は状態セットに含まれ、状態のリストとして実装されます。ただし、アルゴリズムは状態を取得する方法を追跡しないため、この情報は解析ツリーのフォレストを構築するには不十分です。実際、ベクターは、どのようにして見つかったかに関係なく、すでに見つかった状態を効率的に破棄するためにも使用されます。

Earleyの記事のセクション7では、「レコグナイザをパーサーにするには」、つまりパースツリーを回復できるようにするためには、完了が行われた方法を追跡する必要があると説明しています。

EαD.βgDDγ.fDγEαD.βgγD

fgfDγg

DEαD.βgwf+1gwf+1:gDDγDγ.fD

ペーパーに示されているように必要なポインターをすべて保持していると仮定すると、パーサーによって認識された最後のシンボル(もちろん文法の最初のシンボル)から始まるすべての共有ツリー表現を取得できます。

UXYZWUV

wf+1:gXwg+1:hYwh+1:iwh+1:jZUXYZwf+1:iwf+1:jU

wi+1:kwj+1:kVWUVwf+1:kW

wf+1:gwg+1:hXYUUXYZUXY.ZfShZWUV.fSk

したがって、構文ツリーのフォレストは非常に奇妙なものになる可能性があり、あるノードの最初の2つのエッジを共有し、3番目のエッジは共有しないシャムツインサブツリーのようなものがあります。言い換えれば、それは非常に厄介な構造かもしれません。これにより、Earleyが「可能なすべての解析ツリーの因数分解表現」と呼んでいる理由を、具体的ではなく説明できます。

文法を変更せずにシャム双生児を外科的に分離しようとすると、複雑さが増します。それを行う正しい方法は、文法を二値化することです。

これがお役に立てば幸いです。お知らせ下さい。しかし、私はCYK解析の十分な理解が役立つことを主張します。Earleyよりも単純な、他のアルゴリズムがあり、すべてのCF言語を効率的に解析できます。

この解析フォレストの問題に関するより一般的な情報は、他の2つの回答、https//cstheory.stackexchange.com/questions/7374#18006およびhttps://linguistics.stackexchange.com/questions/4619#6120にあります。ただし、Earleyのアルゴリズムの具体的な詳細については触れません。


CYK解析だけでなく、GLR解析も検討する価値があります。
仮名

1
@Pseudonymさまざまな形式の一般的なCF解析を知って理解しても確かに害はありません。私は、回答の最後にある2つの参照を使用して、できるだけ多くのことを提案します。しかし、CYKを選択したのは偶然によるものではありませんでした。Earleyのアルゴリズムと、GLM、GLL、GPrecのように文法をプッシュダウンオートマトンにコンパイルして生成されたテーブルを使用するのではなく、文法を直接使用するという特性を共有します。したがって、認識プロセスとツリー/フォレストの生成との関係がよりはっきりとわかります。CKYも最も単純なアルゴリズムですが、1つ例外があります。
バブー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.