Tagowanie POS za pomocą NLTK i dzielenie w NLP [PRZYKŁADY]

⚡ Inteligentne podsumowanie

Tagowanie POS przypisuje część mowy do każdego słowa w zdaniu, podczas gdy grupowanie grupuje te oznaczone słowa w znaczące frazy, takie jak frazy rzeczownikowe, dodając płytką strukturę, którą NLTK buduje za pomocą wyrażeń regularnych w Python.

  • 🏷️ Tagowanie punktów sprzedaży: Każde słowo otrzymuje token gramatyczny, taki jak NN, VB lub JJ, wynikający z kontekstu.
  • 🌿 Wydzielanie: Oznaczone słowa grupowane są we frazy. Proces ten nazywany jest również płytkim analizowaniem składniowym.
  • 🔤 Workflow: Najpierw ztokenizuj tekst, następnie zastosuj pos_tag, a potem przeanalizuj go za pomocą gramatyki RegexpParser.
  • 📊 Zliczanie tagów: Counter i FreqDist ujawniają częstotliwości tagów i słów na potrzeby inżynierii cech.
  • 🔗 Kolokacje: Bigramy i trigramy wychwytują pary i trójki wyrazów, wzmacniając cechy tekstu.
  • 🤖 Wykorzystanie sztucznej inteligencji: Uczenie maszynowe i taggery oparte na HMM traktują niejednoznaczne słowa probabilistycznie.

Tagowanie POS za pomocą NLTK i dzielenie na fragmenty w NLP

Oznaczanie punktów sprzedaży

Oznaczanie punktów sprzedaży Tagowanie części mowy (Parts of Speech Tagging) to proces oznaczania słów w formacie tekstowym dla danej części mowy na podstawie jej definicji i kontekstu. Odpowiada on za odczytanie tekstu w danym języku i przypisanie każdemu słowu określonego tokenu (części mowy). Nazywa się to również tagowaniem gramatycznym.

Uczmy się na przykładzie części mowy NLTK:

Input: Everything to permit us.
Output: [('Everything', NN),('to', TO), ('permit', VB), ('us', PRP)]

Kroki przykładu tagowania POS

  • Tokenizuj tekst (word_tokenize)
  • Zastosuj pos_tag do powyższego kroku, czyli nltk.pos_tag(tokenize_text)

Przykłady tagów NLTK POS podano poniżej:

Skrót Znaczenie
CC spójnik koordynacyjny
CD cyfra kardynalna
DT determinant
EX tam egzystencjalny
FW obce słowo
IN Przyimek/spójnik podrzędny
JJ przymiotnik
JJR przymiotnik, stopień wyższy
JJS przymiotnik, stopień najwyższy
LS rynek list
MD modalny
NN rzeczownik, liczba pojedyncza
NNS rzeczownik liczba mnoga
NNP nazwa własna, liczba pojedyncza
NNPS nazwa własna, liczba mnoga
PDT czynnik przesądzający
POS końcówka dzierżawcza
PRP zaimek osobowy
PRP $ zaimek dzierżawczy
RB przysłówek
rozszerzenie RBR przysłówek, stopień wyższy
RBS przysłówek, stopień najwyższy
RP cząstka
DO znacznik nieskończoności
UH wykrzyknik
VB czasownik
GBV czasownik gerundium
VBD czasownik w czasie przeszłym
VBN czasownik imiesłów bierny
VBP czasownik, czas teraźniejszy, nie 3. osoba liczby pojedynczej
VBZ czasownik, czas teraźniejszy z 3. osobą liczby pojedynczej
wdt wh-determiner
WP zaimek wh
WRB wh-przysłówek

Powyższa lista tagów NLTK POS zawiera wszystkie tagi NLTK POS. Tagger NLTK POS służy do przypisywania informacji gramatycznych do każdego słowa w zdaniu. Instalowanie, importowanie i pobieranie wszystkich pakietów POS NLTK zostało zakończone.

Czym jest fragmentacja w NLP?

