Разметка POS с помощью NLTK и разбиение на части в NLP [ПРИМЕРЫ]

⚡ Умное резюме

POS-тегирование присваивает каждому слову в предложении часть речи, в то время как сегментирование (Chunking) группирует эти помеченные слова в осмысленные фразы, такие как именные группы, добавляя неглубокую структуру, которую NLTK создает с помощью регулярных выражений. Python.

  • 🏷️ POS-теги: Каждое слово получает грамматический токен, например NN, VB или JJ, в зависимости от контекста.
  • 🌿 Чанкинг: Помеченные слова группируются в фразы; этот процесс также называется поверхностным синтаксическим анализом.
  • 🔤 Процедура: Сначала разбейте текст на токены, затем примените pos_tag, а затем выполните разбор с помощью грамматики RegexpParser.
  • 📊 Метки для подсчета: Counter и FreqDist отображают частоту встречаемости тегов и слов для инженерии признаков.
  • 🔗 Словосочетания: Биграммы и триграммы позволяют выделить пары и тройки слов, что делает текст более выразительным.
  • 🤖 Использование ИИ: Методы машинного обучения и теггеры на основе скрытых марковских моделей (HMM) обрабатывают неоднозначные слова вероятностным образом.

POS-тегирование с помощью NLTK и сегментация текста в НЛП

POS-теги

POS-теги Разметка частей речи (Parts of Speech Tagging) — это процесс разметки слов в текстовом формате для определенной части речи на основе ее определения и контекста. Он отвечает за чтение текста на определенном языке и присвоение каждому слову определенного лексемы (части речи). Этот процесс также называется грамматической разметкой.

Давайте изучим это на примере частей речи из библиотеки NLTK:

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

Этапы, задействованные в примере маркировки POS-терминалов.

  • Токенизировать текст (word_tokenize)
  • Примените pos_tag к предыдущему шагу, то есть nltk.pos_tag(tokenize_text)

Примеры POS-тегов NLTK приведены ниже:

Аббревиатура Смысл
CC координационное соединение
CD кардинальная цифра
DT детерминанта
EX экзистенциальное там
FW иностранное слово
IN предлог/подчинительный союз
JJ имя прилагательное
JJR прилагательное, сравнительная степень
JJS прилагательное, превосходная степень
LS листинговый рынок
MD модальный
NN существительное, единственное число
NNS существительное во множественном числе
ННП имя собственное, единственное число
ННПС имя собственное, множественное число
PDT предопределяющий
POS притяжательное окончание
PRP личное местоимение
PRP$ притяжательное местоимение
RB наречие
Расширение RBR наречие, сравнительное
RBS наречие, превосходная степень
RP частица
К бесконечный маркер
UH междометие
VB глагол
ВБГ глагол герунд
ВБД глагол в прошедшем времени
ВБН глагол причастие прошедшего времени
ВБП глагол, настоящее время, не 3-е лицо единственного числа
ВБЗ глагол, настоящее время, 3-е лицо единственного числа
WDT вопросительный знак
WP wh-местоимение
ВРБ вопросительное наречие

Приведенный выше список тегов NLTK POS содержит все теги NLTK POS. Теггер NLTK POS используется для присвоения грамматической информации каждому слову предложения. Установка, импорт и загрузка всех пакетов POS NLTK завершены.

Что такое чанкинг в НЛП?

лязг В НЛП (обработка естественного языка) группировка небольших фрагментов информации в большие блоки — это процесс, позволяющий объединять их в большие группы. Основное применение группировки — создание групп «именных фраз». Она используется для придания структуры предложению путем применения POS-тегирования в сочетании с регулярными выражениями. Полученная группа слов называется «фрагментами». Этот метод также называют поверхностным синтаксическим анализом.

При поверхностном разборе между корнями и листьями находится максимум один уровень, тогда как при глубоком разборе уровень может быть больше одного. Поверхностный разбор также называют поверхностным разбором или разбором на фрагменты.

Правила разбиения на части

Заранее установленных правил нет, но вы можете комбинировать их в зависимости от потребностей и требований. Например, предположим, вам нужно отметить существительное, глагол (прошедшее время), прилагательное и сочинительный союз в предложении. Вы можете использовать следующее правило:

chunk:{***?}

В следующей таблице показано значение различных символов:

Название символа Описание
. Любой символ, кроме новой строки
* Сопоставьте 0 или более повторений
? Сопоставьте 0 или 1 повторений

Теперь давайте напишем код, чтобы лучше понять это правило.

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)

