AI・機械学習
Python 25行でJev
Jev in 25 Lines of Python (nobodywho.ai)
要約
本記事では、大規模言語モデルに関連する「Jev」という概念を、わずか25行のPythonコードで実装する簡略版を紹介しています。この実装は、与えられた選択肢に対する確率を出力することでテキストを分類し、その速度、ローカル実行、プライバシーの利点を強調しています。著者はこれがパロディであることを明記し、より完全なオープンソース実装へのリンクも提供しています。
全文翻訳
JevをPython 25行で実装
[画像: My name is Jev]
誰も彼もがJevについて話しています。Jevだ、Jevだ、と。Twitterの誰もがJevに夢中ですが、それは大規模言語モデルとAIパラダイムの次のフロンティアだとされています。私たちはそうは思いません。そこで、Python 25行でJevを紹介します。
モデルをロードします。
# /// script
# requires-python = ">=3.12"
# dependencies = ["huggingface-hub", "llama-cpp-python", "numpy"]
# ///
import numpy
from llama_cpp import Llama
# 本当に、https://huggingface.co/models?library=gguf からGGUFモデルならどれでも使えます
model = Llama.from_pretrained(
repo_id="Qwen/Qwen3-0.6B-GGUF",
filename="Qwen3-0.6B-Q8_0.gguf",
n_ctx=512,
logits_all=True,
verbose=False,
)
プロンプトをロードし、選択肢を定義します。
labels = ["A", "B", "C"]
choices = ["Legitimate", "Spam", "Phishing"]
email = "Payroll asks for your password on a non-company sign-in page."
options = "\n".join(
f"{label}. {choice}" for label, choice in zip(labels, choices, strict=True)
)
prompt = f"""<|im_start|>system
Choose one option.<|im_end|>
<|im_start|>user
Email: {email}\n\n{options}<|im_end|>
<|im_start|>assistant
<think>\n\n</think>\n\n"""
model.eval(tokens=model.tokenize(text=prompt.encode(), add_bos=False, special=True))
ロジットを確率に変換します。
logits = model.scores[model.n_tokens - 1]
token_ids = [model.tokenize(text=label.encode(), add_bos=False)[0] for label in labels]
choice_logits = numpy.asarray([logits[token_id] for token_id in token_ids])
logprobs = choice_logits - numpy.logaddexp.reduce(choice_logits)
probabilities = numpy.exp(logprobs)
for name, scores in (
("Logits", choice_logits),
("Log probabilities", logprobs),
("Probabilities", probabilities),
):
values = numpy.round(scores.astype(float), 3).tolist()
print(f"{name}:", dict(zip(choices, values, strict=True)))
# Logits: {'Legitimate': 26.254, 'Spam': 27.262, 'Phishing': 29.614}
# Log probabilities: {'Legitimate': -3.482, 'Spam': -2.474, 'Phishing': -0.122}
# Probabilities: {'Legitimate': 0.031, 'Spam': 0.084, 'Phishing': 0.885}
これで、Jevの完成です。
しかし、あなたはJevを理解していない!
ええ、分かっています。
- 私たちはそれをSystem One decision modelとは呼びません。
- APIを呼びませんでした。
- 合成データセットを大量に作成しませんでした。
- 決定と確率を調整するためにReinforcement Learning for Calibrated Decisions (RLCD)でモデルをトレーニングしませんでした(たとえそれらが常に正しいわけではないとしても)。
しかし、はい。これがJevです。
- 分類します:選択肢を含むプロンプトを受け取り、確率を出力します。
- 高速です。
- ローカルで動作します。
- データをどこにも送信しません。
そして、私たちはあなたのデータをどこにも送信しないことを好みます。 NobodyWhoをチェックしてください。
(注:これはパロディのブログ記事です。Jevのより良い/より完全なオープン実装については、これらのリンクを参照してください:OpenJev、openjev-sglang、およびOpenJev on DiffusionGemma)。*
NobodyWhoが行うすべてのことはオープンソースです。私たちをサポートするためにGitHubでスターを付けてください❤️