Разработка системы НЛП для разговоров с использованием искусственного интеллекта
Введение
Развитие технологий искусственного интеллекта произвело революцию в том, как компании взаимодействуют с клиентами, и отрасль авиаперевозок не является исключением. Разговорные чат-боты с искусственным интеллектом все чаще используются авиакомпаниями как способ улучшить качество обслуживания клиентов, повысить эффективность и оптимизировать операции. В этом блоге мы рассмотрим ключевые элементы, необходимые для создания эффективного диалогового чат-бота с искусственным интеллектом для авиационной отрасли. Это руководство содержит ценную информацию и практические советы для всех, кто хочет создать чат-бота с искусственным интеллектом для авиакомпаний, от определения целей и задач до выбора правильной платформы и разработки системы обработки естественного языка. Независимо от того, являетесь ли вы руководителем авиакомпании, разработчиком чат-ботов или просто тем, кто интересуется этой растущей областью, этот блог даст вам более глубокое понимание процесса создания чат-ботов с искусственным интеллектом и поможет вам принимать обоснованные решения о разработке чат-ботов.
Бизнес-проблема
Клиенты сталкиваются с проблемами при попытке получить быструю и точную информацию о своих планах полетов, особенно во время сбоев. Традиционные чат-боты имеют ограниченные диалоговые возможности и дают жесткие ответы, что приводит к разочарованию клиентов. Наша цель — разработать чат-бота с искусственным интеллектом на основе машинного обучения и НЛП, который обеспечит более естественный и персонализированный диалог, позволяя клиентам быстро и эффективно получать необходимую им информацию.
Проектирование системы машинного обучения для когнитивного ИИ
На приведенной ниже блок-схеме представлен высокоуровневый дизайн диалогового чат-бота с искусственным интеллектом. Чтобы получить ответ на основе ИИ, пользовательский ввод должен пройти со всеми заданными блоками, упомянутыми на рисунке. Кратко остановимся на каждом компоненте.
- Сообщение пользователя в чат-боте — это входные данные пользователя, которые отправляются чат-боту для обработки и ответа. Это может быть текст, который чат-бот должен понимать и интерпретировать.
- Автозамена сообщений в чат-боте означает способность чат-бота автоматически исправлять орфографические, грамматические или другие ошибки при вводе данных пользователем. Цель автозамены — повысить точность понимания чат-ботом пользовательского сообщения и обеспечить максимально релевантный ответ.
- Tоннамерение в контексте чат-бота относится к основной цели или назначению сообщения пользователя. Это намерение стоит за словами, которые пользователь написал чат-боту. Например, пользователь может отправить сообщение чат-боту, чтобы узнать о расписании рейсов, запросить возмещение или запросить помощь в решении проблемы.
- Сущности – это определенные слова или фразы в сообщении пользователя, имеющие отношение к беседе. Обычно они определяются разработчиком чат-бота и используются для извлечения соответствующей информации из сообщения пользователя. Например, в чат-боте для авиакомпании объектами могут быть номера рейсов, даты, города и аэропорты. Чат-бот может использовать эти объекты, чтобы понять намерения пользователя и предоставить соответствующий ответ. Например, если пользователь спросит: «Каков статус рейса AA123 1 марта?», чат-бот распознает «AA123» как номер рейса и «1 марта» как дату.
- Создать ответ. Чтобы создать ответ на запрос пользователя, необходимо сначала определить намерение и извлечь необходимые сущности. Затем эти данные можно извлечь из базы данных с помощью вызовов API.
Сбор данных и аннотация
Набор данных классификации намерений
Набор данных ATIS предоставляет большое количество сообщений и связанных с ними намерений, которые можно использовать при обучении классификатора. В чат-боте намерение относится к цели, которую имеет в виду клиент, вводя вопрос или комментарий, и это стандартный набор контрольных данных, широко используемый в качестве классификации намерений.
На гистограмме выше показано количество запросов на одно намерение для набора данных авиакомпании. Намерение «atis_flight» имеет огромные запросы по сравнению с другими.
Набор данных об авиакомпаниях
Этот набор данных содержит всю информацию об авиакомпаниях, аэропортах и рейсах, которая необходима клиенту (пользователю).
Прикладные варианты использования ИИ для чат-бота
Эти варианты использования должны быть эффективно рассмотрены, чтобы создать высококачественный чат-бот с искусственным интеллектом, обеспечивающий хорошее взаимодействие с пользователем.
Примечание. Все варианты использования имеют отдельные подзадачи жизненного цикла машинного обучения, которые включают в себя процесс сбора данных, предварительную обработку данных. , разработка функций, выбор модели, оценка модели и развертывание модели.
Автокорректор пользовательских запросов (исправление орфографии)
Автокорректор полезен в диалоговом ИИ, когда пользователи могут быстро печатать или делать опечатки, что приводит к недопониманию или неправильным ответам от чат-бота, и для этого случая использования мы будем использовать модель корректора орфографии на основе преобразователя.
Что такое автокорректор на основе Transformer?
Автокорректор на основе Transformer — это тип модели машинного обучения, использующий архитектуру Transformer для исправления орфографических ошибок в тексте, повышения точности и качества текстовых данных.
Здесь мы использовали предварительно обученную модель обнимающего лица, которая обучена на данных, извлеченных из Википедии. Если вы хотите узнать больше о процессе обучения и реализации, обратитесь к репозиторию Оливергура на GitHub.
Классификация намерений
Следующим действием при создании чат-бота является определение намерения пользователя. Это включает в себя использование методов обработки естественного языка (NLP), чтобы понять, что спрашивает пользователь, и классифицировать запрос в соответствии с конкретным намерением.
Модель классификатора намерений обучила набор данных ATIS, применив методы машинного обучения, такие как анализ, предварительная обработка текста и преобразование данных для заданных данных, а затем выполнила шаг выбора модели, чтобы получить лучшую модель для классификатора.
В приведенной ниже таблице показана информация о модели машинного обучения, которая обучена набору данных классификации намерений ATIS.
В таблице есть 5 моделей ML с их точностью, где модель XG Boost имеет самую высокую точность, которая составляет 96%, за ней следует модель MLP (многослойный персептрон), которая составляет 95%.
Выводы для классификатора намерений
Конвейер выводов использует лучшую модель классификатора и используется в классификации намерений в реальном времени.
#Inferences for Intent Classifier class IntentClassifier: def __init__(self,model,tokenizer): self.model=model self.tokenizer=tokenizer def preprocess_query(self, user_query): try: preprocessed_query=remove_punctuation(user_query) preprocessed_query=remove_stopwords(user_query) preprocessed_query=stem_words(user_query) return preprocessed_query except Exception as e: print(e) def tokenization(self,preprocessed_query ): try: query = self.preprocess_query(preprocessed_query) return self.tokenizer.transform([query]).toarray() except Exception as e: print(e) def get_intent(self, query): intent_name_list = ['atis_abbreviation', 'atis_aircraft', 'atis_airfare', 'atis_airline', 'atis_flight', 'atis_flight_time', 'atis_ground_service', 'atis_quantity'] try: if(len(query)==0): return -1 else: tokenized_query = self.tokenization(query) pred_intent=self.model.predict_proba(tokenized_query) intent = intent_name_list[pred_intent.argmax()] return intent except Exception as e: print(e) flight = IntentClassifier(ovr, tfidf_vectorizer) flight.get_intent('what is the time for delhi to bhopal flight?')
Распознавание объектов
Распознавание сущностей является ключевым компонентом обработки естественного языка (NLP) и общей функцией диалоговых чат-ботов с искусственным интеллектом. Это относится к процессу идентификации и извлечения определенных элементов значения из ввода пользователя, таких как имена, места, организации, даты и многое другое.
Например, если пользователь говорит: «Мне нужно забронировать рейс в Париж на следующую неделю», распознавание объекта в чат-боте идентифицирует «Париж» как место, а «на следующей неделе» — как дату. Эта информация затем может быть использована для предоставления пользователю соответствующей информации или для выполнения конкретной задачи, такой как поиск вариантов полета в Париж на желаемую дату.
Выводы для распознавания сущностей
import spacy class EntityRecognition: def __init__(self,model): self.nlp_spacy=model def get_entity(self,query:str): doc=self.nlp_spacy(query) entity_dict = dict() for ent in doc.ents: if ent.label_ not in entity_dict: entity_dict[ent.label_]=[] entity_dict[ent.label_].append(ent.text) else: entity_dict[ent.label_].append(ent.text) return entity_dict
Здесь мы используем библиотеку spacy, которая имеет предварительно обученную модель NER, способную аннотировать дату, имя, организацию (ORG) и местоположение (GPE). Вы можете обучить свою собственную модель NER в соответствии с вашими потребностями. Таким образом, вы можете извлечь конкретную информацию для создания ответа.
Интеграция с базами данных и API
Чат-боту может потребоваться получить информацию из баз данных или внешних API, чтобы предоставить полный ответ пользователю. Для этого требуется интеграция с этими системами и возможность обрабатывать ответы из этих источников и использовать информацию в ответе чат-бота.
API Amadeus Flight
Amadeus API используется для получения кода аэропорта (IATA/ICAO). После извлечения объекта местоположения мы получаем места отправления и назначения, а затем вызываем API для получения кодов.
from amadeus import Client, ResponseError class AmadeusFlightAPI: """ 1. https://developers.amadeus.com 2. https://github.com/amadeus4dev/ """ def __init__(self): pass def authentication(self): client_id='OmIrXd7UwDaN8EwIelTXy69B6oflO' ## API Key changed client_secret='wVEUCTF8fCNUA' ## Secret Key Changed self.amadeus = Client(client_id=client_id, client_secret=client_secret) def get_aitport_informaftion(self, location_name:str): try: ''' What are the cities matched with keyword 'Paris' ? ''' response = self.amadeus.reference_data.locations.cities.get(keyword=str(location_name)) return response.data except ResponseError as error: raise
База полетных данных
Приведенный ниже фрагмент кода предназначен для получения информации о рейсе из пункта отправления в пункт назначения, класс DataBase имеет функцию get_flight, которая принимает коды аэропортов и возвращает сведения о рейсе. .
class DataBase: def __init__(self): pass def load_data(self): self.airports = pd.read_csv('/kaggle/input/flight-delays/airports.csv') self.airlines = pd.read_csv('/kaggle/input/flight-delays/airlines.csv') self.flights = pd.read_csv('/kaggle/input/flight-delays/flights.csv') def get_flight(self, origin_airport_code, destination_airport_code): try: flight_information_dict=dict() top_5_flight=self.flights.loc[lambda x:(x.ORIGIN_AIRPORT == origin_airport_code) & (x.DESTINATION_AIRPORT == destination_airport_code)] origin_airport_detail=self.airports.loc[lambda x:(x.IATA_CODE == origin_airport_code)] destination_airport_detail=self.airports.loc[lambda x:(x.IATA_CODE == destination_airport_code)] flight_information_dict['flight']=top_5_flight.head() flight_information_dict['origin_airport']=origin_airport_detail flight_information_dict['destination_flight']=destination_airport_detail return flight_information_dict except Exception as e: raise
Пусть пользователь задаст запрос на получение информации о рейсе из Нью-Йорка в Бхопал. Таким образом, в режиме реального времени наш корректор орфографии проверяет запрос, затем классификатор намерений классифицирует намерение (flight_information) и сущность Распознаватель извлекает объект, например местоположение: Нью-Йорк и Бхопал и организацию: Air India.
Генерация ответа:
После того, как намерение, сущности, база данных и API определены, чат-бот должен сгенерировать ответ, соответствующий запросу пользователя. Это требует хорошего понимания намерений пользователя и использования передовых алгоритмов генерации естественного языка (NLG) для получения правильно сформированного и грамматически правильного ответа.
Давайте соберем все варианты использования, которые мы обсуждали выше, и начнем разговор с чат-бота на базе ИИ.
В приведенном ниже фрагменте кода класс Conversation имеет функцию get_response, которая принимает параметр query от пользователя и возвращает ответ пользователю.
class Conversation: def __init__(self): pass def load_model(self): self.clf=ovr self.tokenizer=tfidf_vectorizer self.nlp_spacy=spacy.load("en_core_web_sm") self.autocorrect=pipeline("text2text-generation",model="oliverguhr/spelling-correction-english-base") self.amadeus_flight_API=AmadeusFlightAPI() self.amadeus_flight_API.authentication() self.flight_db=DataBase() self.flight_db.load_data() def get_response(self,query): autocorrect_query=self.autocorrect(query,max_length=2048)[0]['generated_text'] flight = IntentClassifier(self.clf, self.tokenizer) entity_recognition=EntityRecognition( self.nlp_spacy) pred_intent=flight.get_intent(autocorrect_query) if pred_intent == "atis_flight": entity_dict=entity_recognition.get_entity(autocorrect_query) location_list=entity_dict['GPE'] if len(location_list)>0: if len(location_list)==1: source_location=location_list[0] # Information not enough else: source_location=location_list[0] destination_location=location_list[-1] source_location_info=self.amadeus_flight_API.get_aitport_informaftion(source_location)[0] destination_location_info=self.amadeus_flight_API.get_aitport_informaftion(destination_location)[0] flight_information=self.flight_db.get_flight(source_location_info['iataCode'],destination_location_info['iataCode']) respose = dict() respose['source_location']=flight_information return flight_information
Вот результат заданного запроса.
Рекомендации
- https://drive.google.com/file/d/1OuYkYB5J2getuL89ud7Xvt21WKp9QbwU/view
- https://www.linkedin.com/pulse/end-nlp-model-using-syntactic-processing-atis-data-over-nilesh-gode/
- https://www.cs.cmu.edu/~dkaushik/assets/pubs/RANLP047.pdf
- https://www.kaggle.com/code/divyansh22/airline-review-data-preprocessing-pt-2-nlp/ноутбук
- https://www.travelpayouts.com/blog/flight-apis-and-travel-project-ideas/
- https://github.com/vishalstark512/ChatBot_With_Intents
- https://meta-guide.com/software/100-best-github-chatbot-dataset
- https://www.kaggle.com/datasets/536db59649ec509a2808c8d2c85d560c64e1dce44778a22ab79ce3408813e8fb -> Создать набор данных учетной записи