¿Cómo procesar consultas de lenguaje natural?

11

Tengo curiosidad por las consultas en lenguaje natural. Stanford tiene lo que parece ser un sólido conjunto de software para procesar lenguaje natural . También he visto la biblioteca Apache OpenNLP y la Arquitectura general para la ingeniería de texto .

Hay una increíble cantidad de usos para el procesamiento del lenguaje natural y eso hace que la documentación de estos proyectos sea difícil de absorber rápidamente.

¿Puede simplificarme un poco las cosas y, a un alto nivel, describir las tareas necesarias para realizar una traducción básica de preguntas simples a SQL?

El primer rectángulo en mi diagrama de flujo es un poco misterioso.

ingrese la descripción de la imagen aquí

Por ejemplo, me gustaría saber:

How many books were sold last month?

Y me gustaría traducir eso a

Select count(*) 
  from sales 
  where 
   item_type='book' and 
   sales_date >= '5/1/2014' and 
   sales_date <= '5/31/2014'
Steve Kallestad
fuente

Respuestas:

6

Las consultas en lenguaje natural plantean muchas complejidades que pueden ser muy difíciles de generalizar. Desde un alto nivel, comenzaría tratando de pensar las cosas en términos de sustantivos y verbos.

Entonces, para la oración: ¿Cuántos libros se vendieron el mes pasado?

Comenzaría dividiendo la oración con un analizador que devolverá un formato de árbol similar a este:

ingrese la descripción de la imagen aquí

Puede ver que hay libros de temas, una frase verbal compuesta que indica la acción pasada de vender, y luego una frase sustantiva donde tiene el foco de tiempo de un mes.

Podemos desglosar aún más el tema de los modificadores: "cuántos" para los libros y "últimos" para el mes.

Una vez que haya desglosado la oración, debe asignar esos elementos al lenguaje sql, por ejemplo: cuántos => contar, libros => libro, vendido => ventas, mes => fecha_venta (intervalo), y así sucesivamente.

Finalmente, una vez que tenga los elementos del lenguaje, solo necesita elaborar un conjunto de reglas sobre cómo las diferentes entidades interactúan entre sí, lo que lo deja con:

Seleccione el recuento (*) de las ventas donde item_type = 'book' y sales_date> = '5/1/2014' y sales_date <= '31/05/2014'

Esto es a un nivel alto como comenzaría, mientras que casi todos los pasos que he mencionado no son triviales y realmente la madriguera del conejo puede ser interminable, esto debería darle muchos puntos para conectarse.

neone4373
fuente
1

Convertir preguntas simples en respuestas no es simple en absoluto.

La primera tecnología en hacer esto de manera tan amplia y precisa será un gran ganador.

Sin embargo, hay algunos por ahí, que llenan los vacíos con "respuestas a preguntas" con Inteligencia Artificial (por ejemplo, IBM Watson y Amazon Alexa). Esto requiere resolver las complejidades del lenguaje relacionadas con los datos en cuestión, qué hay en los almacenes de datos y qué son sustantivos, verbos y pronombres.

Microsoft se aventuró aquí con English Query pero luego se detuvo. Kueri.me es una plataforma basada en Python que hace casi lo mismo.

Lenguajes de consulta estructurados (SQL) y similares, SOQL, MDX, Hive, Impala y las versiones más recientes de SQL antiguo. Todavía no he reemplazado mucho de nada, todas estas piezas son pequeñas soluciones para el "Objetivo Final" más grandioso y eso radica en la Inteligencia Artificial (IA), específicamente, el Aprendizaje automático.

La pregunta es:

"¿Puede la computadora averiguar qué quieres?"

Aún no. Se necesita a lingüistas, matemáticos, ingenieros y más para que todos contribuyan con su parte del pastel para que podamos disfrutar de ese dulce pastel Artificial inteligente y aprendido por máquina.

trinquete
fuente
0

Existen varios enfoques para crear un analizador que analizaría mensajes de texto sin formato en SQL. Por ejemplo, puede crear un analizador basado en gramática y usar un algoritmo de PNL para crear la consulta estructurada. Si ya tiene muchos mensajes analizados de un dominio (como el comercio electrónico), puede probar un enfoque de Aprendizaje automático y usarlo para su análisis posterior.

Sin embargo, creo que el mejor enfoque es combinar un analizador basado en gramática para la traducción de texto a SQL, y ML para complementar la gramática basada en reglas arreglando la sintaxis, erradicando errores tipográficos, etc.

Obtenga más información sobre los diferentes enfoques aquí .

MicRum
fuente