日本語CTRLを1から学習する - 6

はじめに

これまでCTRL1の学習に必要な要素をまとめてきた。
今回は実際に学習を行うコードを実装した。

https://github.com/NeverendingNotification/japanese_ctrl

学習対象データ

今回学習を行うデータは以下の3つとしている。

学習時は各データセットごとに制御コードを割り振る。
データサイズに大きなバラつきがあるためサンプリングを調整している。

設定ファイル

設定ファイルは以下のyaml形式で記載されている。

main_params:
  log_dir: "logs/test1"
  seed: 12

data_params:
  csv_files: ["data/aozora.csv", "data/wiki.csv", "data/jesc.csv"]
  ctrl_codes: ["青空", "辞書", "訳"]
  weights: [0.4, 0.5, 0.1]
  sp_file: "data/sp.model"
  col_name: "text"
  batch_size: 16


model_params:
  transformer_name: "ctrl"
  config_params:
    "n_embd": 384
    "vocab_size": 30000
    "n_layer": 4
  n_gpus: 1


run_params:
  train:
    num_epochs: 30
    iter_warmup_period: 1000
    test_file: "data/sample.csv"
#    check_point_path: "logs/test1/checkpoint/checkpoint_00004221.pth"

data_paramsがデータ読み込み、 
model_paramsがNeural Net、
run_params が実行に関係している 。

データ読み込み

データ読み込みでは以下の処理を行っている。

  • 文章を一定長(1000文字以下)に切り出し
  • sentencepiece5により文章を分割
  • バッチ内のサンプリング調整

文章の切り出し処理は青空文庫の文章データは1文章あたりが長く、
JESCのデータは短いため、それらの差を小さくするために行っている。

文章分割に利用したsentencepieceは青空文庫データ全体とwikipediaデータの半分を
利用して語彙数30000で学習した。
(学習時のメモリの関係でwikipediaデータは半分ランダムサンプリングしたものを利用)

データのサンプリングは各データセットのデータ数の差を緩和するための処置であり、
設定ファイル data_params.weightsパラメータで各データセットのサンプリング割合を決めている。

モデル構築

モデル構築は基本的にtransformers6ライブラリを読んでいるだけである。
マルチGPUに対応させたかったが今回は時間の関係で見送っている。

学習処理

現状は学習と簡易的なテストを行うだけのスクリプトである。
ログ関連の機能はもう少しつけた方が良かった。

テスト

手元にあったマシン(Geforce GTX 1070-Ti)で検証した。
学習は各でーたセットから100文章づつサンプリングした小さなデータセットで行った。

制御コード

