Github: https://github.com/deepmipt/DeepPavlov
ディープパブロフ
私たちは本当に初期のアルファ版です。 あなたはハードアドベンチャーの準備ができているはずです。
バージョン0.0.2にアップデートした場合は、事前に訓練されたすべてのモデルを再ダウンロードしてください
DeepPavlovは、TensorFlowとKerasで構築されたオープンソースの会話型AIライブラリです。 これは、
- NLPと対話システムの研究
- 複雑な会話システムの実装と評価
私たちの目標は、研究者に以下を提供することです:
- 独自のダイアログモデルを実装およびテストするためのフレームワーク
- 事前訓練されたNLPモデル、事前定義されたダイアログシステムコンポーネント(ML / DL /ルールベース)、パイプラインテンプレート
- 会話型モデルのベンチマーク環境と関連するデータセットへの一様なアクセス
AIアプリケーション開発者は次の機能を備えています。
- 会話型ソフトウェアを構築するためのフレームワーク
- 隣接インフラとのアプリケーション統合ツール(メッセンジャー、ヘルプデスクソフトウェアなど)
特徴
成分 | 説明 |
---|---|
スロット充填およびNERコンポーネント | ニューラル・ネーミング・エンティティ認識ネットワークとファジー・レベンション・サーチに基づいて、正規化されたスロット値をテキストから抽出します。 NERコンポーネントは、ハイブリッドBi-LSTM-CRFモデルのアプリケーションを https://arxiv.org/pdf/1603.01360.pdfの Bi-LSTM + CRFアーキテクチャーからインスパイアされたロシアの名前付きエンティティ認識タスクに適用します 。 |
インテント分類コンポーネント | 文分類のためのKim Y. Convolutionalニューラルネットワークからの浅いおよび広い畳み込みニューラルネットワークアーキテクチャに基づいて– 2014 。 このモデルは、文章のマルチラベル分類を可能にする。 |
自動スペル補正コンポーネント | Eric BrillとRobert C. Mooreによるノイズの多いチャンネルのスペル修正の改善されたエラーモデルに基づいており、スペルエラーを修正する統計ベースのエラーモデル、静的辞書、ARPA言語モデルを使用しています。 |
スキル | |
目標指向のボット | Jason D. Williams、Kavosh Asadi、Geoffrey Zweig、ハイブリッドコードネットワークのハイブリッドコードネットワーク(HCN)アーキテクチャーに基づいています:2017年監督と強化学習による実践的で効率的な対話制御 。 目標指向のダイアログで応答を予測することができます。 モデルはカスタマイズ可能です。埋め込み、スロットフィラー、インテントクラシファイアはオンデマンドでオン/オフを切り替えることができます。 |
埋め込み | |
ロシア語の事前訓練された埋め込み | Russian WikipediaとLenta.ruのコーパスで訓練されたロシア語の単語ベクトル。 |
基本的な例
テレグラムUIを使用したゴール指向のボットとスロット充填モデルのデモのビデオデモを見る
- テレグラムインターフェイスで目標指向のロボットを実行する:
python -m deeppavlov.deep interactbot deeppavlov/configs/go_bot/gobot_dstc2.json -t <TELEGRAM_TOKEN>
- コンソールインターフェイスで目標指向のロボットを走らせる:
python -m deeppavlov.deep interact deeppavlov/configs/go_bot/gobot_dstc2.json
- Telegramインターフェイスでスロット充填モデルを実行する:
python -m deeppavlov.deep interactbot deeppavlov/configs/ner/slotfill_dstc2.json -t <TELEGRAM_TOKEN>
- コンソールインターフェイスでスロット充填モデルを実行する:
python -m deeppavlov.deep interact deeppavlov/configs/ner/slotfill_dstc2.json
概念の概要
原則
ライブラリは、以下の原則に従って設計されています。
- 長期的な目標としてのエンドツーエンドの深い学習アーキテクチャ
- 現在のアプローチとしてのハイブリッドML / DL /ルールベースアーキテクチャ
- モジュール式ダイアログシステムアーキテクチャ
- コンポーネントベースのソフトウェアエンジニアリング、再利用性の最大化
- 簡単な拡張とベンチマーク
- 柔軟なデータ駆動型構成のための1つのNLPタスク用の複数のソリューション
ターゲットアーキテクチャ
私たちの図書館の目標アーキテクチャ:
DeepPavlovは機械学習フレームワーク(TensorFlow、Keras)の上に構築されています。 その他の外部ライブラリを使用して基本コンポーネントを構築することができます。
主なコンセプト
-
Agent
– 自然言語(テキスト)でユーザーと通信する会話エージェント -
Skill
– ユーザーのニーズを満たす相互作用の単位。 通常、情報を提示したり取引を完了することで、ユーザーのニーズが満たされます(FAQ、予約チケットなどによる回答の質問など)。 しかし、いくつかのタスクでは、成功は継続的な関与(例えばチャットチャット) -
Components
– アトミック機能ブロック-
Rule-based Components
– 訓練できません -
Machine Learning Components
– 個別に訓練することができます -
Deep Learning Components
– 別々に訓練することができ、エンドツーエンドモードでチェーンに参加できます
-
-
Switcher
– ユーザーに示された最終応答をランク付けして選択するためにエージェントによって使用されるメカニズム -
Components Chainer
– 異機種コンポーネント(ルールベース/ ml / dl)からエージェント/コンポーネントパイプラインを構築するためのツール。 パイプライン全体からの訓練と推論を可能にします。
内容
インストール
-
現在、
Linux
プラットフォームとPython 3.6
のみをサポートしてLinux
ます(Python 3.5
はサポートされていません )。 -
Python 3.6
仮想環境を作成するvirtualenv env
-
環境を有効にします。
source ./env/bin/activate
-
レポをクローンし、プロジェクトのルートに
cd
するgit clone https://github.com/deepmipt/DeepPavlov.git cd DeepPavlov
-
要件をインストールします。
python setup.py develop
-
spacy
依存関係をインストールする:python -m spacy download en
クイックスタート
トレーニング済みのモデルを使用するには、まずそれらをダウンロードする必要があります。
python -m deeppavlov.download [-all]
- オプションなしでこのコマンドを実行すると、基本的な例がダウンロードされます。
[-all]
– all[-all]
オプションは、 すべての訓練済みのモデルをダウンロードします。 - 警告!
[-all]
は、ディスクに約10 GBの空き領域が必要です。
次に、次のコマンドを使用して、モデルとやりとりしたり、トレーニングしたりできます。
python -m deeppavlov.deep <mode> <path_to_config>
-
<mode>
は ‘train’、 ‘interact’、 ‘interactbot’のいずれかです -
<path_to_config>
は、NLPパイプラインへのパスにする必要があります。json config
‘interactbot’モードの場合は、 -t
パラメータまたはTELEGRAM_TOKEN
環境変数にTelegramボットトークンを指定する必要があります。
使用可能なモデル構成は次のとおりです。
deeppavlov / configs / go_bot / gobot_dstc2.json
deeppavlov / configs / intents / intents_dstc2.json
deeppavlov / configs / ner / slotfill_dstc2.json
deeppavlov / configs / error_model / brillmoore_wikitypos_ja.json
技術概要
プロジェクトモジュール
deeppavlov.core.commands | 基本的な訓練と推論関数 |
deeppavlov.core.common | 登録とクラスの初期化機能、クラスメソッドデコレータ |
deeppavlov.core.data | 基本データセット 、 DatasetReaderおよびVocabクラス |
deeppavlov.core.models | 抽象モデルクラスとインタフェース |
deeppavlov.dataset_readers | 具体的なDatasetReaderクラス |
deeppavlov.datasets | 具体的なデータセットクラス |
deeppavlov.models | コンクリートモデルクラス |
deeppavlov.skills | スキルクラス。 スキルはダイアログモデルです。 |
deeppavlov.vocabs | 具体的なVocabクラス |
設定
NLPパイプライン設定は、必要な要素chainer
1つ含むJSONファイルです。
{
"chainer": {
"in": ["x"],
"in_y": ["y"],
"pipe": [
...
],
"out": ["y_predicted"]
}
}
Chainerは、DeepPavlovライブラリのコアコンセプトです。チェーンナは、異種コンポーネント(ルールベース/ ml / dl)からパイプラインを構築し、パイプライン全体を訓練または推論することができます。 パイプライン内の各コンポーネントは、 "in": ["tokens", "features"]
、 "out": ["token_embeddings", "features_embeddings"]
などの名前の配列として入力と出力を指定し、出力をチェーンすることができますあるコンポーネントの入力と他のコンポーネントの入力:
{
"name": "str_lower",
"in": ["x"],
"out": ["x_lower"]
},
{
"name": "nltk_tokenizer",
"in": ["x_lower"],
"out": ["x_tokens"]
},
パイプライン内の各コンポーネントは、メソッド__call__
を実装する必要があり、登録されたコードネームであるname
パラメータを持ちます。 __init__()
メソッドの引数を繰り返す他のパラメータを持つこともできます。 __init__()
引数のデフォルト値は、クラスインスタンスの初期化中に設定値で上書きされます。
パイプライン内のコンポーネントを再利用して、 id
およびref
パラメータの助けを借りて、データのさまざまな部分を処理することができます。
{
"name": "nltk_tokenizer",
"id": "tokenizer",
"in": ["x_lower"],
"out": ["x_tokens"]
},
{
"ref": "tokenizer",
"in": ["y"],
"out": ["y_tokens"]
},
トレーニング
トレーニング可能なコンポーネントには、 EstimatorとNNModelの 2つの抽象クラスがあります。
エスティメータは、バッチ処理や早期停止がないデータには一度収まるため、パイプラインの初期化時に安全に実行できます。 各見積もりのためにfit
法を実装しなければならない。 Estimatorの例はVocabです。 NNModelはより複雑なトレーニングを必要とします。 監督モードでのみ訓練することができます(監督された設定と監督されていない設定の両方で訓練できるEstimatorとは対照的です)。 このプロセスは、定期的な検証とロギングで複数のエポックを使用します。 各NNModelに対してtrain_on_batch
メソッドを実装する必要があります。
トレーニングはdeeppavlov.core.commands.train.train_model_from_config()
関数によってトリガーされます。
列車の設定
訓練を受けた推定器には、入力パラメータ名のリストを含むfit_on
パラメータも必要fit_on
。 NNModelには、真実の回答名のリストを含むin_y
パラメータが必要です。 例えば:
[
{
"id": "classes_vocab",
"name": "default_vocab",
"fit_on": ["y"],
"level": "token",
"save_path": "vocabs/classes.dict",
"load_path": "vocabs/classes.dict"
},
{
"in": ["x"],
"in_y": ["y"],
"out": ["y_predicted"],
"name": "intent_model",
"save_path": "intents/intent_cnn",
"load_path": "intents/intent_cnn",
"classes_vocab": {
"ref": "classes_vocab"
}
}
]
パイプラインをトレーニングするための設定には、 dataset_reader
、 dataset
、およびtrain
3つの追加要素が必要です。
{
"dataset_reader": {
"name": ...,
...
}
"dataset": {
"name": ...,
...
},
"chainer": {
...
}
"train": {
...
}
}
列車パラメータ
-
epochs
– NNModelを学習させるエポックの最大数。デフォルトは-1
(無限大) -
batch_size
、 -
metrics
– モデルを評価するための登録済みメトリックの名前のリスト。 リストの最初のメトリックは早期停止に使用されます -
metric_optimization
– メトリックをmaximize
またはminimize
し、デフォルトはmaximize
-
validation_patience
– 早期停止のために検証メトリックを改善しなければならない行の回数。デフォルトは5
-
val_every_n_epochs
– パイプを検証する頻度。デフォルトは-1
(決して) -
log_every_n_batches
、log_every_n_epochs
– 列車データのメトリックを計算する頻度。デフォルトは-1
(決して) -
validate_best
、test_best
フラグは、有効なデータとテストデータで最もよく保存されたモデルを推論します。デフォルトはtrue
DatasetReader
DatasetReader
クラスは、データを読み取り、指定された形式で返します。 具体的なDatasetReader
クラスは、ベースのdeeppavlov.data.dataset_reader.DatasetReader
クラスから継承し、コードネームで登録する必要があります。
from deeppavlov.core.common.registry import register
from deeppavlov.core.data.dataset_reader import DatasetReader
@register('dstc2_datasetreader')
class DSTC2DatasetReader(DatasetReader):
データセット
Dataset
は、トレーニング/推論に必要なデータセット( ‘train’、 ‘valid’、 ‘test’)を形成し、バッチに分割します。 具体的なDataset
クラスは登録する必要があり、 deeppavlov.data.dataset_reader.Dataset
クラスから継承できます。 deeppavlov.data.dataset_reader.Dataset
は抽象クラスではなく、 Dataset
としても使用できます。
推論
deeppavlov.core.models.component.Component
抽象クラスから継承したすべてのコンポーネントは、推論のために使用できます。 __call__()
メソッドは、コンポーネントの標準出力を返す必要があります。 たとえば、 トークナイザはトークンを返す必要があり、 NER認識器は認識されたエンティティを返す必要があり、 ボットは発声を返す必要があります。 返されるデータの特定の形式は、 __call__()
定義する必要があります。
推論は、 deeppavlov.core.commands.infer.interact_model()
関数によってトリガーされます。 別のJSONに推論の必要はありません。
ライセンス
DeepPavlovはApache 2.0ライセンスです。
サポートとコラボレーション
ご不明な点やバグ報告、機能リクエストがございましたら、 Github Issuesのページにお気軽にお寄せください。 問題を「バグ」、「機能リクエスト」、または「質問」でタグ付けしてください。 また、新しいデータセット、モデル、埋め込みなどを追加するプルリクエストを見てうれしく思います。
チーム
DeepPavlovは、 iPavlovプロジェクト( National Technology Initiativeの一環)内のMIPTの ニューラルネットワークとディープラーニングラボ 、そしてSberbankと提携して構築され維持されています。