DeepSeek-R1 14B を使ってみた

インストール

ollama run deepseek-r1:14b

テスト

$ ollama run deepseek-r1:14b --verbose
>>> すもももももももものうち 「も」って何回言った?
<think>
嗯,用户的问题是“すももももももものうち 「も」って何回言った?」看起来是在问日语句子中使用了几次“も”这个助词。首
先,我需要理解这句话的结构和语法。

“すももももももものうち”这个部分,看起来像是一连串的“も”,但其实可能是一个名字或者特定的表达方式。不过,根据常见
的用法,“も”通常在日语中用来表示“也”、“还”或者用于话题转换。比如“私も学生です。”就是“我也是一名学生。”

接下来,我需要拆解这个句子中的“も”的数量。数一数,看起来有七个“も”。这可能是一种强调的方式,或者是某种特定的表达
方式,比如广告语、歌词或者其他创意性的用法。

用户可能是在学习日语,对助词的使用频率感兴趣,或者遇到了一个具体的例子,想确认自己是否正确理解了其中的“也”的次数。
另外,也有可能是他们正在创作内容,想要确保用词准确,所以想知道这里用了多少个“も”。

考虑到这些可能性,我需要明确回答用户的问题,即在这个句子中使用了多少次“も”。同时,可能还要解释一下每个“も”的作用
,或者是否所有的“も”都具有相同的语法功能。但根据给出的信息,只需要回答数量即可。

所以,我的思考过程是:分析句子结构,确认“も”的数量,并考虑用户的需求,确保回答准确且有用。
</think>

「すももももももものうち」は、一連で7回「も」が使われています。この表現は、例えば、「も」をたくさん並べて使うことで
強調や韻律感を出すことがあります。具体的な文脈に応じて意味合いが変わるので、文脈を見ながら理解してください!

total duration:       13.2656869s
load duration:        31.4524ms
prompt eval count:    22 token(s)
prompt eval duration: 663ms
prompt eval rate:     33.18 tokens/s
eval count:           394 token(s)
eval duration:        12.57s
eval rate:            31.34 tokens/s
>>> Send a message (/? for help)

途中なんだろうと思ったら <think> タグがある
デフォルトで ChatGPT o1 のような思考をするということだろう

しかし、8回のはずなのだが、おしい。

試しに Phi-4 でやってみる

$ ollama run phi4 --verbose
>>> すもももももももものうち 「も」って何回言った?
映画『ももいろポエム』における、吉高由里子演じる主人公・川崎すももが一日で繰り返し口にする「も」の数は、具体的な数字
として明確に記載されていません。このフレーズは、彼女のユニークな性格を表現するための象徴的な要素であり、映画全体で繰
り返し登場しますが、正確な回数については語られていません。この点に関して興味を持たれる方は、映画の本編やシーンに注目
しながら楽しむことをお勧めします。

もし「も」の数を数えたい場合は、映画を視聴して確認することで、そのユニークな特徴に対する理解が深まるかもしれません。

total duration:       9.0165112s
load duration:        16.0032ms
prompt eval count:    33 token(s)
prompt eval duration: 442ms
prompt eval rate:     74.66 tokens/s
eval count:           271 token(s)
eval duration:        8.557s
eval rate:            31.67 tokens/s
>>> Send a

これは、どういうことなのだろうか?
全く異なることを言ってきた

格の違いを見せつけられている気がする

FizzBuzz を書いてもらう

>>> python でワンライナーの fizzbuzz コードを書いて
<think>
Alright, the user is asking for a FizzBuzz code in Python written as a one-liner. They must be familiar with
programming concepts and probably learning Python or looking for concise solutions.

I should remember that FizzBuzz requires checking if a number is divisible by 3 and/or 5. The standard approach
involves loops, but since it's a one-liner, list comprehensions would be efficient.

The user might not just want the code; they could be aiming to understand how to condense logic into a single
line, which is useful for scripts or when space is limited.

I need to structure the list comprehension correctly: iterate over numbers 1 to n, and for each number, check
divisibility by 3 and 5. Then append 'FizzBuzz', 'Fizz', 'Buzz' respectively, else the number itself as a string.

Including comments in the one-liner might be helpful, but Python doesn't allow multi-line comments there. So
perhaps adding an explanation after the code would be better.

Also, considering readability, I should ensure that the conditions are clear within the list comprehension.

I'll provide the code and then explain each part briefly to make it understandable.
</think>

Pythonでワンライナーとして書かれたFizzBuzzコードは以下のように書かれます:

```python
print("\n".join(["FizzBuzz" if i % 15 == 0 else "Fizz" if i % 3 == 0 else "Buzz" if i % 5 == 0 else str(i) for i
in range(1, n+1)]))
```

ただし、このコードは`n`という変数を定義する必要があります。以下のように具体的な数字を入れた例です:

```python
print("\n".join(["FizzBuzz" if i % 15 == 0 else "Fizz" if i % 3 == 0 else "Buzz" if i % 5 == 0 else str(i) for i
in range(1, 101)]))
```

このコードは、1から100までの数字をチェックし、それぞれの数に対して以下を行います:
- 35に同時に割り込まれる場合:「FizzBuzz」
- 3に割り込まれる場合:「Fizz」
- 5に割り込まれる場合:「Buzz」
- それ以外の場合:数字そのものを出力します。

コードはリスト内包式を使用しており、各要素を`\n`で連結し、改行して出力されます。

total duration:       19.2527521s
load duration:        23.6004ms
prompt eval count:    1389 token(s)
prompt eval duration: 379ms
prompt eval rate:     3664.91 tokens/s
eval count:           525 token(s)
eval duration:        18.519s
eval rate:            28.35 tokens/s
>>> Send a message (/? for help)

実際に動かしてみた

$ python
Python 3.12.5 (tags/v3.12.5:ff3bc82, Aug  6 2024, 20:45:27) [MSC v.1940 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> print("\n".join(["FizzBuzz" if i % 15 == 0 else "Fizz" if i % 3 == 0 else "Buzz" if i % 5 == 0 else str(i) for i
... in range(1, n+1)]))
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
NameError: name 'n' is not defined
>>>
>>> print("\n".join(["FizzBuzz" if i % 15 == 0 else "Fizz" if i % 3 == 0 else "Buzz" if i % 5 == 0 else str(i) for i
... in range(1, 101)]))
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11

さすがに簡単すぎただろうか?

とはいえ、ちゃんと正解を書いてこれるのとてもありがたい
Phi-4 などと比較するのに最適なコードをどなたか教えていただけますでしょうか?比較してみたいです。

VRAM 使用量

14B の場合の参考である

推論時の使用量

推論時のVRAM使用量

私の環境では 10.7GB 程度だった。
RTX3060 12GB モデルで十分動く

所感

ローカルLLM の 14B パラメーターのサイズで「思考」ができて、かなり高い精度で出力してくれるのは本当にありがたい。
今後どんどんコンパクトになっていくと思うので将来が楽しみである。

それにしても、これくらいコンパクトな日本語の言語モデルが出てきてほしい。もしくは作りたい。GPU と知識と仲間が足りない!w 

いいなと思ったら応援しよう!