GPT-подобная языковая модель с Rotary Position Embeddings, обученная генерировать кликбейтные заголовки. 42 962 токена, 3 слоя decoder, 256 скрытых размерностей.
Попробовать →GPTModelWithRoPE — компактный decoder-only трансформер с Rotary Position Embeddings вместо абсолютных позиционных кодировок.
Embedding(42962, 256)W_q, W_k, W_v, W_o: 256→256
256 → 1024 → 256
LayerNorm(256)Linear(256 → 42962)Введите начало заголовка — модель продолжит в стиле кликбейта.
Результаты работы модели при разных параметрах.
Генерация с top-k sampling и temperature scaling.
def generate_clickbait(model, vocab, prompt="", max_new_tokens=7, temperature=1.0, top_k=50, top_p=0.9): model.eval() if prompt: tokens = vocab.text_to_indices_for_generator(prompt) input_ids = torch.LongTensor( [[vocab.word2idx['<BOS>']] + tokens] ).to(DEVICE) else: input_ids = torch.LongTensor( [[vocab.word2idx['<BOS>']]] ).to(DEVICE) generated = model.generate( input_ids, max_new_tokens=max_new_tokens, temperature=temperature, top_k=top_k, top_p=top_p, eos_token_id=vocab.word2idx['<EOS>'] ) return vocab.indices_to_text(generated[0].tolist())
for i in range(5): text = generate_clickbait( model, vocab, prompt="", temperature=1.0, top_k=50 ) print(f" {i+1}. {text}...😱")
for temp in [0.5, 1.0, 1.5, 2.0]: text = generate_clickbait( model, vocab, prompt="почему", temperature=temp, top_k=50 ) print(f" T={temp}: {text}...😱")