1from transformers import AutoModelForSequenceClassification, AutoTokenizer
2import torch
3
4device = "cuda" if torch.cuda.is_available() else "cpu"
5checkpoint = "nie3e/sentiment-polish-gpt2-small"
6tokenizer = AutoTokenizer.from_pretrained(checkpoint)
7model = AutoModelForSequenceClassification.from_pretrained(
8 checkpoint
9).to(device)
10
11text = "Jak na cenę - super . Śniadanie nie do przejedzenia ."
12
13input_ids = tokenizer(text, return_tensors="pt").to(device)
14logits = model(**input_ids)["logits"].to("cpu")
15
16percent = torch.sigmoid(logits).squeeze(dim=0)
17
18id2class = model.config.id2label
19print({id2class[i]: f"{(p*100):.2f}%" for i, p in enumerate(percent.tolist())}){'NEUTRAL': '2.95%', 'NEGATIVE': '0.21%', 'POSITIVE': '100.00%', 'AMBIGUOUS': '20.56%'}1from transformers import pipeline
2
3pipe = pipeline(
4 "sentiment-analysis",
5 "nie3e/sentiment-polish-gpt2-small"
6)
7
8result = pipe("Jak na cenę - super . Śniadanie nie do przejedzenia .")
9print(result)[{'label': 'POSITIVE', 'score': 0.9999890327453613}]1from vllm import LLM
2llm = LLM(
3 "nie3e/sentiment-polish-gpt2-small",
4 task="classify",
5 enforce_eager=True
6)
7
8text = ["Jak na cenę - super . Śniadanie nie do przejedzenia ."]
9outputs = llm.classify(text)
10
11for output in outputs:
12 print(output.outputs.probs)docker run --gpus 1 --ipc=host -p 8000:8000 vllm/vllm-openai:v0.9.2 --model nie3e/sentiment-polish-gpt2-small1curl -X 'POST' \
2 'http://127.0.0.1:8000/classify' \
3 -H 'Content-Type: application/json' \
4 -d '{
5 "model": "nie3e/sentiment-polish-gpt2-small",
6 "input": ["Przestronny hotel , jasny , z dużymi oknami .", "Położony całkiem blisko centrum ."]
7}'1{
2 "id": "classify-6619cecdb01a4bf8900df136a9b33b15",
3 "object": "list",
4 "created": 1749994841,
5 "model": "nie3e/sentiment-polish-gpt2-small",
6 "data": [
7 {
8 "index": 0,
9 "label": "POSITIVE",
10 "probs": [
11 0.000006198883056640625,
12 1.7881393432617188e-7,
13 1.0,
14 0.000007569789886474609
15 ],
16 "num_classes": 4
17 },
18 {
19 "index": 1,
20 "label": "AMBIGUOUS",
21 "probs": [
22 0.00013005733489990234,
23 0.004421234130859375,
24 0.005367279052734375,
25 0.990234375
26 ],
27 "num_classes": 4
28 }
29 ],
30 "usage": {
31 "prompt_tokens": 17,
32 "total_tokens": 17,
33 "completion_tokens": 0,
34 "prompt_tokens_details": null
35 }
36}1import requests
2
3response = requests.post(
4 f"http://127.0.0.1:8000/classify",
5 headers={"Content-Type": "application/json"},
6 json={
7 "model": "nie3e/sentiment-polish-gpt2-small",
8 "input": [
9 "Przestronny hotel , jasny , z dużymi oknami .",
10 "Położony całkiem blisko centrum ."
11 ]
12 }
13)
14
15print(response.json()){'id': 'classify-ac86189c5d0e41908584c3e88d356316',
'object': 'list',
'created': 1753209126,
'model': 'nie3e/sentiment-polish-gpt2-small',
'data': [{'index': 0,
'label': 'POSITIVE',
'probs': [6.277556167333387e-06,
1.9292743047572003e-07,
0.9999858140945435,
7.631567314092536e-06],
'num_classes': 4},
{'index': 1,
'label': 'AMBIGUOUS',
'probs': [0.0001290593936573714,
0.004407374653965235,
0.005339722614735365,
0.9901238083839417],
'num_classes': 4}],
'usage': {'prompt_tokens': 17,
'total_tokens': 17,
'completion_tokens': 0,
'prompt_tokens_details': None}}1from transformers import DataCollatorWithPadding
2data_collator = DataCollatorWithPadding(
3 tokenizer=tokenizer,
4 padding="longest",
5 max_length=128,
6 pad_to_multiple_of=8
7)| Training Loss | Epoch | Step | Validation Loss | Accuracy |
|---|---|---|---|---|
| 0.4049 | 1.0 | 3284 | 0.3351 | 0.8792 |
| 0.1885 | 2.0 | 6568 | 0.2625 | 0.9218 |
| 0.1182 | 3.0 | 9852 | 0.2583 | 0.9419 |
| 0.0825 | 4.0 | 13136 | 0.2886 | 0.9482 |
| 0.0586 | 5.0 | 16420 | 0.3343 | 0.9538 |
| 0.034 | 6.0 | 19704 | 0.3734 | 0.9595 |
| 0.0288 | 7.0 | 22988 | 0.4125 | 0.9599 |
| 0.0185 | 8.0 | 26273 | 0.4262 | 0.9626 |
| 0.0069 | 9.0 | 29557 | 0.4529 | 0.9622 |
| 0.0059 | 10.0 | 32840 | 0.4659 | 0.9627 |
1from datasets import load_dataset
2from evaluate import evaluator
3
4data = load_dataset("allegro/klej-polemo2-out", split="test").shuffle(seed=42)
5task_evaluator = evaluator("text-classification")
6
7# fix labels
8l = {
9 "__label__meta_zero": 0,
10 "__label__meta_minus_m": 1,
11 "__label__meta_plus_m": 2,
12 "__label__meta_amb": 3
13 }
14def fix_labels(examples):
15 examples["target"] = l[examples["target"]]
16 return examples
17data = data.map(fix_labels)
18
19eval_resutls = task_evaluator.compute(
20 model_or_pipeline="nie3e/sentiment-polish-gpt2-small",
21 data=data,
22 label_mapping={"NEUTRAL": 0, "NEGATIVE": 1, "POSITIVE": 2, "AMBIGUOUS": 3},
23 input_column="sentence",
24 label_column="target"
25)
26
27print(eval_resutls)1{
2 "accuracy": 0.9838056680161943,
3 "total_time_in_seconds": 5.2441766999982065,
4 "samples_per_second": 94.1997244296076,
5 "latency_in_seconds": 0.010615742307688678
6}