1、概要
2026年1月初めLiquid AI社からLFM2.5がリリースされました。(詳細については、Referenceを参照してください。)これは、1Bパラメータクラスのモデルで、高性能な小型デバイス向け基盤モデルファミリーとのことです。このファミリーの中には日本語最適化チャットモデル(LFM2.5-1.2B-JP/パラメータ数:12億)も含まれていましたので、日本語でのチャットを試してみました。GPUも搭載していない一般のノートPCを使用したローカル環境でそれなりに動作するのは大変興味深いことです。
2、試用環境
- ノートPC(プロセッサー:Intel(R) Core(TM)i7-10510Y CPU@1.2GHz, RAM: 16.0GB)
- Windows 11 64bit
- VSCode
- Python 3.10.4
今回は、VSCode上でPythonを動作させていますが、Python単独の環境でも同様に動作すると思います。
3、準備
(1) VSCodeを導入して下さい。詳細については、referenceを参照して下さい。
(2) Pythonをインストールして下さい。詳細については、referenceを参照して下さい。
(3) VSCodeでPython仮想環境を構築して下さい。詳細については、referenceを参照して下さい。
(4) 仮想環境でTransformersをインストールして下さい。詳細については、referenceを参照して下さい。
(5) 仮想環境でPyTorchをインストールして下さい。詳細については、referenceを参照して下さい。
(6) 4項に示すチャットプログラムを入力し、仮想環境で実行してみて下さい。不足するプログラムがある場合にはその旨が表示されますので、不足するプログラムをインストールして下さい。
4、プログラム
チャットプログラムのソースコードを以下に示します。model.generate内のパラメータを色々変えて回答の変化を確認してみて下さい。
# 「Liquid AI」で日本語の「LFM2.5JP」モデルが公開されたので試してみます。2026/01/25 by T. Fujita
from transformers import AutoModelForCausalLM, AutoTokenizer
# model_id = "LiquidAI/LFM2.5-1.2B-Instruct" # 汎用的な指示応答にチューニング済モデル
model_id = "LiquidAI/LFM2.5-1.2B-JP" # 日本語向けに最適化されたチャットモデル
model = AutoModelForCausalLM.from_pretrained(
model_id,
device_map = "auto",
dtype = "bfloat16",
)
tokenizer = AutoTokenizer.from_pretrained(model_id)
prompt = "おはようございます。"
system_prompt = "あなたは標準語で普通に話します。"
# system_prompt = "あなたはメイドです。丁寧な言葉使いで話します。"
# system_prompt = "あなたは執事です。丁重な言葉使いで話します。"
# system_prompt = "あなたは大阪のおばちゃんです。関西弁で元気に話します。"
def make_answer(prompt):
messages = [
{"role": "system", "content": system_prompt},
{"role": "user", "content": prompt}
]
input_ids = tokenizer.apply_chat_template(
messages,
return_tensors = "pt",
tokenizer = True,
).to(model.device)
output = model.generate(
input_ids,
do_sample = True,
temperature = 0.2, # 値が小さい程高い確率のトークンを選択しやすく、値が大きいと確率の低いトークンが選ばれる可能性(ランダム性)が高くなる
# min_p = 0.15,
top_p = 0.2, # 確率の累積で範囲を絞る(Pの値が大きい程候補が多くなり、値が小さい程厳選された候補となる)
top_k = 10, # 候補を上位K個に制限
repetition_penalty = 1.25, # 直前に出現した単語や同じ単語が繰り返し出現することに対してスコアを下げる罰則を与る
max_new_tokens = 256, # 新たに生成するトークンの最大文字数
)
return output
flag = 0
while flag == 0:
prompt = input('\n質問を入力してください。(終了は"[end]"です。)')
if prompt == "[end]":
flag = 1
break
output = make_answer(prompt)
temp_out = ' '.join(tokenizer.batch_decode(output))
temp_start = temp_out.find(prompt + "<|im_end|>\n")
temp_end = temp_out.find("\n\n")
if temp_end == -1:
temp_end = temp_out.find("<|endoftext|>") - 9
if temp_end == -1:
temp_end = temp_out.find("<|im_end|>']") - 5
output_text = temp_out[temp_start + len(prompt) + 11:temp_end]
print("回答:" + output_text)
# print("原文:" + temp_out)
print('==================== Test is Done ! ====================\n')
5、動作結果
チャット状況を次の画面に示します。質問を入力後、数十秒~数分でそれなりの回答が得られました。質問の入力内容(方法)によっては的外れな回答もありましたが、形態素解析等の下処理が必要なく、GPUも搭載していないノートPCでここまで使用できるのは大変興味深いことです。