Wydzielanie W NLP proces ten polega na grupowaniu małych fragmentów informacji w duże jednostki. Głównym zastosowaniem fragmentacji jest tworzenie grup „fraz rzeczownikowych”. Służy ona do nadawania zdaniu struktury poprzez stosowanie tagów POS w połączeniu z wyrażeniami regularnymi. Powstała w ten sposób grupa słów nazywana jest „fragmentami”. Nazywa się ją również płytkim analizą składniową.

W analizie płytkiej między korzeniami a liśćmi istnieje maksymalnie jeden poziom, podczas gdy analiza głęboka obejmuje więcej niż jeden poziom. Analiza płytka jest również nazywana analizą lekką lub fragmentacją.

Zasady dzielenia się

Nie ma z góry określonych reguł, ale można je łączyć w zależności od potrzeb i wymagań. Na przykład, załóżmy, że chcesz oznaczyć rzeczownik, czasownik (w czasie przeszłym), przymiotnik i spójnik współrzędny w zdaniu. Możesz skorzystać z poniższej reguły:

chunk:{***?}

Poniższa tabela przedstawia znaczenie poszczególnych symboli:

Nazwa symbolu OPIS
. Dowolny znak z wyjątkiem nowej linii
* Dopasuj 0 lub więcej powtórzeń
? Dopasuj 0 lub 1 powtórzeń

Teraz napiszmy kod, który pozwoli nam lepiej zrozumieć tę regułę.

from nltk import pos_tag
from nltk import RegexpParser
text ="learn php from guru99 and make study easy".split()
print("After Split:",text)
tokens_tag = pos_tag(text)
print("After Token:",tokens_tag)
patterns= """mychunk:{***?}"""
chunker = RegexpParser(patterns)
print("After Regex:",chunker)
output = chunker.parse(tokens_tag)
print("After Chunking",output)

Wyjście:

After Split: ['learn', 'php', 'from', 'guru99', 'and', 'make', 'study', 'easy']
After Token: [('learn', 'JJ'), ('php', 'NN'), ('from', 'IN'), ('guru99', 'NN'), ('and', 'CC'), ('make', 'VB'), ('study', 'NN'), ('easy', 'JJ')]
After Regex: chunk.RegexpParser with 1 stages:
RegexpChunkParser with 1 rules:
       '***?'>
After Chunking (S
  (mychunk learn/JJ)
  (mychunk php/NN)
  from/IN
  (mychunk guru99/NN and/CC)
  make/VB
  (mychunk study/NN easy/JJ))

Wniosek z powyższej części tagowania mowy Python Przykładem jest to, że „make” jest czasownikiem, który nie jest uwzględniony w regule, więc nie jest oznaczony jako mychunk.

Użyj przypadku fragmentowania

Fragmentacja służy do wykrywania encji. Encja to część zdania, za pomocą której maszyna uzyskuje wartość dla dowolnej intencji.

Example:
Temperature of New York.
Here Temperature is the intention and New York is an entity.

Innymi słowy, fragmentacja służy do wybierania podzbiorów tokenów. Proszę zapoznać się z poniższym kodem, aby zrozumieć, jak fragmentacja służy do wybierania tokenów. W tym przykładzie zobaczysz graf odpowiadający fragmentowi frazy rzeczownikowej.

 import nltk
text = "learn php from guru99"
tokens = nltk.word_tokenize(text)
print(tokens)
tag = nltk.pos_tag(tokens)
print(tag)
grammar = "NP: {
?*}" cp =nltk.RegexpParser(grammar) result = cp.parse(tag) print(result) result.draw() # It will draw the pattern graphically which can be seen in Noun Phrase chunking

Wyjście:

['learn', 'php', 'from', 'guru99']  -- These are the tokens
[('learn', 'JJ'), ('php', 'NN'), ('from', 'IN'), ('guru99', 'NN')]   -- These are the pos_tag
(S (NP learn/JJ php/NN) from/IN (NP guru99/NN))        -- Noun Phrase Chunking

