2024年12月18日水曜日

transformers の BertJapaneseTokenizer を使って日本語をトークナイズする基本

transformers の BertJapaneseTokenizer を使って日本語をトークナイズする基本

概要

過去に transfomers の pipeline を使ってみました
今回はシンプルに日本語をトークナイズ(数値化)する機能を使ってみます
この仕組みは LLM におけるツールやユースケースなどどのケースでも使われる基本的な使い方になります

環境

  • macOS 15.2
  • Python 3.11.10
    • transformers 4.47.0

準備

  • pipenv install transformers torch torchvision fugashi unidic-lite "numpy<2"

transformers 4.47.0 が numpy 2.0 以上に対応していないので注意です

サンプルコード

import torch
from transformers import AutoModel, AutoTokenizer

# Bert用の日本語モデルをダウンロード
bertjapanese = AutoModel.from_pretrained("cl-tohoku/bert-base-japanese")
tokenizer = AutoTokenizer.from_pretrained("cl-tohoku/bert-base-japanese")

# 解析する文章の設定
line = "吾輩は猫である。"

# トークナイズ(数値化)する、テンソル
inputs = tokenizer(line, return_tensors="pt")

# トークナイズされた情報を確認する
print(tokenizer.decode(inputs["input_ids"][0]))

# おまけ: 特徴量の抽出(last_hidden_stateとpooler_outputの取得)
# これらは更に与えた文章の類似度検索や分類に使える
outputs = bertjapanese(**inputs)

複数の文章を与える

import torch
from transformers import AutoModel, AutoTokenizer

# Bert用の日本語モデルをダウンロード
bertjapanese = AutoModel.from_pretrained("cl-tohoku/bert-base-japanese")
tokenizer = AutoTokenizer.from_pretrained("cl-tohoku/bert-base-japanese")

# 解析する文章の設定
lines = [
    "吾輩は猫である。",
    "名前はまだない",
]

# トークナイズ(数値化)する、テンソル
inputs = tokenizer(lines, padding=True, truncation=True, return_tensors="pt")

# トークナイズされた情報を確認する
print(tokenizer.decode(inputs["input_ids"][0]))
print(tokenizer.decode(inputs["input_ids"][1]))

# おまけ: 特徴量の抽出(last_hidden_stateとpooler_outputの取得)
# これらは更に与えた文章の類似度検索や分類に使える
outputs = bertjapanese(**inputs)

最後に

ここで数値化した情報やベクトル情報は更に類似度検索や分類器に与えられて次の処理に利用されます

次回はこれらのデータを使って分類器を実行する方法を紹介します

参考サイト

0 件のコメント:

コメントを投稿