Ананя Банерджи

24 май · 10 минути четене

Синтактичният анализ е процес на анализ на всички думи в изречението и идентифициране на техните синтактични и/или семантични роли. Точно както подсъзнателно използваме граматика в родния си език, за да формираме и разберем изречение. По същия начин използваме граматиката в НЛП, за да разгадаем как е изградено изречение и да разберем неговата синтактична и семантична роля. Първоначално има два вида синтактичен анализ: Анализ на избирателния район и разбор на зависимост.

света

Анализ на зависимостта тъй като името su g gests се фокусира върху разбиването на изречение на думи или лексеми или фрази и след това анализиране на бинарните зависимости между тях, за да се разберат техните граматични роли. Помага да се отчетат семантичните отношения в изречение.

Малко от бинарните връзки, които анализът на зависимост може да идентифицира, са показани по-долу:

Анализът на зависимост обикновено създава такива взаимоотношения, използвайки насочени дъги, където единият край на дъгата е думата на главата, а краят, към който сочи дъгата, е самата дума. Глава дума във фраза (група думи) е просто дума, при премахването на която фразата губи значението си.

Глава дума във фраза (група думи) е просто дума, при премахването на която фразата губи значението си.

Фраза: „Добрият съсед“

Тук, ако премахнете думата „съсед“, вие губите всяко възможно логическо значение на фразата, тъй като „хубавото“ само по себе си няма значение. По този начин главата на тази фраза е „съсед“.

Сега насочените дъги и възли не ви ли напомнят за насочена графика? Ако го направи, значи сте напълно прав! Дървото на зависимостите, което получаваме след извършване на синтактичен анализ, не е нищо друго освен насочена графика, където всички думи са върхове и има точно една входяща дъга към всеки връх или дума, но коренът. Това е така, защото само кореновият връх (коренна дума) на дървото на зависимостите е възел, където няма входящи дъги. Също така, винаги има уникален път от корен до всеки друг възел в графиката.

Сега, нека ви покажа пример за разбор на зависимостите.

Изречение: Роуз отмени полета си до Дубай

Сега, вижте анализа на зависимостта на това изречение.

Тук клаузални отношения като nsubj и dobj идентифицират субекта като „Роза“, а директният обект на предиката „отменен“ като „полет“. Моля, обърнете внимание, че „отменено“ е главната дума в тези две фрази и това е единственият възел в графиката без входяща дъга, като по този начин го прави ROOT. Отношенията като подготовка показват, че главата на предложното отношение „към“ е „полет“. Релацията poss е притежателен модификатор и показва, че „her“ е притежателен модификатор за главна дума „полет“ и pobj демонстрира, че обектът на предлог „Дубай“ е свързан с неговата главна дума „to“.

Накратко, вече можем да видим как всяка дума в даденото изречение е структурирана семантично и имаме ограничена информация за всички възможни семантично изводими двоични отношения в даденото изречение. По този начин едно огромно предимство на разбора на зависимостта е, че то осигурява сближаване на семантичната връзка между предикатите и техните аргументи [1]. Друго предимство на синтактичния анализ е зависимостта от синтактичен анализ на изречения на език, където реда на думите е по-гъвкав. С други думи, езици, където човек може свободно да поставя определени части на речта по-либерално, разборът на зависимости ни помага да получим важна семантична информация за текста.

Моля, обърнете внимание, че това е само кратък пример, съдържащ няколко зависимости. Ако искате да научите повече за такива взаимоотношения, моля, разгледайте ръководството за типизирани зависимости на Станфорд.

Сега, след като разбираме какво прави разбор на зависимост, следващият важен въпрос е разбирането къде може да се използва. Подобна техника на синтактичен анализ е доста важна за приложения като разрешаване на ядрото, отговори на въпроси, извличане на информация и т.н., при които разбирането на семантичните отношения в изречение е от основно значение.

Даден по-долу е пример за намиране на анализ на зависимостта на изречение, използвайки spacy.

Анализ на избирателен район от друга страна включва вземане предвид на синтактична информация за изречение. Той разбива изречение на фрази и комбинира фрази съгласно предварително определена граматика и лексикон (или лексика), за да образува дърво, известно като парсиращо дърво. Фразите могат да бъдат съществителни фрази (NP), глаголна фраза (VP), адвербиална фраза, прилагателна фраза и/или предложна фраза (PP). По този начин разборът на избирателни единици има ролята на синтактичен парсер.

