日英翻訳のためのデータセットを準備する
/icons/メモ.icon 準備するものリスト
1. 日本語⇄英語の対訳例文データ /icons/done.icon
2. 日本語辞書 /icons/done.icon
3. 英語辞書 /icons/done.icon
/icons/hr.icon
2019-11-15
" , . ... ! ? ( ) を考慮した
これ、「該当の文字列を消してから辞書に追加する」という方針にしていたけど、「よしなに分かち書きする」というアプローチの方がよさそう。
というか、再利用できるから便利。
入力をone_hotベクトルにするときに使う未来が見える
正規表現を駆使するぞ
test書きたいな。RSpec入れるか。
やっぱ単体テストは偉大だなぁ
シングルクォーテーションとセミコロンにも対応した。ここまでやればいいだろう。キリがない。
/icons/hr.icon
2019-11-14
csvファイルをよしなに加工するぞ〜
CSV.foreach で良さそう。csvだけど中身はtsvなので :col_sep オプションで "\t" を指定する必要がありそう。
データ中にシングルクォーテーションやダブルクォーテーションが含まれていると CSV::MalformedCSVError になる
sentences.csv 850万行ある
対訳データ jpn_eng_sentences.csv を作った。15万レコード。
英語辞書を作った。
" ' , . あたり考慮してないけど良いかなぁ。-> " , . ... ! ? ( ) を考慮した
英語データの前処理、結構めんどいんだけど。。。一旦こんなもんか〜というレベル感にはなったが。
日本語辞書は分かち書きをする必要があるから natto gem を入れる感じになるかな。
日本語辞書も作った
/icons/hr.icon
2019-11-13
辞書データどうしようかなと思っていたけど、例文データに登場した単語を一意に集めて辞書データとして で良いかも
良い辞書データを用意することは現時点での目的ではない
今は「論理的に正しい実装」をすることが目的だからね
/icons/hr.icon
2019-11-10
「例文」sentences.tar.bz2 をダウンロード。これを解凍すると sentences.csv になる
"例文番号\t言語名\t例文" という形式のデータ
code:csv
1282 eng Muiriel is 20 now.
1283 eng The password is "Muiriel".
1284 eng I will be back soon.
...
4707 jpn ムーリエルは20歳になりました。
4708 jpn パスワードは「Muiriel」です。
4709 jpn すぐに戻ります。
...
「日本語索引」jpn_indices.tar.bz2 をダウンロード。これを解凍すると jpn_indices.csv になる
"日本語の例文番号\t英語の例文番号\t例文" という形式のデータ
code:csv
4707 1282 は|1 二十歳(はたち){20歳} になる01{になりました} 4709 1284 直ぐに{すぐに} 戻る{戻ります}
4727 1300 直ぐに{すぐに} 諦める{諦めて} 昼寝 を 為る(する){する} かも知れない
例文の癖が強い。 になる[01]{になりました} ってなに?
この例文自体は使わないで例文番号の紐付けをする役割で使おうかな。
これらのデータがあれば "日本語の例文\n英語の例文" という形式のデータは作れそう
辞書データはどうやって作ればいいかな
この場合、学習時にはunknownな単語が発現しなくなり、学習データに対する正解率は上がりそう
だけど、推論の際に知らない単語が来たらかなり正解率が低そう
辞書データの加工_φ(・_・
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)}
return word_ids
単語をkeyとするdictを作っている。rubyならhashだね。
つまり辞書データ自体は「1行1単語」になっていればOKということだね。