もらったデータをすべて使ったときのスコア
完全一致率(%) | 種類数 | BLUE |
---|---|---|
16.44 | 36 | 0.09 |
完全一致率(%) | 種類数 | BLEU |
---|---|---|
32.13 | 312 | 0.14 |
完全一致率(%) | 種類数 | BLEU |
---|---|---|
14.15 | 79 | 0.01 |
完全一致率(%) | 種類数 | BLEU |
---|---|---|
28.23 | 227 | 0.12 |
6/18
ゼロから DL の RNN の章の読了
LSTM を始めた
6/25
6章 LSTM の章が終わった
LSTM におけるモデルの精度向上手段などについて学んだ。
-
有効な手法
ドロップアウトの追加(時間方向には繋げない)
LSTM 層の追加
Affine レイヤと Embedding レイヤにおける重み共有
7章を読み始めた
前の章で保存しておいたモデルの重みを使って文章の生成をためした。
7/2
7 章 seq2seq に入った
Encoder と Decoder の2つの RNN から構成される
ここでの出力は LSTM レイヤの最後の隠れ状態になる。これに必要な情報が入っている。(固定長のベクトルになる)
Encoder は入力情報をエンコードして Decoder はそれをもとに出力を生成する
- 入力データを反転させる
なぜうまく行くのかはわかっていないけど大体の場合うまく行くらしい
- 覗き見
今のモデルではデコーダのの最初の LSTM&Affine しか受け取れないので全体に行き渡るようにする (Peekydeocder,PeekySeq2seq に実装済み)
7/9
ゼロから作る DL を読了した
イマイチ式とコードのイメージがつながらない
中間発表用のスライドを作ってました。なかなか難しい...
- seq2seq の問題点
固定長のベクトルを返す。(入力の長さに関わらず)
- Encoder を改良する
- LSTM の重みを最後のものだけではなくすべて利用する
隠れ層の重みをすべて取り出して Encoder に渡してあげる
隠れ層の重みの中には入力された単語の情報がおおく含まれるため
- Decoder を改良する
-
各単語ベクトルに対して重み付き和を計算する
-
内積を用いてベクトル間の類似度を計算する
これらの層を組み合わせることで Attention を実現する
7/16
pytorch のサンプルを動かすときの spaCy のモデルは管理者権限でインストールする
発表用のプレゼンを完成させた
そろそろ pytorch を使ってモデルを作っていきたいので、まずは、前処理について調べている。
学習データは、タブ区切りで,左側が語り,右側が傾聴応答.語り,応答とも半角スペースで形態素に区切ってある.
別のファイル(morphological_analysis.py)をつくって前処理の練習をしてる
中間発表振り返り
質問
-
パフォーマンスはどうやって図るの?
完全一致率->正解の応答と一致した生成された応答の数
BLUE->生成された応答と正解がどの程度似ているかの指標
種類数->生成された応答の種類
-
系列変換ってどれのこと?
seq2seq と Transformer の部分のとこで使われている(BERT はどうなんだろ)
7/30
- やったこと
テキストファイルを seq2seq で読み込ませるための前処理
見た感じうまく行ったので、seq2seq を動かせるようにしたい
ソースコードは morphological_analysis.py にある
呼び掛けと応答を別のファイルに保存してから、前処理をかけるように変更した
訓練用データとテスト用のデータへの分割に sklearn のものを使ってみる
- 参考リンク
前処理の参考
Torchtext Tutorial 01: Getting Started
BERT と Attention の解説記事
8/16
-
今日したこと
サンプルの seq2seq はめんどくさそうなので自前でモデル部分だけ pytorch を使うように方向転換した
seq2seq は一応動作するところまではできた。
-
これから
プロポーザルの修正と まとめ WORD を作成する。
スライドに追加する画像(イラスト)と系列変換の部分の追加
9/10
-
今日したこと
Attention を使った seq2seq を実装(丸写し)した
Attention はまだデバックしていないです
-
これからの予定
モデルを読み込んで、応答の生成をするスクリプトを作成する
BLUE などのスコアの計算もしていきたい
- 参考文献
9/17
- 今日したこと
コードを colabolatory に移植した。
seq2seq の場合の生成が一応できた
ファイル名は seq2seq.csv
- これからすること
スコアの計測
正しく生成できているかわからないので確認する
Attention seq2seq も実行して生成してみる
10/6
- 今日したこと
seq2seq の処理の確認
torchtext を使ってテキストデータの処理をした
参考: torchtext で簡単に Deep な自然言語処理
- これからすること
いったん seq2seq の問題点を確認した後に、transformer のモデルを作成したい
ちゃんと生成されているか確認する
10/07
- 今日したこと
Attention seq2seq の実装
torchtext を使って、文章の前処理をした。
開始文字を S、終了文字を E にした。
参考にしている pytorch のチュートリアルではうまく行かなそうなので他のチュートリアルのやり方で試してみる
- これからすること
モデルの学習に必要な行列にテキストデータを変換して、学習させる。
10/08
-
今日したこと
pytorch に実装されている Attention モデルを試した。
torchtext を使った前処理をして、モデルの訓練をさせる予定。
前処理はうまくいったけど訓練をするときにエラーをはいたので解決したい。
途中で colaboratory が動かなくなったので seq2seq のスコアを計算してました
-
これからすること
attention seq2seq の学習の実行(デバッグ)
10/13
-
今日したこと
Attention Seq2seqの学習が動作した。
pytorchでBERTを使うときの参考になりそうな記事を探していた。
日本語BERTモデルをPyTorch用に変換してfine-tuningする with torchtext & pytorch-lightning
-
これからすること
Attention Seq2seqを使って文章を生成して、結果を確認する。
pytorchを使ってBERTのfine Turningのやり方を知らべる
10/14
- 今日したこと
Transformerでの文章生成部分の作成。生成は正しくできてそう。
一通り生成できたと思います
- これからすること
生成結果を使って、スコアを計算するスクリプトを書く
10/13
- 今日したこと
Attention Seq2seqの学習と文章生成。結果はresult_transformer.csv
にあります。
各スコアを計算するためのスクリプトの作成
bleuのスコアがどうしても0に近い値になってしまう。結果はscore_seq2seq.csv
にあります。
- これからすること
BERTを使って文章を生成する。
BLEUのスコアについて考察する
10/20
- 今日したこと
BERTのモデルの作成
生成に関する論文
BERT has a Mouth, and It Must Speak: BERT as a Markov Random Field Language Model
- これからすること
参考にしているものがテキストの分類タスク用なので文章生成をするように変更する
引き続きBERTモデルの作成を続ける
10/21
- 今日したこと
BERTモデルの作成をした。
参考資料は分類用でテキストの変換などがどうすればいいのかわからないので別の方法を試す。
生成は['MASK']
を連続で並べてやればできる。
- これからすること
BERTの重みを使ってseq2seqを初期化して学習させる。
10/22
- 今日したこと
ハイパーパラメータをseq2seqとtransformerでそろえた。
BERTの重みを取り出すことができた。
- これからすること
未知語の処理を考える。
BERTの重みでEmbeddingの初期化をする方法を考える。
10/27
- 今日したこと
生成された文が空のときに、2番目に推測される単語で補完するように改良した
中間発表のレジュメをかいてました。
- これからすること
生成された文の確認とBERTを使ってEmbeddingを初期化する方法を考える
10/28
- 今日したこと
Seq2seqとTransformerにおける学習の評価と中間発表用のWORDの作成
- これからすること
BERTから分散表現を取り出す。
中間発表のスライドの作成。
10/29
- 今日したこと
Transformerを使って学習を実行できた。
生成文を変換する関数を見直した。辞書には問題はなさそうなので、吐き出す確率の番号がおかしいと感じた。
入力文や応答に対する翻訳があってない(おかしい)。
seq2seqのプログラムはseq2seq_with_torchtext.ipynb
、Attention付きseq2seqのプログラムはattention=seq2seq.ipynb
にあります。
Multi30kを使った英独の翻訳データセットを使って3エポックだけモデルを訓練して文を生成した。
実行結果
入力
tensor([ 2, 8, 36, 22, 245, 31, 12, 24, 122, 27, 14, 2047, 9, 35, 8, 16, 99, 290, 4, 3, 1, 1, 1, 1, 1, 1, 1, 1])
['<sos>', 'eine', 'gruppe', 'von', 'kindern', 'sitzt', 'auf', 'dem', 'boden', 'vor', 'einer', 'ziegelwand', ',', 'während', 'eine', 'frau', 'sie', 'beobachtet', '.', '<eos>']
答え
tensor([ 2, 4, 38, 12, 63, 150, 8, 7, 259, 236, 4, 291, 108, 28, 4, 14, 1725, 155, 5, 3, 1, 1, 1, 1, 1, 1, 1])
['<sos>', 'a', 'group', 'of', 'children', 'sit', 'on', 'the', 'floor', 'against', 'a', 'brick', 'wall', 'while', 'a', 'woman', 'observes', 'them', '.', '<eos>']
予測
tensor([[ 0], [ 4], [ 9], [ 6], [ 4], [ 5], [ 3], [ 4], [39], [ 5], [ 3], [ 5], [ 5], [ 3], [ 4], [ 5], [ 3], [ 5], [ 5], [ 3], [ 5], [ 3], [ 5], [ 3], [ 5], [ 5], [ 3]])
['a', 'man', 'in', 'a', '.']
入力
tensor([ 2, 5, 70, 32, 69, 20, 222, 140, 4, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])
['<sos>', 'ein', 'kleiner', 'hund', 'springt', 'im', 'sand', 'herum', '.', '<eos>']
答え
tensor([ 2, 4, 70, 35, 92, 124, 7, 211, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])
['<sos>', 'a', 'small', 'dog', 'jumping', 'along', 'the', 'sand', '<eos>']
予測
tensor([[ 0], [ 4], [ 9], [ 6], [ 4], [ 9], [ 6], [23], [ 5], [ 3], [ 4], [ 9], [ 4], [ 9], [ 4], [ 9], [ 6], [ 4], [ 4], [ 4], [ 9], [ 6], [ 4], [ 9], [ 6], [ 5], [ 3]])
['a', 'man', 'in', 'a', 'man', 'in', 'shirt', '.']
- これからすること
中間発表のスライドの作成
11/4
- 今日したこと
スライドとワードの作成
作成している間にTransformerの学習を進めてました
BERTのEmbeddingを取り出すことができた
- これからすること
スライドの見直しとBERTの分散表現を用いた学習をしたい
11/10
- 今日したこと
Transformerモデルの学習部分と文章に変換する部分の確認(これと言ってミスは見当たらなかった)
pytorchのテンプレートでは、言語モデルを作っていた。これでも生成自体はできそうだと感じた。
ある程度の文章は生成できました
- これからすること
一旦、bertの分散表現を使ったseq2seqを作ります
11/17
- 今日したこと
bertを埋め込みを使ったseq2seqとTransformerの作成
プログラムの見直し
- これからすること
Transformer側のDecoder部分の追加実装
11/18
- 今日したこと
TransformerとBERTの分散表現を使ったTransformerの学習の実行
- これからすること
生成された文章の確認とスコアの計測
11/19
- 今日したこと
一応やりたいことはすべて終わってスコアの計測も終わりました。
- これからすること
応答と呼びかけを1対1で対応させたデータを使ってモデルを訓練し、応答を確認してみます
11/24
- 今日したこと
文章生成用の関数でtarget
を入れるのはおかしい気がしたので、入れない関数に変更した。これで文章を生成して様子を見ます。
- これからすること
transformerでの文章生成関数を作成する
11/26
- 今日したこと
seq2seqでの文章生成時に出てくる何もない文の原因究明
ハイパーパラメータ(ドロップアウト率:0.5->0.3, 隠れ層の数:768 -> 256)を変更して要図を見たけど改善されなかった
- これからすること
引き続き色々いじってみます
12/01
- 今日したこと
Transformer側での文章生成関数の実装
lossの可視化をできるようにした
seq2seqはかぶりのないデータセットを使っても何も返さない時があってので根本的になにかが間違っているのかもしれない
- これからすること
文章生成関数のデバック
12/08
- 今日したこと
Seq2seqで空白語が生成される問題を解決した。隠れ層の数を増やしたら解決した。
- これからすること
Transformerの文章生成関数を作る。今の所、学習はできているが文章を生成しているわけではない。
12/09
- 今日したこと
linuxでモデルの訓練をするようにした。動作は確認した。
- これからすること
モデルの学習を進める
12/15
- 今日したこと
学習プログラムのデバック
- これからすること
引き続き学習プログラムのデバックをしてスコアを計測していきたい
12/16
- 今日したこと
プログラムのデバック
文章生成の進捗を見れるようにプログレスバーを追加してみた
- これからすること
seq2seqで空白文字が生成されないようなパラメータ探し
12/17
- 今日したこと
seq2seqの学習。未だに何も言わない時がある
- これからすること
何も言われないことのないパラメータ探し
12/22
- 今日したこと
TransformerとBERTの埋め込み層を使ったSeq2seqの出力の確認。
Transformerは何も言わなくて、seq2seqは支離滅裂な文章が多かった。
論文を読んだら、入力文の反転が有効と書いてあったのでやってみようと思う
- これからすること
学習させます
12/24
- 今日したこと
Transformerのバグ取り
- これからすること
学習させる
01/07
- 今日したこと
モデルの学習
- これからすること
seq2seqで空白文字が出るのでプログラムを見直す
01/12
- 今日したこと
出力分がおかしかったのでdateloaderを見直したら、バグを見つけた。修正して学習し直す
- これからすること
概要を書く
10/13
- 今日したこと
Transformerの出力文を確認した。一部日本語としておかしい文が見られることがある。
概要を少し書いた。
- これからすること
概要を書く
01/14
- 今日したこと
概要とスライド作り
- これからすること
概要とスライドを作る