/ Модель

Характеристики

Контекст
1 536 токенов
Лицензия
MIT
Архитектура
gpt2 · dense
Базовая модель
polish-gpt2-large
Опубликована
13 фев 2024

sentiment-polish-gpt2-large

Классификация текстаТекст → label

Польская GPT-2-модель для классификации тональности текста на нейтральную, отрицательную, положительную или неоднозначную.

102скачиваний за 30 дней1лайквеса обновлены22 июл 2025

Бенчмарки

Как модель справилась с задачами пользователей ailist и что о ней публикуют открытые лидерборды

Публичные оценки

Из открытых лидербордов. Сравнивайте результаты одного теста при одинаковых условиях — отсутствие оценки не значит, что модель хуже.

В подключённых источниках результатов для этой модели пока нет.

Что умеет модель

Описание составлено по карточке модели и метаданным Hugging Face

sentiment-polish-gpt2-large — польскоязычная модель классификации тональности, созданная дообучением sdadas/polish-gpt2-large на датасете polemo2-official. Она относит текст к одной из четырёх категорий: нейтральная, отрицательная, положительная или неоднозначная тональность. Модель построена на архитектуре GPT-2 и рассчитана на контекст до 1536 токенов; веса опубликованы в формате safetensors.

Модель подходит для анализа отзывов и других польских текстов. В README указана точность 0,9634 на оценочной выборке; обучающие примеры длиннее 512 токенов исключались. Модель распространяется по лицензии MIT.

Сценарии применения

  • определение тональности польских отзывов
  • разметка польских текстов по полярности
  • анализ положительных и отрицательных мнений
  • выявление неоднозначной тональности в польских сообщениях

Ограничения

Обучение проводилось на polemo2-official, а тексты длиннее 512 токенов исключались из обучающей выборки; качество на других жанрах и распределениях данных может отличаться.

Карточка модели

README от автора на Hugging Face, как он его опубликовал

Открыть на Hugging Face

sentiment-polish-gpt2-large

This model is a fine-tuned version of sdadas/polish-gpt2-large on the polemo2-official dataset. It achieves the following results on the evaluation set:

  • epoch: 10.0
  • eval_accuracy: 0.9634
  • eval_loss: 0.3139
  • eval_runtime: 132.9089
  • eval_samples_per_second: 197.428
  • eval_steps_per_second: 98.714
  • step: 65610

Model description

Trained from polish-gpt2-large

Intended uses & limitations

Sentiment analysis - neutral/negative/positive/ambiguous

How to use

from transformers import AutoModelForSequenceClassification, AutoTokenizer
import torch

device = "cuda" if torch.cuda.is_available() else "cpu"
checkpoint = "nie3e/sentiment-polish-gpt2-large"
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
model = AutoModelForSequenceClassification.from_pretrained(
    checkpoint
).to(device)

text = "Jak na cenę - super . Śniadanie nie do przejedzenia ."

input_ids = tokenizer(text, return_tensors="pt").to(device)
logits = model(**input_ids)["logits"].to("cpu")

percent = torch.sigmoid(logits).squeeze(dim=0)

id2class = model.config.id2label
print({id2class[i]: f"{(p*100):.2f}%" for i, p in enumerate(percent.tolist())})
{'NEUTRAL': '0.02%', 'NEGATIVE': '0.34%', 'POSITIVE': '100.00%', 'AMBIGUOUS': '0.91%'}
from transformers import pipeline

pipe = pipeline(
    "sentiment-analysis",
    "nie3e/sentiment-polish-gpt2-large"
)

result = pipe("Jak na cenę - super . Śniadanie nie do przejedzenia .")
print(result)
[{'label': 'POSITIVE', 'score': 1.0}]
from vllm import LLM
llm = LLM(
    "nie3e/sentiment-polish-gpt2-large",
    task="classify",
    enforce_eager=True
)

text = ["Jak na cenę - super . Śniadanie nie do przejedzenia ."]
outputs = llm.classify(text)

for output in outputs:
    print(output.outputs.probs)
docker run --gpus 1 --ipc=host -p 8000:8000 vllm/vllm-openai:v0.9.2 --model nie3e/sentiment-polish-gpt2-large

using curl:

curl -X 'POST' \
  'http://127.0.0.1:8000/classify' \
  -H 'Content-Type: application/json' \
  -d '{
  "model": "nie3e/sentiment-polish-gpt2-large",
  "input": ["Przestronny hotel , jasny , z dużymi oknami .", "Położony całkiem blisko centrum ."]
}'

result:

