¿Cómo enseñar un guión para detectar el sarcasmo? [cerrado]

11

Actualmente estoy creando un guión divertido, que básicamente coincide con las frases dadas y da una respuesta predefinida basada en los puntos de coincidencia. Puede pedirle que recupere información basada en transmisiones en vivo, ejecute tareas, cuente anécdotas o simplemente chatee con ella.

Ya tengo detección incorporada de palabras malas, bloqueo de mayúsculas o ambas. El programa tiene un nombre de niña y traté de acercarme lo más posible a ser una chica femenina, en términos lógicos (por ejemplo: todo el mundo sabe que la mayoría de las chicas femeninas tardan 700ms en responder a una pregunta, por supuesto bromeando). Así que aquí hay un pequeño ejemplo:

Cliente: ¿CUÁL ES SU PROBLEMA?
Kiku: ¡NO USES ESE TONO CONMIGO!
Cliente: #### tú
Kiku: ¿por qué estás siendo tan malo conmigo: /

Sin embargo, realmente me gustaría agregarle una función de sarcasmo. Entonces, si escribes algo con sarcasmo, ella lo detectará y responderá en consecuencia. Ahora bien, esta es una parte difícil: ¿cómo se enseña un guión, qué es el sarcasmo?

Para mí más específico. ¿Cuáles son las palabras sarcásticas más comunes usadas hoy? ¿O cómo obtener esa estadística? ¿Cómo puedo hacer que el guión entienda el contexto de la frase dada?

ACTUALIZAR

Como esta pregunta se está volviendo muy publicitada, creo que las cosas deberían aclararse un poco más. Está muy claro que hacer que un script detecte completamente el sarcasmo es básicamente imposible. Al menos en materia razonable. Sin embargo, creo que podría detectarse cierta cantidad de posible sarcasmo.

Actualmente lo he logrado hasta ahora, que mi script puede detectar un sarcasmo muy limitado. Predefiní algunas palabras sarcásticas comunes (sin embargo, solo son inútiles). Por ejemplo: como, lo que sea, sí, correcto y genial. Y luego primero coincide, las cosas simples, como mayúsculas y citas: THANKS you are so smarto oh you are so "SMART".

Dado que la función principal de los scripts es hacer tareas o recuperar información, y después se le preguntará si eso era lo que quería decir. Entonces pensé, agregando "gracias" como una variable especial. Entonces, yeah thankso whatever thanksdesencadenará el posible sarcasmo, y el script le preguntará: "¿Detecto sarcasmo?" Su mejor opción sería decir "lo siento", de lo contrario agregará un punto de advertencia y, si se alcanza el límite, comenzará a ignorarlo.

Como estos algoritmos muy simples parecen funcionar realmente, entonces esta idea tiene un futuro, por supuesto, después de muchos ajustes y ajustes. Sin embargo, alguien mucho más inteligente haría un software de código abierto con la misma idea en mente. Entonces esta característica podría estar conectada a muchas funciones en la web. La atención al cliente probablemente sea la que más se beneficie, sin embargo, este tipo de software también podría usarse para detectar el contenido "marcado".

Kalle H. Väravas
fuente
14
Hasta que su script realmente pueda entender lo que se dice (en lugar de elegir palabras clave), creo que es imposible captar la mayoría de los escenarios de sarcasmo
Rob
26
@Kalle Seamos claros aquí. El sarcasmo es uno de los dispositivos más sutiles y avanzados en lenguaje hablado. Incluso si es un hablante nativo de inglés, totalmente capaz de captar las sutilezas, por ejemplo, el tono de voz y cualquier información contextual relevante, regularmente no detectará el sarcasmo. Los hablantes no nativos casi no tienen ninguna posibilidad. Llévelo a texto e incluso los hablantes nativos no tienen casi ninguna posibilidad. ¿Y quieres que las computadoras, que luchan por comprender débilmente incluso las oraciones más simples, resuelvan este problema? Deje esto a alguien con toda una vida en análisis de voz y texto.
doppelgreener
17
¿Hacer que un guión reconozca el sarcasmo? Eso es realmente útil;)
zenzelezz
12
Vamos, incluso Sheldon Cooper no puede detectar el sarcasmo ...
Paul R
3
No creo que esta pregunta deba haberse cerrado, especialmente no como "no constructiva". Emitiría un voto de reapertura en este momento si no fuera vinculante, pero creo que esta pregunta merece algunos votos de reapertura, especialmente con la última edición.
Adam Lear

Respuestas:

17

Si tuviera un sistema completo de procesamiento de lenguaje natural y una base de datos de datos del sistema IBM Watson, podría marcar algunas declaraciones como posible sarcasmo. Por ejemplo, "¡Escuché que tu madre tiene cáncer y te acaban de despedir!" "Sí, no es la vida maravillosa!" podría marcarse porque podría reconocer que contraer cáncer y perder un trabajo generalmente no se describen como experiencias positivas.

