Open10

pythonによる機械学習入門メモ

meijinmeijin

実行環境

Google Colaboratory

  • ブラウザから実行できる
    • Google Driveを開いて「新規」から選択できる
      • 最初は選択できないので有効化する必要がある
    • GPUの有効化ができる
    • PyTorchが最初からインストールされている
meijinmeijin

トークナイザ

日本語の文章をBERTの指定するフォーマットに従ってトークン化する。あらかじめ学習済みのトークナイザが公開されているので、それを使うとトークン化ができる。

トークン化した際の##は、WordPieceによってサブワードに分割されたときの記号。

from transformers import BertJapaneseTokenizer
tokenizer = BertJapaneseTokenizer.from_pretrained('cl-tohoku/bert-base-japanese-whole-word-masking')
tokenizer.tokenize('明日は自然言語処理とディープラーニングの勉強をしよう')
['明日',
 'は',
 '自然',
 '言語',
 '処理',
 'と',
 'ディープ',
 '##ラー',
 '##ニング',
 'の',
 '勉強',
 'を',
 'しよ',
 'う']
meijinmeijin

文章の穴埋め

BertForMaskedLMを使うことで実装できる。

以下のように、穴埋めしたいテキストを[MASK]とトークン化して利用する。

text = '今日は[MASK]へ行く。'
tokens = tokenizer.tokenize(text)
meijinmeijin
bert_sc = BertForSequenceClassification.from_pretrained(
    MODEL_NAME, num_labels=2
)

BertForSequenceClassificationクラスを使って文書分類ができる。num_labels引数で、カテゴリの下図をあらかじめ関数に入力する必要がある。

疑問点

カテゴリの数が事前にわからない場合はどうしたらいいか?

meijinmeijin

疑問点

with torch.no_grad():
output = bert_sc.forward(**encoding)

torch.no_grad()で囲むことで計算結果がメモリに保存されなくなり、効率的に計算できるとのことだが、それ自体がなぜなのかが気になる。そもそもPythonのwithの意味がわからない

meijinmeijin

コーパス

コーパスといえども、生テキストをカテゴリ別にディレクトリ別に保存したもので、1行目にURL、2行目に作成日時、3行目にタイトル、4行目に本文みたいな形式で保存したテキストファイルが実態

meijinmeijin

BERTは最大で512のトークンまでしか受け入れることができません

これって長文の扱いに向いていないってこと?