プロジェクトの一部として、タスクベースの音声ダイアログシステムを実装したいと考えています。システム用の自然言語理解(NLU)ユニットを構築するのは難しいと感じています。これは、ユーザーによる単語(発話)がシステムによって「理解」され、音声を特定のアクションにマッピングする部分です。これは複雑なプロセスですが、音声ダイアログシステムの構築に実際的な経験がある場合は、これを開始する方法についてのアイデアをいただければ幸いです。ありがとう!
1 に答える
かなり広い話題ですが、この分野の調査は新鮮なので、学んだことを共有させていただきます。
通常、最初のステップは、文の文法構造(特に、単語間の依存関係)を解析することです。これにより、次のような出力が得られます:http: //nlp.stanford.edu/software/lex-parser.shtml#Sample
このPythonラッパーを使用してStanfordParserに接続しています: https ://github.com/dasmith/stanford-corenlp-python
2番目のステップは、通常、各単語を「センス」にマッピングし、いわゆる「語義の曖昧性解消(WSD)」を実行することです。
各単語の意味とそれらの間の関係を理解すると、文を理解し、目的のアクションをトリガーできるようになります。
一般的な文のために箱から出してそれらすべてを行うことができるオープンで無料のシステムはありません。これは、話し言葉では特に困難です。
たとえば、スタンフォードパーサーのような文法パーサーは通常、新聞記事のテキストのタイプでトレーニングされた言語モデルを提供しますが、これは話し言葉とはかなり異なる傾向があります。トレーニング「ツリーバンク」に、システムで受け取ると予想されるタイプの文を追加して、新しい言語モデルをトレーニングすることをお勧めします。(スタンフォードパーサーはそのようなモデルトレーナーアプリケーションを提供します)。
残念ながら、Word-Sense Disambiguation(WSD)を作成するための優れた汎用ソフトウェアライブラリはありません。主な理由は、「感覚」という言葉の実用的な参照がまだないことです。この分野のデファクトスタンダードは依然としてWordNetですが、明らかに人間でさえ、単語と「シンセット」の間のマッピングに同意しないことがよくあります。言い換えれば、WordNetの意味はきめが細かく、信頼できるマッピングを提供できません。
多くの場合、意味の独自のデータベース(通常はツリーで構造化されている)を構築し、アプリケーションで実用的な範囲でできるだけ粗いデータベースを作成する必要があります。単語をそのような粗い意味にマッピングするための多くのアプローチがあります。最も単純ですが、それでも非常に効果的なものの1つは、古き良き単純ベイズ分類器です。私がまだ実験していないもう1つのアプローチは、「単語フレーム」に関する情報を使用することです(つまり、特定の単語の特定の意味は、その周囲の単語と特定の関係を持ちます)。
とにかく、現実はそれがしかし開かれた問題であるということです。最初は、特定のサブドメインについてそれを解決することに集中する必要があります。