Обработка естественного языка (НЛП) — это область лингвистики, информатики и искусственного интеллекта, изучающая взаимодействие между компьютерами и человеческим языком, в частности, способы программирования компьютеров для обработки и анализа больших объемов данных естественного языка. Источник: Википедия
Скорее всего, вы уже использовали НЛП в том или ином виде. Если вы когда-нибудь пытались связаться с определенным предприятием через сообщения и получали немедленный ответ, возможно, это было НЛП в действии, или, возможно, вы только что вернулись домой с работы, наполнили свою чашку кофе и попросили Siri включить расслабляющие звуки морского побережья. Без сомнения, вы применяете НЛП.
Человеческий язык очень сложен, наполнен сарказмом, идиомами, метафорами, грамматикой и многим другим. Все это затрудняет для компьютеров легкое понимание смысла определенного предложения.
Возьмем пример разговора с сарказмом:
Джон шьет одежду, закрыв глаза.
Мартин: Джон, что ты делаешь, ты же поранишься.
Джон: Нет, не собираюсь. Через несколько мгновений Джон случайно уколет себя иглой.
Какой сюрприз.
С помощью методов обработки естественного языка (NLP) мы можем разбивать человеческие тексты и предложения на части и обрабатывать их, чтобы понять, что происходит. В этой статье мы рассмотрим на примерах наиболее распространенные методы и способы их применения;
- Анализ настроения
- Классификация текста
- обобщение текста
- и распознавание именованных сущностей
Анализ настроения
Большинство предприятий хотят знать, каковы отзывы клиентов об их услугах или продуктах. Но вы можете найти миллионы отзывов клиентов. Анализировать все это очень мучительно и скучно, даже если вам предложат большую сумму денег, когда вы это сделаете. В этой ситуации может быть полезен сентимент-анализ.
Анализ настроений — это метод обработки естественного языка, который используется для анализа положительных, отрицательных или нейтральных настроений текстовых данных.
Предприятия используют анализ настроения даже для того, чтобы определить, свидетельствует ли комментарий клиента о заинтересованности в продукте или услуге. Анализ настроения можно даже развить, чтобы исследовать настроение текстовых данных (грустное, яростное или возбужденное).
Источник: revechat.com
Пример использования
Чтобы решить эту задачу, воспользуемся библиотекой трансформаторов обнимающихся лиц. Мы будем использовать предварительно обученную модель из hugging face models под названием «distilbert-base-uncased-finetuned-sst-2-english».
# let's first install transformers library
$ pip install transformers
После установки библиотеки выполнить задание довольно просто.
from transformers import pipeline
analyser = pipeline("sentiment-analysis")
Приведенный выше код импортирует библиотеку и использует предварительно обученную модель по умолчанию для проведения анализа настроений.
user_comment = "The product is very useful. It have helped me alot."
result = analyser(user_comment)
print(result)
# Output: [{'label': 'POSITIVE', 'score': 0.9997726082801819}]
Результат показывает, что настроение комментария пользователя является ПОЗИТИВНЫМ, а модель уверена на 99,9772%.
Классификация текста
Классификация текста, также известная как категоризация текста, — это метод обработки естественного языка, который анализирует текстовые данные и относит их к заранее определенной категории.
В ваш почтовый ящик периодически приходят письма со спамом. Когда вы переходите по одной из этих ссылок, ваш компьютер может быть заражен вредоносным ПО. Поэтому практически все поставщики услуг электронной почты используют эту технику NLP для классификации или отнесения письма к категории спама или нет.
Чтобы эффективно классифицировать входящие письма, текстовые классификаторы обучаются на большом количестве данных о спаме и не спаме.
Пример использования
Давайте попробуем создать простой текстовый классификатор для определения того, является ли введенный нами текст спамом. Для этого мы будем использовать библиотеку TextBlob.
Давайте создадим несколько обучающих данных для тренировки нашего классификатора.
train = [
('Congratulation you won a your prize', 'spam'),
('URGENT You have won a 1 week FREE membership in our 100000 Prize Jackpot', 'spam'),
('SIX chances to win CASH From 100 to 20000 pounds ', 'spam'),
('WINNER As a valued network customer you have been selected to receive 900 prize reward', 'spam'),
("Free entry in 2 a weekly competition to win FA Cup final tickets 21st May 2005. Text FA to 87121 to receive", 'spam'),
('I do not like this restaurant', 'no-spam'),
('I am tired of this stuff.', 'no-spam'),
("I can't deal with this", 'no-spam'),
('he is my sworn enemy!', 'no-spam'),
('my boss is horrible.', 'no-spam'),
('This job is bad', 'no-spam')
]
Теперь давайте импортируем наш классификатор из библиотеки TextBlob и обучим его на созданных нами учебных данных. Мы будем использовать NaiveBayesClassifier
from textblob.classifiers import NaiveBayesClassifier
classifier = NaiveBayesClassifier(train)
После завершения обучения (которое может занять менее двух секунд в зависимости от вашего компьютера) мы введем наш текст, чтобы проверить, работает ли он.
classifier.classify("Congratulation you won a free prize of 20000 dollars and Iphone 13")
# Output: 'spam'
Наша простая модель правильно определила наше сообщение как «спам», чем оно и является.
Суммирование текста
Обобщение текста — это метод обработки естественного языка для создания более короткой версии длинного текста.
Представим, что когда вы дремлете, ваш начальник присылает вам сообщение с просьбой прочитать определенный документ. Когда вы проверяете документ, он состоит из десяти страниц. Для вас резюмирование текста может оказаться новаторской концепцией.
Модели резюмирования текста часто берут из документа самую важную информацию и включают ее в окончательный текст. Однако некоторые модели заходят так далеко, что пытаются объяснить смысл длинного текста своими словами.
Пример использования
Для этого мы также воспользуемся библиотекой transformers.
from transformers import pipeline
Затем мы воспользуемся конвейером «Резюме», чтобы обобщить наш длинный текст.
summarizer = pipeline("summarization")
# If the you don't have the summarization model in your machine, It will be downloaded from the internet.
Затем длинный текст можно скопировать и вставить из любого места для подведения итогов.
long_text = """
The Solar System is the gravitationally bound system of the Sun and the objects that orbit it. It formed 4.6 billion years ago from the gravitational collapse of a giant interstellar molecular cloud. The vast majority (99.86%) of the system's mass is in the Sun, with most of the remaining mass contained in the planet Jupiter. The four inner system planets—Mercury, Venus, Earth and Mars—are terrestrial planets, being composed primarily of rock and metal. The four giant planets of the outer system are substantially larger and more massive than the terrestrials. The two largest, Jupiter and Saturn, are gas giants, being composed mainly of hydrogen and helium; the next two, Uranus and Neptune, are ice giants, being composed mostly of volatile substances with relatively high melting points compared with hydrogen and helium, such as water, ammonia, and methane. All eight planets have nearly circular orbits that lie near the plane of Earth's orbit, called the ecliptic.
"""
# You can set an optional parameter of max_length to maximum number of words you want to be outputted
>>> summarizer(long_text, max_length=80)
# Output: [{'summary_text': " The Solar System formed 4.6 billion years ago from the gravitational collapse of a giant interstellar molecular cloud . The vast majority (99.86%) of the system's mass is in the Sun, with most of the remaining mass contained in the planet Jupiter . The four inner system planets are terrestrial planets, being composed primarily of rock and metal ."}]
Распознавание именованных сущностей (NER)
Слышали ли вы когда-нибудь причудливые истории о том, что определенная фирма прослушивает все звонки, чаты и онлайн-взаимодействия, чтобы узнать, что люди говорят о ней? Если это правда, то одной из их стратегий может быть распознавание сущностей. Потому что NER — это метод обработки естественного языка, который идентифицирует и классифицирует именованные сущности в текстовых данных.
Именованные сущности — это просто объекты реального мира, такие как человек, организация, местоположение, продукт и т.д. Модели NER определяют «Дар-эс-Салам» как местоположение или «Майкл» как имя человека.
Источник: shaip.com
Пример использования
Для решения этой задачи мы будем использовать библиотеку SpaCy. Нам нужно установить ее и загрузить предварительно обученную модель на английском языке, которая поможет нам быстрее решить нашу задачу.
$ pip install -U spacy
# Then downloading the model
python -m spacy download en_core_web_sm
Мы собираемся импортировать библиотеку Spacy, а затем загрузить модель, которую мы загрузили, чтобы мы могли выполнить нашу задачу.
import spacy
nlp = spacy.load("en_core_web_sm")
После загрузки нашей модели мы можем просто ввести наш текст, и spacy выдаст нам именованные сущности, присутствующие в нашем тексте.
doc = nlp("The ISIS has claimed responsibility for a suicide bomb blast in the Tunisian capital earlier this week.")
for ent in doc.ents:
print(ent.text, ent.label_)
spacy.displacy.render(doc, style="ent")
# Output: ISIS ORG
# Tunisian NORP
# earlier this week DATE
На выходе показаны различные сущности, обнаруженные spaCy, с соответствующими метками.
ПРИМЕЧАНИЕ: Если вы не поняли значение аббревиатуры в spaCy, вы можете использовать spacy.explain(), чтобы объяснить ее значение.
# Let's say you didn't understand the meaning of an abbreviation "ORG"
spacy.explain("ORG")
# Output: 'Companies, agencies, institutions, etc.'
Хорошая новость заключается в том, что в настоящее время очень просто начать использовать эти методы. Большие языковые модели, такие как Lamda и GPT3 от Google, доступны для помощи в решении задач NLP. Вы можете легко создавать полезные проекты по обработке естественного языка с помощью таких инструментов, как spaCy и hugging face.
Спасибо.