Uvod do RASA

6th Mar 2023 nlp

Ú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:

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

Previous Post Next Post