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

2/24/2025 Sztuczna Inteligencja

Mateusz Kędziora

image

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 lub pl_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 obiekt doc, 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 obiekcie doc.
  • 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 biblioteki transformers.
  • sentiment_pipeline = pipeline("sentiment-analysis", model="allegro/herbert-base-cased"): Tworzy potok (pipeline) do analizy sentymentu, wykorzystując model allegro/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ą funkcji word_tokenize. Parametr language='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ędzieZaletyWadyPoziom trudności
spaCySzybki, wydajny, łatwy w użyciu, dobre wsparcie dla języka polskiegoMniej konfigurowalny niż NLTKPoczątkujący
TransformersBardzo dokładny, wykorzystuje modele głębokiego uczeniaWymaga więcej zasobów (np. GPU), bardziej skomplikowany w użyciuZaawansowany
NLTKDuża kontrola, wiele algorytmów, możliwość dostosowaniaWymaga 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ć:

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