Часть 3. Семантические признаки

В этом уроке мы опишем, как вы можете вызывать некоторые текстовые классификаторы нашего NLP API; в частности, мы демонстрируем модули, ориентированные на понимание внутренней семантики и прагматики текстов.

Это последующее руководство; предыдущий контент можно найти здесь:

Полный список модулей Codeq NLP API можно найти в нашей документации:



Определить конвейер

Первое, что нужно сделать, это создать экземпляр клиента Codeq, используя ваши учетные данные API, и определить конвейер, содержащий несколько текстовых классификаторов:

from codeq_nlp_api import CodeqClient
client = CodeqClient(user_id="USER_ID", user_key="USER_KEY")
pipe = [
    "sentiment", "emotion", "sarcasm"
]

Проанализируйте текст

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

Чтобы распечатать краткий обзор результатов, вы можете использовать метод document.pretty_print():

text = "The hotel location is perfect. But the rooms are in great need of an upgrade."
document = client.analyze(text, pipeline=pipe)
print(document.pretty_print())

В следующих разделах мы опишем:

  • ключевое слово (KEY), используемое для вызова каждого классификатора,
  • атрибут (ATTR), в котором хранится вывод,
  • МЕТКИ ВЫХОДА, которые каждый классификатор создает в качестве выходных данных.

Классификатор тональности

Этот аннотатор анализирует предложения и пытается определить, передают ли они положительное, отрицательное или нейтральное настроение.

  • КЛЮЧ: настроения
  • ATTR: предложение.сентименты

ВЫВОДЯЩИЕ ЭТИКЕТКИ:

  • Положительный
  • Отрицательный
  • Нейтральный
text = "The hotel location is perfect. Located directly across from the metro so it is easy to get everywhere. But the rooms are in great need of an upgrade. I had a king room with no view, and poor lighting. The color scheme in the room was drab and kind of depressing."

document = client.analyze(text, pipeline=pipe)
for sentence in document.sentences:
    raw_sentence = sentence.raw_sentence
    sentiments = sentence.sentiments
    print("\n%s - %s" % (sentiments, raw_sentence))
# OUTPUT:
# 
# ['Positive'] - The hotel location is perfect.
# 
# ['Positive'] - Located directly across from the metro so it is easy to get everywhere.
# 
# ['Negative'] - But the rooms are in great need of an upgrade.
# 
# ['Negative'] - I had a king room with no view, and poor lighting.
# 
# ['Negative'] - The color scheme in the room was drab and kind of depressing.

Классификатор эмоций

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

В этом аннотаторе предложениям с эмоциональным содержанием, которые не достигают достаточно высокой вероятности данного класса, назначается «Неизвестная эмоция». Предложениям, воспринимаемым как не несущие никаких эмоций, присваивается метка «Без эмоций».

Более подробную информацию об этом аннотаторе можно найти здесь:



  • КЛЮЧ: эмоции
  • ATTR: предложение.эмоции

ВЫВОДЯЩИЕ ЭТИКЕТКИ:

  • Злость
  • Отвращение/неприязнь
  • Страх
  • Радость/Нравится
  • Грусть
  • Сюрприз
  • Возбуждение
  • Ангст
  • Неизвестная эмоция
  • Безэмоциональный
text = "The hotel location is perfect. Located directly across from the metro so it is easy to get everywhere. But the rooms are in great need of an upgrade. I had a king room with no view, and poor lighting. The color scheme in the room was drab and kind of depressing."

document = client.analyze(text, pipeline=pipe)
for sentence in document.sentences:
    raw_sentence = sentence.raw_sentence
    emotions = sentence.emotions
    print("\n%s - %s" % (emotions, raw_sentence))
# OUTPUT:
# 
# ['Joy/Like'] - The hotel location is perfect.
#
# ['Unknown emotion'] - Located directly across from the metro so it is easy to get everywhere.
#
# ['Disgust/Dislike'] - But the rooms are in great need of an upgrade.
# 
# ['Disgust/Dislike'] - I had a king room with no view, and poor lighting.
# 
# ['Disgust/Dislike', 'Sadness'] - The color scheme in the room was drab and kind of depressing.

Классификатор сарказма

Цель этого аннотатора — предсказать, является ли предложение саркастическим или нет. Сарказм — это косвенный акт речи с высокой присущей ему двусмысленностью, и его обнаружение стало важной задачей в понимании естественного языка. Классификатор сарказма можно рассматривать как дополнительный анализ как для классификаторов Настроений, так и для Эмоций.

В следующем посте вы можете узнать больше об этом аннотаторе:



  • КЛЮЧ: сарказм
  • ATTR: предложение.сарказм

ВЫВОДЯЩИЕ ЭТИКЕТКИ:

  • Саркастический
  • Без сарказма
text = "I just love it when people make plans for me without actually including me in this process"
document = client.analyze(text, pipeline=pipe)
for sentence in document.sentences:
    raw_sentence = sentence.raw_sentence
    sarcasm = sentence.sarcasm
    print("\n%s - %s" % (sarcasm, raw_sentence))
# OUTPUT:
# 
# Sarcastic - I just love it when people make plans for me without actually including me in this process

Заворачивать

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