Выход:

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))

Вывод из вышеизложенного. Разметка частей речи. Python Например, "make" — это глагол, который не включен в правило, поэтому он не помечается как "mychunk".

Вариант использования фрагментации

Разбиение на смысловые блоки (чанкинг) используется для определения сущности. Сущность — это та часть предложения, по которой машина определяет значение намерения.

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

Другими словами, сегментирование используется для выбора подмножеств токенов. Пожалуйста, ознакомьтесь с приведенным ниже кодом, чтобы понять, как сегментирование используется для выбора токенов. В этом примере вы увидите граф, соответствующий фрагменту именной фразы.

 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

Выход:

['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

Граф разделения существительной фразы

Граф разделения существительных фраз

Из графика можно заключить, что «learn» и «guru99» — это два разных токена, но они относятся к именной группе, тогда как токен «from» не относится к именной группе. Анкетирование используется для объединения разных токенов в одну группу. Результат будет зависеть от выбранной грамматики. Кроме того, в NLTK анкетирование используется для разметки шаблонов и исследования текстовых корпусов.

Подсчет POS-тегов

Мы обсудили различные pos_tag ранее полученные значения. Здесь вы узнаете, как подсчитывать эти теги. Подсчет тегов имеет решающее значение для классификации текста и для подготовки признаков для операций с естественным языком. Сначала мы напишем работающий код, а затем объясним шаги.

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)

Выход:

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})

Подробное описание кода:

  1. Используйте пакет Counter из модуля collections. Counter — это подкласс словаря, который хранит элементы в качестве ключей и их количество в качестве значений.
  2. Для токенизации текста используйте библиотеку nltk.
  3. Напишите текст, pos_tag которого вы хотите посчитать.
  4. Перед токенизацией преобразуйте все слова в нижний регистр.
  5. Передайте слова в функцию word_tokenize и вычислите pos_tag каждого токена.
  6. Затем счетчик подсчитывает общее количество вхождений каждого тега в тексте.

Распределение частоты

Частотное распределение — это показатель количества повторений того или иного результата эксперимента. Оно используется для определения частоты встречаемости каждого слова в документе. В его основе лежит... FreqDist класс, определенный nltk.вероятность модуль. Счетчик увеличивается на единицу каждый раз, когда происходит выборка.

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

  • Метод подсчета: Метод `freq_dist.count('and')` возвращает количество раз, когда встречалось выражение `and`. Он называется методом подсчета.
  • Частотный метод: Функция freq_dist.freq('and') возвращает частоту заданного образца.

Мы напишем небольшую программу, которая вычисляет частотное распределение каждого слова в тексте.

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()

Расшифровка кода:

  1. Импортируйте модуль nltk.
  2. Напишите текст, распределение слов которого вам нужно найти.
  3. Разбейте на токены каждое слово в тексте, который подается на вход модулю FreqDist библиотеки nltk.
  4. Примените каждое слово к nltk.FreqDist в виде списка.
  5. Отобразите слова на графике с помощью функции plot().

ПРИМЕЧАНИЕ: для просмотра графика необходимо установить matplotlib. Он подсчитывает количество вхождений каждого слова в тексте и помогает в анализе тональности текста. Ключевой термин — «токенизация»: после токенизации каждое слово проверяется, чтобы определить, сколько раз оно встречалось.

Словосочетания: биграммы и триграммы

Коллокации — это пары слов, встречающиеся вместе много раз в документе. Они рассчитываются как отношение количества таких пар, встречающихся вместе, к общему количеству слов в документе.

Рассмотрим такие слова, как ультрафиолетовые лучи и инфракрасные лучи. Слова «ультрафиолетовые» и «лучи» не используются по отдельности и поэтому могут рассматриваться как словосочетание. Другой пример — компьютерная томография (КТ), поскольку мы не говорим «КТ» и «сканирование» по отдельности. Словосочетания можно разделить на два типа:

  • Биграммы: сочетание двух слов
  • Триграммы: сочетание трех слов

Биграммы и триграммы предоставляют более осмысленные и полезные функции для примера.tracЭтап определения. Они особенно полезны при анализе настроений в тексте.

Пример биграмм 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)

Выход:

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

Пример триграмм Code:

Иногда становится важно увидеть в предложении пару-тройку слов для статистического анализа и подсчета частотности. Это опять-таки играет решающую роль в формировании НЛП (Обработка естественного языка) функции, а также прогнозирование тональности текста. Тот же код используется для вычисления триграмм.

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

