В этом посте мы реализуем пользовательский компонент 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. Вы можете добавить свою собственную логику в компонент для реализации собственных правил токенизации.
Полезные ресурсы:
- Конфигурация компонентов трубопровода Раса НЛУ
- Лингвистические особенности spaCy
- Полный исходный код: https://github.com/TatianaParshina/rasa_chatbot
Подписывайтесь на меня в Instagram: tatiana.data