GitHubじゃ!Pythonじゃ!

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

minimaxir

textgenrnn – 数行のコードで任意のサイズと複雑さのテキスト作成ニューラルネットワークをテキストデータセットに簡単に訓練することができます

投稿日:

数行のコードで任意のサイズと複雑さのテキスト作成ニューラルネットワークをテキストデータセットに簡単に訓練することができます。

textgenrnn

数行のコードで任意のサイズと複雑さのテキスト作成ニューラルネットワークを任意のテキストデータセットに簡単に訓練することができます。また、事前に訓練されたモデルを使用してテキストを素早く訓練することもできます。

textgenrnnは、 char-rnnを作成するためのKeras / TensorFlowの上にあるPython 3モジュールです。多くの優れた機能があります。

  • 新しい重み付け技法とスキップ埋め込み技法を使用してトレーニングを加速し、モデルの品質を向上させる最新のニューラルネットワークアーキテクチャ。
  • キャラクターレベルまたは単語レベルのいずれかで練習してテキストを生成することができます。
  • RNNサイズ、RNNレイヤ数、および双方向RNNを使用するかどうかを設定できます。
  • 大きなファイルを含む一般的な入力テキストファイルを訓練することができます。
  • GPUでモデルを訓練し、CPUを使用してテキストを生成するために使用できます。
  • 一般的なLSTMの実装とは対照的に、トレーニング時間を大幅に短縮するGPUでトレーニングした場合、RNNの強力なCuDNN実装を利用することができます。
  • コンテキストラベルを使用してモデルを訓練することができ、場合によってはより速く学習し、より良い結果を生み出すことができます。

あなたはtextgenrnnで遊んで、このColaboratory Notebook で無料でGPU 任意のテキストファイルを訓練することができます! このブログ記事を読むか、このビデオで詳細をご覧ください!

from textgenrnn import textgenrnn

textgen = textgenrnn()
textgen.generate()
[Spoiler] Anyone else find this post and their person that was a little more than I really like the Star Wars in the fire or health and posting a personal house of the 2016 Letter for the game in a report of my backyard.

含まれているモデルは、新しいテキストに簡単に訓練することができ、入力データの1回のパス後でも適切なテキストを生成することができます

textgen.train_from_file('hacker-news-2000.txt', num_epochs=1)
textgen.generate()
Project State Project Firefox

モデルの重みは比較的小さく(ディスク上の2 MB)、簡単に保存して新しいtextgenrnnインスタンスにロードできます。 その結果、データを何百回も練習したモデルで遊ぶことができます。 (実際、textgenrnnは、創造的な出力のためには温度を大幅に上げなければならないということをよく知っています!)

textgen_2 = textgenrnn('/weights/hacker_news.hdf5')
textgen_2.generate(3, temperature=1.0)
Why we got money “regular alter”

Urburg to Firefox acquires Nelf Multi Shamn

Kubernetes by Google’s Bern

new_model=Trueを任意の列関数に追加することによって、ワードレベル埋め込みと双方向RNNレイヤーのサポートを備えた新しいモデルを訓練することもできます。

使用法

textgenrnnはpipiからpip経由でインストールできます:

pip3 install textgenrnn

このJupyterノートブックでは、一般的な機能のデモンストレーションとモデル構成オプションを表示することができます。

/datasetsは、textgenrnnのトレーニングにHacker News / Redditデータを使用したサンプルデータ/datasetsが含まれています。

/weightsは、textgenrnnに読み込むことができる前述のデータセットにさらに事前にモデル化されたモデルを含んでいます。

/outputsは、上記の事前トレーニングされたモデルから生成されたテキストの例が含まれています。

ニューラルネットワークのアーキテクチャと実装

textgenrnnは、 Andrej Karpathychar-rnnプロジェクトに基づいており、非常に小さなテキストシーケンスで作業するなど、いくつかの現代的な最適化が行われています。

付属のプリトレインモデルは、 DeepMojiからインスピレーションを受けたニューラルネットワークアーキテクチャ従います。 デフォルトモデルの場合、textgenrnnは最大40文字の入力を取り込み、各文字を100-D文字埋め込みベクタに変換し、128セルのLSTM(long-short-term-memory)反復レイヤーに送ります。 これらの出力は、 別の 128セルのLSTMに供給されます。 3つのレイヤーすべてがAttentionレイヤーに送られ、最も重要な時間フィーチャを重み付けして平均化します(埋め込み+ 1番目のLSTMは、アテンションレイヤにスキップ接続されるため、モデルの更新によってバックプロパゲーションがより簡単に行われ、グラジエント)。 その出力は、大文字、小文字、句読点、絵文字など、シーケンスの次の文字である最大394種類の文字の確率にマッピングされます。 (新しいデータセットで新しいモデルをトレーニングする場合は、上記の数値パラメータをすべて設定できます)

