Czym jest przetwarzanie języka naturalnego?

Przetwarzanie języka naturalnego (ang. Natural Language Processing, NLP) to dziedzina sztucznej inteligencji na styku informatyki i lingwistyki, której celem jest umożliwienie maszynom rozumienia, analizowania, interpretowania i generowania ludzkiego języka. NLP jest fundamentem technologii, z których korzystamy codziennie: wyszukiwarek, tłumaczy, asystentów głosowych, chatbotów i modeli takich jak ChatGPT.

Język naturalny jest jednym z najtrudniejszych problemów AI. Jest wieloznaczny (zamek = budowla lub urządzenie), kontekstowy (znaczenie słowa zależy od zdania), ewoluujący (nowe słowa, memy), pełen wyjątków od reguł i zróżnicowany kulturowo. Każdy z 7000+ języków świata ma unikalne cechy gramatyczne, morfologiczne i syntaktyczne.

Przykłady NLP w życiu codziennym: autokorekta na klawiaturze, sugestie odpowiedzi w Gmailu (Smart Reply), filtrowanie spamu, asystenci głosowi (Alexa, Siri), tłumaczenia maszynowe (DeepL, Google Translate), generowanie napisów do filmów, podsumowania artykułów w wynikach wyszukiwania, ChatGPT, Claude i Gemini.

Przełom w NLP nastąpił dzięki transformerom (Vaswani et al., 2017) — architekturze neuronowej, która umożliwiła trenowanie modeli na ogromnych korpusach tekstu i osiągnięcie zdolności rozumienia języka na bezprecedensowym poziomie.

Krótka historia NLP

NLP przeszło cztery wyraźne ery, w których zmieniało się podejście do problemu rozumienia języka.

Era reguł (1950-1990)

Pierwsze próby NLP opierały się na ręcznie kodowanych regułach lingwistycznych — gramatykach formalnych, słownikach, parserach składniowych. Klasyczny przykład: ELIZA (1966), prosta rozmowa terapeutyczna oparta na pattern matching. SHRDLU (1970) rozumiał komendy w ograniczonym świecie klocków. Systemy te były kruche — wystarczyło wyjść poza zakres reguł i przestawały działać.

Era statystyczna (1990-2010)

Wraz z dostępnością korpusów tekstu i mocy obliczeniowej zaczęto stosować modele statystyczne: n-gramy, ukryte modele Markowa (HMM), maszyny wektorów nośnych (SVM). Tłumaczenie statystyczne (IBM Models, Google Translate 2006-2016) zdominowało pole. Charakterystyka: dużo ręcznej inżynierii cech, ale skalowanie przez dane.

Era sieci rekurencyjnych (2010-2017)

Sieci rekurencyjne — RNN, LSTM, GRU — pozwoliły uczyć modeli sekwencyjnych bez ręcznych cech. Word2Vec (Mikolov, 2013) i GloVe (Pennington, 2014) wprowadziły embeddingi gęste. Modele seq2seq (Sutskever, 2014) z mechanizmem attention (Bahdanau, 2014) podniosły jakość tłumaczenia maszynowego. Wąskie gardło: sekwencyjne przetwarzanie (token po tokenie) ograniczało paralelizm.

Era transformerów (2017-dziś)

Artykuł „Attention Is All You Need" (Vaswani et al., 2017) wprowadził architekturę transformer opartą wyłącznie na self-attention. Eliminacja rekurencji umożliwiła masywny paralelizm i trenowanie modeli o setkach miliardów parametrów. BERT (2018), GPT-2 (2019), GPT-3 (2020), ChatGPT (2022), GPT-4 (2023), Claude 3 (2024) — kolejne kamienie milowe pokazują, jak szybko skala modeli przekłada się na zdolność rozumienia języka.

Preprocessing tekstu

Zanim tekst trafi do modelu, wymaga preprocessingu — przekształcenia surowego tekstu w formę zrozumiałą dla algorytmu.

Tokenizacja

Tokenizacja to podział tekstu na tokeny — jednostki przetwarzania. Podejścia:

  • Słowa: „Ala ma kota" → [„Ala", „ma", „kota"] — proste, ale ogromny słownik
  • Znaki: „Ala" → [„A", „l", „a"] — mały słownik, ale bez informacji semantycznej
  • Subword: „playing" → [„play", „##ing"] — kompromis; metody BPE (GPT), WordPiece (BERT), SentencePiece

