はじめに
「DeepSeek-R1-Distill-Qwen-14B」の記事はこちら。touch-sp.hatenablog.com
今回はサイバーエージェントが公開してくれた「DeepSeek-R1-Distill-Qwen-14B-Japanese」を使います。
huggingface.co
OllamaモデルではないのでPythonのTransformersライブラリで使用しています。
Pythonスクリプト
TorchAOを使って8bit量子化を行いました。from transformers import AutoModelForCausalLM, AutoTokenizer, TextStreamer, TorchAoConfig import torch model_name = "DeepSeek-R1-Distill-Qwen-14B-Japanese" quantization_config = TorchAoConfig("int8_weight_only", group_size=128) model = AutoModelForCausalLM.from_pretrained( model_name, quantization_config=quantization_config, torch_dtype=torch.bfloat16, device_map="auto" ) tokenizer = AutoTokenizer.from_pretrained(model_name) streamer = TextStreamer( tokenizer, skip_prompt=True, skip_special_tokens=True ) prompt = '''「9 9 9 9」という4桁の数字があります。数字と数字の間に四則演算の記号を追加して計算結果が10になるようにして下さい。 数字と数字の間に少数点を追加することは禁止されています。 隣あう数字をまとめて2桁以上の数字とみなすことは禁止されています。 括弧を使うことは可能です。 以下に例を示します。 ~~~ 「1 2 3 4」なら1+2+3+4が解答の一例です。 「4 5 4 2」なら(4*5)/(4-2)が解答の一例です。 ~~~''' messages = [ {"role": "system", "content": "あなたは誠実で優秀な日本人のアシスタントです。"}, {"role": "user", "content": prompt} ] input_tensors = tokenizer.apply_chat_template( messages, add_generation_prompt=True, return_tensors="pt", return_dict=True ).to(model.device) #input_ids = input_tensors["input_ids"] #attention_mask = input_tensors["attention_mask"] output_ids = model.generate( #inputs=input_ids, #attention_mask=attention_mask, **input_tensors, max_new_tokens=4096, pad_token_id=tokenizer.eos_token_id, streamer=streamer )
結果
途中で5桁に変わってしまいました。なぜかClaude 3.5 Sonnetと同じ間違い方です。<think> </think>
で思考過程を出力してくれます。
その後結論を出力します。
<think> では、問題を解いてみましょう。与えられた数字は「9 9 9 9」で、4桁の数字です。四則演算の記号を数字の間に追加して、結果が10になるようにしなければなりません。ただし、少数点の追加は禁止され、隣接する数字を2桁以上にまとめるのも禁止です。括弧は使 えるようです。 まず、各数字の組み合わせを考える必要があります。各数字は9だけなので、足し算や引き算、掛け算、割り算の組み合わせで10を作 る方法を探します。 例えば、最初の9と次の9を掛け算すると81になります。残りの9と9をどう組み合わせるか。例えば、81から9と9を引くと81 - 9 -9 =63 となり、これでは10になりません。逆に、81を9で割ると9で、9を足すと18。これもダメですね。 次に、9 + 9 +9 +9 =36。これでは10になりません。 9×9=81。残りの9÷9=1。81×1=81。これもダメ。 9×9÷9×9 = 81÷9×9=9×9=81。これもダメ。 別の方法を考える必要があります。例えば、9 + 9 +9 -9 =18。これもダメ。 9×9 ÷ (9+9) のような式を考えると、81 ÷18=4.5。これも10になりません。 括弧をうまく使って、例えば (9 × 9) - (9 × 9) =0。これもダメ。 9× (9 ÷9) ×9 =9×1×9=81。ダメ。 9 + (9 × (9 ÷9)) =9+9=18。ダメ。 別の組み合わせ:9 × (9 - (9 ÷9))。9÷9=1なので、9-1=8。9×8=72。ダメ。 9 ÷ (9 ÷ (9 ÷9)) は、分母が9÷9=1なので、9÷1=9。ダメ。 9 × (9 - 9) ÷9 =0。ダメ。 ここで、別の角度から考える。例えば、9×9=81。残りの9÷9=1。81 ÷1 =81。でも、それだと81になる。でも、どうやって10にするか? もしかしたら、別の演算順序や括弧の使い方があるかもしれません。例えば、9 + 9 + (9 ÷9) =9+9+1=19。ダメ。 9 × (9 - (9 +9)) だと、9-18=-9。9×-9=-81。ダメ。 9 ÷ (9 +9 -9) =9÷9=1。ダメ。 9 × (9 ÷ (9 +9)) =9× (9÷18)=9×0.5=4.5。ダメ。 もしかしたら、括弧を多用して、例えば (9 × 9) ÷ (9 +9) だと、81÷18=4.5。ダメ。 ここで、別の方法。例えば、9 + 9 + 9 - (9 ×9) =27-81=-54。ダメ。 9 ÷ (9 + (9 ÷9)) は、9÷(9+1)=9÷10=0.9。ダメ。 9 × (9 ÷ (9 +9)) ×9 は、9×(9/18)×9=9×0.5×9=40.5。ダメ。 何か見落としがあるか? 例えば、9 ÷ (9 ÷ (9 +9)) は、9÷(9÷18)=9×(18/9)=18。ダメ。 9 × (9 -9) +9 =0+9=9。ダメ。 9 + 9 - (9 ÷9) =18-1=17。ダメ。 9 × (9 ÷ (9 +9)) ×9 =9×0.5×9=40.5。ダメ。 ここで、別のアプローチ。例えば、9 ÷ (9 ÷ (9 +9)) =9÷(9/18)=9×2=18。ダメ。 9 ÷ (9 ÷ (9 -9)) は、分母が0で無効。ダメ。 9 × (9 - (9 +9)) =9×(-9)=-81。ダメ。 9 ÷ (9 ÷ (9 ×9)) =9÷(9/81)=9×9=81。ダメ。 ここで、もしかしたら、別の演算順序や括弧の配置を考える必要があります。例えば、9 × (9 -9) ÷9 +9 =0 +9=9。ダメ。 9 ÷ (9 ÷9) +9 ÷9 =1+1=2。ダメ。 9 ÷ (9 ÷ (9 ×9)) +9 ÷9 =9/(1) +1=9+1=10! お、これだとどう? 具体的には、9 ÷ (9 ÷ (9 ×9)) +9 ÷9 ですが、括弧の位置を確認します。 まず、9 ×9 =81。次に、9 ÷81=1/9。その後、9 ÷ (1/9)=9×9=81。そして、81 + (9÷9)=81+1=82。ダメ。これは違う。 別の式:(9 ÷9) + (9 ÷9) ×9 =1 +9=10。これだとどう? 式を組み立てるなら、9 ÷9 + (9 ÷9) ×9 =1 + (1×9)=10。つまり、9 ÷9 + (9 ÷9) ×9 =10。この式は、数字の間の演算子をどのように配置するかです。 元の数字は9 9 9 9。式を組み立てるとき、各数字の間に演算子を入れる必要があります。例えば、9 ÷9 +9 ÷9 ×9 だと、数字の間に 演算子が入りますが、括弧をどう使うか。 具体的には、9 ÷9 + (9 ÷9) ×9 となるには、数字の間に演算子を入れる方法があります。例えば、9 ÷9 +9 ÷9 ×9 という式では、演 算子の優先順位を考慮すると、9 ÷9 =1、その後、9 ÷9 =1、1×9=9、合計1+9=10。これが成立します。しかし、この式の演算子配置は 、元の数字の間にどのように配置されるか? 元の数字は9 9 9 9。式を構成するには、次のように演算子を入れます: 9 ÷9 +9 ÷9 ×9 → つまり、9 ÷9 は最初の2桁、次に +、次の2桁は9 ÷9 ×9。しかし、隣接する数字を2桁以上にまとめることは禁止さ れています。つまり、9 ÷9 の部分は許可されていますが、次の部分の9 ÷9 ×9 は、3つの数字の間に演算子を入れる必要があります。具体的には: 9 ÷9 +9 ÷9 ×9 → 数字の間には、演算子を次のように配置します: 9 ÷ 9 + 9 ÷ 9 × 9 → つまり、数字の間に「÷」「+」「÷」「×」を入れます。この場合、各演算子は隣接する数字の間に配置され、2 桁以上の数字をまとめていないので問題ありません。したがって、この式は条件を満たします。 しかし、この式を計算すると、9 ÷9 =1、次に +、次に9 ÷9 =1、次に ×9 なので、1 + (1×9)=10。これが正しいです。 したがって、解答の一つは「9 ÷9 +9 ÷9 ×9」です。ただし、この式を数字の間に演算子を配置するときの順番を確認します。元の数 字は9 9 9 9。式の構造は: (9 ÷9) + (9 ÷9 ×9) → つまり、最初の「÷」で9 ÷9、次に「+」、次に「÷」で9 ÷9、そして「×9」。これにより、各演算子は隣接する数字の間に配置され、2桁以上のまとめはしていません。 この場合、式は9 ÷9 +9 ÷9 ×9 となり、計算結果は10になります。したがって、これが正しい解答の一つです。 他にも別の解があるかどうか考える必要があります。例えば、9 × (9 -9) +9 ÷9 =0 +1=1。ダメ。 9 ÷ (9 +9) ×9 +9 ÷9 → 9/(18)×9 +1=0.5×9=4.5+1=5.5。ダメ。 9 +9 +9 -9 ×9 → 27 -81=-54。ダメ。 9 × (9 ÷ (9 +9)) ×9 → 9×(9/18)×9=9×0.5×9=40.5。ダメ。 9 ÷ (9 ÷9) +9 →9/1 +9=18。ダメ。 9 × (9 ÷ (9 ×9)) +9 →9×(1/9)+9=1+9=10。これも成立します。 この式は、9 × (9 ÷ (9 ×9)) +9 となります。計算すると、9×9=81、9÷81=1/9、9×(1/9)=1、1+9=10。ただし、この式を数字の間に演 算子を配置する場合、括弧の位置をどうするか。元の数字は9 9 9 9。式を組み立てるには: 9 × (9 ÷ (9 ×9)) +9 → つまり、9 × (9 ÷ (9 ×9)) +9 という式ですが、括弧の位置によっては、3つ目の9と4つ目の9を掛け算する必要があります。しかし、数字の間に演算子を入れる場合、3つ目と4つ目を掛け算するには「×」を入れる必要がありますが、隣接する 数字の間に演算子を入れるため、式は9 × (9 ÷9 ×9) +9 となります。しかし、これだと括弧の優先順位が変わってしまい、9 ÷9 ×9 は (9 ÷9) ×9 =1×9=9 なので、9 ×9 +9=81+9=90。これではダメです。 つまり、この式を正しく計算するには、括弧を適切に配置する必要がありますが、数字の間に演算子を入れる場合、例えば: 9 × (9 ÷ (9 ×9)) +9 → しかし、数字の間に「×」を入れる場合、3つ目の9と4つ目の9を掛け算するには、その間に「×」を入れる必要があります。つまり、式は9 × (9 ÷ (9 ×9)) +9 → 数字の配置は9 9 9 9 → 9 × (9 ÷ (9 ×9)) +9 とすると、数字の間に「×」「÷」「×」「+」を入れることになりますが、これでは3つ目と4つ目の9を掛け算するために「×」を入れる必要があります。しかし、これだと括弧の内部の9 ×9 は許可されていますが、元の数字の間に演算子を配置する際に、隣接する数字を2桁以上にまとめないようにする必要があります。つまり、9 × (9 ÷ (9 ×9)) +9 という式は、数字の間に「×」「÷」「×」「+」を入れることになり、各演算子は隣接する数字の間に配置されています。しかし、この式を計算すると: 9 × (9 ÷ (9 ×9)) +9 → まず、9 ×9 =81、9 ÷81=1/9、9 ×(1/9)=1、1+9=10。これが成立します。したがって、この式も正しい解答の 一つです。 したがって、2つの解答が考えられます。一つは「9 ÷9 +9 ÷9 ×9」、もう一つは「9 × (9 ÷ (9 ×9)) +9」です。どちらも条件を満た しているか確認します。 「9 ÷9 +9 ÷9 ×9」の場合、各演算子は隣接する数字の間に配置され、2桁以上のまとめはありません。また、括弧を使用していますが、許可されています。計算結果は10です。 「9 × (9 ÷ (9 ×9)) +9」の場合も同様で、各演算子は隣接する数字の間に配置され、2桁以上のまとめはありません。計算結果は10です。 他に解があるかどうかも考えますが、例えば: 9 + (9 × (9 ÷9)) -9 →9 +9 -9=9。ダメ。 9 × (9 ÷9) + (9 ÷9) →9 +1=10。これも可能。 この式は「9 ×9 ÷9 +9 ÷9」となり、計算すると9×9=81、81÷9=9、9+1=10。式を組み立てる場合、数字の間に「×」「÷」「+」「÷」を 入れます。つまり、9 ×9 ÷9 +9 ÷9 → 9×9=81、81÷9=9、9+1=10。これも成立します。したがって、これがもう一つの解答です。 つまり、この問題には複数の解答があるようです。例えば: 1. 9 ÷9 +9 ÷9 ×9 2. 9 × (9 ÷ (9 ×9)) +9 3. 9 ×9 ÷9 +9 ÷9 どれも条件を満たしています。しかし、問題では「解答の一例」を求めているので、一つでも良いでしょう。 例えば、最初に考えた「9 ÷9 +9 ÷9 ×9」が最もシンプルかもしれません。この式は、数字の間に「÷」「+」「÷」「×」を入れること になります。つまり、式は9 ÷9 +9 ÷9 ×9 となります。 計算順序を確認します。まず、9 ÷9 =1、次に9 ÷9 =1、次に1×9=9。合計1+9=10。正しいです。 したがって、この式が正解です。 </think>
**解答例:** `9 ÷9 +9 ÷9 ×9` **計算過程:** 1. `9 ÷9 = 1` 2. `9 ÷9 = 1` 3. `1 ×9 = 9` 4. `1 + 9 = 10` **解説:** 各数字の間に演算子を配置し、括弧を使用して計算順序を制御します。 - 最初の `9 ÷9` で1を得ます。 - 次の `9 ÷9` も1です。 - 最後の `×9` で9を加算し、合計10になります。 数字を2桁以上にまとめず、少数点も使用せず、条件を満たしています。