This branch contains only files necessary for running chatbot. All files are included in the second branch. This includes:
-> SpacyMd - polish medium size spacy pipeline,
-> Mimic - small sized Mimic model for OOV handling,
-> Slot filler - model for filling slots,
-> Lookups for character embeddding and slots number to name conversion,
-> Lookups for logic operators and document types disambiguation,
-> Dockerfile,
-> python code necessary to run program
Chatbot for intelligent document searching in polish language.
The purpose of the work is to create a chatbot system that allows intelligent search of documents. The chatbot should understand the user's commands and respond accordingly. It was assumed that, receiving a sentence containing requirements from the user, the bot should correctly extract the words that have meaning in the statement. In addition to
this information, the bot should also understand the logic contained in the received command. Using the information extracted from the sentence about the type and content of the document being sought, the chatbot should search for the document or documents that most closely match the user's requirements.
Communication should also include attempts to work with the user to resolve problems and ambiguities in the message received from him. Program should include a mechanism for asking the user relevant questions aimed at clarify requirements. In addition to understanding and searching, the chatbot should actively offer the ability to help narrow the search and rank the results according to their fit with the requirements. Communication should take place over the Internet and be conducted in Polish.
This repository contains all files used for creation of document recommending chatbot. This includes:
-> Python code for chatbot
-> Code for data acquisition
-> Code for data preprocessing
-> Code for database creation
-> Code for creating questions for model training
Creation and training of networks was done using GoogleColab (Files in repo are not valid):
https://colab.research.google.com/drive/1z6WoUWEg6kNRVPlmXfZxiJT3Es31EVFs
Dokumenty pozyskano ze strony CEON.
Pozyskane metadane:
-> Identyfikator
-> Tytuł
-> Autorzy
-> Źródło
-> Typ dokumentu
-> Słowa kluczowe
-> Adres URL
Schemat pozyskania danych:
Moduł zrozumienia języka pozwala na ekstrakcję najważniejszych informacji zawartych w zdaniu wprowadzonym przez użytkownika. Rolą tego modułu jest wyznaczenie, które informacje w zdaniu opisują typy dokumentów lub klucze które powinien on zawierać.
Schemat modułu zrozumienia języka:
Proces ekstrakcji informacji rozpoczyna się po otrzymaniu wiadomości od użytkownika. Pierwszym etapem jest wykorzystanie SpaCy w celu tokenizacji otrzymanego zdania. Każdy token następnie jest wektoryzowany oraz lematyzowany z wykorzystaniem tablic dołączanych do modelu SpaCy. Następnie zwektoryzowany tekst zostaje przekazany do funkcji obsługującej słowa OOV która uzupełnia wektory dla słów spoza słownika SpaCy. Przygotowane w ten sposób wektory przekazywane są do modelu Slot filler który znajduje na ich podstawie wyrażenia określające typy dokumentów, słowa klucze oraz spójniki występujące w zdaniu. Otrzymane sloty zostają następnie przekazane do funkcji poprawy słów która dla każdego wykrytego w zdaniu typu dokumentu przypisuje jego poprawną wersję z wykorzystaniem przygotowanej tablicy dokumentów. W ten sam sposób poprawiane są także spójniki którym dodatkowo przypisywana jest także operacja logiczna zdefiniowana w tablicy opratorów. Po wykonaniu wszystkich operacji moduł zwraca poprawione zdanie wraz z odpowiednio przypisanymi informacjami dodatkowymi, sloty oraz leksemy.
Schemat sieci MIMIC-RNN:
Schemat sieci slot-fillera:
W celu utworzenia bazy treningowej do modelu slot fillera stworzony został program pozwalający na generowanie przykładowych zapytań oraz żądań dotyczących polecenia lub znalezienia dokumentu zawierającego dane klucze. Program ten oprócz wygenerowanego automatycznie zapytania zwracał także odpowiadającą mu tokenizacje oraz wektor odpowiednich slotów. Przyjęta podstawowa budowa zapytania przedstawia się następująco:
[Początek polecenia][część dokumentowa][orzeczenie][część kluczowa]
Program polegał na odpowiednim wyborze każdej z części zapytania w kolejności od początku polecenia do części kluczowej z uwzględnieniem odpowiedniej akomodacji syntaktycznej między każdą z części.
Przedstawienie procesu dopasowywania części dokumentowej do początku zapytania:
Przykład dołączenia członu nadrzędnego grupy syntatkycznej orzeczenia do części dokumentowej:
Algorytm dodawania wyrazów do orzeczenia:
Przykładowe pytania:
Schemat menadżera logiki: