ここの記事に従って作業中である。
この記事にもあるように、「日本語でBERTの事前学習をスクラッチで行っている記事が現段階であまり見当たらなかった」のは今でも同じで、英語で探してもtokenizationが全然違うのであまり参考にならず、とても参考になる記事である。
記事中にもあるように、事前学習中は進行度合いが表示されるのだけれど、max_length=512で走らせている機械では残り450時間とか出てひたすら待ちの状態。
別にmax_length=128で走らせているPCでも残り240時間くらいだったのでひらすら待ちかと思ったら、途中経過をファイルとして保存してくれているので、おおよそどんな具合かを見ることができる。
穴埋め問題の結果を見るとわりとよさそう。
今日は{}を食べたい。
[{'score': 0.10186372697353363,
'token': 28292,
'token_str': 'ご飯',
'sequence': '今日はご飯を食べたい。'},
{'score': 0.06326775252819061,
'token': 12987,
'token_str': '食べ物',
'sequence': '今日は食べ物を食べたい。'},
{'score': 0.05617927387356758,
'token': 1275,
'token_str': '料理',
'sequence': '今日は料理を食べたい。'},
{'score': 0.04258875921368599,
'token': 7381,
'token_str': 'ラーメン',
'sequence': '今日はラーメンを食べたい。'},
{'score': 0.024954378604888916,
'token': 690,
'token_str': 'これ',
'sequence': '今日はこれを食べたい。'}]
今日、先生は{}の手術をする予定である。
[{'score': 0.1064799353480339,
'token': 1744,
'token_str': '脳',
'sequence': '今日、先生は脳の手術をする予定である。'},
{'score': 0.0805419310927391,
'token': 5692,
'token_str': '心臓',
'sequence': '今日、先生は心臓の手術をする予定である。'},
{'score': 0.058496225625276566,
'token': 7092,
'token_str': '膝',
'sequence': '今日、先生は膝の手術をする予定である。'},
{'score': 0.05018630251288414,
'token': 8113,
'token_str': '腫瘍',
'sequence': '今日、先生は腫瘍の手術をする予定である。'},
{'score': 0.03174242749810219,
'token': 762,
'token_str': '足',
'sequence': '今日、先生は足の手術をする予定である。'}]
昨日は{}の予防接種を受けてきた。
[{'score': 0.1794903576374054,
'token': 11692,
'token_str': '新型コロナウイルス',
'sequence': '昨日は新型コロナウイルスの予防接種を受けてきた。'},
{'score': 0.14987201988697052,
'token': 10253,
'token_str': 'ワクチン',
'sequence': '昨日はワクチンの予防接種を受けてきた。'},
{'score': 0.08483733236789703,
'token': 19649,
'token_str': 'インフルエンザ',
'sequence': '昨日はインフルエンザの予防接種を受けてきた。'},
{'score': 0.04107750207185745,
'token': 16433,
'token_str': '結核',
'sequence': '昨日は結核の予防接種を受けてきた。'},
{'score': 0.02056308463215828,
'token': 4912,
'token_str': '感染症',
'sequence': '昨日は感染症の予防接種を受けてきた。'}]
なんと、ちゃんとCOVIDの情報も取り込まれている。素晴らしい!
しかし、Jupyter Notebookの上で走らせていたところ、どういうわけかkernelとの接続が切れた、と出て止まってしまったかな?
やはりPythonのインタプリタ上で実行すべきであったか。これもまた学習。
追記)あ、でも出力フォルダを見るとちゃんと更新されているので、Jupyterの方は気にしなくてよいかな?下記はまた別の穴埋め例。なかなか賢い。
世界で一番賢い動物は{}である。
[{'score': 0.05904966592788696,
'token': 11594,
'token_str': 'ネズミ',
'sequence': '世界で一番賢い動物はネズミである。'},
{'score': 0.05275234952569008,
'token': 661,
'token_str': '人間',
'sequence': '世界で一番賢い動物は人間である。'},
{'score': 0.04958319291472435,
'token': 1304,
'token_str': '鳥',
'sequence': '世界で一番賢い動物は鳥である。'},
{'score': 0.04668554291129112,
'token': 1565,
'token_str': '動物',
'sequence': '世界で一番賢い動物は動物である。'},
{'score': 0.022380739450454712,
'token': 4061,
'token_str': 'ドラゴン',
'sequence': '世界で一番賢い動物はドラゴンである。'}]