Język polski i AI: Przewodnik po NLP dla programistów
Mateusz Kędziora

Cześć! Zastanawiasz się, jak wykorzystać sztuczną inteligencję do analizy i przetwarzania języka polskiego? Świetnie trafiłeś! W tym artykule przeprowadzimy Cię przez świat NLP (Natural Language Processing) – dziedziny, która łączy komputery i język. Dowiesz się, czym jest NLP, do czego służy, jakie narzędzia są dostępne dla języka polskiego i jak możesz wykorzystać tę wiedzę w swoich projektach. Przygotuj się na sporą dawkę wiedzy i praktycznych przykładów kodu!
Co to jest NLP i dlaczego jest takie fajne?
NLP, czyli Przetwarzanie Języka Naturalnego (z angielskiego Natural Language Processing), to dziedzina nauki, która zajmuje się tym, żeby komputery rozumiały, interpretowały i generowały ludzki język. Innymi słowy, chodzi o to, aby maszyny mogły “rozmawiać” z nami w naszym języku, a my z nimi.
Wyobraź sobie, że piszesz do bota: “Potrzebuję czerwone buty w rozmiarze 42”. Bez NLP bot nie zrozumie, o co Ci chodzi. Z NLP – bot wie, że szukasz konkretnego produktu (buty), w konkretnym kolorze (czerwony) i rozmiarze (42). I to wszystko bez konieczności pisania skomplikowanych poleceń!
NLP ma mnóstwo zastosowań, które na co dzień ułatwiają nam życie. Przykłady? Proszę bardzo:
- Analiza sentymentu: Sprawdzasz, czy recenzje produktu w internecie są pozytywne czy negatywne. To bardzo przydatne w marketingu.
- Tłumaczenia maszynowe: Używasz Google Translate do zrozumienia zagranicznego artykułu.
- Chatboty: “Rozmawiasz” z botem na stronie internetowej, aby uzyskać pomoc.
- Rozpoznawanie mowy: Mówisz do swojego telefonu, żeby wysłać wiadomość.
- Ekstrakcja informacji: Wyciągasz ważne informacje z długich tekstów, np. daty, nazwiska, lokalizacje.
- Klasyfikacja tekstu: Automatycznie przypisujesz artykuły do odpowiednich kategorii tematycznych.
- Korekta językowa: Programy do sprawdzania pisowni i gramatyki.
Specyfika języka polskiego – czyli dlaczego nie jest tak łatwo
Zanim rzucimy się na głęboką wodę, musimy porozmawiać o specyfice języka polskiego. Niestety, dla komputerów nie jest on tak prosty jak angielski. Dlaczego?
- Odmiana przez przypadki: Mamy ich aż siedem! To oznacza, że jedno słowo może mieć wiele różnych form. Komputer musi to wszystko “pamiętać”.
- Odmiana przez osoby, liczby i rodzaje: Kolejne komplikacje! Czasowniki i przymiotniki odmieniają się na różne sposoby w zależności od kontekstu.
- Szyk wyrazów: W języku polskim kolejność słów w zdaniu jest bardziej elastyczna niż w angielskim. Komputer musi analizować całe zdanie, aby zrozumieć jego sens.
- Słowa o wielu znaczeniach: To normalne w każdym języku, ale w polskim, w zależności od kontekstu, te same słowa mogą znaczyć zupełnie co innego, co sprawia trudność w jednoznacznej interpretacji.
Te cechy sprawiają, że przetwarzanie języka polskiego jest trudniejsze niż angielskiego. Dlatego potrzebujemy specjalnych narzędzi i technik, które uwzględniają te wyzwania.
Narzędzia do NLP po polsku – czyli czym się bawimy?
Na szczęście dla nas, programistów, istnieje wiele bibliotek i narzędzi, które ułatwiają pracę z językiem polskim. Omówimy teraz kilka popularnych opcji.
1. spaCy – Kombajn do zadań specjalnych
spaCy to jedna z najpopularniejszych bibliotek do NLP. Jest szybka, wydajna i oferuje wiele gotowych funkcji. Co ważne, ma wsparcie dla języka polskiego!
Instalacja:
pip install -U spacy
python -m spacy download pl_core_news_sm
Opis:
pip install -U spacy
: Instaluje spaCy.python -m spacy download pl_core_news_sm
: Pobiera model językowy dla języka polskiego.pl_core_news_sm
to mniejszy model, idealny do szybkiego prototypowania. Istnieją też większe, dokładniejsze modele, np.pl_core_news_md
lubpl_core_news_lg
.
Przykład użycia:
import spacy
# Załaduj model językowy
nlp = spacy.load("pl_core_news_sm")
# Przetwórz tekst
text = "Dzisiaj jest piękny dzień. Chcę kupić nowe buty w sklepie internetowym."
doc = nlp(text)
# Wyświetl tokeny i ich atrybuty
for token in doc:
print(token.text, token.pos_, token.dep_)
Opis kodu:
import spacy
: Importuje bibliotekę spaCy.nlp = spacy.load("pl_core_news_sm")
: Ładuje model językowy dla języka polskiego. Model ten zawiera informacje o gramatyce, słownictwie i innych cechach języka polskiego.text = ...
: Definiuje tekst, który chcemy przetworzyć.doc = nlp(text)
: Przetwarza tekst za pomocą załadowanego modelu. Wynikiem jest obiektdoc
, który zawiera informacje o tekście, takie jak tokeny, części mowy, zależności składniowe itp.for token in doc:
: Iteruje po tokenach w obiekciedoc
.print(token.text, token.pos_, token.dep_)
: Wyświetla tekst tokenu, jego część mowy (token.pos_
) i zależność składniową (token.dep_
).
Co dostajemy?
Kod wyświetli każdy wyraz w zdaniu (token) wraz z informacją o tym, jaką pełni funkcję w zdaniu (część mowy) i jaką ma relację z innymi wyrazami (zależność składniowa). Przykładowy wynik:
Dzisiaj ADV advmod
jest AUX cop
piękny ADJ amod
dzień NOUN nsubj
. PUNCT punct
Chcę VERB ROOT
kupić VERB xcomp
nowe ADJ amod
buty NOUN obj
w ADP case
sklepie NOUN nmod
internetowym ADJ amod
. PUNCT punct
Możliwości spaCy:
- Tokenizacja: Podział tekstu na pojedyncze słowa (tokeny).
- Oznaczanie części mowy (PoS tagging): Przypisywanie każdemu słowu odpowiedniej kategorii gramatycznej (np. rzeczownik, czasownik, przymiotnik).
- Lematyzacja: Sprowadzanie słów do ich podstawowej formy (np. “biegałem” -> “biegać”).
- Rozpoznawanie nazw własnych (NER): Identyfikacja nazw osób, organizacji, lokalizacji itp.
- Analiza zależności składniowych: Określanie, jak poszczególne słowa są powiązane ze sobą w zdaniu.
2. Transformers – Moc głębokiego uczenia
Transformers to biblioteka od Hugging Face, która oferuje dostęp do wielu modeli językowych opartych na architekturze Transformer. Modele te są trenowane na ogromnych zbiorach danych i osiągają bardzo dobre wyniki w różnych zadaniach NLP. Dla języka polskiego dostępne są modele BERT, RoBERTa i inne, wytrenowane na polskich tekstach.
Instalacja:
pip install transformers
Przykład użycia (analiza sentymentu z wykorzystaniem modelu allegro/herbert-base-cased
)
from transformers import pipeline
# Załaduj model do analizy sentymentu
sentiment_pipeline = pipeline("sentiment-analysis", model="allegro/herbert-base-cased")
# Przetwórz tekst
text = "To jest naprawdę świetny produkt! Polecam wszystkim."
result = sentiment_pipeline(text)
# Wyświetl wynik
print(result)
Opis kodu:
from transformers import pipeline
: Importuje klasępipeline
z bibliotekitransformers
.sentiment_pipeline = pipeline("sentiment-analysis", model="allegro/herbert-base-cased")
: Tworzy potok (pipeline) do analizy sentymentu, wykorzystując modelallegro/herbert-base-cased
.allegro/herbert-base-cased
to model wytrenowany przez Allegro na dużym zbiorze danych w języku polskim. Jest to dobry wybór do zadań związanych z przetwarzaniem polskiego tekstu.text = ...
: Definiuje tekst, który chcemy przeanalizować.result = sentiment_pipeline(text)
: Przetwarza tekst za pomocą potoku analizy sentymentu.print(result)
: Wyświetla wynik analizy.
Co dostajemy?
Kod wyświetli wynik analizy sentymentu, czyli informację o tym, czy tekst jest pozytywny, negatywny czy neutralny, wraz z prawdopodobieństwem. Przykładowy wynik:
[{'label': 'POZYTYWNY', 'score': 0.999...}]
Możliwości Transformers:
- Analiza sentymentu: Określanie emocjonalnego wydźwięku tekstu.
- Klasyfikacja tekstu: Przypisywanie tekstów do odpowiednich kategorii.
- Odpowiadanie na pytania: Znajdowanie odpowiedzi na pytania w danym tekście.
- Generowanie tekstu: Tworzenie nowych tekstów na podstawie zadanych parametrów.
- Rozpoznawanie nazw własnych (NER): Identyfikacja nazw osób, organizacji, lokalizacji itp. (często dokładniejsze niż w spaCy).
3. NLTK – Klasyka gatunku
NLTK (Natural Language Toolkit) to biblioteka, która istnieje już od dłuższego czasu i oferuje wiele narzędzi do przetwarzania języka naturalnego. Jest bardziej ogólna niż spaCy i wymaga więcej pracy, ale daje większą kontrolę nad procesem.
Instalacja:
pip install nltk
Przykład użycia (tokenizacja i oznaczanie części mowy z wykorzystaniem polskich zasobów NLTK):
import nltk
from nltk.tokenize import word_tokenize
from nltk.corpus import alpino
# Pobierz zasoby (jeśli jeszcze nie masz)
nltk.download('punkt')
nltk.download('averaged_perceptron_tagger')
nltk.download('alpino')
# Przetwórz tekst
text = "To jest przykład użycia NLTK do przetwarzania języka polskiego."
tokens = word_tokenize(text, language='polish')
# Oznacz części mowy
tagged = nltk.pos_tag(tokens, lang='pol')
# Wyświetl wynik
print(tagged)
Opis kodu:
import nltk
: Importuje bibliotekę NLTK.from nltk.tokenize import word_tokenize
: Importuje funkcjęword_tokenize
do tokenizacji tekstu.from nltk.corpus import alpino
: Importuje korpus Alpino, który zawiera dane do trenowania modeli dla języka polskiego.nltk.download('punkt')
,nltk.download('averaged_perceptron_tagger')
,nltk.download('alpino')
: Pobiera niezbędne zasoby NLTK (jeśli jeszcze ich nie masz).text = ...
: Definiuje tekst, który chcemy przetworzyć.tokens = word_tokenize(text, language='polish')
: Tokenizuje tekst za pomocą funkcjiword_tokenize
. Parametrlanguage='polish'
informuje, że tekst jest w języku polskim.tagged = nltk.pos_tag(tokens, lang='pol')
: Oznacza części mowy dla każdego tokenu.print(tagged)
: Wyświetla wynik.
Co dostajemy?
Kod wyświetli listę tokenów wraz z ich oznaczeniami części mowy. Przykładowy wynik:
[('To', 'NOUN'), ('jest', 'VERB'), ('przykład', 'NOUN'), ('użycia', 'NOUN'), ('NLTK', 'NOUN'), ('do', 'ADP'), ('przetwarzania', 'NOUN'), ('języka', 'NOUN'), ('polskiego', 'ADJ'), ('.', 'PUNCT')]
Możliwości NLTK:
- Tokenizacja: Podział tekstu na tokeny.
- Oznaczanie części mowy (PoS tagging): Przypisywanie słowom kategorii gramatycznych.
- Lematyzacja: Sprowadzanie słów do podstawowej formy.
- Stopwords: Usuwanie słów, które nie wnoszą wiele informacji (np. “i”, “oraz”, “ale”).
- Stemming: Uproszczona wersja lematyzacji, usuwająca końcówki słów.
Porównanie narzędzi
Narzędzie | Zalety | Wady | Poziom trudności |
---|---|---|---|
spaCy | Szybki, wydajny, łatwy w użyciu, dobre wsparcie dla języka polskiego | Mniej konfigurowalny niż NLTK | Początkujący |
Transformers | Bardzo dokładny, wykorzystuje modele głębokiego uczenia | Wymaga więcej zasobów (np. GPU), bardziej skomplikowany w użyciu | Zaawansowany |
NLTK | Duża kontrola, wiele algorytmów, możliwość dostosowania | Wymaga więcej pracy, mniej wydajny niż spaCy | Średniozaawansowany |
Przykłady zastosowań NLP w różnych dziedzinach
Teraz, gdy już wiemy, jakie narzędzia mamy do dyspozycji, zobaczmy, jak możemy je wykorzystać w praktyce.
1. Marketing: Analiza sentymentu opinii o produkcie
Wyobraź sobie, że prowadzisz sklep internetowy i chcesz wiedzieć, co klienci myślą o Twoich produktach. Możesz użyć NLP do analizy recenzji i komentarzy.
from transformers import pipeline
sentiment_pipeline = pipeline("sentiment-analysis", model="allegro/herbert-base-cased")
reviews = [
"Ten produkt jest rewelacyjny! Polecam każdemu.",
"Jestem bardzo niezadowolony z jakości. Nie polecam.",
"Produkt jest ok, ale spodziewałem się czegoś lepszego.",
"Super! Spełnił moje oczekiwania w 100%."
]
for review in reviews:
result = sentiment_pipeline(review)
print(f"Recenzja: {review}")
print(f"Sentym: {result[0]['label']}, Wynik: {result[0]['score']:.4f}\n")
Wynik:
Recenzja: Ten produkt jest rewelacyjny! Polecam każdemu.
Sentym: POZYTYWNY, Wynik: 0.9997
Recenzja: Jestem bardzo niezadowolony z jakości. Nie polecam.
Sentym: NEGATYWNY, Wynik: 0.9994
Recenzja: Produkt jest ok, ale spodziewałem się czegoś lepszego.
Sentym: NEGATYWNY, Wynik: 0.9892
Recenzja: Super! Spełnił moje oczekiwania w 100%.
Sentym: POZYTYWNY, Wynik: 0.9999
Dzięki tej analizie możesz szybko zidentyfikować, które produkty są dobrze oceniane, a które wymagają poprawy.
2. Obsługa klienta: Chatbot odpowiadający na pytania
Chatboty to świetny sposób na automatyzację obsługi klienta. Możesz wytrenować model, który będzie odpowiadał na najczęściej zadawane pytania.
# Przykład uproszczony - wymaga bardziej zaawansowanego modelu i danych
# do realnego zastosowania
def chatbot(pytanie):
if "dostawa" in pytanie:
return "Dostawa trwa zwykle 2-3 dni robocze."
elif "reklamacja" in pytanie:
return "Reklamacje można składać poprzez formularz na naszej stronie."
else:
return "Przepraszam, nie rozumiem pytania. Proszę spróbować jeszcze raz."
# Przykładowe użycie
print(chatbot("Ile trwa dostawa?"))
print(chatbot("Jak złożyć reklamację?"))
print(chatbot("Jaki jest numer telefonu do biura?"))
Wynik:
Dostawa trwa zwykle 2-3 dni robocze.
Reklamacje można składać poprzez formularz na naszej stronie.
Przepraszam, nie rozumiem pytania. Proszę spróbować jeszcze raz.
Ten przykład jest bardzo prosty, ale pokazuje ideę. W rzeczywistości potrzebujesz bardziej zaawansowanego modelu, który będzie w stanie zrozumieć bardziej złożone pytania i udzielać bardziej precyzyjnych odpowiedzi. Możesz użyć modeli Transformers do stworzenia takiego chatbota.
3. Edukacja: Automatyczne sprawdzanie esejów
NLP może być również wykorzystywane w edukacji do automatycznego sprawdzania esejów i udzielania informacji zwrotnej uczniom.
# Przykład uproszczony - wymaga bardziej zaawansowanego modelu i danych
# do realnego zastosowania
def ocena_eseju(esej):
if "argumenty" not in esej:
return "Esej nie zawiera argumentów."
elif "gramatyka" not in esej:
return "Esej zawiera błędy gramatyczne."
else:
return "Esej jest dobrze napisany."
# Przykładowe użycie
print(ocena_eseju("Esej o tematyce politycznej."))
print(ocena_eseju("Esej z błędami gramatycznymi."))
print(ocena_eseju("Dobrze napisany esej z argumentami i poprawną gramatyką."))
Wynik:
Esej nie zawiera argumentów.
Esej zawiera błędy gramatyczne.
Esej jest dobrze napisany.
Podobnie jak w przypadku chatbota, ten przykład jest bardzo uproszczony. W praktyce potrzebujesz bardziej zaawansowanych technik NLP, aby dokładnie ocenić esej. Możesz użyć spaCy do analizy gramatycznej i składniowej, a także modeli Transformers do oceny treści i argumentacji.
Wyzwania w NLP dla języka polskiego
Praca z językiem polskim w NLP wiąże się z pewnymi wyzwaniami, o których warto pamiętać:
- Dostępność danych: W porównaniu z językiem angielskim, dostępność dużych zbiorów danych w języku polskim jest ograniczona. To utrudnia trenowanie modeli NLP.
- Złożoność języka: Jak już wspomnieliśmy, język polski jest językiem fleksyjnym, co oznacza, że słowa odmieniają się przez przypadki, liczby, rodzaje i osoby. To sprawia, że analiza gramatyczna i składniowa jest trudniejsza.
- Brak standardowych narzędzi: Nie wszystkie narzędzia NLP są równie dobrze rozwinięte dla języka polskiego jak dla angielskiego. Czasami trzeba korzystać z niestandardowych rozwiązań.
Mimo tych wyzwań, praca z NLP dla języka polskiego jest fascynująca i daje wiele możliwości.
Co dalej? – Materiały do nauki i eksperymentowania
Mam nadzieję, że ten artykuł dał Ci solidne podstawy do rozpoczęcia swojej przygody z NLP dla języka polskiego. Pamiętaj, że najlepszym sposobem na naukę jest eksperymentowanie. Pobaw się kodem, spróbuj rozwiązać własne problemy i nie bój się popełniać błędów.
Oto kilka linków do materiałów, które mogą Ci się przydać:
- spaCy:
- Oficjalna dokumentacja: https://spacy.io/
- Modele językowe dla języka polskiego: https://spacy.io/models/pl
- Transformers (Hugging Face):
- Oficjalna dokumentacja: https://huggingface.co/transformers/
- Modele dla języka polskiego: https://huggingface.co/models?language=pl
- Tutoriale: https://huggingface.co/course/
- NLTK:
- Oficjalna dokumentacja: https://www.nltk.org/
- Podręcznik: https://www.nltk.org/book/
- Kursy online:
- Artykuły i blogi:
- Przeszukaj Medium, Towards Data Science, Kaggle – znajdziesz tam wiele artykułów i tutoriali na temat NLP.
Pamiętaj, że nauka to proces. Nie zrażaj się trudnościami i ciesz się każdym sukcesem. Powodzenia!
A jeśli spodobał Ci się ten artykuł, koniecznie sprawdź inne posty na naszym blogu. Znajdziesz tam więcej ciekawych informacji i porad dla programistów. Do zobaczenia!
Polecane artykuły
Docker vs Kubernetes: Który dla Ciebie w 2025?
Docker i Kubernetes objaśnione! Która technologia lepsza dla początkujących w 2025? Porównanie, przykłady i przyszłość.
Mateusz Kędziora
DevOps: Automatyzacja zadań sysadmina dla programistów
Zautomatyzuj pracę sysadmina w środowisku DevOps! Praktyczne przykłady, skrypty, Ansible, Terraform, Prometheus i Grafana.
Mateusz Kędziora
Automatyzacja Linux/macOS z Bash: Praktyczny Przewodnik
Zacznij automatyzować system Linux/macOS z Bash! Dowiedz się, czym jest Bash, jak pisać skrypty i używać podstawowych komend.
Mateusz Kędziora