Zestaw narzędzi języka naturalnego - analiza
Parsowanie i jego znaczenie w NLP
Słowo „Parsing”, które pochodzi od łacińskiego słowa ‘pars’ (co znaczy ‘part’), służy do wyrysowania z tekstu dokładnego znaczenia lub znaczenia słownikowego. Nazywa się to również analizą syntaktyczną lub analizą składniową. Porównując reguły gramatyki formalnej, analiza składniowa sprawdza tekst pod kątem sensowności. Na przykład zdanie typu „Daj mi gorące lody” zostanie odrzucone przez parser lub analizator składni.
W tym sensie możemy zdefiniować analizę składniową lub analizę składniową lub analizę składni w następujący sposób -
Można go zdefiniować jako proces analizy ciągów symboli w języku naturalnym zgodnie z regułami gramatyki formalnej.
Możemy zrozumieć znaczenie parsowania w NLP za pomocą następujących punktów -
Parser służy do zgłaszania wszelkich błędów składniowych.
Pomaga w naprawie po często występującym błędzie, dzięki czemu przetwarzanie pozostałej części programu może być kontynuowane.
Drzewo parsowania jest tworzone przy pomocy parsera.
Parser służy do tworzenia tablicy symboli, która odgrywa ważną rolę w NLP.
Parser jest również używany do tworzenia reprezentacji pośrednich (IR).
Analiza głęboka kontra płytka
Głębokie analizowanie | Płytkie analizowanie |
---|---|
Podczas głębokiego analizowania strategia wyszukiwania nada zdaniu pełną strukturę składniową. | Jest to zadanie polegające na przeanalizowaniu ograniczonej części informacji składniowych z danego zadania. |
Nadaje się do złożonych aplikacji NLP. | Może być używany do mniej złożonych aplikacji NLP. |
Systemy dialogu i podsumowania to przykłady aplikacji NLP, w których stosuje się głębokie analizowanie. | Ekstrakcja informacji i eksploracja tekstu to przykłady aplikacji NLP, w których stosuje się głębokie analizowanie. |
Nazywa się to również pełnym analizowaniem. | Nazywa się to również kruszeniem. |
Różne typy parserów
Jak już wspomniano, parser jest w zasadzie proceduralną interpretacją gramatyki. Wyszukuje optymalne drzewo dla danego zdania po przeszukaniu przestrzeni różnych drzew. Zobaczmy poniżej niektóre z dostępnych parserów -
Parser zstępowania rekurencyjnego
Rekurencyjne analizowanie zstępujące jest jedną z najprostszych form analizowania. Oto kilka ważnych punktów dotyczących parsera zejścia rekurencyjnego:
Jest to proces odgórny.
Próbuje zweryfikować, czy składnia strumienia wejściowego jest poprawna, czy nie.
Odczytuje zdanie wejściowe od lewej do prawej.
Jedną konieczną operacją dla parsera zejścia rekurencyjnego jest odczytanie znaków ze strumienia wejściowego i dopasowanie ich do terminali z gramatyki.
Parser z redukcją zmiany biegów
Poniżej znajduje się kilka ważnych punktów dotyczących parsera redukcji przesunięcia -
Jest to prosty proces oddolny.
Próbuje znaleźć sekwencję słów i wyrażeń, które odpowiadają prawej stronie produkcji gramatycznej i zastępuje je lewą stroną produkcji.
Powyższa próba znalezienia sekwencji słów trwa aż do skrócenia całego zdania.
Innymi prostymi słowami, parser z przesunięciem i redukcją zaczyna od symbolu wejściowego i próbuje skonstruować drzewo parsera aż do symbolu początkowego.
Parser wykresów
Oto kilka ważnych punktów dotyczących parsera wykresów -
Przydaje się głównie lub nadaje się do niejednoznacznych gramatyk, w tym gramatyk języków naturalnych.
Stosuje programowanie dynamiczne do problemów z analizą.
Ze względu na programowanie dynamiczne, hipotetyczne wyniki częściowe są przechowywane w strukturze zwanej „wykresem”.
„Wykres” można również wykorzystać ponownie.
Parser Regexp
Analiza Regexp jest jedną z najczęściej używanych technik analizy. Oto kilka ważnych punktów dotyczących parsera Regexp -
Jak sama nazwa wskazuje, używa wyrażenia regularnego zdefiniowanego w formie gramatyki na napisie ze znacznikiem POS.
Zasadniczo używa tych wyrażeń regularnych do analizowania zdań wejściowych i generowania z tego drzewa parsowania.
Przykład
Poniżej znajduje się działający przykład parsera Regexp -
import nltk
sentence = [
("a", "DT"),
("clever", "JJ"),
("fox","NN"),
("was","VBP"),
("jumping","VBP"),
("over","IN"),
("the","DT"),
("wall","NN")
]
grammar = "NP:{<DT>?<JJ>*<NN>}"
Reg_parser = nltk.RegexpParser(grammar)
Reg_parser.parse(sentence)
Output = Reg_parser.parse(sentence)
Output.draw()
Wynik
Analiza zależności
Analiza zależności (DP), nowoczesny mechanizm analizy, którego główną koncepcją jest to, że każda jednostka językowa, tj. Słowa, są ze sobą powiązane poprzez bezpośrednie łącze. Te bezpośrednie linki są w rzeczywistości‘dependencies’w języku. Na przykład poniższy diagram przedstawia gramatykę zależności dla zdania“John can hit the ball”.
Pakiet NLTK
Mamy dwa sposoby wykonywania analizy zależności za pomocą NLTK -
Parser zależności probabilistycznej, rzutowej
To pierwszy sposób, w jaki możemy przeprowadzić analizę zależności za pomocą NLTK. Ale ten parser ma ograniczenie uczenia się z ograniczonym zestawem danych uczących.
Parser Stanford
To kolejny sposób, w jaki możemy przeprowadzić analizę zależności za pomocą NLTK. Stanford parser to najnowocześniejszy parser zależności. NLTK ma otokę. Aby z niego skorzystać, musimy pobrać następujące dwie rzeczy -
Parser Stanford CoreNLP .
Model językowy dla żądanego języka. Na przykład model języka angielskiego.
Przykład
Po pobraniu modelu możemy go używać przez NLTK w następujący sposób -
from nltk.parse.stanford import StanfordDependencyParser
path_jar = 'path_to/stanford-parser-full-2014-08-27/stanford-parser.jar'
path_models_jar = 'path_to/stanford-parser-full-2014-08-27/stanford-parser-3.4.1-models.jar'
dep_parser = StanfordDependencyParser(
path_to_jar = path_jar, path_to_models_jar = path_models_jar
)
result = dep_parser.raw_parse('I shot an elephant in my sleep')
depndency = result.next()
list(dependency.triples())
Wynik
[
((u'shot', u'VBD'), u'nsubj', (u'I', u'PRP')),
((u'shot', u'VBD'), u'dobj', (u'elephant', u'NN')),
((u'elephant', u'NN'), u'det', (u'an', u'DT')),
((u'shot', u'VBD'), u'prep', (u'in', u'IN')),
((u'in', u'IN'), u'pobj', (u'sleep', u'NN')),
((u'sleep', u'NN'), u'poss', (u'my', u'PRP$'))
]