1

私は非常に多くの解析ルール (つまり、文字列を別の文字列または構造化データに変換する関数) を記述する必要がある立場にあり、これには PEG を使用すると考えていましたが、例文とその正しい解析のリストを提供するだけで簡単に書くことができ、技術的には些細なことのように思えますが、混乱しています.

私は PEGjs (構文解析式文法ツール) と正規表現をいじりました。私の目的では、ニーズは本当に非常に基本的なものであり、PEG と正規表現によって提供されるすべての力よりもはるかに少ないようです。

解析したいものの例を次に示します。

"I want a red square" -> "make a red square"
"Give me a red square!" -> "make a red square"
"If you please, sir, a blue triangle." -> "make a blue triangle"
"Scratch that." -> "delete last shape"

おわかりのように、私は何百もの例文をそれぞれ正しい構文解析と組み合わせて提供し、パターンに従うすべての文章を構文解析するために必要な関数をコンピューターに記述させたいと考えています。

これを理解するのは少し難しいので、すべてのハッカーに質問します:

  1. 入力文のさまざまなバリエーションを提供するだけで、非常に単純なロジックのみが必要になるというのは本当ではないでしょうか (つまり、機械学習も、PEG も、正規表現もありません)。
  2. 機械学習機能 (ベイジアン?) でこれを簡単にできるでしょうか? (私のアプリケーションでは、文の解析に 100% の確実性は必要ありません。あいまいさは問題ありません。特に、ユーザーがそのあいまいさを解決できるように提示できる場合)
  3. この種の問題に適したツール (ライブラリ) やロジック (疑似コードをお願いします!)、または単にその性質を説明するものは何ですか?
4

1 に答える 1

0

私は機械学習についてあまり知らないので、この議論の範囲は私の頭を少し超えているかもしれませんが、問題を単純化し、単純なルールのリストを考え出し、それらを文字通りコードに変換することを検討しましたか? ?

「blue」、「triangle」、「scratch」などのコード ワードを検索し、条件付きロジックを使用して、プログラムが正しいことを実行できるようにします。この疑似コードのようなもの:

words = split input

if words contains "scratch", "delete", "never mind", etc.:
  delete last shape; exit

if words contains
  "red": color = :red
  "blue": color = :blue
  "triangle": shape = :triangle
  "square": shape = :square

if shape is undefined and color == :red
  error "red what?"; exit

if shape is undefined and color == :blue
  error "blue what?"; exit

if color is undefined and shape == :triangle
  error "what color triangle?"; exit

if color is undefined and shape == :square
  error "what color square?"; exit

if both color and shape are defined:
  add [color, shape] to shapes

これが非常に冗長に思える場合 (特に、大量の色や形状を追加する予定がある場合)、メタプログラミングを使用して、プログラムにすべてのルールをアルゴリズムで記述させることを検討してください。Clojure や Ruby のような言語は、この種のことに優れています。

重要な点は、AI は必ずしも英語の文法を理解する必要がないということです。正規表現を使用してキーワードを検索できればよいのですが、これは簡単な作業です。

また、Prolog の学習を検討することも検討してください。Prolog は、まさにあなたが説明している宣言型プログラミングのアプローチを採用したい場合に理想的な言語です。アイデアは、すべての実装の詳細を自分で記述する代わりに、基本的に多数のサンプル ケースとそれらの期待される結果を記述し、Prolog コンパイラが他のケースの処理方法を推測するというものです。(免責事項: 私は Prolog の経験がほとんどありませんが、7 週間で 7 つの言語という本を読んで、Prolog について少し学びました。)

于 2014-04-22T21:29:48.497 に答える