В этом посте мы реализуем пользовательский компонент Rasa NLU с лемматизацией, используя библиотеку spaCy для обработки естественного языка (NLP) в Python.

Лемматизация - это процесс преобразования слова в его базовую форму. Например, базовая форма слова «смотреть» - «смотреть», «ноутбуки» - «ноутбук».

Обзор Rasa NLU

Rasa NLU - это инструмент обработки естественного языка с открытым исходным кодом для классификации намерений и извлечения сущностей в чат-ботах AI.

По умолчанию Rasa NLU поставляется с набором готовых компонентов для токенизации:

  • tokenizer_whitespace - это токенизатор, использующий пробелы в качестве разделителя.
  • tokenizer_jieba - токенизатор, использующий Jieba для китайского языка.
  • tokenizer_mitie - это токенизатор, использующий MITIE
  • tokenizer_spacy - это токенизатор, использующий пространство

По умолчанию tokenizer_spacy возвращает дословное текстовое содержание .

Давайте создадим собственный токенизатор на основе tokenizer_spacy, который возвращает лемму в виде токена вместо дословного текста.

Лемматизация с помощью spaCy

Прежде чем мы начнем, давайте установим spaCy и загрузим модель "en".

python -m spacy download en

Библиотека spaCy предоставляет функциональные возможности для:

  • Токенизация - это разбиение текста на слова, знаки препинания и т. д.
  • Лемматизация - это присвоение базовых форм слов.

После того, как вы скачали и установили модель, вы можете загрузить ее с помощью spacy.load (). Это вернет объект Language (назовем его nlp), содержащий все компоненты и данные, необходимые для обработки текста. Вызов объекта nlp в строке текста вернет обработанный документ.

Во время обработки spaCy сначала токенизирует текст, т. Е. Сегментирует его на слова, знаки препинания и т. Д. У каждого токена есть атрибуты:

  • текст - это дословный текст.
  • lemma_ - базовая форма токена без флективных суффиксов.

Каждый Doc состоит из отдельных токенов, и мы можем перебирать их и выводить текст и лемму для каждого токена:

Вывод: Текст (исходный текст слова) → Лемма (основная форма слова).

  • «Они» → «-ПРОН-» (местоимение)
  • «Есть» → «быть»
  • «Глядя» → «смотреть»
  • «За» → «за»
  • «Новый» → «новый»
  • «Ноутбуки» → «ноутбук»

Пользовательский компонент Rasa NLU с лемматизацией

В Rasa NLU входящие сообщения обрабатываются последовательностью компонентов. Эти компоненты выполняются один за другим в так называемом конвейере обработки.

Rasa NLU позволяет создать пользовательский компонент для выполнения определенной задачи, которую NLU в настоящее время не предлагает (например, лемматизация). Код ниже основан на Rasa NLU spacy_tokenizer.py, где текст заменен на lemma_:

Конфигурация трубопровода Rasa NLU

Вы должны указать новый пользовательский компонент в файле конфигурации конвейера Rasa NLU nlu_config.yml. Имя компонента должно соответствовать шаблону «имя_модуля.имя_класса» для ссылки на компонент.

Пример файла конфигурации конвейера с компонентом лемматизации:

Затем вы можете обучить модель Rasa NLU с помощью специального компонента и проверить, как она работает.

Резюме

В этом посте вы узнали, как создать собственный компонент с лемматизацией из spaCy и добавить его в конвейер Rasa NLU в nlu_config.yml. Вы можете добавить свою собственную логику в компонент для реализации собственных правил токенизации.

Полезные ресурсы:

Подписывайтесь на меня в Instagram: tatiana.data