HN 日本語サマリー

← 一覧へ戻る
AI・機械学習

Python 25行でJev

Jev in 25 Lines of Python (nobodywho.ai)

179 pointsby bashbjorn51 コメント

要約

本記事では、大規模言語モデルに関連する「Jev」という概念を、わずか25行のPythonコードで実装する簡略版を紹介しています。この実装は、与えられた選択肢に対する確率を出力することでテキストを分類し、その速度、ローカル実行、プライバシーの利点を強調しています。著者はこれがパロディであることを明記し、より完全なオープンソース実装へのリンクも提供しています。

全文翻訳

Python 25行でJev 誰も彼もがJevについて話しています。Jevだ、Jevだ、と。Twitterでは皆、Jevが大規模言語モデルとAIパラダイムの次のフロンティアだと騒いでいます。私たちはそうは思いません。そこで、Python 25行でJevを示します。 モデルをロードします。 # /// script # requires-python = ">=3.12" # dependencies = ["huggingface-hub", "llama-cpp-python", "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> </think> """ model.eval(tokens=model.tokenize(text=prompt.encode(), add_bos=False, special=True)) logitsを確率に変換します。 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, and OpenJev on DiffusionGemma.) NobodyWhoのすべてはオープンソースです。サポートのためにGithubでスターを付けていただけると嬉しいです ❤️ Published Sep 22, 2026 by Duarte O.Carmo Technical