Wykres fragmentacji wyrażeń rzeczownikowych

Wykres fragmentacji frazy rzeczownikowej

Z wykresu możemy wywnioskować, że „learn” i „guru99” to dwa różne tokeny, ale są one klasyfikowane jako fraza rzeczownikowa, podczas gdy token „from” nie należy do frazy rzeczownikowej. Chunking służy do kategoryzowania różnych tokenów w tym samym fragmencie. Wynik będzie zależał od wybranej gramatyki. Ponadto, chunking w NLTK służy do oznaczania wzorców i eksploracji korpusów tekstowych.

Liczenie tagów POS

Omówiliśmy różne poz_tag Wartości zostały już wcześniej omówione. Tutaj dowiesz się, jak liczyć te tagi. Liczenie tagów jest kluczowe dla klasyfikacji tekstu i przygotowania funkcji do operacji języka naturalnego. Najpierw napiszemy działający kod, a następnie wyjaśnimy kolejne kroki.

from collections import Counter
import nltk
text = "Guru99 is one of the best sites to learn WEB, SAP, Ethical Hacking and much more online."
lower_case = text.lower()
tokens = nltk.word_tokenize(lower_case)
tags = nltk.pos_tag(tokens)
counts = Counter( tag for word,  tag in tags)
print(counts)

Wyjście:

Counter({'NN': 5, ',': 2, 'TO': 1, 'CC': 1, 'VBZ': 1, 'NNS': 1, 'CD': 1, '.': 1, 'DT': 1, 'JJS': 1, 'JJ': 1, 'JJR': 1, 'IN': 1, 'VB': 1, 'RB': 1})

Opracowanie kodu:

  1. Użyj pakietu Counter z modułu kolekcji. Counter to podklasa słownika, która przechowuje elementy jako klucze, a ich liczbę jako wartości.
  2. Importuj nltk w celu tokenizacji tekstu.
  3. Wpisz tekst, którego pos_tag chcesz policzyć.
  4. Przed tokenizacją zmień litery wszystkich słów na małe.
  5. Przepuść słowa przez word_tokenize i oblicz pos_tag każdego tokena.
  6. Następnie Counter zlicza całkowitą liczbę wystąpień każdego znacznika w tekście.

Dystrybucja częstotliwości

Rozkład częstotliwości odnosi się do liczby wystąpień wyniku eksperymentu. Służy do określenia częstotliwości występowania każdego słowa w dokumencie. Wykorzystuje Częstotliwość klasa zdefiniowana przez nltk.prawdopodobieństwo modułu. Liczba jest zwiększana o jeden za każdym razem, gdy wystąpi próbka.

Dla dowolnego słowa możemy sprawdzić, ile razy wystąpiło ono w dokumencie. Na przykład:

  • Metoda liczenia: freq_dist.count('and') zwraca liczbę wystąpień operatora „and”. Nazywa się to metodą count.
  • Metoda częstotliwości: freq_dist.freq('and') zwraca częstotliwość danej próbki.

Napiszemy krótki program, który obliczy rozkład częstości występowania każdego słowa w tekście.

import nltk
a = "Guru99 is the site where you can find the best tutorials for Software Testing     Tutorial, SAP Course for Beginners. Java Tutorial for Beginners and much more. Please     visit the site guru99.com and much more."
words = nltk.tokenize.word_tokenize(a)
fd = nltk.FreqDist(words)
fd.plot()

Wyjaśnienie kodu:

  1. Zaimportuj moduł nltk.
  2. Napisz tekst, którego rozkład słów chcesz znaleźć.
  3. Ztokenizuj każde słowo w tekście, który jest przekazywany jako dane wejściowe do modułu FreqDist programu nltk.
  4. Zastosuj każde słowo do nltk.FreqDist w formie listy.
  5. Nanieś słowa na wykres za pomocą funkcji plot().

