こんにちは、みんな! 私たちは、自然言語処理 (自然言語処理または単に NLP) に関連する実践的な問題の解決と、オープンソース ライブラリを使用したダイアログ エージェント (チャットボット) の作成に特化した一連の記事を公開します。
NLP タスクには、テキストの感情の判断、名前付きエンティティの解析、対話者がボットに何を求めているかの判断 (ピザの注文や背景情報の取得など) が含まれます。 NLP のタスクとメソッドについて詳しく読むことができます。
この記事では、事前トレーニングされた NLP モデルを使用して REST サーバーを実行し、追加の構成やトレーニングなしですぐに使用できるようにする方法を説明します。
DeepPavlovのインストール
ここと以下では、Linux 用の手順を説明します。 Windows については、こちらを参照してください。
- 現在サポートされているバージョンの Python を使用して仮想環境を作成し、アクティブ化します。
virtualelnv env -p python3.7 source env/bin/activate
- DeepPavlov を仮想環境にインストールします。
pip install deeppavlov
DeepPavlov モデルを使用した REST サーバーの起動
DeepPavlov モデルを使用してサーバーを初めて起動する前に、ライブラリのアーキテクチャのいくつかの機能について話しておくと役立ちます。
DP のモデルは次のもので構成されます。
- Python コード。
- ダウンロード可能なコンポーネント - 特定のデータ (埋め込み、ニューラル ネットワークの重みなど) に関するシリアル化されたトレーニング結果。
- 構成ファイル (以下、構成と呼びます)。モデルで使用されるクラス、ダウンロードされたコンポーネントの URL、Python の依存関係などに関する情報が含まれます。
DeepPavlov の内部に何があるのかについては、次の記事で詳しく説明します。現時点では、次のことを知るだけで十分です。
- DeepPavlov のモデルはすべて、その構成の名前によって識別されます。
- モデルを実行するには、DeepPavlov サーバーからコンポーネントをダウンロードする必要があります。
- また、モデルを実行するには、モデルが使用する Python ライブラリをインストールする必要があります。
私たちが立ち上げる最初のモデルは、多言語の固有表現認識 (NER) です。 このモデルは、テキスト単語を、それが属する固有表現の種類 (固有名、地理名、通貨名など) に従って分類します。 NER の現在の最新バージョンの構成名:
ner_ontonotes_bert_mult
次のモデルを使用して REST サーバーを起動します。
- 構成で指定されたモデルの依存関係をアクティブな仮想環境にインストールします。
python -m deeppavlov install ner_ontonotes_bert_mult
- DeepPavlov サーバーからシリアル化されたモデル コンポーネントをダウンロードします。
python -m deeppavlov download ner_ontonotes_bert_mult
シリアル化されたコンポーネントは、デフォルトで配置される DeepPavlov ホーム ディレクトリにダウンロードされます。
~/.deeppavlov
ダウンロードの際、既にダウンロードされているコンポーネントのハッシュが、サーバー上にあるコンポーネントのハッシュと照合されます。 一致するものがあった場合、ダウンロードはスキップされ、既存のファイルが使用されます。 ダウンロードされたコンポーネントのサイズは平均 0.5 ~ 8 GB であり、解凍後に 20 Gb に達する場合もあります。
- 次のモデルを使用して REST サーバーを起動します。
python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
このコマンドを実行すると、モデルを含む REST サーバーがホスト マシンのポート 5005 (デフォルトのポートは 5000) で起動されます。
モデルを初期化した後、Swagger と API ドキュメントおよびテスト機能を次の URL で見つけることができます。 http://127.0.0.1:5005
。 モデルをエンドポイントに送信してテストしましょう http://127.0.0.1:5005/model
次の JSON コンテンツを含む POST リクエスト:
{
"x": [
"В МФТИ можно добраться на электричке с Савёловского Вокзала.",
"В юго-западной Руси стог жита оценен в 15 гривен"
]
}
応答として、次の JSON を受け取るはずです。
[
[
["В", "МФТИ", "можно", "добраться", "на", "электричке", "с", "Савёловского", "Вокзала", "."],
["O", "B-FAC", "O", "O", "O", "O", "O", "B-FAC", "I-FAC", "O"]
],
[
["В", "юго", "-", "западной", "Руси", "стог", "жита", "оценен", "в", "15", "гривен"],
["O", "B-LOC", "I-LOC", "I-LOC", "I-LOC", "O", "O", "O", "O", "B-MONEY", "I-MONEY"]
]
]
これらの例を使用して、DeepPavlov REST API を分析します。
APIディープパブロフ
各 DeepPavlov モデルには少なくとも XNUMX つの入力引数があります。 REST API では、引数に名前が付けられ、その名前が受信辞書のキーになります。 ほとんどの場合、引数は処理する必要があるテキストです。 モデルによって返される引数と値の詳細については、ドキュメントの「MODELS」セクションを参照してください。
この例では、XNUMX つの文字列のリストが引数 x に渡され、それぞれに個別のマークアップが与えられました。 DeepPavlov では、すべてのモデルが個別に処理される値のリスト (バッチ) を入力として受け取ります。
「バッチ」という用語は機械学習の分野を指し、アルゴリズムまたはニューラル ネットワークによって同時に処理される独立した入力値のバッチを指します。 このアプローチにより、同じ値を個別に入力に渡す場合と比較して、モデルがバッチの XNUMX つの要素を処理する時間を (多くの場合大幅に) 短縮できます。 ただし、処理結果はすべての要素が処理された後にのみ発行されます。 したがって、受信バッチを生成するときは、モデルの速度と、個々の要素に必要な処理時間を考慮する必要があります。
DeepPavlov モデルに複数の引数がある場合、それぞれが独自の値のバッチを受け取り、出力時にモデルは常に XNUMX つの応答のバッチを生成します。 送信バッチの要素は、同じインデックスを持つ受信バッチの要素を処理した結果です。
上記の例では、モデルの結果は、各文字列をトークン (単語と句読点) に分解し、それが表す名前付きエンティティ (組織名、通貨) に関連してトークンを分類することでした。 現在のモデルは ner_ontonotes_bert_mult 18 種類の固有表現を認識できます。詳細な説明はこちらをご覧ください。
DeepPavlov によるその他のすぐに使えるモデル
NER に加えて、この記事の執筆時点では、次のすぐに使えるモデルが DeepPavlov で利用可能です。
テキストでの質問回答
このテキストの一部を使って、テキストに対する質問に答えてください。 モデル構成: squad_ru_bert_infer
リクエストの例:
{
"context_raw": [
"DeepPavlov разрабатывается лабораторией МФТИ.",
"В юго-западной Руси стог жита оценен в 15 гривен."
],
"question_raw": [
"Кем разрабатывается DeepPavlov?",
"Сколько стоил стог жита на Руси?"
]
}
結果:
[
["лабораторией МФТИ", 27, 31042.484375],
["15 гривен", 39, 1049.598876953125]
]
侮辱の検出
テキストの宛先の人に対する侮辱の存在の検出 (執筆時点 - 英語のみ)。 モデル構成: insults_kaggle_conv_bert
リクエストの例:
{
"x": [
"Money talks, bullshit walks.",
"You are not the brightest one."
]
}
結果:
[
["Not Insult"],
["Insult"]
]
感情分析
テキストの感情の分類 (ポジティブ、ニュートラル、ネガティブ)。 モデル構成: rusentiment_elmo_twitter_cnn
リクエストの例:
{
"x": [
"Мне нравится библиотека DeepPavlov.",
"Я слышал о библиотеке DeepPavlov.",
"Меня бесят тролли и анонимусы."
]
}
結果:
[
["positive"],
["neutral"],
["negative"]
]
言い換えの検出
XNUMX つの異なるテキストが同じ意味を持つかどうかを判断します。 モデル構成: stand_paraphraser_ja
問い合わせ:
{
"text_a": [
"Город погружается в сон, просыпается Мафия.",
"Президент США пригрозил расторжением договора с Германией."
],
"text_b": [
"Наступает ночь, все жители города пошли спать, а преступники проснулись.",
"Германия не собирается поддаваться угрозам со стороны США."
]
}
結果:
[
[1],
[0]
]
すべてのすぐに使える DeepPavlov モデルの最新リストがいつでも見つかります。
まとめ
この記事では、DeepPavlov API と、すぐに提供されるライブラリのテキスト処理機能の一部について説明しました。 どの NLP タスクでも、タスクの主題領域 (ドメイン) に対応するデータ セットでモデルをトレーニングするときに最良の結果が得られることに留意する必要があります。 さらに、原理的には、さらに多くのモデルをすべての状況に合わせてトレーニングすることはできません。
次の記事では、ライブラリの追加設定を見て、Docker から DeepPavlov を起動してから、モデルのトレーニングに進みます。 そして、ディープパブロフが持っていることを忘れないでください。
出所: habr.com