【AI_12日目】自然言語処理_3冊目
こんにちは投資ロウトです。
背景
AI開発ができるために自然言語処理について理解を深めていきます。
以下の記事のStep2として、「BERT・GPTモデルについての本を読む」3選が書かれているので、そちらをやっていきたいと思います。
BERT
・RNNの問題点・・・処理を経るにつれて、前方にあるトークンの情報が失われてしまう点。
※LSTMでも完全に改善されない
・BERTの違う点・・・RNNをベースとしたモデルではあるが、他のトークンの情報を直接参照して処理を行うのが違う。
→それぞれのトークンの情報にどの程度の注意(Attention)をするかによって、適応的に決まり、これをAttentionと呼ばれるとのことです。
・Attentionを使う利点・・・あるトークンの情報を処理するときに、すべてのトークンの情報を直接用いて出力を計算するため、遠く離れたトークンの情報も適切に考慮することが可能となる。
→またAttentionでは、それぞれのトークンに対する出力を独立して計算できるため、並列化の効率が良いとのこと。
入力
・BERTに文章を入力するには、先頭に[CLS]、末尾に[SEP]を入れて、間に区切られた文字を入れていく必要があるとのことです。
# 例
'[CLS', '間', 'に', 'トークン', 'を', '入れ', 'る', '。', '[SEP]'
# 二行なら
'[CLS', '間', 'に', 'トークン', 'を', '入れ', 'る', '。', '[SEP]', '二', 行', 'ある', '[SEP]'
・トークン列に変換した後は、それぞれのトークンをベクトルに置き換えてBERTに入力するとのことです。
学習
・事前学習・・・大規模な文章コーパスから汎用言語を学習する
・ファインチューニング・・・個別のタスクのラベル付きデータからそのタスクに特化させれるように学習する
・ラベルなしデータ・・・生の文章データのみのようなラベル付けされていないデータ
・マスク付き言語モデル・・・ある単語を周りの単語から予測するというタスクで、学習を行い、ランダムの15%のトークンを[Mask]に置き換えて学習するようにしているとのこと。
・Next Sentence Predictioon・・・二つの文の関係性を理解できるように実施しているタスク
・事前学習に必要な日付・・・スペックにも依存するが、数日から数週間程度かかるとのこと。
・BERTで個別のタスクを解く・・・タスク内容に応じてBERTに新しい分類器を接続するなどでモデルを作る
→BERTは特徴抽出器のような役割を果たすとのこと。
Huggingface Transformers
・PyTorch・・・直感的なコーディングができ、ネットワークモデルの構築が容易となる。
・Transformers・・・ニューラル言語モデル
・Fugashi・・・形態素解析ツールで、MecabをPythonで使えるようにしたものとのこと。
・ipadic・・・Mecabで形態素解析で使う辞書
!pip install transformers==4.5.0 fugashi==1.1.0 ipadic==1.0.0
エラーが発生
Building wheels for collected packages: fugashi, ipadic, tokenizers
Building wheel for fugashi (setup.py) ... done
Created wheel for fugashi: filename=fugashi-1.1.0-cp310-cp310-
Stored in directory: /root/.cache/pip/wheels/f6/bc/9b/
Building wheel for ipadic (setup.py) ... done
Created wheel for ipadic: filename=ipadic-1.0.0-py3-none-any.whl size=
Stored in directory: /root/.cache/pip/wheels/5b/ea/e3/
error: subprocess-exited-with-error
× Building wheel for tokenizers (pyproject.toml) did not run successfully.
│ exit code: 1
╰─> See above for output.
note: This error originates from a subprocess, and is likely not a problem with pip.
Building wheel for tokenizers (pyproject.toml) ... error
ERROR: Failed building wheel for tokenizers
Successfully built fugashi ipadic
Failed to build tokenizers
ERROR: ERROR: Failed to build installable wheels for some pyproject.toml based projects (tokenizers)
最新バージョンに合わせにいく
!pip install tokenizers==0.20.1
今度はtransformersの依存関係が発生
Installing collected packages: tokenizers
Attempting uninstall: tokenizers
Found existing installation: tokenizers 0.19.1
Uninstalling tokenizers-0.19.1:
Successfully uninstalled tokenizers-0.19.1
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
transformers 4.44.2 requires tokenizers<0.20,>=0.19, but you have tokenizers 0.20.1 which is incompatible.
Successfully installed tokenizers-0.20.1
tokenizersは0.19.1にする→成功
他のパッケージもそれに合ったものを入れてみる
!pip install transformers==4.44.2 fugashi==1.1.0 ipadic==1.0.0
# →成功
・「cl-tohoku/bert-base-japanese-whole-word-masking」・・・東北大学の研究チームによって作られており、Wikipediaの日本語記事をもとに学習されているとのこと。
→別ブログで書いていますが、産学連携して作られたものかどうか気になりますね。
(Step)
①トークナイザで文章をトークン化し、BERTに入力させられる状態にする
②そのデータをBERTに入力し、出力を得る
と一旦以上で学習を区切りたいと思います。ご精読ありがとうございました。焦らずコツコツ一歩ずついきたいと思います。
Discussion