nlp - usar - tag questions ejercicios
Determine si una oraciĆ³n es una pregunta (5)
Necesitará una forma mucho más avanzada de análisis lingüístico para lograr esto. ¿Necesita prueba? Bueno...
¿Son ciervos hembras?
Donde hay voluntad hay un camino.
Cuando llegue el momento, ¡saltaré!
Porque no. No tengo ningún pumpernickel.
¿Cómo puedo detectar si una consulta de búsqueda tiene forma de pregunta?
Por ejemplo, un cliente puede buscar "cómo rastrear mi pedido" (observe que no hay signo de interrogación).
Supongo que la mayoría de las preguntas directas se ajustarían a una gramática particular.
Enfoque de adivinación muy simple:
START WORDS = [who, what, when, where, why, how, is, can, does, do]
isQuestion(sentence):
sentence ends with ''?''
OR sentence starts with one of START WORDS
La lista de palabras de inicio podría ser más larga. El alcance es un cuadro de búsqueda del sitio web, por lo que me imagino que la lista no debería incluir demasiadas palabras.
¿Hay una biblioteca que pueda hacer esto mejor que mi enfoque simple de adivinar? ¿Alguna mejora en mi enfoque?
En apoyo de la respuesta de JohnFx, empeora. Las siguientes son preguntas claras:
- Tienes alguna pregunta
- ¿Esta respuesta es suficiente?
- Una pregunta, ¿qué es eso?
Y luego verá que los usuarios comienzan a ingresar el siguiente tipo de consultas:
- Me gustaría saber qué preguntas son.
¿Es eso siquiera una pregunta? Sintácticamente, no, pero merece una respuesta que podría denominarse fácilmente una respuesta. (Este tipo de consultas puede ser bastante común, dependiendo de su población de usuarios).
Conclusión: si no va a manejar las preguntas de una manera especial y lingüísticamente sofisticada (como construir una respuesta directa utilizando la generación de lenguaje natural), reconocerlas puede no ser interesante. Escoger las palabras clave correctas de la consulta puede ser mucho más gratificante.
Para identificar las palabras de inicio en oraciones de preguntas, debe ir a través de un corpus de texto grande buscando oraciones que terminan en a ?
, y descubre las palabras iniciales más frecuentes que encuentres en esos.
Algunos de los que te perdiste que te vienen a la mente incluyen QUÉ, AM, SON, FUERON, PODRÍAN, PODRÍAN, PODRÍAN, PODRÍAN, VOLUNTARÍAN, DEBERÍAN, TENÍAN, TENÍAN, TUVIERON Y HICIERON. Tal vez también IF para ir con WHEN. También considere IN, AT, TO, FROM y ON, más quizás UNDER y OVER. Todo depende del tipo de sistema de consulta que tenga y la cantidad de latitud en las consultas de lenguaje natural que espera proporcionar a sus usuarios.
Del mismo modo, debe examinar todas sus propias preguntas que las personas ya han hecho en la misma luz, encontrando cuáles de sus preguntas realmente terminan en a ?
para ayudar a identificar otros similares que no.
Eso debería encontrar muchos de los interrogativos; ¿Los imperativos también son una posibilidad?
Dependiendo de lo elegante que desee obtener, puede considerar usar algo como Wordnet como inicio del etiquetado de parte de la voz. Se trata principalmente de conjuntos de sinónimos, que incluyen hipernym, hyponym, holonym e información de merónimos, pero creo que también tendrá la otra información que está buscando.
Wikipedia tiene un par de artículos sobre los motores de búsqueda de preguntas y de lenguaje natural . Ambos tienen referencias que te pueden interesar. También puede echar un vistazo a estos documentos PDF:
- "Hacia una teoría de interfaces de lenguaje natural para bases de datos"
- "Respuesta a preguntas sobre el lenguaje natural: la vista desde aquí"
- "Modelo de respuesta a preguntas sobre lenguaje natural aplicado a un sistema de recuperación de documentos" .
Por último, parece interesante el sistema de respuesta a preguntas sobre el lenguaje natural START del MIT.
Averiguar si una oración es una pregunta no es una tarea fácil, porque hay muchas maneras en que la gente hace preguntas, muchas de ellas no siguen las reglas de la gramática. Por lo tanto, es difícil encontrar un buen conjunto de reglas para la detección. En tales situaciones, apostaría por el aprendizaje automático y entrenaría un algoritmo utilizando un corpus de texto anotado (crear un corpus y seleccionar un conjunto de características puede llevar algo de tiempo). El reconocimiento basado en el aprendizaje automático debería proporcionarle una recuperación mejor que el enfoque basado en reglas. Aquí hay una instrucción paso a paso:
- Creación manual de conjunto de datos de trenes: obtenga una anotación (con información si es una pregunta o no) colección de textos o cree dicho corpus por su cuenta (debe haber más de 100 documentos y muchas preguntas no deben ser preguntas directas)
- Encuentre las características más importantes: extraiga parte de los discursos, 5W1H (qué, qué, ..., cómo), obtenga una posición de un verbo en cada una de las oraciones, y otras cosas que pueden ser útiles en el reconocimiento de una pregunta
Cree un vector para cada una de las oraciones de las características (necesita ejemplos positivos y negativos) en función de la información extraída, por ejemplo,
| Tiene ? | Un verbo en segunda posición | Tiene 5W1H | ¿5W1H está en la 1ª posición en la oración? ... | duración de la oración | Es una pregunta |
Utilice los vectores para entrenar un algoritmo de aprendizaje automático , por ejemplo, MaximumEntropy, SVM (puede usar Wekka o Knime )
Use el algoritmo entrenado para el reconocimiento de preguntas.
Si es necesario (nuevos ejemplos de preguntas), repita los pasos.
Vea también: ¿Cómo saber si una oración es una pregunta (interrogativa)?
Mi respuesta de esa pregunta:
En un análisis sintáctico de una pregunta (obtenido a través de un conjunto de herramientas como nltk), la estructura correcta será en la forma de:
(SBARQ (WH+ (W+) ...)
(SQ ...*
(V+) ...*)
(?))
Entonces, usando cualquiera de los analizadores sintácticos disponibles, un árbol con un nodo SBARQ que tenga un SQ incrustado (opcionalmente) será un indicador de que la entrada es una pregunta. El nodo WH + (WHNP / WHADVP / WHADJP) contiene la raíz de pregunta (who / what / when / where / why / how) y el SQ contiene la frase invertida.
es decir:
(SBARQ
(WHNP
(WP What))
(SQ
(VBZ is)
(NP
(DT the)
(NN question)))
(. ?))
Por supuesto, tener muchas cláusulas precedentes causará errores en el análisis sintáctico (que se puede solucionar), al igual que las preguntas realmente mal redactadas. Por ejemplo, el título de esta publicación "¿Cómo saber si una oración es una pregunta?" tendrá un SBARQ, pero no un SQ.