Współczesne modele (GPT-4, LLaMA) używają BPE (Byte Pair Encoding) — iteracyjne łączenie najczęstszych par znaków w tokeny. Słownik 30-100k tokenów pokrywa dowolny tekst, w tym neologizmy i rzadkie słowa.

Jak działa BPE krok po kroku:

  1. Zaczynamy od znaków: ["l", "o", "w", "e", "r"]
  2. Liczymy częstość par: ("l", "o"), ("o", "w"), ("w", "e"), ("e", "r")
  3. Najczęstszą parę łączymy w nowy token: ("l", "o")"lo"
  4. Powtarzamy aż osiągniemy zadany rozmiar słownika

Konsekwencja: rzadkie słowa są dzielone na mniejsze tokeny (np. „internacjonalizacja" → [„internacjonal", „izacja"]), a popularne słowa pozostają w jednym tokenie (np. „kot" → [„kot"]).

Lematyzacja i stemming

  • Stemming — odcięcie sufiksu: „biegnący" → „biegn". Szybkie, ale niedokładne.
  • Lematyzacja — sprowadzenie do formy bazowej: „biegnący" → „biec". Wyższa jakość, wymaga wiedzy językowej.

Stop words, normalizacja

Usunięcie stop words (a, i, to, w — słowa częste, niskoinformacyjne), lowercasing, usunięcie interpunkcji i znaków specjalnych. Współczesne modele transformerowe nie wymagają tych kroków — same uczą się, co ignorować.

Reprezentacja tekstu — od Bag-of-Words do embeddingów

Bag-of-Words (BoW)

Najprostsza reprezentacja: dokument = wektor częstości słów. „Ala ma kota. Kot ma Alę." → {Ala:1, ma:2, kota:1, Kot:1, Alę:1}. Ignoruje kolejność słów.

TF-IDF

TF-IDF (Term Frequency × Inverse Document Frequency) waży słowa: częste w dokumencie, ale rzadkie w korpusie mają wysoką wagę. Redukuje wpływ powszechnych słów (np. „jest", „to") i podkreśla słowa charakterystyczne.

Embeddingi słów

Embeddingi to gęste wektory liczbowe (typowo 100-300 wymiarów) reprezentujące słowa w przestrzeni semantycznej, gdzie podobne słowa mają bliskie wektory. „Król" - „Mężczyzna" + „Kobieta" ≈ „Królowa".

Modele embeddingów: Word2Vec, GloVe, FastText — więcej w artykule o embeddingach.

Embeddingi kontekstowe

Embeddingi Word2Vec są statyczne — słowo „zamek" ma jeden wektor niezależnie od kontekstu. Modele kontekstowe (ELMo, BERT, GPT) generują dynamiczne embeddingi zależne od kontekstu: „zamek w drzwiach" vs. „zamek na wzgórzu" → różne wektory.

Embeddingi zdań i dokumentów

Sentence-BERT (SBERT, 2019) i modele OpenAI text-embedding-3 generują embeddingi całych zdań i dokumentów (typowo 384-1536 wymiarów). Pozwalają na semantyczne wyszukiwanie, klastrowanie tekstów, deduplikację, rekomendacje treści. Stanowią fundament systemów RAG (Retrieval-Augmented Generation).

Architektura Transformer

Przełom: „Attention Is All You Need"

Artykuł Vaswani et al. (2017) wprowadził architekturę transformer, która zastąpiła RNN/LSTM w NLP. Kluczowa innowacja: self-attention — mechanizm pozwalający każdemu tokenowi „patrzeć" na wszystkie inne tokeny w sekwencji i ważyć ich istotność.

Self-Attention (Scaled Dot-Product Attention)

Dla każdego tokenu obliczane są trzy wektory:

  • Query (Q) — „czego szukam"
  • Key (K) — „co oferuję"
  • Value (V) — „jaka jest moja wartość"

Attention(Q, K, V) = softmax(QKᵀ / √d) · V

Wynik: każdy token otrzymuje ważoną sumę wartości wszystkich tokenów, z wagami proporcjonalnymi do podobieństwa zapytania i kluczy.

Multi-Head Attention

Zamiast jednego attention, stosuje się h głowic (np. 12) — każda z własnym zestawem Q, K, V. Różne głowice uczą się różnych typów zależności: składniowych, semantycznych, referencyjnych.

Architektura enkodera i dekodera

  • Enkoder (BERT): przetwarza sekwencję dwukierunkowo (widzi cały kontekst)
  • Dekoder (GPT): generuje tokeny autoregresyjnie (widzi tylko wcześniejszy kontekst)
  • Encoder-Decoder (T5, oryginalny Transformer): enkoder przetwarza wejście, dekoder generuje wyjście

BERT i modele enkoderowe

BERT (Bidirectional Encoder Representations from Transformers, Google, 2018) to model enkoderowy pretrenowany na dwóch zadaniach:

  1. Masked Language Modeling (MLM) — ukryj 15% tokenów, przewiduj ukryte
  2. Next Sentence Prediction (NSP) — przewiduj, czy zdanie B następuje po zdaniu A

BERT rewolucjonizował NLP: jeden pretrenowany model, fine-tunowany do wielu zadań (klasyfikacja, NER, odpowiadanie na pytania, analiza sentymentu).

Warianty: RoBERTa (lepszy pretraining), ALBERT (mniej parametrów), DistilBERT (szybszy, skompresowany), DeBERTa (ulepszone attention), XLM-RoBERTa (wielojęzyczny).

Zastosowania BERT: analiza sentymentu, klasyfikacja tekstu, rozpoznawanie encji (NER), odpowiadanie na pytania, ranking dokumentów, detekcja plagiatów.

GPT i modele generatywne

GPT (Generative Pre-trained Transformer, OpenAI) to model dekoderowy trenowany autoregresyjnie: przewiduj następny token na podstawie poprzednich.

Ewolucja GPT:

  • GPT-1 (2018): 117M parametrów — proof of concept
  • GPT-2 (2019): 1.5B — „zbyt niebezpieczny do publikacji" (generacja przekonujących tekstów)
  • GPT-3 (2020): 175B — few-shot learning z promptu, bez fine-tuningu
  • GPT-3.5/ChatGPT (2022): RLHF (Reinforcement Learning from Human Feedback) — konwersacyjna AI
  • GPT-4 (2023): multimodalny (tekst + obraz), drastycznie wyższa jakość
  • GPT-4o (2024): natywna multimodalność (tekst, obraz, audio, wideo)

Emergent abilities

Duże modele językowe wykazują zdolności emergentne — umiejętności nieobecne w mniejszych modelach: chain-of-thought reasoning, few-shot learning, rozumienie kodu, wielojęzyczność.

Alignment i RLHF

RLHF (Reinforcement Learning from Human Feedback) to proces dostosowywania modelu do ludzkich preferencji:

  1. Supervised fine-tuning na parach pytanie-odpowiedź
  2. Trening modelu nagrody (reward model) na ocenach ludzkich recenzentów
  3. Optymalizacja polityki modelu za pomocą PPO (Proximal Policy Optimization)

BERT vs GPT — szczegółowe porównanie

BERT i GPT to dwa fundamentalnie różne podejścia do NLP. Wybór zależy od zadania.

Aspekt BERT GPT
Architektura Enkoder Dekoder
Kierunek attention Dwukierunkowy Autoregresyjny (tylko lewa strona)
Pretraining Masked LM + NSP Next-token prediction
Mocna strona Rozumienie tekstu Generowanie tekstu
Typowe zadania Klasyfikacja, NER, QA extractive Chat, generacja, kod, podsumowania
Inferencja Pojedyncze przejście Token po tokenie (autoregresyjnie)
Rozmiar (typ.) 110M-340M 7B-1T+
Open-source warianty Herbert, RoBERTa, DeBERTa LLaMA, Mistral, Qwen

Kiedy wybrać BERT?

Klasyfikacja maili (spam/nie-spam), analiza sentymentu recenzji produktów, ekstrakcja informacji z dokumentów (NER), wyszukiwanie semantyczne (jako encoder), rerankerzy w wyszukiwarkach. BERT jest szybszy w inferencji (jedno przejście) i mniejszy — łatwiej go uruchomić na własnej infrastrukturze.

Kiedy wybrać GPT?

Chatboty, asystenci AI, generowanie treści (artykuły, opisy produktów), tłumaczenia, code completion, podsumowania abstrakcyjne, agenty AI. GPT jest bardziej elastyczny (jeden model do wielu zadań) i ma emergentne zdolności rozumowania, ale jest droższy w inferencji.

Hybrydy

W praktyce systemy łączą oba podejścia. Przykład wyszukiwarki semantycznej: BERT generuje embeddingi dokumentów (offline) i zapytania (online) → szybki retrieval z indeksu wektorowego → GPT generuje odpowiedź na podstawie pobranych dokumentów. Ten wzorzec to RAG.

Główne zadania NLP

Klasyfikacja tekstu

Przypisanie kategorii: analiza sentymentu (pozytywny/negatywny), detekcja spamu, klasyfikacja tematyczna, detekcja języka. Przykład biznesowy: automatyczna kategoryzacja zgłoszeń do supportu (techniczne / billing / reklamacja) skraca czas odpowiedzi o 40-60%.

Named Entity Recognition (NER)

Identyfikacja encji w tekście: osoby, organizacje, lokalizacje, daty, kwoty. Przykład: „[Jan Kowalski]OSOBA pracuje w [Google]ORG od [2020]DATA." Zastosowanie biznesowe: ekstrakcja danych z faktur (NIP, kwota, data), parsowanie CV (umiejętności, lata doświadczenia), monitoring mediów (kto i co mówi o marce).

Question Answering (QA)

Odpowiadanie na pytania na podstawie kontekstu (extractive QA: wskaż fragment) lub wiedzy modelu (generative QA: sformułuj odpowiedź). Przykład: chatbot wewnętrzny w firmie odpowiada na pytania pracowników na podstawie polityki HR i dokumentacji technicznej.

Streszczanie (Summarization)

  • Extractive: wybranie najważniejszych zdań z tekstu
  • Abstractive: generowanie nowego tekstu streszczającego oryginał

Zastosowanie: podsumowania spotkań w Microsoft Teams, executive summary długich raportów, ekstrakcja kluczowych punktów z artykułów naukowych.

Tłumaczenie maszynowe

Od Google Translate (statystyczne, 2006) przez neuronowe modele seq2seq (2014) po transformery (2017+). Współczesne systemy tłumaczą na poziomie bliskim ludzkiemu w głównych parach językowych. Liderzy 2026: DeepL (jakość), Google Translate (zasięg języków), GPT-4 (kontekst i niuans).

Analiza sentymentu

Określenie emocjonalnego tonu tekstu: pozytywny, negatywny, neutralny. Zastosowania: monitoring marki w social media, analiza opinii klientów po wdrożeniu nowej funkcji, prognozowanie rynku na podstawie sentymentu Twittera.

Generowanie tekstu

Modele GPT, Claude, Gemini generują artykuły, opisy produktów, posty social media, kod. Przykłady produkcyjne: Jasper i Copy.ai dla copywriterów, GitHub Copilot dla developerów, ChatGPT jako asystent biurowy.

NLP w Pythonie — przewodnik dla początkujących

Python dominuje w ekosystemie NLP. Kluczowe biblioteki:

Hugging Face Transformers

Standard branżowy — dostęp do tysięcy pretrenowanych modeli (BERT, GPT, T5, LLaMA) jednym wywołaniem.

from transformers import pipeline

# Analiza sentymentu w polskim
classifier = pipeline("sentiment-analysis",
    model="Voicelab/herbert-base-cased-sentiment-allegro")
result = classifier("Ten produkt jest świetny, polecam każdemu!")
# [{'label': 'POSITIVE', 'score': 0.97}]

spaCy — przemysłowe NLP

import spacy

nlp = spacy.load("pl_core_news_md")
doc = nlp("Jan Kowalski pracuje w Google od 2020 roku.")

for ent in doc.ents:
    print(ent.text, ent.label_)
# Jan Kowalski PER
# Google ORG
# 2020 DATE

Sentence-Transformers — embeddingi semantyczne

from sentence_transformers import SentenceTransformer
import numpy as np

model = SentenceTransformer("paraphrase-multilingual-MiniLM-L12-v2")
zdania = ["AI to przyszłość", "Sztuczna inteligencja zmienia świat"]
embeddings = model.encode(zdania)

# Podobieństwo cosinusowe
sim = np.dot(embeddings[0], embeddings[1]) / (
    np.linalg.norm(embeddings[0]) * np.linalg.norm(embeddings[1]))
print(f"Podobieństwo: {sim:.3f}")  # ~0.85

LangChain i LlamaIndex — orkiestracja LLM

LangChain i LlamaIndex to frameworki budujące aplikacje na bazie LLM: chatboty, agenty, systemy RAG. Pozwalają łączyć wiele modeli, baz wektorowych (Pinecone, Weaviate, Chroma) i narzędzi w spójny pipeline.

Polska scena NLP

  • Herbert (Allegro) — polski BERT, dostępny na Hugging Face
  • Polish RoBERTa (Allegro) — większy i mocniejszy
  • PolBERT — alternatywne polskie BERTy
  • TRurl — polski LLM od ML Research
  • PLLuM — open-source polski LLM (dla administracji)

RAG i NLP w produkcji

RAG (Retrieval-Augmented Generation) to wzorzec łączący wyszukiwanie z generacją. LLM otrzymuje pytanie + pobrane dokumenty z bazy wiedzy → generuje odpowiedź opartą na faktach.

Architektura RAG:

  1. Indeksowanie: dokumenty → embeddingi → baza wektorowa (Pinecone, pgvector, Weaviate)
  2. Retrieval: zapytanie → embedding → top-k podobnych dokumentów
  3. Augmentation: prompt = pytanie + pobrane dokumenty
  4. Generation: LLM odpowiada na podstawie kontekstu

Korzyści RAG:

  • Aktualne informacje (LLM ma wiedzę do określonej daty cutoff)
  • Redukcja halucynacji (model bazuje na pobranych źródłach)
  • Możliwość cytowania źródeł (transparentność)
  • Tańsze niż fine-tuning LLM dla każdej domeny

Przykłady produkcyjne: Microsoft 365 Copilot (RAG na firmowych dokumentach), Notion AI (RAG na workspace), Perplexity (RAG na całym webie), wewnętrzne chatboty firmowe.

Więcej szczegółów technicznych w artykule RAG — Retrieval-Augmented Generation.

Wyzwania NLP

Wielojęzyczność

  • 7000+ języków, większość niskozasobowa (mało danych treningowych)
  • Modele wielojęzyczne (mBERT, XLM-R) osiągają gorsze wyniki w językach z małymi korpusami
  • Polski: 44 mln użytkowników, bogata fleksja (deklinacja, koniugacja), stosunkowo dobre pokrycie w modelach wielojęzycznych

Hallucynacje LLM

Modele generatywne „halucynują" — generują fakty, które brzmią wiarygodnie, ale są fałszywe.

Mitygacje:

  • RAG — retrieval z bazy wiedzy przed generacją
  • Grounding — explicit linking do źródeł
  • Chain-of-thought — promptowanie modelu do pokazywania rozumowania
  • Constrained decoding — wymuszenie generacji zgodnej z gramatyką lub schemą JSON
  • Verification step — drugi LLM weryfikuje odpowiedź pierwszego

Bias i sprawiedliwość

Modele odzwierciedlają biasy z danych treningowych: stereotypy płciowe, rasowe, kulturowe.

Mitygacje: debiasing datasetu, oceny fairness (StereoSet, BOLD), fine-tuning z annotated examples, RLHF z różnorodnymi annotatorami, audyty zewnętrzne.

Prywatność

LLM trenowane na danych z internetu mogą „pamiętać" dane osobowe z korpusu treningowego.

Mitygacje: differential privacy, deduplikacja korpusu, blokowanie wrażliwych zapytań na poziomie API, on-premise deployment dla wrażliwych zastosowań.

Koszty inferencji

GPT-4 kosztuje rzędu $0.01-0.10 za 1000 tokenów. Skalowanie do milionów zapytań dziennie wymaga optymalizacji: kwantyzacja modeli (8-bit, 4-bit), distillation (mniejsze modele uczone od dużych), caching odpowiedzi, prompt compression, użycie SLM (Small Language Models, np. Phi-3, Mistral 7B) tam gdzie wystarczą.

NLP w języku polskim

Narzędzia i modele

  • spaCy z modelem polskim — tokenizacja, POS tagging, NER, dependency parsing
  • Herbert (Allegro) — polski BERT, pretrenowany na polskim korpusie
  • Polish RoBERTa — warianty RoBERTa dla polskiego
  • SlavicBERT — model dla języków słowiańskich
  • GPT-4, Claude — modele wielojęzyczne z dobrą obsługą polskiego
  • TRurl, PLLuM — natywne polskie LLM

Wyzwania polskiego NLP

  • Bogata fleksja (7 przypadków, 3 rodzaje) — większy słownik, trudniejsza lematyzacja
  • Swobodny szyk zdania — trudniejsze parsowanie
  • Stosunkowo mały korpus w porównaniu z angielskim
  • Polski znaki diakrytyczne (ą, ę, ł, ń, ó, ś, ź, ż) — wymagają poprawnej tokenizacji

Korpusy polskie

  • NKJP (Narodowy Korpus Języka Polskiego) — 1.5 mld słów, anotowany lingwistycznie
  • CCNET-Polish — polski subset Common Crawl po deduplikacji
  • OSCAR — wielojęzyczny korpus webowy z polskim subsetem
  • Wikipedia PL — strukturalny tekst encyklopedyczny

Trendy NLP 2024-2026

Small Language Models (SLM)

Po fali coraz większych modeli (GPT-4, Claude 3 Opus) widoczny jest trend ku mniejszym, wyspecjalizowanym modelom: Phi-3, Mistral 7B, Llama 3.2 1B/3B, Gemma 2B. Powód: koszty inferencji, prywatność (deployment lokalny), edge computing (telefony, IoT). Wiele zadań NLP nie wymaga modelu 175B+ — 7B z dobrym fine-tuningiem często wystarcza.

Agenty AI

Agenty łączą LLM z narzędziami (web search, kod, API). Model decyduje samodzielnie, jakie kroki wykonać. Przykłady: Anthropic Claude Computer Use (sterowanie komputerem), AutoGPT, OpenAI Operator. Agenty zmieniają NLP z „odpowiedz na pytanie" na „wykonaj zadanie".

Multimodalność

Modele przyjmują tekst, obraz, audio, wideo. GPT-4o, Gemini, Claude 3.5 Sonnet generują tekst na podstawie obrazów i odwrotnie. NLP staje się elementem szerszych systemów multimodalnych.

Long context

Okno kontekstu modeli rośnie: GPT-4 Turbo 128k tokenów, Claude 3 200k, Gemini 1.5 Pro 1M+ tokenów. Pozwala na analizę całych książek, repozytoriów kodu, długich dokumentów prawnych w jednym promcie. To zmniejsza zapotrzebowanie na klasyczny RAG dla mniejszych baz wiedzy.

Reasoning models

Modele rozumujące (OpenAI o1, o3, DeepSeek R1) używają chain-of-thought wewnętrznie i osiągają lepsze wyniki w matematyce, kodowaniu, planowaniu. To jakościowy skok od „autocomplete na sterydach" do faktycznego rozumowania.

Edge AI dla NLP

Lokalna inferencja LLM na laptopach (Apple Intelligence z Apple M-chips, Qualcomm Snapdragon X) i telefonach (Google AI Core na Pixelach). Konsekwencja dla developerów: można wbudować NLP w aplikację bez wysyłania danych do chmury.

Podsumowanie

NLP przeszło od ręcznych reguł lingwistycznych przez statystyczne modele do ery transformerów i dużych modeli językowych. BERT zrewolucjonizował rozumienie tekstu, GPT — generowanie. ChatGPT i Claude udowodniły, że modele językowe mogą prowadzić naturalne konwersacje, pisać kod, analizować dokumenty i wspomagać decyzje.

Kluczowe wnioski:

  • BERT do rozumienia, GPT do generowania, RAG łączy oba podejścia
  • Python z bibliotekami transformers, spaCy, sentence-transformers to standard branżowy
  • Polski ma rosnący ekosystem (Herbert, PLLuM, TRurl) ale nadal wyzwaniem jest jakość vs angielski
  • Trend 2025+: SLM, agenty, multimodalność, long context

Kluczowe wyzwania to halucynacje, bias, koszty inferencji i wielojęzyczność — ale postęp jest bezprecedensowy. Następne lata przyniosą agenty AI samodzielnie wykonujące zadania, modele lokalne na urządzeniach końcowych i dalsze obniżanie barier wejścia dla developerów.

Co warto czytać dalej: