C’est quoi une Utterance ?

Le dossier Utterances se réfère à tous les fichiers nécessaires à l’entrainement du modèle NLU du field. Il est organisé en deux dossiers:

  • Le dossier des intents contient les exemples de fichiers d’entrainement utilisé par le field. Il est organisé en langue (par défaut en pour la langue anglaise et fr pour la langue française).
  • Le dossier des entities contient tous les fichiers YAML représentant les entités utilisées dans les intents.

Intents

Lorsqu’un utilisateur envoie une requête textuelle à NTeABot, cette requête est formulée dans une langue donnée (français, anglais, espagnol, duala, bassa'a, fulfulbe, bulu, etc). Pour que NTeABot puisse comprendre cette requête, il doit au préalable être entrainé à cette forme de requête utilisateur. C’est pourquoi, pour bien organiser la fonctionnalité plurilingue de NTeABot, le dossier intents est organisé en langue selon la codification ISO (fr, en, es, dl, etc) où chaque langue est un dossier dans lequel se trouve des fichiers YAML d’entrainement.

utterances
  intents
    fr
        cooltravelbus.yaml
        cooltraveltrain.yaml
    en
        cooltravelbus.yaml
        cooltraveltrain.yaml

Exemple d’un fichier d’intent

Le fichier d’intent obéit à la structure décrite dans la documentation de Snips-nlu. Dans le fichier cooltravelbus.yaml on va placer toutes les utterances traitant de la réservation des trains.

# cooltravelfield/utterances/fr/cooltravelbus.yaml

# BookBus
---
type: intent
name: BookBus  
utterances:
  - Réserve-moi un billet de bus [travelAgencyName:travelAgency](Finex) de [startedPlace:nlulib/city](Douala) à [targetPlace:nlulib/city](Yaoundé)
  - Je voyage ce soir, regarde les bus qui vont à [targetPlace:nlulib/city](Douala) en partance de [startedPlace:nlulib/city](Yaoundé)
  - cherche des billets de bus [travelAgencyName:travelAgency](Général)  disponibles pour [targetPlace:nlulib/city](Ngaoundéré) au départ de [startedPlace:nlulib/city](Yaoundé)?
  - Je veux voyager de [startedPlace:nlulib/city](Douala) à [targetPlace:nlulib/city](Yaoundé), est-ce qu'il y a des bus ce jours ?
  - réserve-moi un billet de bus de [startedPlace:nlulib/city](Douala)  à [targetPlace:nlulib/city](Yaoundé) [time:snips/datetime](ce soir)

Note

Dans ce fichier cooltravelbus.yaml vous pouvez ajouter plusieurs intent, il faudra juste les séparer par trois tirets de six ---. A chaque fois que vous souhaitez ajouter un nouveau intent dans un fichier, penser à ces trois tirets.

Et dans le fichier cooltraveltrain.yaml, les utterances pour la réservation des trains:

# cooltravelfield/utterances/intents/fr/cooltraveltrain.yaml

# BookTrain
---
type: intent
name: BookTrain
slots:
  - name: startedPlace
    entity: nlulib/city
  - name: targetPlace
    entity: nlulib/city  
  - name: time
    entity: snips/datetime        
utterances:
  - je veux réserver un billet de train de [startedPlace](Douala) à [targetPlace](Yaoundé)
  - je voyage ce soir, regarde les trains qui vont à [targetPlace](Douala) en partance de [startedPlace](Yaoundé)
  - cherche des billets de train disponibles pour [targetPlace](Ngaoundéré) au départ de [startedPlace](Yaoundé)?
  - je veux voyager de [startedPlace](Douala) à [targetPlace](Yaoundé), est-ce qu'il y a des trains ce jours ?
  - je souhaite réserver un billet de train de [startedPlace](Douala)  à [targetPlace](Yaoundé) [time](ce soir)`

Voici une description des points centraux de cette structure:

  • type: représente le type d’utterance traitée (intent ou entity).
  • name: donne le nom de l’intent ou de l’action (BookTrain, BookBus déclarés dans le fichier de configuration)
  • slots: sont des paramètres qui représentent les entités utilisées dans les utterances. Pour [travelAgencyName:travelAgency](Finex) l’entité est travelAgency, le nom attribué à l’entité travelAgencyName et ce qui réfère à l’entité Finex. Ces entités doivent être déclarrées dans le dossier entities.
  • utterances: sont des potentiels requêtes utilisateurs. Ces requêtes doivent être assez explicites et hétérogènes pour couvrir la somme des requêtes possibles traitée dans l’action.

Note

  • Le nombre d’utterances n’est pas limité: plus vous insérez d’utterances, plus votre field match au plus les requêtes utilisateur.
  • Essayer au maximum de faire varier les tournures linguistiques des utterances de vos fields, de manière à couvrir toutes les requêtes éventuelles utilisateurs.
  • Le paramètre slots peut être facultatif (cf. BookBus) selon son mode de déclaration dans les utterances. Je vous invite à regarder la documentation officielle le concept de implicit value.

Entities

Les entities (entités nommées en français) représentent des expressions linguistiques référentielles dont on associe souvent aux noms propres, les lieux, organisations, chose conceptuelle (drapeaux, poisson), etc.

Dans le dossier utterances de votre field, les entités doivent être visibles de cette manière: nom de l’entité (ici travel) suivie de la langue (en, fr, etc) ou de all (toutes les langues).

utterances
    intities
        travel_all.yaml

Le fichier entity obéit aussi à la structure décrite dans la documentation de Snips-nlu.

# City Entity (déjà définie par défaut dans les entités de NTeABot, ne plus le 
# déclarer dans les entités de votre field) 
---
type: entity
name: nlulib/city
values:
  - [Douala, capitale économique du Cameroun]
  - [Kribi, cité balnéaire, ville aux cirènes]
  - [Limbé,limbe, zone anglophone du Cameroun]
  - [Yaoundé, ville aux sept colines]
  - [ABIDJAN,abidjan]
  - [ABOMEY,abomey]
  - [ACCRA,accra]

# cooltravelfield/utterances/entities/travel_all.yaml

# travelAgency Entity
---
type: entity
name: travelAgency
automatically_extensible: false 
use_synonyms: false 
matching_strictness: 0.8
values:
  - [Finex, finex voyage]
  - [Général, général voyage]
  - [Buca]
  - [Central, central voyage]

Voici une description des points centraux de cette structure:

  • type: représente le type d’utterance traitée (ici entity).
  • name: donne le nom de l’entité tel que utilisé dans l’intent (travelAgency, nlulib/city)
  • values : liste les valeurs possibles associées à une entité. Pour l’entité suivante [Douala, capitale économique du Cameroun], la première valeur est le nom de l’entité (Douala) et les autres les synonymes de ce nom (capitale économique du Cameroun).
  • automatically_extensible: extensibilité des valeurs. valeur par défaut est true
  • use_synonyms: utilise les synonymes des valeurs. valeur par défaut est true
  • matching_strictness: dégré de match. valeur par défaut est 1.0


Entités par défaut de NTeABot

NTeABot possède par défaut un certain nombre d’entités que vous pouvez directement utiliser dans votre field. Nous les avons organisé en groupes:

Nourriture

  • nlulib/cmswfood liste des plats de la région du Sud-Ouest Cameroun
  • nlulib/cmwfood liste des plats de la région de l’Ouest Cameroun
  • nlulib/cmlfood liste des plats de la région du Littoral Cameroun

Langues

  • nlulib/language liste des principales langues parlées au Cameroun
  • nlulib/people liste les groupes ethniques présents au Cameroun
  • nlulib/languageForm variante du mot langue
  • nlulib/dialectForm variante de dialecte
  • nlulib/cmLanguages liste toutes les langues parlées au Cameroun

Noms propres

  • nlulib/cmNorthNames liste les noms propres de la région du Nord Cameroun
  • nlulib/cmCenterNames liste les noms propres de la région du Centre Cameroun
  • nlulib/cmLittoralNames liste les noms propres de la région du Littoral Cameroun
  • nlulib/cmSouthWestNames liste les noms propres de la région du Sud-Ouest Cameroun
  • nlulib/cmWestNames liste les noms propres de la région de l’Ouest Cameroun
  • nlulib/cameroonNames liste les noms propres utilisés au Cameroun
  • nlulib/arabicNames liste les noms propres d’origine arabe
  • nlulib/chineseNames liste les noms propres d’origine chinoise
  • nlulib/dutchNames liste les noms propres d’origine néerlandaise
  • nlulib/englishNames liste les noms propres d’origine anglaise
  • nlulib/greekNames liste les noms propres d’origine grecque
  • nlulib/irishNames liste les noms propres d’origine irlandaise
  • nlulib/italianNames liste les noms propres d’origine italienne
  • nlulib/japaneseNames liste les noms propres d’origine japonaise
  • nlulib/koreanNames liste les noms propres d’origine koréenne
  • nlulib/polishNames liste les noms propres d’origine polonaise
  • nlulib/russianNames liste les noms propres d’origine russe
  • nlulib/scottishNames liste les noms propres d’origine écossaise
  • nlulib/spanishNames liste les noms propres d’origine espagnole
  • nlulib/vietnameseNames liste les noms propres d’origine viétnamienne
  • nlulib/czechNames liste les noms propres d’origine tchèque
  • nlulib/germanNames liste les noms propres d’origine allemande
  • nlulib/portugueseNames liste les noms propres d’origine portugaise

nteabot

  • nlulib/username liste quelques usernames possibles
  • nlulib/chatbotname liste les noms des agents conversationnels existants

ntealan

  • nlulib/ntealan liste les variantes du mot NTeALan
  • nlulib/nteabot liste les variantes du mot NTeABot
  • nlulib/sponsors liste les variantes du mot sponsors
  • nlulib/hello liste les variantes du mot hello
  • nlulib/president liste les variantes du mot président
  • nlulib/leadscientist liste les variantes du groupe de mots ‘coordonnateur scientifique’
  • nlulib/developpers liste les variantes du mot développeurs
  • nlulib/linguists liste les variantes du mot linguiste

Lieux

  • nlulib/city liste toutes les villes camerounaises/capitales du monde
  • nlulib/country liste tous les pays du monde
  • nlulib/continent liste tous les continents du monde

Snips [références]

  • snips/datetime match tous les formats liés au temps
  • snips/temperature match tous les formats liés à la température
  • snips/amountOfMoney match tous les formats liés à la monnaie
  • snips/musicAlbum match tous les formats liés aux albums de music
  • snips/musicArtist match tous les formats liés aux musiciens
  • snips/musicTrack match tous les formats liés à une playlist
  • snips/ordinal match tous les formats liés au ordinaux
  • snips/number match tous les formats liés aux chiffres
  • snips/duration match tous les formats liés à la durée
  • snips/percentage match tous les formats liés à un pourcentage