Hugging FaceのTransformersを使いこなす【日本語NLPの実装ガイド】

Hugging FaceのTransformersを使いこなす【日本語NLPの実装ガイド】 AIツール・レビュー

はじめに

Hugging FaceはAIモデルのハブとして世界最大のプラットフォームです。BERTやGPT等の事前学習済みモデルが数十万件公開されており、数行のコードで最先端のNLPが使えます。日本語NLPに特化した実装方法を解説します。

インストール

pip install transformers torch sentencepiece fugashi ipadic

日本語テキスト分類(感情分析)

from transformers import pipeline

# 日本語感情分析パイプライン
classifier = pipeline(
    'text-classification',
    model='koheiduck/bert-japanese-finetuned-sentiment'
)

texts = [
    'この製品は素晴らしいです!また買います。',
    '品質が悪くて最悪でした。二度と買いません。',
    '普通でした。特に印象はありません。'
]

for text in texts:
    result = classifier(text)[0]
    print(f'{result["label"]:10s} ({result["score"]:.3f}): {text}')

日本語BERTで文書の埋め込みベクトルを取得

from transformers import AutoTokenizer, AutoModel
import torch
import numpy as np

model_name = 'cl-tohoku/bert-base-japanese-whole-word-masking'
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModel.from_pretrained(model_name)

def get_embedding(text: str) -> np.ndarray:
    inputs = tokenizer(text, return_tensors='pt', truncation=True,
                       max_length=128, padding=True)
    with torch.no_grad():
        outputs = model(**inputs)
    # [CLS]トークンの出力を文書ベクトルとして使用
    embedding = outputs.last_hidden_state[:, 0, :].numpy()
    return embedding.squeeze()

# テキストのベクトル化
texts = ['機械学習の転職', 'AIエンジニアになりたい', '今日の天気は晴れ']
embeddings = [get_embedding(t) for t in texts]

# コサイン類似度で意味の近さを確認
from sklearn.metrics.pairwise import cosine_similarity
sim_matrix = cosine_similarity(embeddings)
print('類似度マトリックス:')
for i, t1 in enumerate(texts):
    for j, t2 in enumerate(texts):
        print(f'  {t1[:10]} vs {t2[:10]}: {sim_matrix[i,j]:.3f}')

ファインチューニング(テキスト分類)

from transformers import (
    AutoTokenizer, AutoModelForSequenceClassification,
    TrainingArguments, Trainer
)
from datasets import Dataset
import numpy as np

model_name = 'cl-tohoku/bert-base-japanese'
tokenizer = AutoTokenizer.from_pretrained(model_name)

# データの準備
train_data = {
    'text': ['良い商品です', '悪い商品です', '普通でした'],
    'label': [1, 0, 1]  # 1:ポジ, 0:ネガ
}
train_dataset = Dataset.from_dict(train_data)

# トークナイズ
def tokenize(examples):
    return tokenizer(examples['text'], truncation=True, max_length=64, padding='max_length')

train_dataset = train_dataset.map(tokenize)

# モデルのロード
model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=2)

# 学習設定
training_args = TrainingArguments(
    output_dir='./results',
    num_train_epochs=3,
    per_device_train_batch_size=8,
    save_strategy='no',
    report_to='none'
)

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=train_dataset
)
trainer.train()

まとめ

Hugging FaceのTransformersを使えば、BERTによる日本語テキスト分類・埋め込みベクトル生成・ファインチューニングが数十行で実装できます。日本語NLPには東北大学BERTが最もよく使われています。RAGの埋め込みモデルとしてもTransformersは活用されており、LLM活用エンジニアとして必須のライブラリです。

💼 ITエンジニア転職特化

自分らしく働けるエンジニア転職を目指すなら【strategy career】

年収1000万・残業月30時間以下・リモート可の求人多数

💼 無料で転職相談する →

※アフィリエイト広告を含みます

※本記事にはアフィリエイトリンクが含まれます。

コメント

タイトルとURLをコピーしました