ChatGPTが盛り上がる中、オープンライセンスなLLM(大規模言語モデル)開発も行われている。その中でCerebras-GPT(Cerebras Systems Releases Seven New GPT Models Trained on CS-2 Wafer-Scale Systems – Cerebras )が日本語を使えると聞いて試してみた。
Colab Pro +でA100 GPUを使うと、cerebras/Cerebras-GPT-6.7B · Hugging Face にそって6.7Bのモデルを動作させることができる[1]。
import torch
device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
from transformers import AutoTokenizer, AutoModelForCausalLM
from transformers import pipeline
tokenizer = AutoTokenizer.from_pretrained("cerebras/Cerebras-GPT-6.7B")
model = AutoModelForCausalLM.from_pretrained("cerebras/Cerebras-GPT-6.7B")
pipe = pipeline("text-generation", model=model, tokenizer=tokenizer, device=device)
text = "猫と暮らして10年になる人に聞いた、猫と一緒に暮らすときに必要なもの第1位は"
generated_text = pipe(text, max_length=500, do_sample=False, no_repeat_ngram_size=2)[0]
print(generated_text['generated_text'])
上記の出力は「猫と暮らして10年になる人に聞いた、猫と一緒に暮らすときに必要なもの第1位は「笑顔」。続いて「恋愛」、「自分のことを知っている」という結果に。
」[2]、なお、2.7Bパラメータの場合は「猫と暮らして10年になる人に聞いた、猫と一緒に暮らすときに必要なもの第1位は、それぞれの人間が笑っているということです。
」[2]だった。
model = AutoModelForCausalLM.from_pretrained("cerebras/Cerebras-GPT-13B", torch_dtype=torch.float16)
としてCerebras-GPT-13Bを使った時の結果は「猫と暮らして10年になる人に聞いた、猫と一緒に暮らすときに必要なもの第1位は、「笑顔」。結果、それは私の言葉ではなく、自分のものである。
」[2]だった。
日本語を使えると言っても性能はかなり微妙な感じ。 ※以降、理由を探っていくが本来使えないはずの日本語っぽい文字列が表示されるのは結構すごいというのが全体的な感想。
The Pile
Cerebras-GPTシリーズはデータセットとしてThe Pile [3]を用いている。論文に書かれている通りThe Pileは英語のデータセットである。そのため基本的には日本語を使えないはずなのだが、The Pileを用いて学習されたLLMは日本語をある程度解釈しているのでは?と思う動作をする。これはThe Pile構築で使われたデータセットに意図せず日本語が含まれているためと言われている。前置きが長くなったが、本記事ではこれが本当なのか検証する。
検証方法
The Pileをダウンロードし含まれる文字を文字別にカウントし、下記条件の文字を日本語と考えて日本語の構成比率を算出した。CJKの名の通り日本語ではない用例の漢字を含めて数えており明らかに日本語分を多くカウントしている という問題があるのだが、ここではいったん無視することにする[4]。
UnicodeのBlock=Hiragana
UnicodeのBlock=Katakana
UnicodeのBlock=CJK Unified Ideographs
The Pileのデータを展開しながら文字別カウントし、その後、上記条件をregexでチェックし日本語と全体の文字数を集計した。Pythonで適当に書いた感じc6a.xlargeで1プロセス辺り9Mバイト/秒程度の速度で処理ができた。2プロセス並列させると1日以内に処理が終わるイメージである。
検証結果
検証結果は次表の通り。The Pileにおける日本語の構成比率はわずか0.07%(約900 M文字)だった。日本語に貢献しているデータセットは「OpenWebText2」「Github」が大きく、続いて「YoutubeSubtitles」だった。
データ名 全体の文字数 うち日本語 日本語構成比率 ■全体 1,297,182,716,948 889,523,734 0.07% Pile-CC 230,770,471,687 14,799,633 0.01% PubMed Central 181,751,973,640 18,441,201 0.01% Books3 153,023,754,599 30,846,052 0.02% OpenWebText2 124,271,071,981 390,955,625 0.31% ArXiv 113,558,856,961 307,774 0.00% Github 96,487,741,975 314,200,423 0.33% FreeLaw 79,956,003,366 2,832 0.00% StackExchange 64,805,917,113 19,770,098 0.03% Wikipedia (en) 50,611,222,086 5,979,976 0.01% USPTO Backgrounds 47,025,652,534 0 0.00% PubMed Abstracts 39,086,727,467 730 0.00% Gutenberg (PG-19) 26,723,093,699 17,845 0.00% OpenSubtitles 19,750,201,478 35,070 0.00% DM Mathematics 15,719,095,096 0 0.00% Ubuntu IRC 11,184,940,471 0 0.00% BookCorpus2 9,378,252,620 833,334 0.01% EuroParl 8,516,900,087 20 0.00% HackerNews 7,872,312,505 77,793 0.00% YoutubeSubtitles 6,431,579,291 93,060,437 1.45% PhilPapers 4,745,004,923 194,891 0.00% NIH ExPorter 3,814,590,930 0 0.00% Enron Emails 1,697,352,439 0 0.00%
The Pileの日本語構成比率
なお、日本語として含まれる文字のトップ5は次の通りだった[5]。ひらがなの出現頻度が通常と同じなのかは疑問ではある。
「の」約20M文字
「い」約14M文字
「的」約13M文字
「に」約13M文字
「る」約12M文字
結果とまとめ
オープンなLLM開発でよく使われるデータセット、The Pileの構成文字から日本語の比率を考えてみた。結果、多めに見積もって900M文字、構成比率0.07%と非常に少ない。この程度しか入っていないにもかかわらず日本語文として一定程度成立した文が返ってくるCerebras-GPT-6.7Bは凄い。
脚注
[1] GPUで動作させる部分だけ若干コードを追加している。cerebras/Cerebras-GPT-13B · Hugging Face は書かれた手順ではメモリ不足になる。float16にすれば動作する。 [2] この後改行して「私は、それぞれの言葉についちゃった。「お父さん、こんなに美しい犬がいますか?」「この人、あなたのほうが素敵ですよ」」・・・と謎の文字列が続く。 [3] Gao, L., Biderman, S., Black, S., Golding, L., Hoppe, T., Foster, C., Phang, J., He, H., Thite, A., Nabeshima, N., Presser, S., and Leahy, C. 2020. The Pile: An 800GB Dataset of Diverse Text for Language Modeling. arXiv preprint arXiv:2101.00027 . [4]とても雑なことは承知しつつ、日本語判定は結構難しく判定に凝ると処理時間の問題が出るため今回はこの条件で検証した。日本語分を多めにカウントしていて出た結果で結論には影響しない。 [5] 「的」が入っているのは中国語も入っているからかな?と思う。
その他
The Pileを使って構築した大規模言語モデルで何故か日本語が使えるのは知られていた。その理由としてGithubデータセットの日本語コメントによるものなどの理由を聞いたこともあったが、本当か確証がなかったので調べてみた。結果当たらずも遠からずという感じだった(構成要素としてはそれなりに多いが半分は超えていない)。
個人的には1G文字いかないレベルのデータで日本語能力を学習していることに驚きだった。疑問に思ったことは調べてみると面白い。The Pileにwikipedia-jaのデータを混ぜるだけでも日本語能力はかなり上がるんじゃないだろうか。BlinkDL/rwkv-4-raven · Hugging Face のように1%程度でも日本語が入っていると結構な効果がありそうに思う。