文から情報を抽出する


11

シンプルなチャットボットを作成しています。ユーザーの応答から情報を取得したい。シナリオ例:

Bot : Hi, what is your name?
User: My name is Edwin.

文からエドウィンという名前を抽出したいと思います。ただし、ユーザーは次のようなさまざまな方法で応答できます。

User: Edwin is my name.
User: I am Edwin.
User: Edwin. 

単語間の依存関係に頼ろうとしましたが、うまくいきません。

この問題に取り組むためにどのようなテクニックを使用できるかについてのアイデアはありますか?

[更新しました]

名前付きエンティティの認識と、品詞のタガーとパーサーをテストしました。ほとんどのモデルは、個人名または固有名詞のエンティティの最初の文字が大文字でなければならないようにトレーニングされていることがわかりました。これは通常のドキュメントにも当てはまりますが、チャットボットには関係ありません。例えば

User: my name is edwin.

ほとんどのNERはこれを認識できませんでした。


これは、現代のチャットボットがどのように構築されるかを説明しますが、私はそれを単純とは言いません。「質問回答」を検索すると、さらに詳しく知ることができます。
Emre、

質問をして回答を受け取った人が回答を許容できるものとしてマークする方法が好きです:P
chewpakabra

回答:


7

名前付きエンティティの認識と構文解析を組み合わせて使用​​することもできます。エドウィンという言葉が確かに支持されている一方で、名前がエドワードフィリップマーテルである状況を想像してみてください。NERは各単語を個別のエンティティ(したがって3つの異なるエンティティ)として検出します。したがって、何らかのロジックに基づいて、それらを一緒にストリングする必要があります。さらに、複数の名前が存在する場合、明確にするのが難しくなる可能性があります(たとえば、John&RamseyはWinterfellで食事をしました)。

ここで文の構文の分析も役立ちます(エンドユーザーが比較的まとまりのある適切な文を入力すると想定します。スラングや短い形式のテキストが使用されている場合、スタンフォード大学のNLPもある程度までしか役に立ちません)。

構文解析/解析とNERを活用する1つの方法は、次の例にあります-

 1. User: Edwin is my name.
 2. User: I am Edwin.
 3. User: My name is Edwin.

いずれの場合でも(一般的に同様)、エンティティ名(固有名詞/名詞)は動詞に近接して関連付けられます。したがって、最初に文を解析して動詞を特定し、次に周囲の(+/- 1または2)単語にNERを適用する場合、問題を解決するための比較的適切な方法がある可能性があります。このソリューションは、主に動詞の周りのウィンドウと同様にNERを識別するために作成する構文規則に依存します。


2
おそらく、各文がパターンが受け入れる応答である「非決定性有限オートマトン」を実装します。一部の文法は、このようなものに実装されています。(NLP /文法)。これを行う方法が必要な場合は、フレームワークstanfordnlp.github.io/CoreNLP
Intruso

5

たとえばNLTKの名前付きエンティティ認識を使用する必要があります。http: //www.nltk.org/book/ch07.html <-そこに使用例があります。それはあなたの記述されたケースのためにかなりうまくいくでしょう。


4

これは、CRFで簡単に実行できます。BIOエンコーディングを使用して、文にタグを付けることができます。次に、それをCRFに渡します。次のように、トレーニングのためにタグ付きの文をいくつか作成する必要があります。

 I am Edwin.
 O O  B-NAME

 You can call me Alfred
 O   O    O    O B-NAME

 My name is  Edwin   thomas
 O  O     O  B-NAME  I-NAME

CRFsuiteCRF ++は、優れた実装の一部です。CRFsuiteと呼ばれるPythonラッパーありpycrfsuite実装するのはとても簡単です。NERのエンドツーエンドの実装については、このipythonノートブックまたはgithubのこのコードスニペットを確認してください。

Pythonで記述されたNERおよびIntent Classificationを使用して、githubでこのオープンソースチャットボットプロジェクトを確認してください。使いやすいトレーニングUIがあり、ボットをトレーニングして文章から情報を抽出できます。


0

このようなタスクを高精度で実行するために、word2vecを使用して、単語を埋め込んだLSTMモデルを構築することをお勧めします。LSTMは、文から情報を取得するのに役立つだけでなく、一連の単語がすでに文に存在する場合、次の文字または単語を予測するのに役立ちます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.