Как стать автором
Обновить
104.46
ИТМО
IT's MOre than a University

Python библиотека RuPersonaAgent для создания русскоязычного персонифицированного диалогового агента

Время на прочтение5 мин
Количество просмотров1.3K

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

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

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

Рисунок 1 – Пример диалога с персонифицированным диалоговым агентом
Рисунок 1 – Пример диалога с персонифицированным диалоговым агентом

Теперь, когда мы немного разобрались с тем, что такое диалоговый агент и персонификация, возникает вопрос — а зачем ему динамическая долговременная память? Для улучшения качества диалогов — долговременная память позволяет:

  • хранить информацию о собеседниках;

  • использовать информацию, которую получили в начале диалога, даже через длительное время;

  • хранить любую иную информацию, которую невозможно получить из сети Интернет.

Общие сведения

Библиотека работает на Mac OS, Linux и Windows. Конкретная работа библиотеки обеспечивается на версиях 3.8.6. Если же возникнут трудности с другими версиями, дайте знать. 

Библиотека ставится либо через гитаб, либо стандартным образом через pip:

pip install rupersonaagent
gitlab clone https://gitlab.com/Iolly/rupersonaagent.git
cd rupersonaagent
python setup.py install

Все основные классы разнесены по отдельным папкам:

generative_model
speech_extraction
personification
knowledge_distillation
inference_optimization
rule_based_information_extraction
internet_memory_model
datasets
tests
  • generativemodel – включает в себя генеративные модели, методы для предобработки, а также встроенный автоматический метод извлечения информации о персоне из диалоговых данных;

  • speechextraction – модуль выявления особенностей письменной речи человека в зависимости от профессии;

  • personification – модуль с персонифицированными BERT моделями;

  • knowledge_distillation – методы дистилляции моделей;

  • inference_optimization – методы оптимизации моделей;

  • rulebasedinformation_extraction – метод извлечения информации о персоне из диалоговых данных, основанный на лингвистических правилах;

  • internet_memory_model – модуль предназначен для обучения и использования модели, которая может получать информацию из сети Интернет и долговременной памяти.

  • datasets – содержит в себе собранные датасеты с профессиями, которые использовались как один из источников знаний для динамической долговременной памяти;

  • tests – содержит в себе юнит тесты.

В разделах ниже мы приведем пару примеров использования данной библиотеки. Больше примеров можно найти в каждой папке в отдельных jupyter блокнотах.

Модули

Generative_model

Один из основных модулей в библиотеке — generative_model, с помощью которого можно использовать предобученные генеративные модели, либо обучить свои.

Сформировать модуль данных для тестирования и обучения модели можно следующим образом:

datamodule=TolokaDataModule( 
    data_dir=path_to_dir,
    datasets=['current_gk', 'next_answer'], #'next_answer', 'current_gk', 'next_gk'
    tokenizer=tokenizer, 
    spec_tokens=spec_tokens, 
    train_batch_size=128, 
    val_batch_size=256, 
    test_batch_size=256, 
)

А для того, чтобы задать саму модель, просто используем объект T5MultiTask.

model = T5MultiTask( 
    model=t5, 
    datamodule=datamodule, 
    lr=5e-5, 
    num_warmup_steps=1000, 
    pooling="mean", 
    distance="cosine", 
    scale=20, 
    train_batch_size=train_batch_size, 
    val_batch_size=256, 
    test_batch_size=256, 
)

Speech_extraction

В чем принцип работы данного модуля? На основе обучающих данных профессии составляется свойственный для нее профиль характеристик речи. После этого каждая из интересующих реплик может быть оценена по уровню схожести с профессией на основе профилей характеристик речи профессии и самой реплики. В качестве критерия для оценки схожести используется статистический критерий Манна-Уитни.

Рисунок 2 – Схема работы модуля Speech_extraction
Рисунок 2 – Схема работы модуля Speech_extraction

Для получения профиля характеристик речи для профессии в целом необходимо для целевого датасета с профессией использовать функцию get_info_from_dataset.

profession_profile = get_info_from_dataset(
    dataset_name: dataset_name, 
    path: path_to_dataset, 
    column_name: replica_column_name, 
    delimiter: delimeter_for_columns
)

Для получения профиля характеристик реплики следует использовать функцию get_info_from_sentence.

replica_profile=get_info_from_sentence(
    sentence: sententce, 
    phrase_name: phrase_name
)

Сравнить профили характеристик можно с помощью функции compare_characteristics.

compare_characteristics(
    first_characteristic: SpeechCharacteristic,
    second_characteristic: SpeechCharacteristic,
)
Рисунок 3 – Пример профилей характеристик
Рисунок 3 – Пример профилей характеристик

Internet_memory_model

Модуль internet_memory_model предназначен для обучения и использования модели, которая может получать информацию из сети Интернет и долговременной памяти:

  •  fid.py - реализация метода Fusion-in-Decoder внутри архитектуры модели T5;

  • in_dataset.py - предобработка датасетов и токенизация текста;

  • in_model.py - архитектура основной модели;

  • inference.py - реализация чата с обученной моделью;

  • train_internet_model.py - обучение модели;

  • test_internet_model.py - тестирование модели;

  • utils.py - подсчет метрик, обработка текста, полученного через интернет-поиск.

В папке retriever содержится код для обучения и тестирования ранжирующей модели:

  • dataset.py - файл для предобработки корпусов;

  • model.py - файл с архитектурой модели;

  • train.py - файл для обучения модели;

  • test.py - файл для тестирования модели.

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

Обучение основной модели:

python train_internet_model.py

Тестирование основной модели:

python test_internet_model.py

Чат с основной моделью — для ведения диалога с основной моделью необходима обученная ранжирующая модель:

cd retriever/
python train.py

То же самое можно реализовать с помощью методов. 

Сформировать датасет для обучения:

test = in_dataset.InternetDataset(
    path,
    is_toloka,
    skip_tasks,
     passage_count,
)

Задать параметры модели:

model = in_model.InternetModel(
    model_dir,
    model_name,
    save_name,
    labels_max_length
)

Данный модуль позволяет получать знания для генерации ответов как из Интернета, так и из долговременной памяти.

Рисунок 4 – Пример диалога с моделью с модулем поиска в сети Интернет
Рисунок 4 – Пример диалога с моделью с модулем поиска в сети Интернет
Рисунок 5 – Пример диалога с моделью с модулем долговременной памяти
Рисунок 5 – Пример диалога с моделью с модулем долговременной памяти

Заключение

Мы рассмотрели некоторые возможности библиотеки rupersonaagent. Это всего лишь наша первая попытка обобщить опыт разработки персонифицированного диалогового агента в библиотеку с полезными методами. В будущем планируется расширять библиотеку и продолжать исследования по персонификации диалоговых агентов.

 

Теги:
Хабы:
Всего голосов 3: ↑3 и ↓0+3
Комментарии0

Публикации

Информация

Сайт
itmo.ru
Дата регистрации
Дата основания
Численность
Неизвестно
Местоположение
Россия
Представитель
itmo