あるいは、文脈ラベルが各テキスト文書と共に提供される場合、モデルは文脈モードで訓練することができ、文脈で与えられたテキストを模型が学習し、反復層が言語化言語を学習する。 テキストのみのパスは、非文字化レイヤをピギーバックすることができます。 このことは、単にテキストだけのモデルを訓練するよりもはるかに迅速な訓練とより良い定量的および質的モデルの性能をもたらす。

パッケージに含まれているモデルウェイトは、Redditの提出物( BigQuery経由 )から、数多くのさまざまなサブディレクトリから得られる何十万ものテキスト文書の訓練を受けています。 ネットワークは、訓練のパフォーマンスを改善し、著者のバイアスを緩和するために、上記の非脱調的アプローチを用いて訓練された。

textgenrnnを使用してテキストの新しいデータセットでモデルを微調整すると、すべてのレイヤーが再調整されます。 しかし、元の事前訓練されたネットワークは当初よりはるかに堅牢な「知識」を持っているため、新しいtextgenrnnは最終的により高速でより正確に訓練し、元のデータセットには存在しない新しい関係を潜在的に習得することができます現代のインターネット文法の全ての可能性のある種類の文字のために)。

さらに、訓練は、運動量ベースのオプティマイザと直線的に減衰する学習速度で行われ、爆発の勾配を防ぎ、モデルが長時間訓練した後に発散する可能性をはるかに低くします。

ノート

  • 訓練を積んだニューラルネットワークであっても、品質の高いテキストを100%生成することはありません これがウイルスのブログ投稿 /NNテキスト生成を利用したTwitterのツイートが主な理由で、多くのテキストを生成し、後で最良のものを編集/編集することが主な理由です。

  • 結果はデー​​タセットによって大きく異なります 事前にトレーニングされたニューラルネットワークは比較的小さいので、ブログ投稿に典型的に誇張されたRNNほどのデータを保存することはできません。 最良の結果を得るには、少なくとも2,000〜5,000件のドキュメントを持つデータセットを使用します。 データセットがより小さい場合は、トレーニング方法を呼び出すときやnum_epochs高く設定したり、新しいモデルを最初から訓練したりすることで、トレーニング時間を長くする必要があります。 それでも、現在、「良い」モデルを決定するための優れたヒューリスティックは存在しません。

  • GPUはtextgenrnnをリトレインする必要はありませんが、CPUでトレーニングするのにはかなり時間がかかります。 GPUを使用している場合、より良いハードウェア利用のためにbatch_sizeパラメータを増やすことをお勧めします。

textgenrnnの今後の計画

  • もっと正式な文書

  • tensorflow.jsを使用したWebベースの実装(ネットワークのサイズが小さいために特にうまくいきます)

  • アテンションレイヤの出力を視覚化して、ネットワークがどのように「学習するか」を確認する方法。

  • 教師付きテキスト生成モード:モデルが上位n個のオプションを提示できるようにし、ユーザが次の文字/単語( 参照 )を選択できるようにする

  • モデルアーキテクチャをチャットボットの会話に使用できるモード(別のプロジェクトとしてリリースされる可能性があります)

  • コンテキストに向かってより深く(位置コンテキスト+複数のコンテキストラベルを可能にする)

  • より長い文字シーケンスと言語のより深い理解を受け入れ、より良い生成されたセンテンスを作成することができる、より大きな事前トレインネットワーク。

  • 単語レベルのモデルのための階層的なsoftmaxアクティベーション(Kerasはそれをうまくサポートしています)。

  • FP16を使用してVolta / TPUの超高速訓練を行います(Kerasはそれをサポートしています)。

textgenrnnを使用したプロジェクト

  • Tweet Generator – 任意の数のTwitterユーザーに基づいてつぶやきを生成するために最適化されたニューラルネットワークをトレーニングする
  • Hacker News Simulator – Twitter botは、textgenrnnを使用して300,000以上のHacker Newsの投稿を訓練しました。
  • インターネットShit Simulator – Twitter botは、textgenrnnを使用して何千ものProduct HuntとKickstart blurbを訓練しました。

メンテナー/クリエイター

マックスウルフ( @minimaxir

MaxのオープンソースプロジェクトはPatreonによってサポートされてます。 このプロジェクトが有益であると判明した場合は、Patreonへの金銭的貢献は高く評価され、創造的に活用されます。

クレジット

Andrej Karpathyは、ブログ投稿によるchar-rnnのオリジナル提案について、 リカレントニューラルネットワークの不合理な有効性について説明します。

ライセンス

MIT

DeepMoji (MIT Licensed)から使用されるアテンション層コード







-minimaxir
-, , , , ,

執筆者:

minimaxir

textgenrnn – 数行のコードで任意のサイズと複雑さのテキスト作成ニューラルネットワークをテキストデータセットに簡単に訓練することができます

投稿日:

(さらに…)







-minimaxir
-, , , , ,

執筆者: