🚀 トルコ語用の簡単なNERアプリケーション
トルコ語用に、使いやすい名前付きエンティティ認識(NER)アプリケーションです。Pythonで実装された簡単なNER(Bert + 転移学習)モデルです。
🚀 クイックスタート
このアプリケーションを使用するには、まずデータセットをダウンロードし、前処理を行い、次に事前学習を実行する必要があります。以下に手順を示します。
データセットのダウンロード
cd tr-data
for file in train.txt dev.txt test.txt labels.txt
do
wget https://schweter.eu/storage/turkish-bert-wikiann/$file
done
cd ..
これにより、トレーニング、開発、テストの分割が行われた前処理済みのデータセットがダウンロードされ、tr-data
フォルダに保存されます。
事前学習の実行
データセットをダウンロードした後、事前学習を開始することができます。以下の環境変数を設定します。
export MAX_LENGTH=128
export BERT_MODEL=dbmdz/bert-base-turkish-cased
export OUTPUT_DIR=tr-new-model
export BATCH_SIZE=32
export NUM_EPOCHS=3
export SAVE_STEPS=625
export SEED=1
次に、事前学習を実行します。
python3 run_ner_old.py --data_dir ./tr-data3 \
--model_type bert \
--labels ./tr-data/labels.txt \
--model_name_or_path $BERT_MODEL \
--output_dir $OUTPUT_DIR-$SEED \
--max_seq_length $MAX_LENGTH \
--num_train_epochs $NUM_EPOCHS \
--per_gpu_train_batch_size $BATCH_SIZE \
--save_steps $SAVE_STEPS \
--seed $SEED \
--do_train \
--do_eval \
--do_predict \
--fp16
💻 使用例
基本的な使用法
from transformers import pipeline, AutoModelForTokenClassification, AutoTokenizer
model = AutoModelForTokenClassification.from_pretrained("savasy/bert-base-turkish-ner-cased")
tokenizer = AutoTokenizer.from_pretrained("savasy/bert-base-turkish-ner-cased")
ner=pipeline('ner', model=model, tokenizer=tokenizer)
ner("Mustafa Kemal Atatürk 19 Mayıs 1919'da Samsun'a ayak bastı.")
📚 ドキュメント
引用
このモデルを研究で使用する場合は、以下の文献を引用してください。
@misc{yildirim2024finetuning,
title={Fine-tuning Transformer-based Encoder for Turkish Language Understanding Tasks},
author={Savas Yildirim},
year={2024},
eprint={2401.17396},
archivePrefix={arXiv},
primaryClass={cs.CL}
}
@book{yildirim2021mastering,
title={Mastering Transformers: Build state-of-the-art models from scratch with advanced natural language processing techniques},
author={Yildirim, Savas and Asgari-Chenaghlu, Meysam},
year={2021},
publisher={Packt Publishing Ltd}
}
その他の詳細
@stefan-itに感謝します。トレーニングには以下の手順を適用しました。
データセットのダウンロード
cd tr-data
for file in train.txt dev.txt test.txt labels.txt
do
wget https://schweter.eu/storage/turkish-bert-wikiann/$file
done
cd ..
これにより、トレーニング、開発、テストの分割が行われた前処理済みのデータセットがダウンロードされ、tr-data
フォルダに保存されます。
事前学習の実行
データセットをダウンロードした後、事前学習を開始することができます。以下の環境変数を設定します。
export MAX_LENGTH=128
export BERT_MODEL=dbmdz/bert-base-turkish-cased
export OUTPUT_DIR=tr-new-model
export BATCH_SIZE=32
export NUM_EPOCHS=3
export SAVE_STEPS=625
export SEED=1
次に、事前学習を実行します。
python3 run_ner_old.py --data_dir ./tr-data3 \
--model_type bert \
--labels ./tr-data/labels.txt \
--model_name_or_path $BERT_MODEL \
--output_dir $OUTPUT_DIR-$SEED \
--max_seq_length $MAX_LENGTH \
--num_train_epochs $NUM_EPOCHS \
--per_gpu_train_batch_size $BATCH_SIZE \
--save_steps $SAVE_STEPS \
--seed $SEED \
--do_train \
--do_eval \
--do_predict \
--fp16
いくつかの結果
データ1
上記のデータに対する評価結果は以下の通りです。
-
評価結果
- 精度 (precision) = 0.916400580551524
- 再現率 (recall) = 0.9342309684101502
- F1スコア (f1) = 0.9252298787412536
- 損失 (loss) = 0.11335893666411284
-
テスト結果
- 精度 (precision) = 0.9192058759362955
- 再現率 (recall) = 0.9303010230367262
- F1スコア (f1) = 0.9247201697271198
- 損失 (loss) = 0.11182546521618497
データ2
@kemalarazによって提供されたデータに対する性能は以下の通りです。
savas@savas-lenova:~/Desktop/trans/tr-new-model-1$ cat eval_results.txt
* precision = 0.9461980692049029
* recall = 0.959309358847465
* f1 = 0.9527086063783312
* loss = 0.037054269206847804
savas@savas-lenova:~/Desktop/trans/tr-new-model-1$ cat test_results.txt
* precision = 0.9458370635631155
* recall = 0.9588201928530913
* f1 = 0.952284378344882
* loss = 0.035431676572445225