{
	"id": "classify-0da99ef301644a9fac9c895bb04589c2",
	"object": "list",
	"created": 1753209697,
	"model": "nie3e/sentiment-polish-gpt2-large",
	"data": [
		{
			"index": 0,
			"label": "POSITIVE",
			"probs": [
				1.6494802745903315e-10,
				7.189839001942033e-13,
				1.0,
				1.0139297170960737e-12
			],
			"num_classes": 4
		},
		{
			"index": 1,
			"label": "AMBIGUOUS",
			"probs": [
				1.1836132074449779e-9,
				7.278887714790017e-9,
				0.000006527674941025907,
				0.9999934434890747
			],
			"num_classes": 4
		}
	],
	"usage": {
		"prompt_tokens": 17,
		"total_tokens": 17,
		"completion_tokens": 0,
		"prompt_tokens_details": null
	}
}

using python:

import requests

response = requests.post(
    f"http://127.0.0.1:8000/classify",
    headers={"Content-Type": "application/json"},
    json={
        "model": "nie3e/sentiment-polish-gpt2-large",
        "input": [
            "Przestronny hotel , jasny , z dużymi oknami .",
            "Położony całkiem blisko centrum ."
        ]
    }
)

print(response.json())
{'id': 'classify-9b772211b81644ad92f9e67f2b4f708a',
 'object': 'list',
 'created': 1753209733,
 'model': 'nie3e/sentiment-polish-gpt2-large',
 'data': [{'index': 0,
   'label': 'POSITIVE',
   'probs': [1.6494802745903314e-10,
    7.189839001942033e-13,
    1.0,
    1.0139297170960737e-12],
   'num_classes': 4},
  {'index': 1,
   'label': 'AMBIGUOUS',
   'probs': [1.1836132074449779e-09,
    7.278887714790017e-09,
    6.527674941025907e-06,
    0.9999934434890747],
   'num_classes': 4}],
 'usage': {'prompt_tokens': 17,
  'total_tokens': 17,
  'completion_tokens': 0,
  'prompt_tokens_details': None}}

Training and evaluation data

Merged all rows from polemo2-official dataset.

Discarded rows with length > 512.

Train/test split: 80%/20%

Datacollator:

data_collator = DataCollatorWithPadding(
  tokenizer=tokenizer,
  padding="longest",
  max_length=MAX_INPUT_LENGTH,
  pad_to_multiple_of=8
)

Training procedure

GPU: 2x RTX 4060Ti 16GB

Training time: 29:16:50

Using accelerate + DeepSpeed

Training hyperparameters

The following hyperparameters were used during training:

  • learning_rate: 2e-05
  • train_batch_size: 1
  • eval_batch_size: 1
  • seed: 42
  • gradient_accumulation_steps: 8
  • total_train_batch_size: 16
  • optimizer: Adam with betas=(0.9,0.999) and epsilon=1e-08
  • lr_scheduler_type: linear
  • num_epochs: 10

Evaluation

Evaluated on allegro/klej-polemo2-out test dataset.

from datasets import load_dataset
from evaluate import evaluator

data = load_dataset("allegro/klej-polemo2-out", split="test").shuffle(seed=42)
task_evaluator = evaluator("text-classification")

# fix labels
l = {
        "__label__meta_zero": 0,
        "__label__meta_minus_m": 1,
        "__label__meta_plus_m": 2,
        "__label__meta_amb": 3
    }
def fix_labels(examples):
    examples["target"] = l[examples["target"]]
    return examples
data = data.map(fix_labels)

eval_resutls = task_evaluator.compute(
    model_or_pipeline="nie3e/sentiment-polish-gpt2-large",
    data=data,
    label_mapping={"NEUTRAL": 0, "NEGATIVE": 1, "POSITIVE": 2, "AMBIGUOUS": 3},
    input_column="sentence",
    label_column="target"
)

print(eval_resutls)
{
    "accuracy": 0.9858299595141701,
    "total_time_in_seconds": 12.71777104900002,
    "samples_per_second": 38.8432845737416,
    "latency_in_seconds": 0.02574447580769235
}

Framework versions

  • Transformers 4.37.2
  • Pytorch 2.2.0+cu121
  • Datasets 2.17.0
  • Tokenizers 0.15.1

Как запустить

На своей GPU в ailist. Цена — по текущим предложениям провайдеров

GPU в ailist

Универсальный рантайм · text-classification

Можно запустить

Подбираем GPU…

Класс архитектуры
GPT2ForSequenceClassification
Ревизия весов
ba529cf

0 моделей