PNL.js
Si está buscando los documentos de la versión 3, puede encontrarlos aquí. Versión 3
"NLP.js" es una utilidad general de lenguaje natural para nodejs. Actualmente apoyando:
- Adivina el idioma de una frase
- Distancia rápida de Levenshtein de dos cuerdas
- Busque la mejor subcadena de una cadena con menor distancia de Levenshtein a un patrón determinado.
- Obtenga lematizadores y tokenizadores para varios idiomas.
- Análisis de sentimiento para frases (con soporte de negación).
- Reconocimiento y gestión de entidades nombradas, soporte en varios idiomas y aceptación de cadenas similares, por lo que no es necesario que el texto introducido sea exacto.
- Clasificador de procesamiento del lenguaje natural, para clasificar una expresión en intenciones.
- NLP Manager: una herramienta capaz de gestionar varios idiomas, las entidades nombradas para cada idioma, los enunciados y los intentos para el entrenamiento del clasificador, y para un enunciado determinado devolver la extracción de entidades, la clasificación de intentos y el análisis de sentimientos. Además, es capaz de mantener un Gestor de Generación de Lenguaje Natural para las respuestas.
- 40 idiomas compatibles de forma nativa, 104 idiomas compatibles con la integración BERT
- Cualquier otro idioma es compatible mediante tokenización, incluso los lenguajes de fantasía.
¡Nuevo en la versión 4 !
La versión 4 es muy diferente a las versiones anteriores. Antes de esta versión, NLP.js era una biblioteca monolítica. Los grandes cambios:
- Ahora la biblioteca está dividida en pequeños paquetes independientes.
- Entonces cada idioma tiene su propio paquete.
- Proporciona un sistema de complementos, por lo que puede proporcionar sus propios complementos o reemplazar los existentes.
- Proporciona un sistema de contenedor para los complementos, configuraciones para los complementos y también canalizaciones.
- Una canalización es un código que define cómo interactúan los complementos. Por lo general, es lineal: hay una entrada en el complemento y esto genera la entrada para el siguiente. Como ejemplo, la preparación de una expresión (el proceso para convertir la expresión en un mapa hash de características derivadas) ahora es una canalización como esta:
normalize -> tokenize -> removeStopwords -> stem -> arrToObj
- Hay un compilador simple para las canalizaciones, pero también se pueden construir usando una versión modificada de javascript y python (los compiladores también se incluyen como complementos, por lo que se pueden agregar otros lenguajes como complemento).
- NLP.js ahora incluye conectores, se entiende por conector algo que tiene al menos 2 métodos:
hear
y say
. Ejemplos de conectores incluyen: Conector de consola, Conector de Microsoft Bot Framework y Conector sin conexión de línea directa (este le permite crear un chatbot web utilizando Microsoft Webchat, pero sin tener que implementar nada en Azure). - Algunos complementos se pueden registrar por idioma, por lo que para diferentes idiomas se utilizarán complementos diferentes. Además, algunos complementos, como NLU, se pueden registrar no solo por idioma sino también por dominio (un conjunto funcional de intenciones que se pueden entrenar por separado).
- Como ejemplo de complementos por idioma/dominio, se proporciona un complemento Microsoft LUIS NLU. Puede configurar su chatbot para usar NLU de NLP.js para algunos idiomas/dominios y LUIS para otros idiomas/dominios.
- Tener complementos y canalizaciones permite escribir chatbots modificando únicamente la configuración y el archivo de canalizaciones, sin modificar el código.
TABLA DE CONTENIDO
- Instalación
- Inicio rápido
- Instalar la biblioteca
- Crea el código
- Extrayendo el corpus en un archivo
- Extrayendo la configuración en un archivo
- Creando su primer canal
- Conector de consola
- Ampliando su bot con el pipeline
- Agregar varios idiomas
- Agregar API y WebChat
- Usando el marco de Microsoft Bot
- Reconocer el nombre del bot y el canal.
- Un bot por conector
- Puerto diferente para Microsoft Bot Framework y Webchat
- Agregar lógica a una intención
- Mini preguntas frecuentes
- Web y reacción nativa
- Preparándose para generar un paquete
- Tu primera PNL web
- Creando una versión distribuible
- Cargar corpus desde URL
- Preguntas y respuestas
- Instale la biblioteca y el complemento qna
- Entrene y pruebe un archivo QnA
- Extrayendo la configuración en un archivo
- Exponiendo el bot con una Web y API
- Inicio rápido de NER
- Instalar los paquetes necesarios
- Crea el conf.json
- Crea el corpus.json
- Crea el heros.json
- Crea el index.js
- Iniciar la aplicación
- Contexto almacenado
- Red neuronal
- Introducción
- Instalación
- Formato del corpus
- Ejemplo de uso
- Exportar modelo entrenado a JSON e importar
- Opciones
- registrador
- Introducción
- Registrador predeterminado en @nlpjs/core
- Registrador predeterminado en @nlpjs/basic
- Agregar su propio registrador al contenedor
- @nlpjs/emoji
- Introducción
- Instalación
- Ejemplo de uso
- @nlpjs/consola-conector
- Instalación
- Ejemplo de uso dentro de NLP.js
- Ejemplo de uso del paquete
- Ejemplo de uso con @nlpjs/basic
- @nlpjs/similitud
- Instalación
- nivel
- semejanza
- Corrector ortográfico
- Corrector ortográfico entrenado con palabras entrenadas a partir de un texto.
- @nlpjs/nlu
- Instalación
- NluNeural
- Administrador de dominio
- NluManager
- Reaccionar nativo
- Ejemplo de uso
- Falsos positivos
- Registrar el progreso del entrenamiento
- Evaluación comparativa
- Soporte de idiomas
- Idiomas soportados
- Análisis de sentimiento
- Comparación con otros productos de PNL
- Ejemplo con varios idiomas
- Adivinador de idiomas
- Búsqueda similar
- NLU
- Gerente de la UNL
- NLU cerebral
- NLU de Bayes
- NLU de relevancia binaria
- NLU de regresión logística
- Gerente NER
- Enumeración de entidades nombradas
- Entidades nombradas con expresiones regulares
- Recortar entidades nombradas
- Declaraciones con entidades duplicadas
- Integración con patito
- Soporte de idiomas
- Cómo integrar con patito
- Extracción de correo electrónico
- Extracción de número de teléfono
- Extracción de URL
- Extracción de números
- Extracción ordinal
- Extracción de dimensiones
- Extracción de cantidad
- Cantidad de extracción de dinero
- Extracción de fecha
- Extracción de entidades incorporadas
- Extracción de correo electrónico
- Extracción de propiedad intelectual
- Extracción de hashtags
- Extracción de número de teléfono
- Extracción de URL
- Extracción de números
- Extracción ordinal
- Extracción porcentual
- Extracción de edad
- Extracción de moneda
- Extracción de fecha
- Duración Extracción
- Análisis de sentimiento
- Gerente de PNL
- Cargar/Guardar
- Importar/Exportar
- Contexto
- Lógica de intención (acciones, canalizaciones)
- Llenado de ranuras
- Cargando desde Excel
- Marco de bots de Microsoft
- Introducción
- Ejemplo de uso
- Reconocedor y llenado de ranuras
- Idiomas
- Inglés
- indonesio
- italiano
- Español
- Contribuyendo
- Colaboradores
- Código de conducta
- ¿Quién está detrás de esto?
- Licencia
Instalación
Si desea utilizar NLP.js en su aplicación Node, puede instalarlo a través de NPM de esta manera:
Reaccionar nativo
Existe una versión de NLP.js que funciona en React Native, por lo que puedes crear chatbots que se pueden entrenar y ejecutar en el móvil incluso sin Internet. Puedes instalarlo a través de NPM:
Algunas limitaciones:
- Sin chino
- El lematizador japonés no es el completo
- Sin importación de Excel
- No se puede cargar desde un archivo ni guardar en un archivo, pero aún se puede importar desde JSON y exportar a JSON.
Ejemplo de uso
Puedes ver un gran ejemplo de uso en la carpeta /examples/02-qna-classic
. Este ejemplo puede entrenar el bot y guardar el modelo en un archivo, de modo que cuando el bot se reinicie, el modelo se carga en lugar de volver a entrenarse.
Puedes empezar a construir tu PNL desde cero con unas pocas líneas:
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 ) ;
} ) ( ) ;
Esto produce el siguiente resultado en una consola:
{ 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 ' }
Falsos positivos
De forma predeterminada, la red neuronal intenta evitar falsos positivos. Para lograrlo, uno de los procesos internos es que las palabras nunca vistas por la red se representen como una característica que le da cierto peso a la intención None
. Entonces, si prueba el ejemplo anterior con " Tengo que irme ", devolverá la intención None
porque 2 de las 4 palabras nunca se vieron durante el entrenamiento. Si no desea evitar esos falsos positivos y se siente más cómodo con las clasificaciones según las intenciones que declara, puede desactivar este comportamiento estableciendo useNoneFeature
en falso:
const manager = new NlpManager ( { languages : [ 'en' ] , nlu : { useNoneFeature : false } } ) ;
Registrar el progreso del entrenamiento
También puedes agregar un registro de progreso, para que puedas rastrear lo que sucede durante el entrenamiento. Puede registrar el progreso en la consola:
const nlpManager = new NlpManager ( { languages : [ 'en' ] , nlu : { log : true } } ) ;
O puede proporcionar su propia función de registro:
const logfn = ( status , time ) => console . log ( status , time ) ;
const nlpManager = new NlpManager ( { languages : [ 'en' ] , nlu : { log : logfn } } ) ;
Contribuyendo
Puede leer la guía sobre cómo contribuir en Contribuir.
Colaboradores
Hecho con colaboradores-img.
Código de conducta
Puede leer el Código de Conducta en Código de Conducta.
¿Quién está detrás de esto ?
Este proyecto está desarrollado por AXA Grupo Operaciones España SA
Si necesitas contactar con nosotros, puedes hacerlo en el correo electrónico [email protected]
Licencia
Copyright (c) Operaciones del Grupo AXA España SA
Por el presente se otorga permiso, sin cargo, a cualquier persona que obtenga una copia de este software y los archivos de documentación asociados (el "Software"), para operar con el Software sin restricciones, incluidos, entre otros, los derechos de uso, copia, modificación, fusión. , publicar, distribuir, sublicenciar y/o vender copias del Software, y permitir que las personas a quienes se les proporciona el Software lo hagan, sujeto a las siguientes condiciones:
El aviso de derechos de autor anterior y este aviso de permiso se incluirán en todas las copias o partes sustanciales del Software.
EL SOFTWARE SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O IMPLÍCITA, INCLUYENDO, PERO NO LIMITADO A, LAS GARANTÍAS DE COMERCIABILIDAD, IDONEIDAD PARA UN PROPÓSITO PARTICULAR Y NO INFRACCIÓN. EN NINGÚN CASO LOS AUTORES O TITULARES DE DERECHOS DE AUTOR SERÁN RESPONSABLES DE NINGÚN RECLAMO, DAÑO U OTRA RESPONSABILIDAD, YA SEA EN UNA ACCIÓN CONTRACTUAL, AGRAVIO O DE OTRA MANERA, QUE SURJA DE, FUERA DE O EN RELACIÓN CON EL SOFTWARE O EL USO U OTRAS NEGOCIOS EN EL SOFTWARE.