Выход:

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

Маркировка предложений

Разметка предложения подразумевает добавление меток, таких как глагол или существительное, в зависимости от контекста предложения. Идентификация частей речи — сложная задача, поэтому ручная разметка общих частей речи невозможна, поскольку некоторые слова имеют неоднозначное значение в зависимости от структуры предложения. Преобразование текста в список — важный шаг перед разметкой, поскольку каждое слово циклически обрабатывается и подсчитывается для определенного тега.

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 Объяснение:

  1. Code импортировать nltk (естественный) Language Toolнабор, который содержит подмодули, такие как токенизация предложений и токенизация слов.
  2. Текст, теги которого необходимо напечатать.
  3. Токенизация предложений.
  4. В данном случае используется цикл for, в котором слова из предложения разбиваются на токены, и в качестве результата выводится тег каждого слова.

В корпусе существует два типа теггеров частей речи:

1. Система маркировки POS-терминалов на основе правил: Для слов с неоднозначным значением применяется подход, основанный на правилах и контекстной информации. Это делается путем анализа значения предшествующего или последующего слова. Таким образом, слова размечаются в соответствии с грамматическими правилами конкретного языка, такими как заглавные буквы и пунктуация. Например, теггер Brill.

2. Стохастический теггер частей речи: В этом методе применяются такие подходы, как частота или вероятность. Если слово чаще всего помечено определенным тегом в обучающем наборе, ему присваивается этот тег в тестовом предложении. Тег слова зависит не только от его собственного тега, но и от предыдущего, поэтому этот метод не всегда точен.

POS-тегирование с использованием скрытой марковской модели

Задачи разметки также можно моделировать с помощью скрытой марковской модели (HMM). Она рассматривает входные токены как наблюдаемую последовательность, а теги — как скрытые состояния, и цель состоит в определении последовательности скрытых состояний. Например, x = x1, x2, ..., xn, где x — последовательность токенов, а y = y1, y2, y3, y4, ... yn — скрытая последовательность.

Как работает скрытая марковская модель (HMM)?

Скрытая марковская модель (HMM) использует совместное распределение P(x, y), где x — последовательность входных токенов, а y — последовательность тегов. Последовательность тегов для x будет представлять собой argmax по y1…yn из p(x1,x2,…xn,y1,y2,y3,…). Мы уже классифицировали теги из текста, но статистика по таким тегам имеет решающее значение, поэтому следующая часть — это подсчет этих тегов для статистического анализа.

Часто задаваемые вопросы (FAQ)

POS-тегирование присваивает каждому отдельному слову его часть речи, например, существительное или глагол. Группировка слов идет еще дальше и объединяет эти помеченные слова в фразы, подобные именным группам, придавая предложению поверхностную структуру.

Поверхностный синтаксический анализ, также называемый сегментацией или легким синтаксическим анализом, поддерживает максимум один уровень между корнями и листьями. Он определяет границы фраз без построения полного дерева разбора, что делает его быстрее, чем глубокий синтаксический анализ.

Группировка помеченных слов в фразы позволяет системе обнаруживать такие сущности, как люди, места, даты или товары. Распознавание именованных сущностей основано на этих группах для...tract значимых значений из исходного текста.

Функция nltk.pos_tag() присваивает теги частей речи. Сначала вы разбиваете текст на токены с помощью word_tokenize, затем передаете список токенов функции pos_tag, которая возвращает каждое слово в паре с соответствующим тегом, например, NN, VB или JJ.

Да. Современные системы разметки на основе ИИ, обученные с использованием машинного обучения и глубоких нейронных сетей, разрешают неоднозначные слова, изучая контекст на основе больших корпусов текстов, достигая более высокой точности, чем методы, основанные на правилах, при работе с реальным текстом.

Стохастические теггеры используют вероятность, полученную из обучающих данных. Машинное обучение оценивает вероятность соответствия каждого тега слову с учетом окружающих тегов, а затем выбирает последовательность с наибольшей общей вероятностью.

Кроме того НЛТКПопулярные варианты включают в себя: ошалевший Для быстрых производственных конвейеров используются Stanford CoreNLP и Hugging Face Transformers для разметки на основе трансформеров.

В грамматике блоков точка соответствует любому символу, кроме символа новой строки, звездочка соответствует нулю или более повторениям, а вопросительный знак соответствует нулю или одному повторению предыдущего шаблона тегов части речи.

Подведем итог этой публикации следующим образом: