鹿児島弁翻訳gemを作る!
やること
Ruby x 自然言語処理 x ディープラーニング で標準語を鹿児島弁(あるいはその逆)に翻訳するgemを作る
鹿児島Ruby会議01 で発表する
なぜやるのか
"Rubyはあまり強くない"と言われているこの分野に挑戦することで、Rubyの可能性を広げる。
この分野の初学者である自身がこの分野へのハードルを越えることで、同じように挑戦する人が増えることを期待する
あと、おもしろそう。
ログ
/icons/hr.icon
2019-12-01 ~ 2019-12-04
知識不足を補いたくなり、じっくりとゼロから作るDeep Learning 2を読み始めた
/icons/hr.icon
2019-11-30
登壇してきた。内容的にはディープラーニング入門、という感じになってしまったけど反応は上々だったので良しとする
https://speakerdeck.com/tanaken0515/introduction-of-deep-learning-for-rubyist
/icons/hr.icon
2019-11-26
引き続き資料を作っている〜
数式これだけ載せよう
$ \bold{W} \leftarrow{\bold{W}} - \eta \dfrac{\partial L}{\partial \bold{W}}
$ \eta : 学習率
/icons/hr.icon
2019-11-23
登壇資料を作っている〜
登壇が終わってもこのプロジェクトは続けていくつもりで、登壇がゴールじゃないんすよ、という内容の登壇資料を作っている
Red Chainer を使いこなすところを書くぞ〜という気持ち。
/icons/hr.icon
2019-11-21
エラーの件は red-data-tools/ja - Gitter で話そう、という流れになった
/icons/hr.icon
2019-11-20
発表資料を作り始めよう
まずは内容をリストアップするか
red-chainer/train_ptb.rb at lstm · youchan/red-chainer で発生したエラーについては、今日の勉強会でyouchanさんに聞こう
/icons/hr.icon
2019-11-17 ~ 2019-11-19
Red Chainer で日英翻訳を実装する をやっていた
/icons/hr.icon
2019-11-16
chainer_examples/mt_s2s_encdec.py at master · odashi/chainer_examples を参考にする〜
まずは odashi/chainer_examples/chainer-1.5/mt_s2s_encdec.py のコードリーディング だね
読んだ。むぅ〜、イマイチだなぁ。納得感がない。
Vocabulary クラスは便利そうなので参考にする。
Chainerでサクッとニューラル英日翻訳を試してみた - Inside Closure - にへろぐ こっちの方がよさそう!
links.lstmだけを使っているから今のRedChainerの状況に合わせて実装しやすそう
さて、雰囲気で実装始めるか。
Red Chainer で日英翻訳を実装する
/icons/hr.icon
2019-11-15
もう少し日英翻訳のためのデータセットを準備するやろう。今度こそ/icons/done.icon
次は...
ChainerとRNNと機械翻訳 - Qiita と chainer/examples/seq2seq at master · chainer/chainer を見ながら
seq2seqを実装して行くぞ!
前者は functions.lstm しかなかったころの chainer で実装されていて、
後者は functions.lstm links.lstm functions.n_step_lstm links.n_step_lstm を使って実装している
RedChainerのyouchanさんのlstmブランチは functions.lstm links.lstm に相当する部分が実装されている
なので基本的には前者っぽく実装して行けば良いかなぁと思っている
けど本家chainerの方が正しい書き方をしていそうなので、ちょいちょい参照したい
/icons/hr.icon
2019-11-14
日英翻訳のためのデータセットを準備するの続き /icons/done.icon
/icons/hr.icon
2019-11-13
この辺りで最終発表の形をどうするか、改めて考えながらアクションを決めていきたい
「鹿児島弁翻訳にこだわるか?」という観点
そりゃこだわりたいよね
懸念はなに?
越えるべきハードル(=不明な要素)が多すぎる
「論理的に正しい実装」ができない懸念
自動翻訳をseq2seqで実装した経験がないので、そもそも自分の実装が正しいかどうか判断できない
「論理的に正しい実装」ができたとしても、期待する結果が出ない懸念
学習データが足りない
精度の高い推論結果を導くためのモデル作り
適当に実装して「推論結果が悪い」という結果になった場合に、原因特定が極めて難しい
「実装が論理的に間違っている」or「データが足りない」or「モデルが微妙」or ...
seq2seqの「論理的に正しい実装」をRubyでやる、というのがまず必要かな。
これ「できる」自信を持てないと、鹿児島弁翻訳に進めない
2019-10-09 鹿児島弁翻訳gemを作る!#5d9d2daf310c6200002d5470 の、なにも知らない自分がここまでできるようになったのは諸々のライブラリーがそれなりにちゃんとしているおかげ。「ゼロからスタートしてRubyでここまでできるんだぞ」というのを見せることができれば、それで1つの目的 同じように挑戦する人が増える に寄与できそう
日英翻訳のためのデータセットを準備する の続きをやろう
と思ったけど実装の方をもう少し読んでみるか。データあっても実装の目処がついていないと不安で仕方ない。心配性。
youchan/red-chainer at lstm で examples/ptb てのが実装されているんだけど、これなに?
RNNForLM というモデルを作ってる。これは RNN for Language Model (= 言語モデルの用のRNN)だろうなぁ
chainer/examples/ptb at master · chainer/chainer
chainer本家にも examples/ptb があるんすねぇ
This is an example of a recurrent net for language modeling. The network is trained to predict the word given the preceding word sequence.
「言語モデルのRNNの例です。このネットワークは、直前の単語列(文章)から次の単語を予測することを目的として学習を行ないます。」的な。
PTBってなんの略?
Penn Treebank だ!
ゼロから作るDeep Learning 2 に載ってた!(全然読んでない笑
唯一読んでいる5章(RNN)でも触れられているな。
ベンチマークとしてよく利用されるコーパス
実際のデータ lstm/data at master · wojzaremba/lstm
chainer/ptb.rst at master · chainer/chainer
忘れないようにメモ
「ニューラルネットを用いた多方言の翻訳と類型分析」を読んだ をもう一度読み返してみたい
/icons/hr.icon
2019-11-10
何やるか。いくつか選択肢がある。
1. 日英翻訳に向けたデータセットの準備
2. RNNに必要な機能(functions.lstm など)の実装
3. 自前で実装した SubDataset クラスを使えるか確認& Iris の実装を改良
日英翻訳は普通にChainerで試したい感はあるなぁ。興味として。Google Colab使ってやれば簡単そう
この観点では 1. 日英翻訳に向けたデータセットの準備 やっとくと無駄にはならない
当初の目的の完遂を目指すなら 2. RNNに必要な機能(functions.lstm など)の実装 かなぁ
でもこれやるならSubDatasetクラスみたいに Red Chainer 側に実装したい。
try-red-chainer 側から呼び出したい。
で、この形式をまだ試せてないんだよな。加筆したgemを呼び出す、みたいなやつ。これは仕事にも活かせる。
Gemfile に gem 'gem-name', git: 'repository-url', branch: 'branch-name' と書けば良いだけだ
楽ちん〜 ref: Bundler: gemfile
使ってみるとバグが見つかるね〜。get_exampleのindexがバグってた。
bug1: fix keyword argument · tanaken0515/red-chainer@3cd9b72
bug2: fix get_example index · tanaken0515/red-chainer@7234ea1
3. 自前で実装した SubDataset クラスを使えるか確認& Iris の実装を改良
データセットの分割と test データセットを用いた推論 · tanaken0515/try-red-chainer@fde45a7 できた!
結構自信ついた〜。SubDataset クラスを自作できたことで、今後楽になるよなぁ
野良データをDatasetにするのは頑張るとして、そのあとそのデータセットを分割したい時に絶対便利だ。
2. RNNに必要な機能(functions.lstm など)の実装 はyouchanさんが既にやっていた〜。神。
youchan/red-chainer at lstm
Chainer::Links::Connection::LSTM
Chainer::Functions::Activation::LSTM
1. 日英翻訳に向けたデータセットの準備
これをやろう。
日英翻訳のためのデータセットを準備する
/icons/hr.icon
2019-11-09
昨日はChainerとRNNと機械翻訳 - Qiitaを改めて読んだり
Chainerでサクッとニューラル英日翻訳を試してみた - Inside Closure - にへろぐ をじっくり読んでみるなどした
直近の目標は、英語翻訳をRed Chainerで実装すること。そのための参考になりそうなものを探している。
EncoderDecoder で日英翻訳をしてみた (その1) - @nojima's blog も参考になりそう
/icons/ibooks.icon Chainerによる実践深層学習 も良さそう
あ、その前に、Red Chainer で学習済みモデルを使って推論する方法を知っておかないとだ。
Red Chainer で学習済みモデルを使って推論する方法 に書いた
全然文脈関係なく Red Chainerをなぜ作って今後どうするのか - Speaker Deck を読んだ
chainer/seq2seq.py at master · chainer/chainer をRed Chainerで書いてみれば良いかも
統計的機械翻訳(SMT)とニューラル機械翻訳(NMT)って何ですか? - Qiita#5da51a97310c620000c26c2a
によれば seq2seq はEncoderDecoderモデルのことらしいしね。
ちょっと読んだけど、そのまま書き直すのは無理そう〜
L.NStepLSTM とかが Red Chainer にはないから、自前で実装することになる。
となると qiita の記事とか読みながら地道にやったほうがいいかな。
EncoderDecoder で日英翻訳をしてみた (その1) - @nojima's blog も L.NStepLSTM 使ってるからダメだな
いずれにせよデータセットの準備は必要だからそのあたりからだなぁ
日本語:英語の対訳例文データを用意する
日本語例文は分かち書きする必要がある
日本語辞書を用意する
英語辞書を用意する
辞書データの加工_φ(・_・
code:py
def load_vocabulary(path):
with io.open(path, encoding='utf-8') as f:
# +2 for UNK and EOS
word_ids = {line.strip(): i + 2 for i, line in enumerate(f)}
word_ids'<UNK>' = 0
word_ids'<EOS>' = 1
return word_ids
単語をkeyとするdictを作っている。rubyならhashだね。
Red Chainer、RNN関連のロジックがまだ1つもないじゃん。あ。これ無理じゃね?
せめて functions.lstm に相当するものがあれば何とかなるんだが...
え、作る?え〜、その余裕はないやろ...
世の中のすごい人たちが「一旦あとまわしで...」としてきたものをそんなにサクッと実装できるのかえ?
/icons/hr.icon
2019-11-04 ~ 2019-11-06
IrisをRed ChainerでTrainerを使って書いてみる
/icons/hr.icon
2019/10/29
Chainer チュートリアル終わらせるぞ〜!完
終わったら練習として red-chainer/iris.rb at master · red-data-tools/red-chainer をリファクタリングしてみてもいいかもなぁ
トレーナを使った書き方にするとか
/icons/hr.icon
2019/10/28
Chainer チュートリアル 〜ディープラーニング入門〜 あとちょっとだ!
最後の章、「トレーナーとエクステンション」の冒頭まで行った!続きは明日。
かなり理解が深まってきた感がある〜。これまで読んできたQiitaの記事を読み返したらさらに理解できそう
/icons/hr.icon
2019/10/27
Chainer チュートリアル 〜ディープラーニング入門〜を終わらせたい
/icons/hr.icon
2019/10/26
Chainer チュートリアル 〜機械学習とデータ分析入門〜 scikit-learnから! 完了!
やっと Chainer チュートリアル 〜ディープラーニング入門〜 に入れるぞ〜!
/icons/hr.icon
2019/10/24
Chainer チュートリアル 〜機械学習とデータ分析入門〜の続き
/icons/hr.icon
2019/10/23
Chainer チュートリアル 〜機械学習とデータ分析入門〜をやっていく
回帰分析までやった!
NumPy入門のブロードキャストまでやった!次は行列積から
/icons/hr.icon
2019/10/22
Red Chainer and Cumo: Practical Deep Learning in Ruby at RubyKaigi 2019 勉強になる〜
さて今日はChainer チュートリアルの続きをやっていくぞ
昨日Pythonの基礎までサッと読んだ。やっぱり先ずはChainerの理解だ!
Chainer チュートリアル 〜準備編〜が完了した!!
/icons/hr.icon
2019/10/20
手元でRed Chainerが無事に動くことがわかった。もう少し理解を深める。 -> Red Chainer の MNIST を試す
多分大体理解したと思う
英語翻訳を実装していく
ChainerとRNNと機械翻訳 - Qiita
ChainerによるRNN翻訳モデルの実装+@
Chainerでサクッとニューラル英日翻訳を試してみた - Inside Closure - にへろぐ
EncoderDecoder で日英翻訳をしてみた (その1) - @nojima's blog
その前にChainerに入門すべきか?
Chainer チュートリアル
これで
1. 機械学習・ディープラーニング・Chainerを完全理解する
2. 英語翻訳をPython(Chainer)でやってみて機械翻訳を完全理解する
3. 英語翻訳をRuby(Red Chainer)でやってみてRubyでの機械翻訳を完全理解する
4. 最後に鹿児島弁での機械翻訳チャレンジする
で、完璧なのでは?
時間あるか?笑
割と不安なのは、ChainerとRed Chainerでできることにギャップがあるのでは?という懸念。
Red Chainer implementation status を見ると Chainer 2.0 (Initial ported version) って書いてあるんじゃよ...
初期の移植バージョンがChanier 2.0だよ、という意味だけど...
ここに 2019/03 Correspondence to Chainer v3 と書いてある :eyes:
2. 英語翻訳をPython(Chainer)でやってみて機械翻訳を完全理解する まではできそうだけど、Red Chainerで同じことをやろうとするとツライかもしれない...
もしRed Chainerで出来ないことがあったら、コントリビュートするか!!!???
コントリビュートチャンス!?!?
いま改めてRubyKaigiの登壇資料見るとめちゃ勉強になるな、わかりやすい
Ruby for NLP - RubyKaigi2019
Red Chainer and Cumo: Practical Deep Learning in Ruby at RubyKaigi 2019 - Speaker Deck
Deep Learning Programming on Ruby - Speaker Deck
/icons/hr.icon
2019/10/19
統計的機械翻訳(SMT)とニューラル機械翻訳(NMT)って何ですか? - Qiita の続きを読む 完
登壇までのスケジュールを作る 完
中納言で鹿児島弁データを調べる これ後日でいいや
簡単なものでいいから実装を始めたい
ChainerとRNNと機械翻訳 - Qiitaの感じでやってみようかな
と、思いつつ、Red-Chainerを使うのでそれ関連の情報を調べてみる
【Google Colab】Red Chainer を使ってみた - Qiita
Google Colaboratory 知らなかった。GPUが使えるのね
Colaboratory へようこそ - Colaboratory
てかGPUよく分かっていないよ僕は
「5分で理解」 GPUとは?CPUと違いや性能と活用 | カゴヤのサーバー研究室
定型的かつ膨大な計算処理を行うのに適したプロセッサ と理解した
困るまではCPUでいいんじゃないかな
令和元年なのでRubyでDeep Learningする方法をリストアップしてみた。 - Qiita
色々あるんだなぁと分かる
【書評】猫と森羅と日本語とRuby - Qiita
Red Data Tools - Rubyでデータ処理!
RubyでMnistを表示しつつ、4次元の不思議さを感じる - Qiita
てか MNIST ってなに
MNIST データの仕様を理解しよう
機械学習では yoshoku/rumale: Rumale is a machine learning library in Ruby もある
今回はDeep Learningで行こうと思ってるからこれ系はスルーでいいかな
Rumale🦆チートシート ―Rubyの機械学習― - Qiita
長岡技術科学大学 自然言語処理研究室 - YouTube
めちゃ勉強になりそう〜
てかまずはRed Chainerを動かしてみればいいんじゃね?そもそも手元で動くんかいな、という話がある
Red Chainer の MNIST を試す
/icons/hr.icon
2019/10/16
統計的機械翻訳(SMT)とニューラル機械翻訳(NMT)って何ですか? - Qiita の続きを読む
/icons/hr.icon
2019/10/15
Chainerを使いこなせるか、と、データをうまく用意できるか、という2大不安が明確になった。
この2つの不安、分解してそれぞれ考えたほうがいいかもな
Ruby x 自然言語処理 x ディープラーニング という観点では、題材はなんでも良いんだよ
鹿児島弁じゃなくても良いわけだ。
まずはこの分野にRubyで入門することが大事だ
その観点では、データ量を心配しなくてよさそうな「英語翻訳」を題材にすると良いのかもしれない
ChainerとRNNと機械翻訳 - Qiitaでも扱っているしね!
データ odashi/small_parallel_enja: 50k English-Japanese Parallel Corpus for Machine Translation Benchmark.
入門した上で「鹿児島弁」を題材にする場合の特徴や課題を出して「これにどうアプローチするか?」= 実装をどう書き換えるか? を語ったほうがよさそう
特徴
データが「発話音声を表現するための表記(ひらがな、カタカナ、ローマ字もどき)」になっている
「翻訳前後の語順の変化は無い」と仮定できる(同じ日本語だから)
課題
学習データが少ない
コーパス検索アプリケーション『中納言』 ユーザ登録完了した!
もっと審査的なものが厳しいのかと思ったけど、大丈夫だった。よかった。
/icons/hr.icon
2019/10/14
適当な学習データと評価データを用意して、モデルを作ってみたい
データは学習用を8件、評価用を2件とかで良い
少数データの獲得と加工
適当なデータを持ってきてみた↑
すでに多少加工しているけど、from ひらがな標準語 to ひらがな方言 のモデルが作れるようにこれらのデータをさらに加工しよう
少数データの獲得と加工#5da42183310c620000ce2c99 ひらがなにした!
データを集めるのは当然大事だけど、少数のデータでそれっぽい実装ができるのか、やってみないと不安で仕方ない
さて、集めた10データで実装してみたい気持ちになったが、まず何をすればいい?
ニューラル機械翻訳(NMT)とやらがなんなのかよくわかっていないので実装も何も。無である。
/icons/web.icon 統計的機械翻訳(SMT)とニューラル機械翻訳(NMT)って何ですか? - Qiita
割とわかりやすそう
/icons/web.icon ChainerとRNNと機械翻訳 - Qiita
あぁ、これまだ読んでなかった
ChainerとRNNと機械翻訳 - Qiitaを読んだ!!
ふーんという感じだ。Chainerを使いこなせるか、と、データをうまく用意できるか、という2大不安が明確になった。
/icons/本.icon 深層学習による自然言語処理 (機械学習プロフェッショナルシリーズ) | 坪井祐太, 海野裕也, 鈴木潤 | 工学 | Kindleストア | Amazon
時間ないけど読むか...?
/icons/本.icon 言語処理のための機械学習入門 (自然言語処理シリーズ) | 高村 大也, 奥村 学 |本 | 通販 | Amazon
古い本だけど定番はこれ
データ集めの準備も進める
中納言
ユーザ登録をするぞ
申請が承認されると、専用の URL をメールで、登録コードをショートメッセージでお送りします。二つが揃ったら、専用の URL から登録手続きを行ってください。専用の URL と登録コードが届くのは、国語研究所コーパス開発センターでの承認後となり、一週間程お時間をいただく場合がございます。
hai
『方言談話資料』データ | 国立国語研究所
鹿児島弁はない
『方言録音資料シリーズ』データ | 国立国語研究所
鹿児島弁はあるけど、ヤバイ。
それに対する標準語訳が書かれている
/icons/hr.icon
2019/10/13
「ニューラルネットを用いた多方言の翻訳と類型分析」を読んだ
読んだ
結構気づきのある論文だったなぁ
今回やりたいことに活かせそう。
活かせそうなことをまとめておく
1. 学習は from ひらがな to ひらがな でやる
スコープが狭い方がやりやすい
問題の分割(漢字かな混じりの文章は一度ひらがなに変換してから、学習したモデルに食わせれば良い)
2. データを訓練用、開発用、評価用に分ける
良い感じの仕組みになったかどうかを評価するのどうしようかな?(鹿児島弁ネイティブじゃないし...)と思っていたけど、データを分けて 評価用 を用意しておけば良いのか〜、気づいた。てか研究やってたときは当たり前だったのにすっかりこの発想を忘れていた。
3. 訓練データが足りないと感じたら、類似した方言のデータも訓練データに突っ込んでみる。という飛び道具的発想。
この研究によると、鹿児島弁は佐賀、鳥取、長崎、秋田、あたりと近いらしい
4. 鹿児島弁の語彙を辞書として追加しておくのは大事!
語彙が足りずに翻訳精度が下がったら勿体無い
5. データを得られそうなところ
全国方言談話データベース 日本のふるさとことば集成 - 国立国語研究所 刊行物データベース
東北大学方言研究センター
微妙...
方言と言語の多様性 | 国立国語研究所
『方言談話資料』データ | 国立国語研究所
なんでここに鹿児島弁ないんじゃぁぁぁ....
「東北大学方言研究センター コーパス」でググった
コーパス検索アプリケーション『中納言』
申請しておいた方がよさそう
国立国語研究所 日本語研究・日本語教育文献データベース 検索結果
jo000302.pdf
/icons/hr.icon
2019/10/9
まずは基礎知識をつけないとな
どういうフレームワークを活用したら実現できそうかを知る
そのフレームワークをRubyでどのように使うか知る
ruby-jpのslackで質問したらコメントをもらった
いいですねー。機械学習でやってみるのはいかがでしょうかー?機械翻訳のテクニックが使えそうです
機械学習か〜
ChainerとRNNと機械翻訳 - Qiita 良さそう