Úvod do RASA
Krátko predstavím platformu RASA a vysvetlím ako vytvoriť slovenský dialógový systém.
Čo je to chatbot
Virtuálny agent, schopný porozumieť prirodzenému jazku a vykonávať akcie na základe dialógu.
znalosti
pamäť
|
správa -> agent -> odpoveď
Čo je to RASA
- Nástroj na tvorbu chatbotov.
- Rámec v jazyku Python pre tvorbu dialógových systémov s použitím konverzačnej umelej inteligencie.
- Je považovaný za priemyselný štandard.
- Používa sa na uľahčenie komunikácie so zákazníkmi: automatický support, podpora predaja, call-centrá
Rozhrania RASA
- Podporuje rôzne spôsoby textovej komunikácie, je možné aj hlasové rozhranie.
- Komerčná Chatovacia služba (Slack, Telegram, Messenger, Webex, )
- On Premise (Mattermost, RocketChat)
- Vlastná stránka
RASA hovorí po slovensky
Pomocou slovenského jazykového modelu Spacy
- Slovenské slovné vektory
- Slovenský NER model
Architektúra
Interpeter (NLU) : Zoberie vstupnú správu. Identifikuje zámer a pomenované entity
Tracker : Podľa zámeru a predošlého stavu sa určí nový stav konverzácie. Podľa nového stavu sa určia možné akcie. Vyberie sa jedna akcia a vykoná sa vo forme výstupnej správy.
Jazykový Stav
model konverzácie
| |
vstup -> NLU --> NER + intent --> Tracker -> akcia
Príprava jednoduchej bázy pravidiel RASA
Znalosti bota RASA sa skladajú zo:
- zámerov: možné požiadavky používateľov
- odpovedí: možné odpovede chatbota
- príbehov: možné priebehy konverzácie - postupnosti zámerov a odpovedí.
Príklad na zámer:
- Zistenie presného času
- Zistenie aktuálneho počasia
- Objednanie stola v reštaurácii
Báza pravidiel tvorí graf
- Uzly grafu sú zámery
-
Hrany grafu sú odpovede
start -> intent_ask_time -> intent_end -> end
Možný priebeh konverzácie:
<start> -> utter_greet
BOT: Dobrý deň, ako Vám môžem pomôcť?
USER: Chcem vedieť koľko je hodín.
<indent_ask_time> -> utter_time
BOT: Je 13:30. Potrebujete ešte niečo?
USER: Nie, ďakujem.
<intent_end> -> utter_bye
BOT: Dovidenia.
Báza pravidiel
- NLU data (Zámery): Opis toho, čo chce používateľ
- Responses (Odpovede): Opis toho čo vraví robot
- Stories (Príbehy): Predpokladané priebehy konverzácie
- Rules (Pravidlá): Výnimky z priebehu konverzácie.
- Forms (Formuláre): Komplexné informácie s ktorými pracuje robot a spôsob ich získania od požívateľa.
Tvorba slovenského virtuálneho asistenta
Potrebujeme:
- Anaconda
- Tensorflow pre RASA
- CUDA/GPU je výhoda
- Slovenský Spacy jazykový model
Vytvorte si nové virtuálne prostredie Anaconda:
source ~/miniconda/bin/activate
conda create -n rasa
conda activate rasa
Nainštalujte potrebné balíky:
conda install pytorch python=3.9 pytorch-cuda=11.6 -c pytorch -c nvidia
pip install https://files.kemt.fei.tuke.sk/models/spacy/sk_core_web_md-3.4.1.tar.gz
pip install rasa[spacy]
Proces prípravy a trénovania chatbota ovládame pomocou príkazu rasa:
Vytvoríme nový projekt:
rasa init
Po čase sa objaví niekoľko adresárov a súborov:
action : kód pre vlastná akcie agenta
data/nlu.yaml : trénovacie dáta pre zámery
data/rules.yaml : výnimky z priebehu konverzácie
data/stories.yaml : očakávané priebehy konverzácie
config.yaml
creadentials.yaml
domain.yaml : zoznam zámerov a možné odpovede
endpoints
Spustenie trénovania:
rasa train
Spustenie chatbota v termináli:
rasa shell
Slovenská RASA konfigurácia
Vstupná správa prechádza cez viacero komponentov pre predspracovanie, extrakciu príznakov, rozpoznávanie pomenovaných entít, rozpoznávanie zámeru.
Pridajte slovenský jazykový model do reťazca spracovania.
Slovenský jazykový model umožní umožní rozpoznať podobnosť slovenských slov a slovenské pomenované entity. Slovenské príznaky idú do ďalších krokov spracovania.
language: sk
pipeline:
- name: "SpacyNLP"
# language model to load
model: "sk_core_web_md"
- name: SpacyTokenizer
- name: SpacyFeaturizer
- name: RegexFeaturizer
- name: LexicalSyntacticFeaturizer
- name: CountVectorsFeaturizer
- name: CountVectorsFeaturizer
analyzer: "char_wb"
min_ngram: 1
max_ngram: 4
- name: DIETClassifier
epochs: 100
- name: EntitySynonymMapper
- name: ResponseSelector
epochs: 100
NLU po slovensky
Pridáme trénovaciu databázu pre slovenské zámery, ktoré očakávame v dialógu.
Napr.
version: "2.0"
nlu:
- intent: language_resources
examples: |
- Aké korpusy ponúkate?
- Povedz mi niečo o jazykových zdrojoch.
- Aké slovenské databázy ste vytvorili?
- Vytvorili ste nejaké rečové databázy?
- Aké vaše databázy si viem stiahnuť?
- Čo ste vytvorili pre slovenčinu?
Odpovede po slovensky
Do súboru domain.yaml
pridáme očakávané zámery a možné odpovede:
version: "3.1"
intents:
- greet
- goodbye
- affirm
- deny
- mood_great
- mood_unhappy
- bot_challenge
responses:
utter_greet:
- text: "Hey! How are you?"
utter_cheer_up:
- text: "Here is something to cheer you up:"
image: "https://i.imgur.com/nGF1K8f.jpg"
Stories, rules
Pridáme očakávené priebehy konverzácie do stories.yaml
.
Tento krok nezávisí na jazyku.
version: "2.0"
stories:
- story: whatyouknow
steps:
- intent: abilities
- action: utter_abilities
- story: tellstaff
steps:
- intent: staff
- action: utter_staff
Vyhodnotenie úspešnosti
- Úspešný dialóg
- Neúspešný dialóg
- Predčasne ukončený dialóg
https://rasa.com/docs/rasa/markers
Úspešnosť alebo neúspešnosť dialógu indikujú príznaky.
- Vyjadrenie určitého zámeru.
- Vykonanie niektorej akcie.
Nasadenie RASA
Komponenty RASA
- Tracker (databáza pre uloženie prebiehajúcich a minulých konverzácií): v pamäti, v SQL (sqlite, postgres... ), v NoSQL (redis, mongo)
- Event Broker (Výmena správ medzi komponentami)
- Model Storage (uloženie modelov) na disku, cez HTTP, Cloud Storage (s3, aws).
- Lock Storage: Synchronizácia komponentov
Na Kubernetes, OpenShift, Docker, Compose,
Zdroje
RASA Dokumentácia