さて、前回(こちら)のつづき、
Kerasで
辞書の作成と単語のID化を行う。
Seq2SeqモデルのEmbedding層(単語の埋め込み。分散表現)に入力すると、
One-hot 表現に置き換えられ、分散表現に変換されるのだ。
ここらへんは読むだけでは
「ちょっとなに言ってるかわかんない」(by サンドイッチマン富澤)
状態になるので、
コードを写経するだけではなく、
『ゼロから作るDeep Learning 2-自然言語処理編』
で確認しながら進めたい。
まずは、
で、KerasのTokenizerクラスをインポート。
このTokenizerに読み込ませたい文章を,
のようにリストで宣言するのだが、
実際には、
例のようにいちいち入力するのではなく、
別途データを作る。
(今回、俳句は17,000近くもあるのだから)
ただ、ここで気をつけるべき点が一点。
データ型だ。
ここのデータ型がstr(string:文字列)型でなければいけないのだ。
なんでそんなことをいうかと言うと、
前回先生からいただいたコードで、
Encoderデータを作ろうと思ったら、
まさかのエラーが出たのだ。
エラーメッセージをそのままググったら、
「この問題はPandasとはあまり関係なく、Mecabの mecab.parse(text) に渡している textの形式が異なるために起きているように見えます。」
という回答にヒット。(そのサイトは、こちら)
さっそく、
で大元のEncoderデータのデータ型を確認したら、
って、これ、なに?
よくわからん。
なので、
で、変数textのデータ型を確認したら、
と出た。
これだ!
parse関数の引数がとるデータ型は、
str型でなければいけないのに、
float型:浮動小数点(小数点を含む数値)になっていたのだ。
なので、
でstr型に変換したら通った!
(このくらいのコードは知っている。)
で、話を元に戻し、
Tokenizerの手続きを続けると、
で、Tokenizer を初期化(インスタンス化)し、
fit_on_texts() メソッドの引数に、宣言した文章のリストを与える。
これで、文章を解析して集計を行なってくれるのだ。
さらに、
で、単語をリスト化し、辞書を作成。
次に、
Decoder データを
② ゼロパディングして、長さを統一(可変長→固定長)する。
ゼロパディングとは、つまり、
長さの不揃い部分を0で埋めることだ。
でpad_sequencesクラスをインポート。
で、0を後ろ(post)に埋め込み、すべての単語(ベクトル)を同じ長さのIDにする。
あ〜、しんど。
でもこれで、いよいよ明日からモデルの構築だ!