UWAGA: aby zobaczyć wykres, należy zainstalować bibliotekę matplotlib. Biblioteka ta zlicza wystąpienia każdego słowa w tekście i pomaga w analizie sentymentu opartej na tekście. Kluczowym terminem jest „tokenizacja”: po tokenizacji każde słowo jest sprawdzane pod kątem liczby wystąpień.

Kolokacje: Biggramy i Trigramy

Kolokacje to pary słów występujące wielokrotnie w dokumencie. Oblicza się je na podstawie stosunku liczby tych par do całkowitej liczby słów w dokumencie.

Rozważmy słowa takie jak promienie ultrafioletowe i promienie podczerwone. Słowa ultrafioletowe i promienie nie są używane osobno, dlatego można je traktować jako kolokację. Innym przykładem jest tomografia komputerowa (TK), ponieważ nie mówimy o nich oddzielnie. Kolokacje można podzielić na dwa typy:

  • Bigrams: połączenie dwóch słów
  • Trigramy: połączenie trzech słów

Bigramy i trigramy zapewniają bardziej znaczące i przydatne funkcje dla funkcji, np.tracetapie cji. Są one szczególnie przydatne w analizie sentymentu opartej na tekście.

Przykład bigramów Code:

import nltk
text = "Guru99 is a totally new kind of learning experience."
Tokens = nltk.word_tokenize(text)
output = list(nltk.bigrams(Tokens))
print(output)

Wyjście:

[('Guru99', 'is'), ('is', 'totally'), ('totally', 'new'), ('new', 'kind'), ('kind', 'of'), ('of', 'learning'), ('learning', 'experience'), ('experience', '.')]

Przykład trigramów Code:

Czasami ważne jest, aby zobaczyć parę trzech słów w zdaniu w celu analizy statystycznej i obliczenia częstotliwości. To znowu odgrywa kluczową rolę w formowaniu NLP (przetwarzania języka naturalnego) oraz przewidywania sentymentu na podstawie tekstu. Ten sam kod jest uruchamiany do obliczania trigramów.

import nltk
text = "Guru99 is a totally new kind of learning experience."
Tokens = nltk.word_tokenize(text)
output = list(nltk.trigrams(Tokens))
print(output)

Wyjście:

[('Guru99', 'is', 'totally'), ('is', 'totally', 'new'), ('totally', 'new', 'kind'), ('new', 'kind', 'of'), ('kind', 'of', 'learning'), ('of', 'learning', 'experience'), ('learning', 'experience', '.')]

Tagowanie zdań

Tagowanie zdania polega na dodawaniu etykiet, takich jak czasownik lub rzeczownik, w oparciu o kontekst zdania. Identyfikacja tagów POS jest skomplikowana, dlatego ręczne tagowanie ogólne nie jest możliwe, ponieważ niektóre słowa mają niejednoznaczne znaczenie w zależności od struktury zdania. Konwersja tekstu na listę to ważny krok przed tagowaniem, ponieważ każde słowo jest zapętlane i liczone dla konkretnego tagu.

import nltk
text = "Hello Guru99, You have to build a very good site, and I love visiting your site."
sentence = nltk.sent_tokenize(text)
for sent in sentence:
	 print(nltk.pos_tag(nltk.word_tokenize(sent)))

Code Wyjaśnienie:

  1. Code importować nltk (naturalny Language Toolzestaw, który zawiera podmoduły takie jak tokenizacja zdań i tokenizacja słów).
  2. Tekst, którego tagi mają zostać wydrukowane.
  3. Tokenizacja zdań.
  4. Implementowana jest pętla for, w której słowa są tokenizowane ze zdania, a tag każdego słowa jest drukowany jako wynik.

W Korpusie występują dwa typy taggerów POS:

1. Tager POS oparty na regułach: W przypadku słów o niejednoznacznym znaczeniu stosuje się podejście oparte na regułach, bazujące na informacjach kontekstowych. Polega ono na analizie znaczenia słowa poprzedzającego lub następującego po nim. Dlatego słowa są tagowane zgodnie z regułami gramatycznymi danego języka, takimi jak wielkość liter i interpunkcja. Na przykład tag Brilla.