Supongo que no tiene los recursos para armar un sistema de calificación de Watson. Podría armar una base de datos de frases sarcásticas de uso común y luego usar algún tipo de algoritmo de coincidencia de texto entre la declaración de destino y la base de datos de sarcasmo. Tengo que adivinar que no será muy efectivo porque todas las frases que se usan sarcásticamente se usan sinceramente con más frecuencia. Por ejemplo "Esa es una buena X". generalmente se usa sinceramente, pero a veces se usa sarcásticamente.

El sarcasmo está muy relacionado con el engaño. No es raro que una persona que usa sarcasmo lo niegue cuando se lo cuestiona, y su elección de palabras hace posible la negación. Sospecho que esto significa que un buen detector de sarcasmo es probablemente un problema tan difícil como un programa de conversación que pasa la prueba de Turing.

Charles E. Grant
fuente
1
Gracias por tu respuesta. Esta calidad de respuesta es definitivamente mejor que la anterior. Creo que crear una base de datos de frases reales será demasiado grande. Sin embargo, una base de datos de palabras + algunos otros métodos podrían hacer que funcione (no 100%, pero nuevamente no 0%). Estoy planeando agregar un paso de verificación. Si el script detecta un leve nivel de sarcasmo, preguntará: ¿Fue eso sarcasmo? Si responde: "OH NO", entonces confirma el sarcasmo y realmente se enoja e ignora por un tiempo (el tiempo estará determinado por el nivel de sarcasmo).
Kalle H. Väravas
3
Realmente creo que quieres seguir con las frases porque el sarcasmo tiene que ver con el contexto, y hay al menos algunas frases que es más probable que se usen sarcásticamente. "Sí" no es sarcástico, "Correcto" no es sarcástico, pero "¡Sí, cierto!" probablemente se usa con más frecuencia sarcásticamente que sinceramente.
Charles E. Grant
66
En cuanto a la calidad de las respuestas aquí, debo decir que esto es parcialmente su responsabilidad. El procesamiento del lenguaje natural es un campo bien conocido que podría proporcionarle varias técnicas útiles, pero no da ninguna indicación de haber realizado ninguna investigación para buscar métodos existentes. Es un problema difícil, y no es algo que pueda ser útilmente respondido en general en una publicación SO. Se han llenado muchos, muchos libros sobre el tema del procesamiento del lenguaje natural.
Charles E. Grant
43

<Sarcasmo>

if(string.Contains("<Sarcasm>")) containsSarcasm = true;

</Sarcasm>

Honestamente, no tengo idea de cómo hacerlo. Creo que solo alrededor del 30% de las personas en la vida real "adquieren" sarcasmo en primer lugar, por lo que hacer que una computadora lo reconozca y entienda parece una tarea muy difícil.

Editar Basado en los comentarios a mi publicación original, creo que he ilustrado perfectamente la extrema dificultad de la tarea que se me pide. Sí, la primera mitad de mi publicación fue sarcástica. Incluso enfaticé ese hecho usando una etiqueta de marcado inventada. Al publicar un comentario sarcástico sobre una solución trivial a un problema excepcionalmente difícil, y ese sarcasmo que se interpreta como "inútil" plantea esta pregunta:

Si no puede reconocer el sarcasmo escrito, ¿cómo va a escribir un algoritmo que lo reconozca?

Ah, y Anna, si alguien incluye el término "Creo ..." en su oración, generalmente indica que es una opinión que se está expresando, no necesariamente un hecho investigado.

Dave Nay
fuente
3
-1 Lo siento, no estoy seguro de por qué esta respuesta está recibiendo votos a favor. El código proporcionado es 100% irrelevante para la pregunta en cuestión y la segunda parte de la respuesta dice "no tengo idea". Su respuesta es 30% sobre el tema y realmente no ayuda ni da una buena dirección.
Kalle H. Väravas
18
Se está votando porque el póster ha señalado que no hay una forma práctica de hacerlo. Como los humanos a menudo no pueden detectar el sarcasmo, no hay forma de enseñarle a una máquina. Además, el sarcasmo a menudo se transmite por el tono de voz y, por lo tanto, a menudo se malinterpreta en la comunicación en línea.
Andy Waite
1
@Andy Waite Sí, por supuesto, tienes razón. Como dije, su respuesta es un 30% sobre el tema (aunque pensó que comenzó a recibir votos positivos cuando no había texto adicional). Aún así, no aceptaré esa respuesta, porque ... sí, por supuesto, no puede obtener una coincidencia del 100% ... ¿Pero incluso un 50% de coincidencia? Básicamente, esta respuesta dice: "No entiendo tu pregunta, creo que no es posible. Suena difícil. ¡Solo renuncia!" La mayoría de las veces solo obtengo este tipo de respuestas en Programadores, junto a "¿Por qué estás haciendo esto? ¡Usa un marco!" ..
Kalle H. Väravas
44
@Kalle Estoy de acuerdo contigo. Esta respuesta es en parte sarcasmo, en parte "No sé" y en parte conjeturas (¿30%? ¿En serio? ¿Puedes respaldar eso?). Es completamente inútil y, en el mejor de los casos, debería haber sido un comentario.
Adam Lear
3
Interesante hilo de comentarios: al parecer, incluso los humanos no pueden detectar el sarcasmo (o la falta del mismo) de manera confiable.
Piskvor salió del edificio el
11

