PNL.js
Si vous recherchez la documentation de la version 3, vous pouvez les trouver ici Version 3
"NLP.js" est un utilitaire général en langage naturel pour nodejs. Supporte actuellement :
- Devinez la langue d'une phrase
- Distance Levenshtein rapide de deux cordes
- Recherchez la meilleure sous-chaîne d'une chaîne avec moins de distance de Levenshtein par rapport à un modèle donné.
- Obtenez des stemmers et des tokenizers pour plusieurs langues.
- Analyse des sentiments pour les phrases (avec prise en charge de la négation).
- Reconnaissance et gestion des entités nommées, prise en charge multilingue et acceptation de chaînes similaires, de sorte que le texte introduit n'a pas besoin d'être exact.
- Classificateur de traitement du langage naturel, pour classer un énoncé en intentions.
- NLP Manager : un outil capable de gérer plusieurs langues, les entités nommées pour chaque langue, les énoncés et les intentions pour la formation du classificateur, et pour un énoncé donné renvoyer l'extraction d'entités, la classification d'intention et l'analyse des sentiments. En outre, il est capable de maintenir un gestionnaire de génération de langage naturel pour les réponses.
- 40 langues prises en charge nativement, 104 langues prises en charge avec l'intégration BERT
- Toute autre langue est prise en charge via la tokenisation, même les langues fantastiques
Nouveau dans la version 4 !
La version 4 est très différente des versions précédentes. Avant cette version, NLP.js était une bibliothèque monolithique. Les grands changements :
- La bibliothèque est désormais divisée en petits packages indépendants.
- Donc chaque langue a son propre package
- Il fournit un système de plugins, vous pouvez donc fournir vos propres plugins ou remplacer ceux existants.
- Il fournit un système de conteneurs pour les plugins, des paramètres pour les plugins ainsi que des pipelines
- Un pipeline est un code définissant la manière dont les plugins interagissent. Habituellement, c'est linéaire : il y a une entrée dans le plugin, et cela génère l'entrée pour le suivant. À titre d'exemple, la préparation d'un énoncé (le processus de conversion de l'énoncé en une table de hachage de fonctionnalités dérivées) est désormais un pipeline comme celui-ci :
normalize -> tokenize -> removeStopwords -> stem -> arrToObj
- Il existe un compilateur simple pour les pipelines, mais ils peuvent également être construits en utilisant une version modifiée de javascript et de python (les compilateurs sont également inclus sous forme de plugins, donc d'autres langages peuvent être ajoutés en tant que plugin).
- NLP.js inclut désormais des connecteurs, un connecteur est compris comme quelque chose qui a au moins 2 méthodes :
hear
et say
. Exemples de connecteurs inclus : Console Connector, Microsoft Bot Framework Connector et un Direct Line Offline Connector (celui-ci vous permet de créer un chatbot Web à l'aide de Microsoft Webchat, mais sans avoir à déployer quoi que ce soit dans Azure). - Certains plugins peuvent être enregistrés par langue, donc pour différentes langues, différents plugins seront utilisés. De plus, certains plugins, comme NLU, peuvent être enregistrés non seulement par langue mais également par domaine (un ensemble fonctionnel d'intentions qui peuvent être entraînées séparément)
- À titre d'exemple de plugins par langue/domaine, un plugin Microsoft LUIS NLU est fourni. Vous pouvez configurer votre chatbot pour utiliser le NLU de NLP.js pour certaines langues/domaines, et LUIS pour d'autres langues/domaines.
- Avoir des plugins et des pipelines permet d'écrire des chatbots en modifiant uniquement la configuration et le fichier des pipelines, sans modifier le code.
TABLE DES MATIÈRES
- Installation
- Démarrage rapide
- Installer la bibliothèque
- Créer le code
- Extraire le corpus dans un fichier
- Extraire la configuration dans un fichier
- Créer votre premier pipeline
- Connecteur de console
- Étendre votre bot avec le pipeline
- Ajout de plusieurs langues
- Ajout d'API et WebChat
- Utilisation du framework Microsoft Bot
- Reconnaître le nom du bot et le canal
- Un bot par connecteur
- Port différent pour Microsoft Bot Framework et Webchat
- Ajouter de la logique à une intention
- Mini-FAQ
- Web et React Natif
- Préparation à la génération d'un bundle
- Votre première PNL web
- Création d'une version distribuable
- Charger le corpus à partir de l'URL
- QnA
- Installez la bibliothèque et le plugin qna
- Entraîner et tester un fichier QnA
- Extraire la configuration dans un fichier
- Exposer le bot avec un Web et une API
- Démarrage rapide du NER
- Installez les packages nécessaires
- Créez le conf.json
- Créer le corpus.json
- Créez le heros.json
- Créer l'index.js
- Démarrer l'application
- Contexte stocké
- Réseau neuronal
- Introduction
- Installation
- Format du corpus
- Exemple d'utilisation
- Exportation du modèle entraîné vers JSON et importation
- Possibilités
- Enregistreur
- Introduction
- Enregistreur par défaut dans @nlpjs/core
- Enregistreur par défaut dans @nlpjs/basic
- Ajouter votre propre enregistreur au conteneur
- @nlpjs/emoji
- Introduction
- Installation
- Exemple d'utilisation
- @nlpjs/console-connecteur
- Installation
- Exemple d'utilisation dans NLP.js
- Exemple d'utilisation du package
- Exemple d'utilisation avec @nlpjs/basic
- @nlpjs/similarité
- Installation
- leven
- similarité
- Vérification orthographique
- SpellCheck formé avec des mots formés à partir d'un texte
- @nlpjs/nlu
- Installation
- NluNeural
- Gestionnaire de domaine
- NluManager
- Réagir natif
- Exemple d'utilisation
- Faux positifs
- Enregistrer les progrès de la formation
- Analyse comparative
- Prise en charge linguistique
- Langues prises en charge
- Analyse des sentiments
- Comparaison avec d'autres produits PNL
- Exemple avec plusieurs langues
- Devineur de langue
- Recherche similaire
- NLU
- Gestionnaire NLU
- Cerveau NLU
- Bayes NLU
- Pertinence binaire NLU
- Régression logistique NLU
- Gestionnaire du NER
- Énumération des entités nommées
- Entités nommées par expression régulière
- Supprimer les entités nommées
- Énoncés avec des entités dupliquées
- Intégration avec Duckling
- Prise en charge linguistique
- Comment intégrer avec le canard
- Extraction d'e-mails
- Extraction de numéro de téléphone
- Extraction d'URL
- Extraction de numéros
- Extraction ordinale
- Extraction de dimensions
- Extraction de quantité
- Montant de l’extraction d’argent
- Extraction des dates
- Extraction d'entité intégrée
- Extraction d'e-mails
- Extraction IP
- Extraction de hashtags
- Extraction de numéro de téléphone
- Extraction d'URL
- Extraction de numéros
- Extraction ordinale
- Pourcentage d'extraction
- Extraction de l'âge
- Extraction de devises
- Extraction des dates
- Durée Extraction
- Analyse des sentiments
- Gestionnaire PNL
- Charger/Enregistrer
- Importer/Exporter
- Contexte
- Logique d'intention (actions, pipelines)
- Remplissage des fentes
- Chargement depuis Excel
- Cadre de robots Microsoft
- Introduction
- Exemple d'utilisation
- Reconnaissance et remplissage des emplacements
- Langues
- Anglais
- indonésien
- italien
- Espagnol
- Contribuer
- Contributeurs
- Code de conduite
- Qui est derrière
- Licence
Installation
Si vous souhaitez utiliser NLP.js dans votre application Node, vous pouvez l'installer via NPM comme ceci :
Réagir natif
Il existe une version de NLP.js qui fonctionne dans React Native, vous pouvez donc créer des chatbots qui peuvent être formés et exécutés sur mobile même sans Internet. Vous pouvez l'installer via NPM :
Quelques limitations :
- Pas de chinois
- Le stemmer japonais n'est pas complet
- Pas d'importation Excel
- Pas de chargement à partir d'un fichier, ni d'enregistrement dans un fichier, mais il peut toujours importer depuis JSON et exporter vers JSON.
Exemple d'utilisation
Vous pouvez voir un excellent exemple d'utilisation dans le dossier /examples/02-qna-classic
. Cet exemple est capable d'entraîner le bot et d'enregistrer le modèle dans un fichier. Ainsi, lorsque le bot est redémarré, le modèle est chargé au lieu d'être à nouveau entraîné.
Vous pouvez commencer à construire votre PNL à partir de zéro avec quelques lignes :
const { NlpManager } = require ( 'node-nlp' ) ;
const manager = new NlpManager ( { languages : [ 'en' ] , forceNER : true } ) ;
// Adds the utterances and intents for the NLP
manager . addDocument ( 'en' , 'goodbye for now' , 'greetings.bye' ) ;
manager . addDocument ( 'en' , 'bye bye take care' , 'greetings.bye' ) ;
manager . addDocument ( 'en' , 'okay see you later' , 'greetings.bye' ) ;
manager . addDocument ( 'en' , 'bye for now' , 'greetings.bye' ) ;
manager . addDocument ( 'en' , 'i must go' , 'greetings.bye' ) ;
manager . addDocument ( 'en' , 'hello' , 'greetings.hello' ) ;
manager . addDocument ( 'en' , 'hi' , 'greetings.hello' ) ;
manager . addDocument ( 'en' , 'howdy' , 'greetings.hello' ) ;
// Train also the NLG
manager . addAnswer ( 'en' , 'greetings.bye' , 'Till next time' ) ;
manager . addAnswer ( 'en' , 'greetings.bye' , 'see you soon!' ) ;
manager . addAnswer ( 'en' , 'greetings.hello' , 'Hey there!' ) ;
manager . addAnswer ( 'en' , 'greetings.hello' , 'Greetings!' ) ;
// Train and save the model.
( async ( ) => {
await manager . train ( ) ;
manager . save ( ) ;
const response = await manager . process ( 'en' , 'I should go now' ) ;
console . log ( response ) ;
} ) ( ) ;
Cela produit le résultat suivant dans une console :
{ utterance: ' I should go now ' ,
locale: ' en ' ,
languageGuessed: false,
localeIso2: ' en ' ,
language: ' English ' ,
domain: ' default ' ,
classifications:
[ { label: ' greetings.bye ' , value: 0.698219120207268 },
{ label: ' None ' , value: 0.30178087979273216 },
{ label: ' greetings.hello ' , value: 0 } ],
intent: ' greetings.bye ' ,
score: 0.698219120207268,
entities:
[ { start: 12,
end: 14,
len: 3,
accuracy: 0.95,
sourceText: ' now ' ,
utteranceText: ' now ' ,
entity: ' datetime ' ,
resolution: [Object] } ],
sentiment:
{ score: 1,
comparative: 0.25,
vote: ' positive ' ,
numWords: 4,
numHits: 2,
type: ' senticon ' ,
language: ' en ' },
actions: [],
srcAnswer: ' Till next time ' ,
answer: ' Till next time ' }
Faux positifs
Par défaut, le réseau neuronal essaie d'éviter les faux positifs. Pour y parvenir, l'un des processus internes consiste à représenter les mots jamais vus par le réseau comme une fonctionnalité qui donne un certain poids à l'intention None
. Ainsi, si vous essayez l'exemple précédent avec " Je dois y aller ", il renverra l'intention None
car 2 des 4 mots n'ont jamais été vus pendant l'entraînement. Si vous ne souhaitez pas éviter ces faux positifs et que vous vous sentez plus à l'aise avec les classifications dans les intentions que vous déclarez, vous pouvez désactiver ce comportement en définissant useNoneFeature
sur false :
const manager = new NlpManager ( { languages : [ 'en' ] , nlu : { useNoneFeature : false } } ) ;
Enregistrer les progrès de la formation
Vous pouvez également ajouter un journal de progression afin de pouvoir suivre ce qui se passe pendant la formation. Vous pouvez enregistrer la progression sur la console :
const nlpManager = new NlpManager ( { languages : [ 'en' ] , nlu : { log : true } } ) ;
Ou vous pouvez fournir votre propre fonction de journal :
const logfn = ( status , time ) => console . log ( status , time ) ;
const nlpManager = new NlpManager ( { languages : [ 'en' ] , nlu : { log : logfn } } ) ;
Contribuer
Vous pouvez lire le guide sur la façon de contribuer sur Contributing.
Contributeurs
Réalisé avec les contributeurs-img.
Code de conduite
Vous pouvez lire le code de conduite sur Code de conduite.
Qui est derrière tout ça ?
Ce projet est développé par AXA Group Operations Spain SA
Si vous avez besoin de nous contacter, vous pouvez le faire à l'email [email protected]
Licence
Copyright (c) Opérations du Groupe AXA Espagne SA
L'autorisation est accordée par la présente, gratuitement, à toute personne obtenant une copie de ce logiciel et des fichiers de documentation associés (le « Logiciel »), d'utiliser le Logiciel sans restriction, y compris, sans limitation, les droits d'utilisation, de copie, de modification, de fusion. , publier, distribuer, accorder des sous-licences et/ou vendre des copies du Logiciel, et permettre aux personnes à qui le Logiciel est fourni de le faire, sous réserve des conditions suivantes :
L'avis de droit d'auteur ci-dessus et cet avis d'autorisation doivent être inclus dans toutes les copies ou parties substantielles du logiciel.
LE LOGICIEL EST FOURNI « EN L'ÉTAT », SANS GARANTIE D'AUCUNE SORTE, EXPRESSE OU IMPLICITE, Y COMPRIS MAIS SANS LIMITATION LES GARANTIES DE QUALITÉ MARCHANDE, D'ADAPTATION À UN USAGE PARTICULIER ET DE NON-VIOLATION. EN AUCUN CAS LES AUTEURS OU LES TITULAIRES DES DROITS D'AUTEUR NE SERONT RESPONSABLES DE TOUTE RÉCLAMATION, DOMMAGES OU AUTRE RESPONSABILITÉ, QUE CE SOIT DANS UNE ACTION CONTRACTUELLE, DÉLIT OU AUTRE, DÉCOULANT DE, DE OU EN RELATION AVEC LE LOGICIEL OU L'UTILISATION OU D'AUTRES TRANSACTIONS DANS LE LOGICIEL.