とにかく最低ラインの自然言語(text)の分類を行いたい
前処理や単語のベクトル化等を行わずに学習および推論を行う方法の紹介、精度はそこまで高くない場合が多いです。
simpletransformer
pythonのパッケージで自然言語系のあれこれを簡単にできるように実装されています。
インストール
pandas等の基本的なものは入っている前提で書いています、またcondaでもpipでも両方行うことができます。
pytorchのインストール
pytorchが既に入っている場合には以下の手順は飛ばしてください。
gpuの場合
pip install pytorch>=1.6 cudatoolkit=10.2 -c pytorch
cpuのみ
pip install pytorch cpuonly -c pytorch
simpletransformersのインストール
simpletransformersはcondaではできないと思います。
pip install simpletransformers
オプション(wandb)のインストール(任意)
web上で学習の可視化を行う用のwandbのインストールです、なくても動くのでいらない人は飛ばしてください。使い方等は記述しません。
pip install wandb
使用方法
使用にはpandasのdataframeにテキストとそれに対応するラベルが格納されているという想定で行います。
pandasのtextが書かれているcolumnの名前を”text”、labelが書かれているcolumnの名前を”label”に変更。
各paramの設定
params = {
"output_dir": "out_models/bert_model/",
"max_seq_length": 256,
"train_batch_size": 128,
"eval_batch_size": 128,
"num_train_epochs": 10,
"learning_rate": 1e-4,
}
output_dirには任意のディレクトリを指定してください。学習した際に作成したされたモデルの保存先ディレクトリとなります。
学習に使用するコード
from simpletransformers.classification import ClassificationModel
model = ClassificationModel(“bert”, “bert-base-cased”,num_labels=10, args=params, use_cuda=True)
model.train_model(train_df)
“bert”には使いたいモデルの各名前、”bert-base-cased”には使いたい事前学習済みのモデルの名前を入れます。学習済みモデルと各名前はこちらで参照してください。
num_labelsはラベルの数ですラベルは0からスタートする様に整形してください。
train_dfは”text”と”label”のcolumnsで作成されているdataframeです。
推論方法
学習用のdataframeと同じ形式をとっているtest用のdataframeがあること前提です。
pred, _ = model.predict(test_df['text'])
predに予測されたラベルが出力されます。
まとめ
simpletransformersのドキュメントはこちらになります。他にも機能が多くあるようなので使用してみてください。前処理、後処理などは重要なものなので今回に無視するとあまり精度が期待できないことを忘れないでください