Що таке фрагментація в обробці природною мовою?

Вихідний вузол: 1878431

Шановні читачі!

У цьому блозі я буду обговорювати блокування як теоретично, так і практично в Python.

Отже, почнемо…

ПРИМІТКА: Для реалізації краще використовувати Python IDLE, оскільки результатом є малюнок дерева, яке з’являється в окремому вікні.

щоденник

  • Що таке чанкінг?
  • Де використовується чанкінг?
  • Види чанкінгу
  • Реалізація фрагментації в Python
  • результати

Що таке чанкінг?

Розбиття на фрагменти визначається як процес обробки природної мови, який використовується для визначення частин мови та коротких фраз, присутніх у даному реченні.

Згадуючи наші добрі старі уроки англійської граматики в школі, зауважте, що існує вісім частин мови, а саме іменник, дієслово, прикметник, прислівник, прийменник, сполучник, займенник і вставне слово. Крім того, у наведеному вище визначенні фрагментації короткі фрази стосуються фраз, утворених шляхом включення будь-якої з цих частин мови.

Наприклад, фрагментація може бути зроблена для ідентифікації та, таким чином, групування фраз іменників або окремо іменників, прикметників або фраз прикметників тощо. Розгляньте речення нижче:

«На сніданок я їв бургери та тістечка».

У цьому випадку, якщо ми хочемо згрупувати або розділити іменникові фрази, ми отримаємо «бургери», «кондитерські вироби» та «обід», які є іменниками або групами іменників речення.

Де використовується чанкінг?

Чому ми хочемо чогось навчитися, не знаючи, де це широко використовується?! Перегляд програм, які обговорюються в цьому розділі блогу, допоможе вам залишатися цікавими до кінця!

Частування використовується для отримання необхідних фраз із заданого речення. Однак тегування POS можна використовувати лише для визначення частин мови, до яких належить кожне слово речення.

Коли у нас є безліч описів або модифікацій навколо певного слова чи фрази, що нас цікавить, ми використовуємо фрагментацію, щоб захопити лише необхідну фразу, ігноруючи решту навколо неї. Таким чином, фрагментація прокладає шлях для групування необхідних фраз і виключення всіх модифікаторів навколо них, які не потрібні для нашого аналізу. Підводячи підсумок, можна сказати, що фрагментація допомагає нам витягувати лише важливі слова з довгих описів. Таким чином, фрагментація є етапом вилучення інформації.

Цікаво, що цей процес блокування в НЛП поширюється на різні інші програми; наприклад, згрупувати фрукти певної категорії, скажімо, фрукти, багаті білками, як групу, фрукти, багаті вітамінами, як іншу групу тощо. Крім того, фрагментація також може бути використана для групування схожих автомобілів, скажімо, автомобілі, які підтримують автоматичне перемикання передач, в одну групу, а інші, які підтримують ручне перемикання передач, в іншу частину тощо.

Типи чанкінга

Загалом існує два типи фрагментації:

  • Подрібнення
  • Знищення

Подрібнення:

Тут ми не занурюємося глибоко; замість цього ми задоволені лише оглядом інформації. Це лише допомагає нам отримати коротке уявлення про дані.

Зменшення:

На відміну від попереднього типу поділу, поділ допомагає отримати детальну інформацію.

Отже, якщо ви просто хочете зрозуміти, подумайте про «збільшення», інакше віддайте перевагу «зниження».

Реалізація фрагментації в Python

Уявіть ситуацію, в якій ви хочете витягти всі дієслова з поданого тексту для аналізу. Таким чином, у цьому випадку ми повинні враховувати поділ дієслівних фраз. Це пояснюється тим, що наша мета — витягти всі дієслівні фрази з заданого фрагмента тексту. Розбиття виконується за допомогою регулярних виразів.

Не хвилюйтеся, якщо ви вперше зустрінете термін «регулярні вирази». Нижче наведена таблиця, вам на допомогу:

Symbol

Сенс

Приклад

*

Попередній символ може зустрічатися нуль або більше разів, що означає, що попередній символ може бути або не бути присутнім.

ab* збігається з усіма вхідними даними, починаючи з ab, а потім нуль або більше b. Візерунок відповідатиме ab, abb, abbb тощо.

+

Попередній символ має зустрічатися принаймні один раз.

a+ відповідає a,aa,aaa тощо.

?

Попередній символ може не зустрічатися взагалі або зустрічатися лише один раз, що означає, що попередній символ необов’язковий.

ab? відповідає ab,abb, але не abbb тощо.

Наведена вище таблиця містить найпоширеніші використовувані регулярні вирази. Регулярні вирази дуже корисні в командному рядку, особливо під час видалення, пошуку, перейменування або переміщення файлів.

У будь-якому разі, для цієї реалізації ми будемо використовувати лише *. Не соромтеся дивитися на наведену вище таблицю, щоб ознайомитися з символом!

Ми будемо виконувати фрагментацію за допомогою nltk, найпопулярнішої бібліотеки NLP. Отже, давайте спочатку імпортуємо його.

