見出し画像

LLMと算術計算

サイバーエージェントの最新LLMをGoogle Colaboで実行してみる

import transformers
from transformers import AutoModelForCausalLM, AutoTokenizer, TextStreamer
assert transformers.version >= "4.34.1"
model = AutoModelForCausalLM.from_pretrained("cyberagent/calm2-7b-chat", device_map="auto", torch_dtype="auto")
tokenizer = AutoTokenizer.from_pretrained("cyberagent/calm2-7b-chat")
streamer = TextStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)
prompt = """USER: 「123409821734059865463049827354 + 2369837464506984745093484590」の答えはなんですか
ASSISTANT: """
token_ids = tokenizer.encode(prompt, return_tensors="pt")
output_ids = model.generate(
input_ids=token_ids.to(model.device),
max_new_tokens=300,
do_sample=True,
temperature=0.8,
streamer=streamer,
)

回答:
あなたの答えは「25738019751499726022865972716」です。

….間違い。

高性能と話題のKARAKURI LMのチャットボットで足し算を聞いてみた

2345923487324509283752345 + 23406923452354823045829345 の答えをください
2345923487324509283752345 + 23406923452354823045829345
= 2.3459234873245092e+19 + 2.3406923452354823e+19
= 4.6866163325599572e+19
= 46866163325599572000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

34534563456足す2340982742344532の答えは?
34534563456 + 2340982742344532 = 2693833082344532

絶望的。

ChatGPT4に聞くと

123409821734059865463049827354 + 2369837464506984745093484590?

The sum of 123,409,821,734,059,865,463,049,827,354123,409,821,734,059,865,463,049,827,354 and 2,369,837,464,506,984,745,093,484,5902,369,837,464,506,984,745,093,484,590 is
125,779,659,198,566,850,208,143,311,944125,779,659,198,566,850,208,143,311,944.

正解。

ChatGPT4の応答をよく観察してみると、上の質問に対して「Analyzing…」という処理が走り、その後、答えがでてくる。

つまり、入力文が数式っぽいと判断したら、算術計算専用のタスクを起動して演算させてるように見える。質問文からプログラムを生成してその場で実行してるのかな。

いずれにせよ単純な足し算にも専用の「計算タスク」が必要で、大量の文書データセットの学習だけでは、算数能力は決して自然発生しないように見える。

算術対策をしていない言語モデルの解答は、学習データの中に類似の数学問題が含まれていて(例えばQ&Aサイトの質問とか参考書・問題集サイトの大量の設問・解答とか)、偶然、正答しているだけかもしれない。

巨大な桁の足し算という、決して学習データには現れてないだろう問題が、壊滅的に解けてない。設問自体に解釈の余地がないにもかかわらず。

そこでこう問いたい:
1)このように大きな桁の足し算をLLMが間違う「理由」は何だろうか
2)大きな足し算に正答するLLMと誤答するLLMがあるとするなら、その違いはどこから来るのだろうか(学習データセット、パラメータ規模、アーキテクチャ どれが一番作用しているか) 明確な境界線がどこかにあるだろうか。
学習データセットを除々に減らしていくと、どこか時点で非連続的に算術能力が失われる点が存在するだろうか。
3)そもそも人はどのようにして、基本的な算術から大きな桁の加算をマスタするのだろうか
4)一部の人はどのようにして、大きな桁の計算を、一瞬で解くのだろうか(そろばんの暗算高段者の人みたいに)

この記事が気に入ったらサポートをしてみませんか?