13.7. cbow.pyのサンプルコード#

13.7.1. 実装#

cbow.pyのサンプルプログラムを以下に示します.argparseパッケージを使ってCLI(Command Line Interface)アプリ化しています.

13.7.2. 実行結果#

13.7.2.1. Usage#

argparserのdescriptionやhelpに説明を書き込んだので,--help オプションを使えば説明が表示されます.

(datasci) mriki@RikinoMac prml % python script/cbow.py -h
usage: cbow.py [-h] [--learning_rate LEARNING_RATE] [--batch_size BATCH_SIZE] [--embedding_dim EMBEDDING_DIM]
               [--seed SEED] [--max_epochs MAX_EPOCHS] [--device DEVICE] [--data_path DATA_PATH]
               [--save_path SAVE_PATH] [--window_size WINDOW_SIZE] [--topn TOPN] [--query QUERY]

CBOWの訓練を行う

options:
  -h, --help            show this help message and exit
  --learning_rate LEARNING_RATE
  --batch_size BATCH_SIZE
  --embedding_dim EMBEDDING_DIM
  --seed SEED
  --max_epochs MAX_EPOCHS
  --device DEVICE
  --data_path DATA_PATH
                        訓練用コーパスの保存場所
  --save_path SAVE_PATH
                        学習済みモデルの保存場所
  --window_size WINDOW_SIZE
  --topn TOPN           検索単語数
  --query QUERY         文字列を渡すと類似する単語をtopn個検索する

自分自身しか使わないプログラムであっても,数週間も経てば使い方を忘れてしまうかもしれません.未来の自分のためにも,これらやスクリプト中のコメントを含めたドキュメントを必ず書くようにしましょう.

13.7.2.2. 実行#

端末エミュレータから実行できるlsemacsのようなコマンドと同様に,ここで作成したアプリも端末エミュレータからコマンドとして実行できます.

(datasci) mriki@RikinoMac prml % python script/cbow.py --save_path=models/CBoW_ep10_lr0.01_b512_emb50.pth --query=
文書数: 564194, 語彙数: 63269
前処理後の文書数: 454833
contextsの数: 8109771
loading pretrained weights...
>>> 
1:自室  0.6886861324310303
2:ラストシーン  0.685504674911499
3:世に  0.6764041185379028
4:不適切        0.6689269542694092
5:大洲  0.6603158712387085

(1epochも終わってないモデルの結果なので似た単語は全然出ていませんが,ちゃんと学習したモデルならもう少しまともな結果になるはずです…)