はじめに
Cohere社の大規模言語モデル Cohere Command R が Oracle Cloud Infrastructure(OCI)の Generative(生成)AI サービスでも利用可能になったので、トークナイザの日本語効率について調べてみました。OCI Generative AI のオンデマンドの場合は、課金単位がキャラクタ数なのでトークン効率のような裏で起きていることは利用料金には直接関係ありません(なんだかよくわからないトークンで課金されるよりも目に見える文字数での課金の方がわかりやすい気がしますね~)。直接お財布に影響がなくても、効率が良ければ日本語文字列の出力速度の面で有利なのは確かなのでちょっと気になっていました。さらに、OCIには専用AIクラスタという他のテナント(アカウント)と共有されない環境を利用することもできます。その場合は効率が良い程、つまり、計算資源への負荷が少ない程、より多くのリクエストをさばけると期待できそうですよね。
ちょっとした文字列であれば Hugging Face の The Tokenizer Playground で簡単に確かめてみることができるのですが、「吾輩は猫である、名前はまだない」にだけスペシャルチューニングされていたりするといけないので、ある程度まとまったテキストで確かめたいと思って Cohere の API を使って検証してみました。
検証方法
検証には、以下のPythonスクリプトCohere_Token_Count_by_API.py
を使用しました。
このプログラムを実行するためには、Cohere APIのキーが必要です。キーは、Cohereのダッシュボードで取得できます(Sing Upが必要ですが、トライアルキーでも大丈夫です)。
このプログラムと同じディレクトリに、.env
というファイルを作成して、API キーを記述してください。また、ライブラリとして、pdfminer.six と dotenv そして、cohere を使いますのでこれらも pip でインストールしておいてください。
pip install pdfminer.six
pip install python-dotenv
pip install cohere
COHERE_API_KEY=your_api_key
import cohere
from pdfminer.high_level import extract_text
import os
import sys
from dotenv import load_dotenv, find_dotenv
MODEL = "command-r"
def main(pdf_path):
text = extract_text(pdf_path)
_ = load_dotenv(find_dotenv())
co = cohere.Client(api_key=os.getenv("COHERE_API_KEY"))
response = co.tokenize(text=text, model=MODEL)
print(f"Characters: {len(text)}")
print(f"Words: {len(text.split())}")
print(f"Tokens: {len(response.tokens)}")
if __name__ == "__main__":
if len(sys.argv) != 2:
print("Usage: python Cohere_Token_Count_by_API.py <pdf_path>")
else:
main(sys.argv[1])
このスクリプトは、指定されたPDFファイルからテキストを抽出し、Cohere社の tokenize API endpoint を使用してトークン化を行います。そして、文字数、単語数、トークン数を出力します。 Cohere の Token と Tokenize の API の詳細については、Cohere のドキュメントに詳しく記載されています。
検証データ
英文の検証データとして、arxive.orgからダウンロードしたみんな大好き "Attention Is All You Need" のPDFファイルを使用しました。日本語の検証データには、”冴えない彼女の育て方”全巻とか日本文化を色濃く反映して語彙も豊富で文化的意義も大きなデータを使いたかったのですが、テキストデータを入手できそうもないので、無難なところで日本オラクルの有価証券報告書(第38期)を使用しました。
検証結果
英文データ(Attention Is All You Need)
Characters: 39675
Words: 5868
Tokens: 10974
日本語データ(日本オラクルの有価証券報告書(第38期))
Characters: 112176
Words: 8572
Tokens: 76248
えっと、あとがきです
英文データでは、39675文字、5868単語が10974トークンに変換されました。一方、日本語データでは、112176文字が76248トークンに変換されました。
これまで、商用の LLM のトークナイザは日本語1文字を1トークン程度に変換するものが多いのですが、 Cohere Command R は、日本語1文字を 0.68 トークン程度に変換することができていますので、Cohere 社の多言語を重視する姿勢の成果が出ているようですね。ちなみに、Command R+ についても検証してみましたが全く同じ結果となりました。この 0.68 トークン/文字は逆数を取ると 1.47 文字/トークンですので Command R+ の最大入力プロンプトサイズの 128k は、1 文字/トークンのモデルの 128k x 1.47 = 188k トークンに相当しますので、日本語を使用する上では、コンテキストサイズが 200k のモデルと遜色ないと言えるかもしれませんね。
今回は、Command R/R+ のトークナイザの日本語効率を確かめてみました。OCI Generative AI サービスの Cohere Command R/R+ Chat API のお試し記事 OCI Generative AI で Cohere Command R/R+ の Chat API を試してみるも書いていますのでよかったら読んでみてください。では!
終わりだよ~(o・∇・o)
おまけ
他にもいろいろ記事を書いていますので良かったらお立ち寄りください。