імпортувати nltk

Давайте розглянемо наведений нижче зразок тексту, який я створив самостійно. Не соромтеся замінити наведений нижче зразок тексту, який вам подобається, щоб застосувати фрагментацію!

sample_text="""
Рама вбив Равану, щоб врятувати Сіту від Ланки. Легенда про Рамаян – найпопулярніший індійський епос. Знято вже багато фільмів і серіалів
знято кількома мовами тут, в Індії, на основі Рамаяни. """

Зрозуміло, що перед тим, як ми продовжимо, дані мають бути лексемизовані реченням, а потім словом. Токенізація — це не що інше, як процес поділу даного фрагмента тексту на менші одиниці, такі як речення, у випадку токенізації речень, і слова, у випадку токенізації слів.

Після токенізації для кожного слова виконується тегування POS (частина мови), у якому буде визначено частину мови кожного слова. Тепер нас цікавить лише дієслово-частина мови, і ми хочемо виділити його.

Отже, вкажіть частину мови, яка нас цікавить, використовуючи необхідний регулярний вираз наступним чином:

VB: {}

tokenized=nltk.sent_tokenize(зразок_тексту)
for i in tokenized: words=nltk.word_tokenize(i) # print(words) tagged_words=nltk.pos_tag(words) # print(tagged_words) chunkGram=r"""VB: {}""" chunkParser=nltk.RegexpParser( chunkGram) chunked=chunkParser.parse(tagged_words) chunked.draw()

Регулярний вираз (RE) укладено в кутові дужки (), які, у свою чергу, укладено у фігурні дужки ({ і }).

ПРИМІТКА:  Вкажіть RE відповідно до необхідного POS

VB означає дієслово POS. Крапка після VB означає відповідність будь-якому символу після VB. Знак питання після крапки означає, що будь-який символ після B має зустрічатися лише один раз або не повинен зустрічатися взагалі. Однак з таблиці, яку ми бачили раніше, цей символ необов’язковий. Ми оформили регулярний вираз таким чином, оскільки в NLTK дієслівні фрази містять такі теги POS:

POS

Сенс

VB

Дієслово в основній формі

VBD

дієслово в минулому часі

ГЗН

дієслово в теперішньому часі

ВБН

дієслово у формі дієприкметника минулого часу

VBP

Дієслово в теперішньому часі, але не в третій особі однини

VBZ

Дієслово в теперішньому часі третьої особи однини

Таким чином, дієслівні словосполучення можуть належати до будь-якого з перерахованих вище ПОС. Ось чому регулярний вираз оформлено як VB.? який включає всі вищезазначені категорії. Пакет RegexpParser використовується для перевірки того, чи POS задовольняє необхідний шаблон, про який ми згадували раніше, використовуючи RE.

Весь код можна побачити так:

імпорт nltk
nltk.download('averaged_perceptron_tagger')
sample_text="""
Рама вбив Равану, щоб врятувати Сіту від Ланки. Легенда про Рамаян – найпопулярніший індійський епос. Знято вже багато фільмів і серіалів
знято кількома мовами тут, в Індії, на основі Рамаяни. """
tokenized=nltk.sent_tokenize(зразок_тексту)
for i in tokenized: words=nltk.word_tokenize(i) # print(words) tagged_words=nltk.pos_tag(words) # print(tagged_words) chunkGram=r"""VB: {}""" chunkParser=nltk.RegexpParser( chunkGram) chunked=chunkParser.parse(tagged_words) chunked.draw()

результати

результат подрібнення
результат подрібнення

Нарешті, ми отримуємо деревоподібну форму POS слів разом зі словами, POS яких відповідає даному RE. Знімок результату, отриманого для переданого нами зразка тексту, можна побачити на наведених вище малюнках.

Зверніть увагу, що слова, які задовольняють наші вимоги RE лише для дієслівних фраз, чітко виділені у вихідних даних. Отже, розділення дієслівних фраз було виконано успішно.

Сподіваюся, моя стаття була для вас корисною.

Спасибо!

посилання

1. Реалізація фрагментації в Python

2. Теорія фрагментації

3. Повний список POS, доступних у NLP

Про мене

Я Нітіашрі В, студент останнього курсу BTech Computer Science and Engineering. Мені подобається вивчати такі класні технології та застосовувати їх на практиці, особливо спостерігаючи, як вони допомагають нам вирішувати складні проблеми суспільства. Сфери моїх інтересів включають штучний інтелект, науку про дані та обробку природної мови.

Ось мій профіль LinkedIn: Мій LinkedIn

Ви можете прочитати мої інші статті про Analytics Vidhya тут.

Медіафайли, показані в цій статті, не належать Analytics Vidhya і використовуються на розсуд Автора.

Джерело: https://www.analyticsvidhya.com/blog/2021/10/what-is-chunking-in-natural-language-processing/

Часова мітка:

Більше від Аналітика Vidhya