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
:
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 fieldactive
: indique si votre field est activé ou pas (true
= activé etfalse
= désactivé)version
: version de développement du field (par défaut0.1
)ntealan
: field est-il la propriété de ntealan (true
= oui etfalse
= non)logo
: indique le url du logo de votre fieldauthor
: auteur/créateur du fieldpublic
: définit si le field est publique ou privé (true
= publique etfalse
= 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 fieldcomponents
: liste les 3 principaux dossiers du fieldrequests
: 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 fichiercooltravel.py
. Dans ce fichier, est traité les actionsReserveBus
etReserveTrain
. 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 dossiersen
etfr
sont les langues prises en charge par NTeABot; et les fichierscooltravel_template.yaml
sont les templates respectifs de chaque langue.utterances
: contient les dossiers/fichiers d’entrainement du field. Le dossierintents
contient les fichiers d’entrainement au formatYAML
etentities
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:
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
etPython
sont actuellement acceptés dans les dossiers d’un field. - Les noms des fichiers doivent respectés les conventions de nommages des fichiers
YAML
etPython
. 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 !!!