Преди да продължим по-нататък, позволете ми бързо да ви кажа какво е граматика в НЛП. Граматика в обработката на естествен език е официална спецификация на всички правила на всеки език. В тази статия ще използваме английския като основен език, за да опростим обяснението!

Съществителна фраза (NP): „Страхотната кола“

Но не е ли тази фраза направена и от други части на речта?

# “The”: статия/определител; „Страхотно“: прилагателно; „Кола“: Съществително име

Как можем да представим това от гледна точка на граматичните правила?

Казваме, NP → Det Adj Noun

Тук Det, Adj и Noun се наричат ​​терминали, тъй като директно указват думи в лексикона или лексиката. Те могат да изглеждат така в лексикона:

По този начин всички правила в нашата английска граматика могат да бъдат представени по подобен начин. И така, има ли само един вид граматичен тип или има повече? Отговорът е Да! Класификацията на Чомски ни дава предимно 4 вида граматика.

- Тип 0: Неограничен Грамер

Формат: x → y, където x и y могат да бъдат нетерминали и/или терминали. Няма никакво ограничение.

- Тип 1: Граматика, чувствителна към контекста

Формат: xAy → xzy, където x, y и z могат да бъдат всякакви, а A е нетерминал в контекста xAy.

- Тип 2: Граматика без контекст

Формат: A → x, където A е нетерминален, а x може да бъде последователност от терминали или нетерминали.

- Тип 3: Редовна граматика

Формат 1: A → bt, където A и b са нетерминали, а t е терминал.

Формат 2: A → t, където A е нетерминал, а t е терминал.

По този начин можем да създадем граматика, принадлежаща към всякакъв тип според нашите нужди и да я използваме за синтактичен анализ на изречение. Заради лекота, нека приемем, че използваме Редовна граматика в тази статия, освен ако не е посочено друго.

Сега нека се върнем към разбирането на анализирането на избирателните групи!

Анализатор на избирателни райони създава дърво за синтактичен анализ за всяко изречение. Нека разгледаме един пример.

  • S → NP VP
  • NP → NNP
  • VP → VBZ NP
  • NP → DT NN
  • NNP → Роза, Лили, Орхидеи
  • VBZ → е, са
  • DT → a, the, an
  • NN → цвете

Дървото за анализ на това изречение е показано по-долу.

На изображението, показано по-горе, можете да видите, че дървото за синтактичен анализ съдържа всички думи като листа или терминали и S като ROOT. Сега може да има основно два вида синтактичен анализ: Отдолу нагоре и отгоре надолу. В разбор отдолу нагоре, парсерът първо изпълнява вътрешно маркиране на POS, за да започне да определя синтактичната роля на всяка дума. След това използва предварително определената граматика, за да установи синтактични отношения между две думи и комбинира фрази рекурсивно, докато достигне КОРЕНА: S. Въпреки това, в Разбиране отгоре надолу, парсерът започва от S и използва граматичните правила, за да разгадае всяка фраза, докато се достигнат всички думи в изречението.

Моля, не забравяйте, че говорим за валидно дърво за синтактичен анализ тук и валидно дърво за синтактичен анализ винаги съдържа S като КОРЕН и съдържа само думите от даденото изречение като листа. Например, ако вашето дърво за разбор съдържа повече думи като листа, отколкото присъстват в изречението ви, то това е невалидно дърво за разбор.

Валидно дърво за синтактичен анализ винаги съдържа S като КОРЕН и съдържа само думите от даденото изречение като листа.

Друго жизненоважно нещо, което трябва да запомните, е, че изречението може да има множество синтактични дървета, но само едно от тях може да бъде валидно както синтактично, така и семантично. Нека разгледаме един пример:

Изречение: Застрелях слон по пижама.

Вашата предварително решена граматика и лексикон или лексика са както следва:

Сега можете да имате две възможни синтаксични дървета за вашето изречение, както е показано по-долу.

И двете дървета изглеждат синтактично валидни, но и двете не са семантично валидни. Важното нещо, което трябва да запомните, докато оценявате семантичната валидност, е да разгледате как се комбинират фрази. В дървото вляво, тъй като Съществителната фраза „слон в пижамата ми“ е свързана с „изстрел“, звучи така, сякаш писателят иска да каже, че е застрелял слон, който е носил пижамата си. Ако обаче се вгледате внимателно в синтактичното дърво вдясно, глаголната фраза (VP) „застрелял е слон“ се комбинира с предложна фраза (PP) „в пижамата ми“ и това предава значението, че писателят е застрелял слон, докато облечен в пижама. По този начин правилното значение на изречението се предава само от синтактичното дърво вдясно и само това синтактично дърво е правилното синтаксично дърво.

