水上_backup/技術資料/BERTのモデル作成
の編集
Top
/
水上_backup
/
技術資料
/
BERTのモデル作成
[
トップ
] [
編集
|
差分
|
履歴
|
添付
|
リロード
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
-- 雛形とするページ --
島部/menu/template
[[水上/技術資料]] ---- 目次 #contents ---- *プログラム [#z00fd092] #ref(chABSA-dataset.zip) #ref(感情モデル作成.py) 以上の二つをダウンロードする。そして、「chABSA-dataset.zip」を解凍したのち、以下のように配置する #ref(dirモデル作成.png,,507x150) *目標 [#z00fd092] 「chABSA-dataset」を使って感情分析を行うためのモデルを作成します **chABSA-datasetとは [#ca461aa8] chABSA-datasetとは、機械学習で感情分析を行うためのデータセットで、TIS株式会社が無償公開しているものです。&br; 上場企業の有価証券報告書(2016年度)をベースに作成されており、各文章の中で、「何が」ネガティブで、ポジティブなのかという観点を表す情報が含まれています&br; *環境 [#h82a02b0] Python 3.10.1 64bitでやってますが,たぶんどのバージョンもできるはず... &br; pythonインストールは[[こちら>https://www.python.org/]] ** 下準備[#h82a02b0] 以下のモジュールをインストール pip install transformers pip install pandas pip install scikit-learn pip install torch *実行方法[#h82a02b0] 「感情モデル作成.py」を実行するだけ。実行開始から終了まで3~40分かかる。終了したら以下のようになる &br;&br;&br;&br; プログラムは、「データセットの整形」と「モデル作成部分」に分かれる。以下にプログラムの解説を行う * 「データセットの整形」部分の解説[#h82a02b0] 「データセットの整形」部分は、「chABSA-dataset」のファイルから文章とネガポジラベルを抽出し、結果を「dataset.csv」として出力している&br; データセット整形部分は以下のサイトを参考にした。詳しくは以下のサイトを参考にしてください&br; https://zenn.dev/robes/articles/a7ba6e172f3a14 * 「モデル作成部分」部分の解説[#h82a02b0] ・概要&br; 整形したデータセットを用いて、BERTを使用した文章分類モデルを作成・学習する。トークナイザーの準備からモデルのトレーニング、評価、保存までの一連の手順を解説する。 **ステップ1: トークナイザーの準備 [#xd845ba0] トークナイザーとは、文章をBERTモデルに入力できる形に変換する処理のこと。詳しくは[[こちら>https://zenn.dev/robes/articles/b6708032855a9c]]&br; 以下のコードでHugging Faceの`BertTokenizer`を使用し、事前学習済みモデルのトークナイザーを取得している。 from transformers import BertTokenizer tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') **ステップ2: データの分割 [#x3ecd379] データをトレーニングデータと検証データに分割している。以下のコードでは、`scikit-learn`の`train_test_split`を使用している。 from sklearn.model_selection import train_test_split train_texts, val_texts, train_labels, val_labels = train_test_split(data['text'], data['labels'], test_size=0.2) **ステップ3: データのトークナイズ[#oceee729] トークナイザーを使用してテキストデータをトークナイズし、BERTモデルが入力として受け取れる形式に変換する。&br; train_encodings = tokenizer(train_texts.tolist(), truncation=True, padding=True, max_length=128) val_encodings = tokenizer(val_texts.tolist(), truncation=True, padding=True, max_length=128) **ステップ4: データセットの作成 [#j17e8182] トークナイズ済みデータとラベルを使ってPyTorchのカスタムデータセットを作成します。 class SentimentDataset(torch.utils.data.Dataset): def __init__(self, encodings, labels): self.encodings = encodings self.labels = labels def __getitem__(self, idx): item = {key: torch.tensor(val[idx]) for key, val in self.encodings.items()} item['labels'] = torch.tensor(self.labels[idx]) return item def __len__(self): return len(self.labels) train_dataset = SentimentDataset(train_encodings, train_labels.tolist()) val_dataset = SentimentDataset(val_encodings, val_labels.tolist()) **ステップ5: モデルの初期化とトレーニング [#b2ec7ec0] 事前学習済みのBERTモデルを使用して文章分類用のモデルを作成する。その後、トレーニングを行う。 model = BertForSequenceClassification.from_pretrained('bert-base-uncased', num_labels=2) training_args = TrainingArguments( output_dir='./results', num_train_epochs=3, per_device_train_batch_size=16, per_device_eval_batch_size=16, warmup_steps=500, weight_decay=0.01, logging_dir='./logs', logging_steps=10, ) trainer = Trainer( model=model, args=training_args, train_dataset=train_dataset, eval_dataset=val_dataset, ) trainer.train() **ステップ6: モデルの保存 [#b3b86132] トレーニング済みのモデルとトークナイザーを保存する。 output_dir = './saved_model' model.save_pretrained(output_dir) tokenizer.save_pretrained(output_dir) **ステップ7: モデルの評価 [#f8133ccf] モデルの評価を行い、結果を表示する。 eval_result = trainer.evaluate() print(eval_result) *参考文献 [#ddfa4bf2] ↓【自然言語処理】【感情分析】chABSA-datasetを扱いやすいように整形する&br; https://zenn.dev/robes/articles/a7ba6e172f3a14
タイムスタンプを変更しない
[[水上/技術資料]] ---- 目次 #contents ---- *プログラム [#z00fd092] #ref(chABSA-dataset.zip) #ref(感情モデル作成.py) 以上の二つをダウンロードする。そして、「chABSA-dataset.zip」を解凍したのち、以下のように配置する #ref(dirモデル作成.png,,507x150) *目標 [#z00fd092] 「chABSA-dataset」を使って感情分析を行うためのモデルを作成します **chABSA-datasetとは [#ca461aa8] chABSA-datasetとは、機械学習で感情分析を行うためのデータセットで、TIS株式会社が無償公開しているものです。&br; 上場企業の有価証券報告書(2016年度)をベースに作成されており、各文章の中で、「何が」ネガティブで、ポジティブなのかという観点を表す情報が含まれています&br; *環境 [#h82a02b0] Python 3.10.1 64bitでやってますが,たぶんどのバージョンもできるはず... &br; pythonインストールは[[こちら>https://www.python.org/]] ** 下準備[#h82a02b0] 以下のモジュールをインストール pip install transformers pip install pandas pip install scikit-learn pip install torch *実行方法[#h82a02b0] 「感情モデル作成.py」を実行するだけ。実行開始から終了まで3~40分かかる。終了したら以下のようになる &br;&br;&br;&br; プログラムは、「データセットの整形」と「モデル作成部分」に分かれる。以下にプログラムの解説を行う * 「データセットの整形」部分の解説[#h82a02b0] 「データセットの整形」部分は、「chABSA-dataset」のファイルから文章とネガポジラベルを抽出し、結果を「dataset.csv」として出力している&br; データセット整形部分は以下のサイトを参考にした。詳しくは以下のサイトを参考にしてください&br; https://zenn.dev/robes/articles/a7ba6e172f3a14 * 「モデル作成部分」部分の解説[#h82a02b0] ・概要&br; 整形したデータセットを用いて、BERTを使用した文章分類モデルを作成・学習する。トークナイザーの準備からモデルのトレーニング、評価、保存までの一連の手順を解説する。 **ステップ1: トークナイザーの準備 [#xd845ba0] トークナイザーとは、文章をBERTモデルに入力できる形に変換する処理のこと。詳しくは[[こちら>https://zenn.dev/robes/articles/b6708032855a9c]]&br; 以下のコードでHugging Faceの`BertTokenizer`を使用し、事前学習済みモデルのトークナイザーを取得している。 from transformers import BertTokenizer tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') **ステップ2: データの分割 [#x3ecd379] データをトレーニングデータと検証データに分割している。以下のコードでは、`scikit-learn`の`train_test_split`を使用している。 from sklearn.model_selection import train_test_split train_texts, val_texts, train_labels, val_labels = train_test_split(data['text'], data['labels'], test_size=0.2) **ステップ3: データのトークナイズ[#oceee729] トークナイザーを使用してテキストデータをトークナイズし、BERTモデルが入力として受け取れる形式に変換する。&br; train_encodings = tokenizer(train_texts.tolist(), truncation=True, padding=True, max_length=128) val_encodings = tokenizer(val_texts.tolist(), truncation=True, padding=True, max_length=128) **ステップ4: データセットの作成 [#j17e8182] トークナイズ済みデータとラベルを使ってPyTorchのカスタムデータセットを作成します。 class SentimentDataset(torch.utils.data.Dataset): def __init__(self, encodings, labels): self.encodings = encodings self.labels = labels def __getitem__(self, idx): item = {key: torch.tensor(val[idx]) for key, val in self.encodings.items()} item['labels'] = torch.tensor(self.labels[idx]) return item def __len__(self): return len(self.labels) train_dataset = SentimentDataset(train_encodings, train_labels.tolist()) val_dataset = SentimentDataset(val_encodings, val_labels.tolist()) **ステップ5: モデルの初期化とトレーニング [#b2ec7ec0] 事前学習済みのBERTモデルを使用して文章分類用のモデルを作成する。その後、トレーニングを行う。 model = BertForSequenceClassification.from_pretrained('bert-base-uncased', num_labels=2) training_args = TrainingArguments( output_dir='./results', num_train_epochs=3, per_device_train_batch_size=16, per_device_eval_batch_size=16, warmup_steps=500, weight_decay=0.01, logging_dir='./logs', logging_steps=10, ) trainer = Trainer( model=model, args=training_args, train_dataset=train_dataset, eval_dataset=val_dataset, ) trainer.train() **ステップ6: モデルの保存 [#b3b86132] トレーニング済みのモデルとトークナイザーを保存する。 output_dir = './saved_model' model.save_pretrained(output_dir) tokenizer.save_pretrained(output_dir) **ステップ7: モデルの評価 [#f8133ccf] モデルの評価を行い、結果を表示する。 eval_result = trainer.evaluate() print(eval_result) *参考文献 [#ddfa4bf2] ↓【自然言語処理】【感情分析】chABSA-datasetを扱いやすいように整形する&br; https://zenn.dev/robes/articles/a7ba6e172f3a14
テキスト整形のルールを表示する