epoch 序文 青空 辞書
0001 青い鳥が空に浮かび 青い鳥が空に浮かび、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 青い鳥が空に浮かび、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 青い鳥が空に浮かび、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
0005 青い鳥が空に浮かび 青い鳥が空に浮かび、そのこと、 女子 (女子 女子 (と) 女子 (と) 少年 (第3水準1字下げ]) 女子 (SSecuuuuuuuelk 青い鳥が空に浮かび、この戦術的な症状があった。 1961年3月29日から1973年12月29日から1973年に植物園が月29日から1973年12月31日から1973年にイングランド王リチャード1日に放送放送放送 青い鳥が空に浮かび、 女子 女子 おお、 女子 (第3社は著作権の?) ISDA情報局(昭和21時から22時から22時から2222時から放送映画である。 それでも2019年に3
0010 青い鳥が空に浮かび 青い鳥が空に浮かび、そのように思われて、そのお静の色の色の色の色の色の色の色の色の色の色の色の色の色の色の色の色の色の色の色の色の色の色の色の色の色の色の色の色の色の色の色の色の色の 青い鳥が空に浮かび、その範囲は約32億年前(昭和30年(1551年)は、中野町の大含を創刊し、墨竹田に寓居する書簡を訪ね、墨竹田された。 青い鳥が空に浮かび、 ⁇ 粟畑を ⁇ 《こ》の! ⁇ 《こ》の ⁇ 粟畑、水軍の一員として社名変更を経て、その音韻論の一翼を担う も、音韻論
0020 青い鳥が空に浮かび 青い鳥が空に浮かび上がって、 女子 女子 女子 女子 銀の竪琴を弾いたのよ。 女子 女子 女子 女子 女子 女子 女子 女子 女子 女子 女子 女子 青い鳥が空に浮かび、水やつらぬきをタイムシェアリング上で申込み、主人公自身も「(計画」(後に『アポロ計画』は、サターンの発射時には40年以上が月』と改称された)と呼ばれたこの計画では 青い鳥が空に浮かび、 言うことあるでしょっては、1945年7月7日 - )は、元照雄が行った比叡山町出身のプロ野球選手(Golovin)のは、人類が行った元NBA
0030 青い鳥が空に浮かび 青い鳥が空に浮かび上がって、水門の戸の天井の光がそこから、青い光と、青い光の青い光の光の光の光の光の光の光の光の光の光の光の光の光の光の光の光の光の光の光の光の光の光の光の光の光の 青い鳥が空に浮かび、続く。 安(かさはら れいこに)は、技術者たちの集団訴訟当事者(特に)が子会社したことによる信仰心から島に滞在中に取得された玄武岩)で、アメリカが指揮 青い鳥が空に浮かび上がって あのように早く早くと鳴っているのは、 あのように淋しいね、 お前はお姉様! 女子 (となら、沈黙《サイレンス》!)お姉様、おお

学習序盤(1epoch)ではどの制御コードでも同じ文字を繰り返しているだけである。
5epoch以降徐々に制御コードごとの違いが現れている。
青空文庫は同じような言葉を繰り返している。
wikiepediaは文章っぽくなっているが、全く関係ないことを説明しているように見える。
おそらくwikipedia内の記事を部分的に出力しているものと思われる。
JESCは他と比べるとやや会話文が多いような印象がある。
元となったデータが映画やテレビ番組の字幕らしいのでそれを反映しているのだろうか。

他の例

epoch 序文 青空 辞書
0001 街並みはうつりゆく 街並みはうつりゆく。 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 街並みはうつりゆく、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 街並みはうつりゆく、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
0005 街並みはうつりゆく 街並みはうつりゆく。 女子 女子 女子 女子 女子 (3水準1字下げ]) 女子 女子 (第3水準1字下げ]) 女子 (3水準1字下げ] 女子 (3 街並みはうつりゆくとの服装で舞台である技能士は、1954年のリーグ優勝時に奉納した写真入りの絵馬が飾られているため、地球周回方式の一般有料道路新居浜田宮模型(平成4月 街並みはうつりゆくと 女子 それでも2019年に植物園が、そのカテゴリや概念枠で、この場所に、この場所には日本道路である。 それでも2019年に植物園は、オーストラリアやさかとうごくごくにゅうさつ
0010 街並みはうつりゆく 街並みはうつりゆくと、その娘が、そのようにように、そのそのように、そのそのように、そのように、そのようにようにように、そのように、そのように、そのように、そのように、そのように、そのように 街並みはうつりゆく。さまざまな風味のスパムを使用する人もいる。 ハワイ州内では、「スパムカミングアウト」と呼ばれる、ハワイ諸島全体に一気に広まることとなった。 アメリカ本土の日系人や、第二次世界大戦 街並みはうつりゆくが なんでなの裁判で MAC ももも全てホログラム表示であり、この中からは、その判断を離反旗を、その範囲は約32億年前(Gené
0020 街並みはうつりゆく 街並みはうつりゆくもの、そのように二、そのようにようにようにとの老婆は、その方が、その方が方がどれだけのが、その方が方が方が非常に気にならないであろう。 そのうちに、この冬籠《なか 街並みはうつりゆくえ! ケネディが1969年7月14日21日21日、無事地球に帰還した。船長ユージン・サーナンは2010年現在、最後に月を離れた人間である。 アポロ計画 街並みはうつりゆくとの友達か? abc ニュースでのキャリアは、そのカテゴリや、作中の教科書の制作も作品。 当時主導で舞台に現れた無法制度の一種。 1915年で
0030 街並みはうつりゆく 街並みはうつりゆくかは、そのマの華頂氏ばかりでありました。そして、この石、もしや猫の上流の親密、その富豪も動き出して、その家に帰ってからはからはイカサマにさえ考えられる。―― 街並みはうつりゆくそして月面着陸をする際には、船長と着陸船操縦士のみが降下し、司令船操縦士はその間月周回軌道上で待機していた。 アポロ計画における最初の有人飛行は、1968年10月 街並みはうつりゆくか? 私が犯人だとは致命的な的な筈のは、チャリンの兄が欲しい。しかし、ここで小さな文字終わり] 一体、今日のヒューマニズムは、遠く離れた宇宙飛行士と、

まとめと今後

CTRL学習用のスクリプトを一通りまとめた。
小規模なデータでテストして見た結果、 日本語的には支離滅裂だが、制御コードごとの違いは現れている。
より大きなデータセットで学習すれば自然な日本語となるかは気になる。
次回はGCP上でどの程度の規模の学習ができるか検証したい。

参考文献