#author("2024-12-16T06:31:55+01:00","","")
#author("2024-12-16T06:34:07+01:00","","")
[[水上/技術資料]]


----
目次
#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」を実行するだけ&br;&br;&br;&br;
「感情モデル作成.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

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS