GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

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 WikipediaLenta.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)からエージェント/コンポーネントパイプラインを構築するためのツール。 パイプライン全体からの訓練と推論を可能にします。

内容

インストール

  1. 現在、 LinuxプラットフォームとPython 3.6のみをサポートしてLinuxます( Python 3.5はサポートされていません )。

  2. Python 3.6仮想環境を作成する

    virtualenv env
    
  3. 環境を有効にします。

    source ./env/bin/activate
    
  4. レポをクローンし、プロジェクトのルートにcdする

    git clone https://github.com/deepmipt/DeepPavlov.git
    cd DeepPavlov
    
  5. 要件をインストールします。

    python setup.py develop
    
  6. 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"]
},

トレーニング

トレーニング可能なコンポーネントには、 EstimatorNNModelの 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_readerdataset 、および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_batcheslog_every_n_epochs – 列車データのメトリックを計算する頻度。デフォルトは-1 (決して)
  • validate_besttest_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と提携して構築され維持されています。







-deepmipt

執筆者: