本記事はデータセットの可視化について、ナレッジを残そうと思い書きました。

(今回は特にコンペ用にelyza/ELYZA-tasks-100を使ってます)

データセットを可視化する理由

データの全体像を把握するため:

データセットを可視化することで、データの全体像を把握できます。テキストの長さや単語の出現頻度を視覚化することで、どのような特徴を持っているかを直感的に理解できます。

特徴と傾向の発見:

データセットに存在する特徴や傾向を見つけるためには、可視化をするとみえてくることもあります。例えば、ある特徴量が特定のラベルに関連している場合、その関連性を発見する手助けとなります。

データのクリーニングの指針として:

データセットを可視化することで、外れ値や欠損値の存在を簡単に確認できます。これは、データクリーニングの指針となり、データの質を向上させる助けとなります。

データセット作成時の参考にするため:

自作のデータセットを作成する際に、既存のデータセットの可視化結果を参考にすることで、必要な特徴やデータのバランスを考慮した設計が可能になります。

こんな感じの可視化ができるようになります。

スクリーンショット 2024-11-20 21.05.09.png

スクリーンショット 2024-11-20 21.05.30.png

# ライブラリの準備
!pip install datasets
!pip install transformers[ja,torch] datasets matplotlib
!pip install japanize_matplotlib

# 乱数を固定して実験結果が固定化されるようにしておく
from transformers.trainer_utils import set_seed
set_seed(42)

# datasetにelyza/ELYZA-tasks-100を指定する
from pprint import pprint
from datasets import load_dataset
dataset = load_dataset("elyza/ELYZA-tasks-100")
train_dataset = dataset['test']
pprint(train_dataset[0])

# 下記のように出力されます

"""
{'eval_aspect': '- 熱意を取り戻すのではなく、仕事の効率化・スキルアップのような文脈になっていたら1点減点\\n'
                '- 出したアイデアが5つより多い、少ない場合は1点減点\\n'
                '- 5つのアイデアのうち、内容が重複しているものがあれば1点減点\\n'
                '\\n',
 'input': '仕事の熱意を取り戻すためのアイデアを5つ挙げてください。',
 'output': '1. 自分の仕事に対する興味を再発見するために、新しい技能や知識を学ぶこと。\\n'
           '2. カレッジやセミナーなどで講演を聴くことで、仕事に対する新しいアイデアや視点を得ること。\\n'
           '3. 仕事に対してストレスを感じている場合は、ストレスマネジメントのテクニックを学ぶこと。\\n'
           '4. 仕事以外の楽しいことをすることで、ストレスを発散すること。\\n'
           '5. 仕事に対して自己評価をすることで、自分がどのように進化しているのかを知ること。'}
"""
# 私はドライブの中にgoogle--gemma-2-2b-jpn-itを保存しているので、それを呼び出す目的でドライブをマウントします
from google.colab import drive
drive.mount('/content/drive')

# pathの部分は、自分のモデルのパスに書き換えてください
from transformers import AutoTokenizer, AutoModel
model_dir = '/content/drive/MyDrive/huggingface/hub/your_model_path'
model_name = AutoModel.from_pretrained(model_dir)
tokenizer = AutoTokenizer.from_pretrained(model_dir)
print(type(tokenizer).__name__)

# こんな感じででると思います
# Tokenizerとしてこれが使われているということです
"""
GemmaTokenizerFast
"""
# 試しにtokenizeしてみます
tokenizer.tokenize("これはテストです。")

# こんな感じででます。トークナイズできてますね
"""
['これは', 'テスト', 'です', '。']
"""

from collections import Counter
import japanize_matplotlib
import matplotlib.pyplot as plt
from datasets import Dataset
from tqdm import tqdm

plt.rcParams['font.size'] = 20