C’est quoi un field ?

Le mot field (domaine/compétence en anglais) renvoi littéralement à ce que NTeABot peut réaliser comme tâche. Reprenons notre ancien scénario:

  • Vous avez une application de réservation de billet de voyage et celle-ci fonctionne au moyen d’une API REST.
  • Vous aimeriez donner la possibilité aux utilisateurs de votre application de faire directement des réservations dans un langage naturel sans toutefois passer par les formulaires habituels de votre plateforme. Une telle requête utilisateur serait: réserve-moi un billet de bus de Douala à Yaoundé demain après-midi

L’objectif d’un field c’est de permettre à NTeABot de comprendre cette requête utilisateur et de la transformer en action/résultat pour votre application. Dans ce processus, NTeABot utilisera uniquement l’API de votre application pour réaliser la réservation tel que défini dans votre process interne (resquest). Nous appelons cette opération Bot NLU operation (Bot Natural Language Understanding operation).


Pré-requis

Pour faciliter la prise en main de cette technologie, nous avons essayé de faciliter au plus près son extension. Vous aurez besoin des compétences suivantes pour développer un field de NTeABot:

  • Maîtriser la structure interne d’un fichier YAML (ce fichier servira dans toutes les sections du field, soit pour la configuration soit pour stocker les données)
  • Savoir coder en Python (les bases sont demandées pour des fields assez simples. Par contre des connaissances approfondies du langage seront requises si votre field traite de beaucoup de concepts: learningfield est un exemple pour l’enseignement des langues)
  • Avoir de légères notions en linguistique (pour construire des utterances de bonne qualité)

La structure interne d’un field

Ce que nous appelons field est tout simplement un dossier dans lequel s’ampille d’autres dossiers et fichiers. Le field est identifiable par un nom caractéristique de son contenu et du mot field. Pour vous donner un exemple, reprenons notre précédent exemple concernant la réservation des billets de bus. Le nom du field sera alors : cooltravelfield (cooltravel pour le nom de l’application et field comme compoante de NTeABot).

Un field est plus exactement un dossier (dont le nom est identique au nom du field) composé de 4 sous dossiers (corpus, requests, templates et utterances) et un fichier yaml de configuration (config.yaml). Ainsi, l’illustration ci-dessous représente le contenu du dossier cooltravelfield:

Les dossiers internes d'un field



Configuration d’un field

Le fichier config.yaml est le principal fichier de configuration d’un field. Il permet de définir tous les fichiers utilisés dans le field et les informations utiles à son identification. Les éléments suivants permettent d’avoir un fichier de configuration conforme:

name: cooltravelfield
description: This field is use for travel reservation
active: true
version: 0.1
ntealan: true
logo: ""
author: elvis
public: false
maintainer: DHCtd
components:
    requests:
      cooltravel:
        - ReserveBus
        - ReserveTrain
    templates:
      en:
        - cooltravel_template.yaml 
      fr:
        - cooltravel_template.yaml 
    utterances:
      intents:
        fr:
          - cooltravel.yaml
        en:
          - cooltravel.yaml        
      entities: 
        - travel_fr.yaml
        - travel_en.yaml

Expliquons chacun de ces points en rappelant qu’ils sont tous obligatoires:

  • name : le nom donné à votre field (peut être le nom de votre organisation)
  • description : petit résumé de ce que fait votre field
  • active : indique si votre field est activé ou pas (true = activé et false = désactivé)
  • version : version de développement du field (par défaut 0.1)
  • ntealan : field est-il la propriété de ntealan (true = oui et false = non)
  • logo : indique le url du logo de votre field
  • author : auteur/créateur du field
  • public : définit si le field est publique ou privé (true = publique et false = privé). Si votre field est publique, toutes les autres applications pourront l’utiliser. Dans le cas contraire, il reste votre propriété exclusive.
  • maintainer : personne chargée de la maintenance du field
  • components : liste les 3 principaux dossiers du field
    • requests: représente le dossier requests présent dans le dossier du field et sert à lister les noms des fichiers python de requête et des actions associées. Ces fichiers sont utilisés pour traiter/éxécuter les requêtes décrites dans les actions. Sur l’exemple, cooltravel fait référence au fichier cooltravel.py. Dans ce fichier, est traité les actions ReserveBus et ReserveTrain. NB: vous pouvez déclarrer ici autant de requêtes que vous souhaitez, tout en veillant à respecter cette structure.
    • templates : organisé par langue traitée, il liste tous dossiers et fichiers des templates du bot. Les dossiers en et fr sont les langues prises en charge par NTeABot; et les fichiers cooltravel_template.yaml sont les templates respectifs de chaque langue.
    • utterances : contient les dossiers/fichiers d’entrainement du field. Le dossier intents contient les fichiers d’entrainement au format YAML et entities les fichiers d’entités utilisés à l’intérieure du fichier d’intents. Ces fichiers obéissent à la structure des fichiers de la librairie Snips_nlu

Finalement nous obtenons la structure finale du field suivant:

Structure interne d'un field

Les dossiers encapsulés ne sont pas visibles dans cette illustration. En effet, les dossiers utterances et templates contienent des sous-dossiers de localisation (pour les langues prises en charge par le système: fr pour le français, en pour l’anglais par exemple)

Note

  • Veuillez surtout vous rassurer que tous les fichiers et dossiers définis dans le fichier de configuration config.yaml sont bel et bien présents à l’intérieur du dossier de votre field.
  • Seuls les fichiers de type YAML et Python sont actuellement acceptés dans les dossiers d’un field.
  • Les noms des fichiers doivent respectés les conventions de nommages des fichiers YAML et Python. Cf. se reférer aux sections concernées.

Exemple de création (Ligne de commande Linux)

Reprenons l’exemple de cooltravelfield:

# créer le dossier principal du field
mkdir cooltravelfield && cd cooltravelfield
# créer des sous dossiers du field
mkdir corpus &&  mkdir requests &&  mkdir templates &&  mkdir utterances

# créer et éditer le fichier de configuration avec l'éditeur nano ou utiliser vim
nano config.yaml
# copier et coller votre fichier de configuration
name: cooltravelfield
description: This field is use for travel reservation
active: true
version: 0.1
ntealan: true
logo: ""
author: elvis
public: false
maintainer: DHCtd
components:
    requests:
      cooltravel:
        - BookBus
        - BookTrain
    templates:
      en:
        - cooltravel_template.yaml 
      fr:
        - cooltravel_template.yaml 
    utterances:
      intents:
        fr:
          - cooltravel.yaml
        en:
          - cooltravel.yaml        
        entities: 
          - travel_fr.yaml
          - travel_en.yaml

# enrégistrer ce fichier et créer le fichier request déclaré (.py)
touch requests/cooltravel.py
# créer les sous-dossiers déclarés dans les templates
mkdir templates/en && mkdir templates/fr
# créer les fichiers de template pour chaque langue
touch templates/en/cooltravel_template.yaml  && touch templates/fr/cooltravel_template.yaml
# créer les sous-dossiers déclarés dans les utterances
mkdir utterances/intents && mkdir utterances/entities 
mkdir utterances/intents/fr && mkdir utterances/intents/en
# créer les fichiers correspondant pour les intents et les entities
touch utterances/intents/fr/cooltravel.yaml && touch utterances/intents/en/cooltravel.yaml
touch utterances/entities/travel_fr.yaml && touch utterances/entities/travel_en.yaml

Tout est terminé! Bravo, vous avez créé votre propre field !!!