私はPythonとNLPの初心者です。私の問題は、与えられた質問の意図をどのように見つけるかです。たとえば、次のような一連の質問と回答があります。
question:What is NLP; answer: NLP stands for Natural Language Processing
基本的なことをしましたPOS tagger
上記の質問で与えられた質問についてentety [NLP]
私もやりましたString Matching
このアルゴを使用 。
基本的に私は次の問題に直面しました:
what is NLP
その後、正確な回答が返されますmeaning of NLP
その後、失敗しますDefinition of NLP
その後、失敗しますWhat is Natural Language Processing
その後、失敗します私の場合、文字列マッチングまたはパターンマッチングが機能しないため、特定の質問のユーザーの意図をどのように特定する必要がありますか。
DeepPavlovを使用してインテント識別を実行できます。マルチラベル分類をサポートしています。詳細は http://docs.deeppavlov.ai/en/master/components/classifiers.html にありますデモページ https://demo.ipavlov.ai =
これを使用 https://github.com/RasaHQ/rasa_nl インテントの識別とエンティティの抽出に適したフレームワーク。また、モデルのトレーニングも簡単です。
spacyを使用して、チャットインテントセマンティクスのカスタムパーサーをトレーニングできます。
spaCyのパーサーコンポーネントを使用して、入力テキスト上のあらゆるタイプのツリー構造を予測するようにトレーニングできます。また、談話構造に注釈を付けるために使用されるセンテンスルート間の接続を使用して、ドキュメント全体またはチャットログ全体のツリーを予測することもできます。
例:「ベルリンで最高のホテルを見せて」
('show', 'ROOT', 'show')
('best', 'QUALITY', 'hotel') --> hotel with QUALITY best
('hotel', 'PLACE', 'show') --> show PLACE hotel
('berlin', 'LOCATION', 'hotel') --> hotel with LOCATION berlin
モデルをトレーニングするには、次の形式のデータが必要です。
# training data: texts, heads and dependency labels
# for no relation, we simply chose an arbitrary dependency label, e.g. '-'
TRAIN_DATA = [
("find a cafe with great wifi", {
'heads': [0, 2, 0, 5, 5, 2], # index of token head
'deps': ['ROOT', '-', 'PLACE', '-', 'QUALITY', 'ATTRIBUTE']
}),
("find a hotel near the beach", {
'heads': [0, 2, 0, 5, 5, 2],
'deps': ['ROOT', '-', 'PLACE', 'QUALITY', '-', 'ATTRIBUTE']
})]
TEST_DATA:
input : show me the best hotel in berlin
output: [
('show', 'ROOT', 'show'),
('best', 'QUALITY', 'hotel'),
('hotel', 'PLACE', 'show'),
('berlin', 'LOCATION', 'hotel')
]
詳しくは下記リンクをご確認ください。 https://spacy.io/usage/examples#intent-parser
質問と回答ベースのシステムの一般的な知識と優れた例のリストについては、業界におけるNLPのリーダーボードを以下に示します。 https://rajpurkar.github.io/SQuAD-Explorer/ このプロセスドメインの複雑さと範囲によっては、実際には非常に複雑になる可能性があります。たとえば、より高度なアプローチでは、1次+命題論理と複雑なニューラルネットが適用されます。私が見た中で最も印象的なソリューションの1つは、双方向の注意フローです: https://github.com/allenai/bi-att-flow 、デモはこちらです http:// beta.moxel.ai/models/strin/bi-att-flow/latest
実際には、コーパスにドメイン固有の用語がある場合は、独自の辞書を作成する必要があることがわかりました。あなたの例では、「NLP」と「自然言語処理」は同じエンティティであるため、これを辞書に含める必要があります。
基本的に、余弦距離のような純粋な統計的アプローチだけで済むのであれば、自分は本当に幸運だと考えてください。おそらく、レキシコンベースのアプローチと組み合わせる必要があります。私が行ったすべてのNLPプロジェクトには、ドメイン固有の用語と「スラング」があり、特にトピック、インテント、エンティティなどの機能抽出のために、統計ベースの方法と辞書ベースの方法の両方を組み合わせて使用しました。
深層学習モデルは、Word埋め込みモデルと文字埋め込みモデルで使用できます。 RNNまたはCNNを使用できます(私によれば、CNNはより高速ですが、RNNはNLPに対してより堅牢です)。 google-news、spacy、gloveなどのWord2vecモデルを使用できます。
これは本当にあなたのフレームがあなたの問題とあなたのドメインにどのように依存していると思います。 ここ は質問タイプの分類に役立つデータセットであり、 ここ は実装です。
これらは言われていますが、おそらく Chunker 、 [〜#〜] srl [〜#〜] などによってテキストに注釈を付け、興味深いパターンを抽出する必要があると思います。
Word2VecでCNNのようなディープラーニングモデルを使用します。
これらのモデルは、あなたが言及する文のバリエーションに適応することができます。
ここでKerasの実装を確認してください- https://github.com/sarweshsuman/keras-text-classification