642просмотров
27 октября 2025 г.
Score: 706
logit_bias это параметр генерации, который позволяет контролировать какие токены и с какой вероятностью должна печатать модель. Как он работает... Рассмотрим такой запрос: Столица Франции? Одним словом.. Скорее всего мы получим ответ: Париж.
Но мы хотим "услышать" от модели что-то другое. Сначала выясним из каких токенов состоит слово Париж.
from transformers import AutoTokenizer tokenizer = AutoTokenizer.from_pretrained('/models/qwen/Qwen3-14B')
token_ids = tokenizer.encode('Париж')
token_text = [tokenizer.decode([token_id]) for token_id in token_ids]
print("ID токенов:", token_ids) # [16854, 125947, 16964]
print("Текст токенов:", token_text) # ['П', 'ари', 'ж'] Итак, за букву П отвечает токен 16854. Занулим его:
from openai import OpenAI client = OpenAI( base_url='http://192.168.0.108:8000/v1', api_key='any'
) prompt = 'Столица Франции? Одним словом.' response = client.chat.completions.create( model = '/Qwen3-14B', messages = [ {'role': 'user', 'content': prompt} ], temperature = 0.9, max_tokens = 500, logit_bias = {16854:-100}, # Выкручиваем вероятность появления токена в 0 extra_body = {'chat_template_kwargs': {'enable_thinking': False}}
) content = response.choices[0].message.reasoning_content
print(content) После этого модель не сможеть начать текст с буквы "П" (да и вообще ее напечатать) и мы сможем увидеть в ответе что-то вроде "Ницца", "Версаль" и много чего еще :) Измеряется logit_bias от -100 до 100. При -100 вероятность появления токена около нулевая, а при 100 модель только его и будет печатать :)
В logit_bias можно передать сразу несколько токенов: {16854:-100, 125947:-100, 16964:-100}