El problema de la detección del sarcasmo es un problema abierto en la lingüística computacional: sería mejor que busques en Google Scholar que stackexchange para tales cosas. Sin embargo, se han hecho algunos progresos en el tema. Para el sarcasmo hablado , se puede construir un reconocedor robusto utilizando "características espectrales y contextuales" que (según los autores) detectan el sarcasmo y un anotador humano. Los autores del artículo afirman que, por lo tanto, el texto sin procesar no es suficiente para detectar el sarcasmo; de hecho, obtuvieron mejores resultados al ignorar las palabras reales que se dicen.

Tsur y col. También informamos algunos resultados interesantes en la detección de sarcasmos textuales el año pasado con su algoritmo SASI . También informan algunos hallazgos de seguimiento adicionales en otro documento.

En cualquier caso, esta es la vanguardia de la investigación del lenguaje computacional; no esperes que nadie te dé un libsarcasm en bandeja de plata. Necesitará grandes conjuntos de datos de capacitación y mucho tiempo libre para ajustar su detector de sarcasmo, e incluso entonces, una precisión del 77% (como se informa en el documento SASI) no es suficiente para rechazar una publicación basada únicamente en una bandera de sarcasmo.

bdonlan
fuente
Hmm, 77%? Eso parece ser mejor que la mayoría de las personas . (sin intención de sarcasmo)
Piskvor salió del edificio el
@Piskvor, posiblemente, pero no tengo estadísticas sobre eso. Es mejor precisión que el audio al menos.
bdonlan
2

No creo que esta respuesta sea un método de enfoque muy realista, pero si tuviera los recursos para hacerlo, creo que sería posible. Considere el proyecto reCaptcha de google, que utiliza seres humanos para descifrar palabras que las computadoras no pueden leer ( "Más información Página Recaptcha" ). Creo que el problema es similar, ya que estás tratando de hacer que una máquina descubra algo que los humanos son al menos mejores para hacer.

Imagine que tiene los recursos para pedirle a millones de personas que le identifiquen el sarcasmo dentro de un contexto de conversación escrita. Imagine que podría pedirle a muchas personas que le envíen el momento exacto de la conversación cuando se dio cuenta del sarcasmo y tan poco como antes de darse cuenta de que uno necesitaría marcar esa identificación. Esto podría almacenarse en una base de datos, digamos, a la que tuvo acceso su programa. Luego, cuando el usuario le estaba escribiendo la conversación, la base de datos podría filtrarse para conversaciones "similares".

La forma de evaluar la similitud es algo en lo que pensar, pero creo que probablemente ya exista investigación. Creo que sería muy similar a la teoría detrás de las correcciones de errores ortográficos. De cualquier manera, probablemente se reduciría a un valor probabilístico de que la conversación que se está escribiendo es de hecho sarcástica, y en algún momento tendría que proporcionarse un umbral.

También me gusta su idea de presentar la pregunta "¿Fue eso sarcasmo?" al usuario y luego usar su respuesta para llegar a una decisión más precisa.

Espero que mi respuesta no haya sido un desperdicio completo y le deseo suerte en este esfuerzo.

-Asaf

Asaf
fuente
1

La detección del sarcasmo en la lingüística computacional (también conocido como procesamiento del lenguaje natural) es un problema extremadamente difícil en sí mismo. Básicamente es un problema de clasificación donde un modelo debe ser entrenado primero. Recientemente se investigó y publicó un problema similar para encontrar personas de doble sentido (archivo PDF). Las técnicas para ambos problemas son comparables.

stackoverflowuser2010
fuente
1

Mis 2 centavos:

Pregúntele a un psicólogo cómo reconocer el sarcasmo en las frases, con esa información compárelas con la entrada.

Pero sería un proyecto realmente difícil, con el esfuerzo utilizado en eso, podría hacer el mejor sistema operativo del mundo con seguridad: P

dysoco
fuente