2. Stochastyczny tager POS: W tej metodzie stosowane są podejścia takie jak częstotliwość czy prawdopodobieństwo. Jeśli słowo jest w zbiorze treningowym najczęściej oznaczane konkretnym tagiem, jest on przypisywany do zdania testowego. Tag słowa zależy nie tylko od własnego tagu, ale także od tagu poprzedniego, dlatego ta metoda nie zawsze jest dokładna.

Tagowanie POS z ukrytym modelem Markowa

Problemy z tagowaniem można również modelować za pomocą ukrytego modelu Markowa (HMM). Traktuje on tokeny wejściowe jako sekwencję obserwowalną, podczas gdy tagi są traktowane jako stany ukryte, a celem jest określenie sekwencji stanów ukrytych. Na przykład, x = x1, x2,…, xn, gdzie x jest sekwencją tokenów, a y = y1, y2, y3, y4…yn jest sekwencją ukrytą.

Jak działa ukryty model Markowa (HMM)?

HMM używa rozkładu łącznego P(x, y), gdzie x to wejściowa sekwencja tokenów, a y to sekwencja tagów. Sekwencja tagów dla x będzie równa argmax w funkcji y1…yn z p(x1, x2,…xn, y1, y2, y3,…). Sklasyfikowaliśmy tagi z tekstu, ale statystyki takich tagów są kluczowe, dlatego w następnej części zajmiemy się ich zliczeniem w celu przeprowadzenia badań statystycznych.

FAQ

Tagowanie POS oznacza każde pojedyncze słowo odpowiadającą mu częścią mowy, taką jak rzeczownik lub czasownik. Dzielenie idzie o krok dalej i grupuje te oznaczone słowa we frazy, podobnie jak frazy rzeczownikowe, nadając zdaniu płytką strukturę.

Analiza płytkiego składu, zwana również fragmentacją lub analizą lekką, zachowuje maksymalnie jeden poziom między korzeniami a liśćmi. Identyfikuje granice fraz bez budowania pełnego drzewa składniowego, co czyni ją szybszą niż analiza głęboka.

Grupowanie słów w grupy oznaczane jest tagami i tworzy frazy, co pozwala systemowi wykrywać jednostki takie jak osoby, lokalizacje, daty czy produkty. Rozpoznawanie jednostek nazwanych opiera się na tych fragmentach, aby np.tract sensownych wartości z surowego tekstu.

Funkcja nltk.pos_tag() przypisuje znaczniki części mowy. Najpierw tokenizujesz tekst za pomocą word_tokenize, a następnie przekazujesz listę tokenów do pos_tag, która zwraca każde słowo sparowane z odpowiadającym mu znacznikiem, takim jak NN, VB lub JJ.

Tak. Nowoczesne tagery AI, trenowane z wykorzystaniem uczenia maszynowego i głębokich sieci neuronowych, rozpoznają niejednoznaczne słowa, ucząc się kontekstu z dużych korpusów, osiągając większą dokładność niż metody oparte na regułach w przypadku tekstu rzeczywistego.

Taggery stochastyczne wykorzystują prawdopodobieństwo wywnioskowane z danych treningowych. Uczenie maszynowe szacuje prawdopodobieństwo każdego tagu dla danego słowa, biorąc pod uwagę otaczające go tagi, a następnie wybiera sekwencję o najwyższym ogólnym prawdopodobieństwie.

Oprócz NLTK, popularne opcje obejmują Przestronny do szybkich procesów produkcyjnych: Stanford CoreNLP i Hugging Face Transformers do tagowania opartego na transformatorach.

W gramatyce fragmentów kropka oznacza dowolny znak z wyjątkiem nowego wiersza, gwiazdka oznacza zero lub więcej powtórzeń, a znak zapytania oznacza zero lub jedno powtórzenie poprzedniego wzorca znacznika POS.

Podsumuj ten post następująco: