日本語 NLP リポジトリ分類データセットを公開しました!
Huggingface Datasets で利用可能なテキスト分類用データセットを公開しました🤗
このデータセットは、GitHub リポジトリに対して日本語の自然言語処理(NLP)に関連するか否かのラベルが付与されています。
さらにベースライン用のモデルも公開しましたので、大規模言語モデルの性能評価の比較に活用いただければと考えています。
この記事では、データセットの詳細、利用方法やベースラインモデルのエラー分析の結果を紹介します。
背景
この1年半、awesome-japanese-nlp-resources のページで、日本語 NLP に関連するリポジトリの情報を掲載してきました。
現在(2023年9月10日時点)、503件のリポジトリがリスト化されており、Python ライブラリ、事前学習済みモデルやコーパスなどの情報が掲載されています。
これらの情報は、旧 Twitter API や GitHub API からデータを収集し、分類モデルを用いて日本語 NLP に関連するリポジトリを自動検出することで、継続的な掲載を行うことができました。
そこで、これまでの収集情報をもとにデータセットを作成することで、NLPの情報収集やLLMのベンチマーク用途に活用できるのではないかと考え、本データセットを公開しました。
データセットの概要
このデータセットは、GitHub リポジトリの概要(入力テキスト)が日本語の自然言語処理(NLP)に関連しているかどうかの情報として 「関連あり(1)」と「関連なし(0)」 のラベルが付与されています。
2022年以前にリリースされたリポジトリ情報を学習データとし、2023年にリリースされたリポジトリの情報を評価データとすることで、日本語 NLP に関連するリポジトリを検出可能か否かを問題設定としています。
データの収集方法としては、2023年9月9日時点で awesome-japanese-nlp-resources にリストされているリポジトリを正例とし、負例はGitHub APIから収集し、目視で確認を行い日本語 NLP に関連しないリポジトリを選択しました。
データセットの特徴としては、
- 主観的な判断でアノテーションされている。
- 入力テキストは英語と日本語が混在している。
- 不均衡なラベル分布である。
これらのデータセットの特徴は、実世界でのテキスト分類タスクによくある課題であり、現実的なモデル性能を評価することに活用できるのではないかと考えます。
※ GitHub の利用規約に基づき、このデータセットは研究目的(精度検証や情報収集など)のみに利用してください。
データセットの詳細
ここでは、データセットの統計情報を説明します。
ラベル分布:
Dataset | Label 0 (%) | Label 1 (%) |
---|---|---|
Train | 92.59 | 7.41 |
Validation | 95.75 | 4.25 |
Test | 92.99 | 7.01 |
正例のサンプル:
{
"label": 1,
"text": "JGLUE: Japanese General Language Understanding Evaluation for huggingface datasets",
"url": "https://github.com/shunk031/huggingface-datasets_JGLUE",
"created_at": "2023-02-25T04:33:03Z"
}
負例のサンプル:
{
"label": 0,
"text": "Official repository of FaceLit: Neural 3D Relightable Faces (CVPR 2023)",
"url": "https://github.com/apple/ml-facelit",
"created_at": "2023-04-03T22:47:29Z"
}
テキスト数、平均文字数、最小文字数、最大文字数:
Dataset | Text Count | Average Length | Min Length | Max Length |
---|---|---|---|---|
Train | 5496 | 58.05 | 2.0 | 609.0 |
Validation | 400 | 54.33 | 8.0 | 226.0 |
Test | 856 | 58.85 | 3.0 | 341.0 |
言語の割合:
Dataset | English (%) | Japanese (%) |
---|---|---|
Train | 89.34 | 10.66 |
Validation | 82.00 | 18.00 |
Test | 83.18 | 16.82 |
時間範囲:
Dataset | Start Date | End Date |
---|---|---|
Train | 2008-02-11 22:55:26+00:00 | 2022-09-30 19:45:09+00:00 |
Validation | 2022-10-01 06:02:56+00:00 | 2022-12-31 12:12:41+00:00 |
Test | 2023-01-01 06:15:03+00:00 | 2023-08-21 15:30:53+00:00 |
データセットの使い方
まずは datasets
ライブラリをインストールしてください。
pip install datasets
次のコードで、本データセットを利用することができます。
from datasets import load_dataset
dataset = load_dataset("taishi-i/awesome-japanese-nlp-classification-dataset")
ラベル、入力テキスト、リポジトリのURL、リリース日程から構成されるデータセットです。
DatasetDict({
train: Dataset({
features: ['label', 'text', 'url', 'created_at'],
num_rows: 5496
})
validation: Dataset({
features: ['label', 'text', 'url', 'created_at'],
num_rows: 400
})
test: Dataset({
features: ['label', 'text', 'url', 'created_at'],
num_rows: 856
})
})
ベースラインモデルの使い方
まずは transformers
ライブラリをインストールしてください。
pip install transformers torch
次のコードで、テキスト分類モデルを使うことができます。
from transformers import pipeline
# テキスト分類モデルの読み込み
pipe = pipeline(
"text-classification",
model="taishi-i/awesome-japanese-nlp-classification-model",
)
# 正例の予測
text = "ディープラーニングによる自然言語処理(共立出版)のサポートページです"
label = pipe(text)
print(label) # [{'label': '1', 'score': 0.9910495281219482}]
# 負例の予測
text = "AIイラストを管理するデスクトップアプリ"
label = pipe(text)
print(label) # [{'label': '0', 'score': 0.9986791014671326}]
評価
次のライブラリをインストールしてください。
pip install evaluate scikit-learn datasets transformers torch
次のコードで、本データセットの評価を実行することができます。
import evaluate
from datasets import load_dataset
from sklearn.metrics import classification_report
from transformers import pipeline
# データセットの読み込み
dataset = load_dataset("taishi-i/awesome-japanese-nlp-classification-dataset")
# テキスト分類モデルの読み込み
pipe = pipeline(
"text-classification",
model="taishi-i/awesome-japanese-nlp-classification-model",
)
# 評価指標の設定
f1 = evaluate.load("f1")
# 評価の実行
predicted_labels = []
for text in dataset["test"]["text"]:
prediction = pipe(text)
predicted_label = prediction[0]["label"]
predicted_labels.append(int(predicted_label))
score = f1.compute(
predictions=predicted_labels, references=dataset["test"]["label"]
)
print(score)
report = classification_report(
y_true=dataset["test"]["label"], y_pred=predicted_labels
)
print(report)
評価の結果
上記のコードの classification_report
の結果です。
このタスクでは、ラベル 1 のF1-Score(0.74) が重要な評価基準となります。
Label | Precision | Recall | F1-Score | Support |
---|---|---|---|---|
0 | 0.98 | 0.99 | 0.98 | 796 |
1 | 0.79 | 0.70 | 0.74 | 60 |
Accuracy | 0.97 | 856 | ||
Macro Avg | 0.89 | 0.84 | 0.86 | 856 |
Weighted Avg | 0.96 | 0.97 | 0.97 | 856 |
ベースラインモデルのエラー分析
ここでは、ベースラインモデルで予測に失敗した事例を紹介します。
日本語 NLP リポジトリを検出できなかった事例
最初は、モデルが WRIME
というデータセットの知識がなく、リポジトリの概要だけでは、判断出来なかった事例です。この問題を解決するためには、リポジトリの README.ME の情報を活用するか、 WRIME
の情報をモデルに覚えさせる必要がありそうです。
WRIME for huggingface datasets
https://github.com/shunk031/huggingface-datasets_wrime
次の事例も、上記の事例と同様にデータセットの知識がなく、リポジトリの概要だけでは、判断出来なかった事例です。
CAMERA (CyberAgent Multimodal Evaluation for Ad Text GeneRAtion) for huggingface datasets
https://github.com/shunk031/huggingface-datasets_CAMERA
最後の事例は、モデルが ChatGPT に関する知識を保持しておらず(学習データが 2022-09-30 までの情報であるため)、適切に判断出来なかった事例です。この問題を解決するためには、リポジトリの README.ME の情報を活用するか、最新の情報をモデルに覚えさせる必要がありそうです。
このリポジトリは、神戸市役所でのChatGPTの試行利用に向けて作成したフロー等をソリューション化し公開するものです。
https://github.com/City-of-Kobe/pva-aoai-integration-solution
日本語 NLP リポジトリとして誤検出した事例
最初は、Japanese のトークンに過剰に反応し、誤検出した事例です。
これは大学の幾何学の授業のリポジトリであり、できれば ラベル 0
として出力できれば適切な予測だったと考えられます。
Exercises on Riemannian geometry (in Japanese)
https://github.com/ymatz/riemannian-geometry
次は、ライブラリドキュメントの日本語訳リポジトリを誤検出した事例です。 awesome-japanese-nlp-resources では、(対訳コーパスを除き)ドキュメントの日本語訳を掲載していないため、こちらもできれば ラベル 0
として出力できれば適切な予測だったと考えられます。
Laravel10.xドキュメントの日本語翻訳リポジトリ。公式ドキュメントは英語だけのため、この翻訳を公式と呼ばないでください。
https://github.com/laravel-ja/ja-docs-10.x
最後の事例は、日本語のリポジトリ概要の場合、または データ
のトークンに過剰に反応し、誤検出した事例です。人間がこのリポジトリ概要を読むと、日本語 NLP のリポジトリではないと判断できそうですが、今回のベースラインモデルでは誤った予測をしてしまったようです。
第13回大都市交通センサス 3次ODデータ 発生集中量マップ on MapLibre GL JS
https://github.com/shi-works/transportation-census-3jiod-tripend-map
まとめ
本記事では、日本語 NLP に関連するテキスト分類データセットの紹介と、そのベースラインモデルの使い方やエラー分析の結果を紹介しました。
awesome-japanese-nlp-resources では、さらに網羅的な日本語 NLP リポジトリ情報の掲載を考えているため、ベースラインモデルで ラベル 1
となるリポジトリがリポジトリがあれば、ぜひプルリクかイシューで共有していただけると助かります😆
それでは、最後までお読みいただきありがとうございました!
Discussion