以下の内容はhttps://touch-sp.hatenablog.com/entry/2025/01/28/163128より取得しました。


サイバーエージェントが「DeepSeek-R1-Distill-Qwen-14B」の日本語追加学習モデルを公開してくれたのでさっそく使ってみました

はじめに

「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桁以上にまとめず、少数点も使用せず、条件を満たしています。






以上の内容はhttps://touch-sp.hatenablog.com/entry/2025/01/28/163128より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14