В литературата за НЛП този проблем е известен като проблем на структурната неяснота където едно изречение може да има множество синтактични дървета, но само едно от тях е точно.

Сега, нека да разгледаме как да направите това с помощта на python. Използвам CoreNLP Parser на nltk, който разполага със Stanford Parser в своя бекенд. Моля, имайте предвид, че за да работи този код, трябва да сте изтеглили и стартирали Stanford NLP Server на вашия локален компютър.

Сигурно сте забелязали, че говорих само за техники за синтактичен анализ, които използват граматика и лексикон само за формиране на синтактично дърво. Ами използването на други подходи, които могат да ни дадат по-добри резултати? Два примера за разбор на избирателни райони, който използва динамично програмиране с разбор отдолу нагоре или отгоре надолу, са CKY Parsing и Earley Parsing.

CKY парсер използва граматика без контекст и подход за динамично програмиране отдолу нагоре за изграждане на синтактично дърво за всяко дадено изречение.

Докато Ърли Парсер използва произволна граматика без контекст и динамично програмиране от горе надолу за изграждане на синтактично дърво за всяко дадено изречение.

Сега трябва да се чудите защо да не въведете идеята за вероятността в нашата методология. Всички знаем, че някои граматични правила се срещат по-често от други и по този начин можем да им дадем по-голяма вероятност в сравнение с техните колеги, като по този начин правим вероятностна граматика, която след това може да се използва за анализ. Сега можем просто да изчислим вероятността от окончателното дърво за синтактичен анализ, като умножим вероятността за всички правила, използвани за изграждането на споменатото дърво, и което дърво за синтактичен анализ има най-голяма вероятност, може да бъде избрано като точна структура за синтактичен анализ за даденото изречение.

Вероятностно анализиране използва граматични правила, които имат по-голяма вероятност за поява, свързана с тях, за да извърши синтактичен анализ и да намери най-вероятното дърво за синтактичен анализ.

Тази идея все още има своите подводни камъни. Този вид разбор е нечувствителен към вида думи, които разширява.

Изречение 1: Ядох пържено пиле с диетична кока-кола.

Изречение 2: Ядох пържено пиле с приятели.

В първото изречение „с диетична кока-кола“ е NP (Съществителна фраза) и се състои от друго NP: „диетична кока-кола“ и PP (Предложна фраза): „с“. С други думи:

Правило 1: NP → NP PP

Вероятност на правило 1: 0,5. (да приемем)

Във второто изречение „с приятели“ е VP (глаголна фраза) и се състои от друго NP: „приятели“ и PP (Предложна фраза): „с“. С други думи:

Правило 2: VP → VP PP (0.5)

Вероятност на правило 2: 0,5 (да приемем)

Сега си представете, че вие ​​сте компютърът и се опитвате да намерите кое правило да приложите, за да анализирате изречението си. Тъй като вероятността и двете правила са равни, можете да изберете някое от тях и да получите синтактично валидно дърво за разбор. Изречение 1 и изречение 2 обаче не означават едно и също. Изречение 1 предполага, че сте яли пържено пилешко и диетична кока кола, докато Изречение 2 предполага, че вие ​​и вашите приятели сте имали пържено пиле. По този начин вероятностните анализатори все още нямат способността да диференцират дали вероятността за две правила са равни, като по този начин я прави нечувствителна към лексикалната информация на думата.

Следователно следващата стъпка е да се използва парсер, който отчита лексикалната информация, която вероятностен парсер игнорира. Отговорът е използването на лексикализиран вероятностен анализатор.

Лексикализиран вероятностен анализатор използва лексикална информация за думите (използвайки например информация за главите на всяка фраза), заедно с вероятността от поява на правило, за да анализира изречение.

Съществуват и други видове парсери, които използват различни аспекти на естествения език за синтактичен анализ на изречение, но в тази статия се фокусирах върху само няколко от най-популярните. Кодът на python, използван в тази статия, можете да намерите тук.

Надявам се тази статия да ви помогне да разберете малко по-добре синтактичния анализ!

Благодаря ви, че четете!

P.S. Ако има някакви конкретни теми, по които бихте искали да пиша, моля, направете коментар по-долу! Благодаря ти!:)

  1. Обработка на речта и езика, 3-то издание от Дан Юрафски и Джеймс Х. Мартин