De la PNL a los chatbots

1. Descripción

        Hoy en día, al llamar a un banco u otra empresa, no es raro escuchar un robot al otro lado de la línea que lo saluda: "Hola, soy su asistente digital. Haga sus preguntas". lenguaje humano y también puede interactuar con los usuarios en lenguaje humano.Esto se debe al Procesamiento del lenguaje natural (NLP), la tecnología central de cualquier asistente digital, que le permite comprender y generar lenguaje natural mediante programación.

        Este artículo presenta un ejemplo de cómo utilizar spaCy, la principal biblioteca de Python de código abierto para NLP, para extraer el significado de la entrada del usuario.

2. Cómo extraer significado de la entrada del usuario

        Extraer el significado de la entrada del usuario mediante programación puede ser muy desafiante, pero no imposible. Obviamente, no puede confiar en el significado de las palabras individuales en una oración: la misma palabra puede significar diferentes cosas dependiendo de su función sintáctica en una oración en particular. Esto se puede entender mejor con un ejemplo. Por favor, vea las siguientes dos frases:

I’d like to order a cake.
I want to cancel my order. 

        En ambos enunciados se puede ver la palabra "orden". En cada caso, sin embargo, tiene una función sintáctica diferente y tiene un significado diferente. En el primer caso, "ordenar" es un verbo de acción (transitivo) que actúa sobre el sustantivo "pastel", el objeto directo de la oración. Por el contrario, "ordenar" en el segundo enunciado es el sustantivo que recibe la acción de la oración, es decir, actúa como el objeto directo de la oración, de la cual "cancelar" es el verbo transmisor.

        Las características lingüísticas de las palabras en una oración (como los verbos transitivos o los objetos directos en el ejemplo anterior) también se denominan características lingüísticas. spaCy asigna automáticamente características lingüísticas a cada token en una oración a la que se aplica la canalización de procesamiento de texto de spaCy. Luego, analizar las características lingüísticas puede ayudar a identificar el significado de las palabras en esta oración en particular. Discutiremos cómo usar características lingüísticas para tareas de extracción de significado más adelante en este artículo en la sección Uso de características lingüísticas en NLP.

3. Prepara tu entorno de trabajo

        Para seguir el código presentado en este artículo, necesita los siguientes componentes de software instalados en su computadora:

pitón 2.7+∕3.4+

spaCy v2.0+

Modelo inglés spaCy preentrenado

        Puede encontrar instrucciones de instalación en los sitios respectivos. La forma más rápida de asegurarse de que su entorno esté listo es ingresar la siguiente línea de código en su sesión de Python:

import spacy
nlp = spacy.load('en') 

        Si todo funcionó, no debería tener mensajes de error.

4. Uso de características lingüísticas en PNL

        Funciones como el etiquetado de partes del discurso y las etiquetas de dependencia sintáctica están diseñadas específicamente para respaldar el desarrollo de aplicaciones que pueden procesar texto sin procesar de manera inteligente. El siguiente script ilustra cómo usar spaCy para extraer las características lingüísticas de cada palabra en una oración:

import spacy
nlp = spacy.load('en')
doc = nlp(u'I have to send them a notification.')
for token in doc:
  print(token.text, token.pos_, token.tag_, token.dep_)

        En el script anterior, extrae y genera etiquetas de parte del discurso de grano grueso (pos_), etiquetas de parte del discurso de grano fino (tag_) y etiquetas de dependencia gramatical (dep_) para cada token en la oración enviada. Por lo tanto, la secuencia de comandos debe proporcionar el siguiente resultado (enumerado para facilitar la lectura):

I            PRON   PRP  nsubj
have         VERB   VBP  ROOT
to           PART   TO   aux
send         VERB   VB   xcomp
them         PRON   PRP  dative
a            DET    DT   det
notification NOUN   NN   dobj
.            PUNCT  .    Punct 

        Si no está familiarizado con spaCy, la salida anterior de etiquetas detalladas de parte del discurso y etiquetas de dependencia gramatical en la tercera y cuarta columna respectivamente puede parecer un poco confusa. Para comprender el significado de los valores en estas columnas, puede   ver la documentación de spacy en Formatos de datos Documentación de la API de spacy o usar la función spacy.explain(), que devuelve una descripción de una función de idioma determinada. En el ciclo a continuación, genera una descripción de la etiqueta detallada de parte del discurso para cada token en la oración de ejemplo:

for token in doc:
  print(token.text, spacy.explain(token.tag_)) 

        Esto debería darte el siguiente resultado:

I            pronoun, personal
have         verb, non-3rd person singular present
to           infinitival to
send         verb, base form
them         pronoun, personal
a            determiner
notification noun, singular or mass
.            punctuation mark, sentence closer 

        Del mismo modo, puede usar la función spacy.explain() para obtener una explicación de las etiquetas de parte del discurso de granularidad gruesa y las etiquetas de dependencia gramatical.

5. Extraer intenciones de los enunciados

        Veamos ahora un ejemplo de cómo se pueden usar las características del lenguaje para extraer el significado de la entrada del usuario. Suponga que la intención debe extraerse de la declaración enviada. Por ejemplo, un usuario de un chatbot de pedidos de comida envía la siguiente declaración:

I want to order a photo cake. 

        Obviamente, las palabras "pedir" y "pastel" describen mejor la intención expresada en esta oración. En este caso particular, estas palabras denotan verbos transitivos y objetos directos, respectivamente. De hecho, pasar pares predicado/objeto directo es más descriptivo para determinar la intención expresada en una declaración de solicitud en la mayoría de los casos. A partir de un diagrama, esto podría verse así:

        En muchas expresiones de solicitud, el predicado transitivo y su objeto directo describen mejor la intención de la frase.

Las operaciones descritas en el diagrama anterior se pueden realizar fácilmente en una secuencia de comandos de Python usando spaCy de la siguiente manera:

import spacy
nlp = spacy.load('en')
doc = nlp(u'I want to order a photo cake.')
for token in doc:
  if token.dep_ == 'dobj':
    print(token.head.text + token.text.capitalize()) 

        En este script, se aplica una canalización de procesamiento de texto a una oración de ejemplo y luego itera a través de los tokens, buscando tokens cuya etiqueta de dependencia sea  dobj  . Una vez que lo haya encontrado, puede determinar el verbo transitivo correspondiente obteniendo el encabezado sintáctico del objeto directo. Finalmente, conecte el verbo transitivo y su objeto directo, expresando la intención como una sola palabra (esto suele ser un requisito para procesar guiones).

        Por lo tanto, el script debe generar:

orderCake 

        En una aplicación real, los usuarios pueden usar un amplio conjunto de frases para cada intención. Esto significa que las aplicaciones reales deben reconocer frases sinónimas en la entrada del usuario. Para obtener detalles sobre esto, puede consultar mi nuevo libro , Procesamiento del lenguaje natural con Python, que incluye muchos ejemplos sobre el uso de spaCy para realizar diferentes tareas de PNL.

Además, se puede encontrar un ejemplo del mundo real de las técnicas de extracción de intenciones que se pueden usar en la práctica en el artículo Generación de intenciones y entidades para Oracle Digital Assistant Skills         que escribí recientemente para Oracle Magazine  .

Supongo que te gusta

Origin blog.csdn.net/gongdiwudu/article/details/132332521
Recomendado
Clasificación