🤗

日本語 NLP リポジトリ分類データセットを公開しました!

2023/09/11に公開

Huggingface Datasets で利用可能なテキスト分類用データセットを公開しました🤗

このデータセットは、GitHub リポジトリに対して日本語の自然言語処理(NLP)に関連するか否かのラベルが付与されています。

さらにベースライン用のモデルも公開しましたので、大規模言語モデルの性能評価の比較に活用いただければと考えています。

この記事では、データセットの詳細、利用方法やベースラインモデルのエラー分析の結果を紹介します。

https://huggingface.co/datasets/taishi-i/awesome-japanese-nlp-classification-dataset

背景

この1年半、awesome-japanese-nlp-resources のページで、日本語 NLP に関連するリポジトリの情報を掲載してきました。

https://github.com/taishi-i/awesome-japanese-nlp-resources

現在(2023年9月10日時点)、503件のリポジトリがリスト化されており、Python ライブラリ、事前学習済みモデルやコーパスなどの情報が掲載されています。

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
    })
})

ベースラインモデルの使い方

https://huggingface.co/taishi-i/awesome-japanese-nlp-classification-model

まずは 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