🔖

【AI_12日目】自然言語処理_3冊目

2024/10/13に公開

こんにちは投資ロウトです。

背景

AI開発ができるために自然言語処理について理解を深めていきます。

以下の記事のStep2として、「BERT・GPTモデルについての本を読む」3選が書かれているので、そちらをやっていきたいと思います。

https://nlpillustration.tech/?p=4419#rtoc-7

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で使えるようにしたものとのこと。

https://pypi.org/project/fugashi/

・ipadic・・・Mecabで形態素解析で使う辞書

https://zenn.dev/yasude/articles/aa28d7ab20b2f1823d4b

!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