¿Cómo analizaría programáticamente una oración y decidiría si responde con “eso es lo que dijo”? Resuma un algoritmo que, dada una oración, devuelve verdadero o falso para determinar si la declaración es apropiada.

Pasé unas horas construyendo mi propio clasificador TWSS hace un par de fines de semana, así que describiré mi experiencia / desarrollaré algunas de las otras sugerencias.

Datos de entrenamiento

Observé brevemente el uso de Twitter como un corpus, como también menciona la excelente respuesta de Christopher Lin, pero decidí que era demasiado ruidoso (la mayoría de los tweets de TWSS no son tan divertidos, es difícil decir a qué frase responde el TWSS, y no todos los tweets que contienen “TWSS” son incluso chistes de TWSS). En cambio, siguiendo el ejemplo (modificado) del artículo de Kiddon y Brun, utilicé 1000 oraciones de twssstories.com para datos de entrenamiento positivos, y 500 oraciones de cada uno de los textos deromlastnight.com y fmylife.com para datos de entrenamiento negativos. También normalicé todas las oraciones eliminando la puntuación y convirtiendo a minúsculas.

Bayes ingenuos

A continuación, entrené a un clasificador Naive Bayes de unigram (con suavizado add-one). También probé un clasificador bigram, pero el clasificador unigram funcionó mejor con los datos que tenía; Aquí hay una curva de recuperación de precisión que compara los dos:
Para tener una mejor idea de lo que está sucediendo, estas son algunas de las características más predictivas de cada una:

unigram p (twss | unigram)

  • tirar 0.9724889822144924
  • más grande 0.9614677503890157
  • mojado 0.959004244327654
  • duro 0.9527628206878138
  • palo 0.9505783678914388
  • agujero 0.9443870318715991
  • oh 0.9432941279908561
  • respondió 0.943294127990856
  • rápido 0.943294127990856
  • más largo 0.9397415371025485

bigram p (twss | bigram)

  • en 0.9801434151851175
  • COMIENCE wow 0.9705079286853889
  • INICIO oh 0.9473580156961879
  • es demasiado 0.9350522640444204
  • sacar 0.9187779331523677
  • demasiado grande 0.9187779331523677
  • START man 0.9113755525471394
  • Hard END 0.9113755525471394
  • ponlo 0.9071442285463515
  • esa cosa 0.9024886021363793
  • pegarlo 0.9024886021363793
  • mi dios 0.9024886021363793
  • ir en 0.8916207044791409
  • START ugh 0.8916207044791409
  • hazlo 0.8916207044791409
  • es tan 0.8916207044791409

(Así que sí, la próxima vez que alguien comience una oración con “ugh”, o diga “es tan …”, prepárate).

Bajo una elección particular de parámetros (un umbral de clasificación TWSS de 0.99, cuando se usan probabilidades previas iguales de 0.5 para TWSS y no TWSS), el clasificador de unigrama proporciona 0.97 precisión y 0.82 recuperación (823 positivos verdaderos, 177 falsos negativos, 974 negativos verdaderos, 26 falsos positivos) en un conjunto de prueba fuera de muestra que consiste en cantidades iguales de ejemplos positivos y negativos. [Esto es aproximadamente el mismo rendimiento que el clasificador de bvandenbos con el que Charlie Cheever se vinculó: el mío funciona un poco mejor en mi conjunto de prueba, el suyo funciona un poco mejor en su conjunto de prueba. (No es sorprendente, dado que ambos estamos usando Naive Bayes).]

También probé brevemente el uso de la regresión logística y los árboles de decisión, pero el clasificador unigram los venció fácilmente a ambos. (Sin embargo, YMMV con más datos o mejor ajuste).

Cola de hadas

Para ver qué tan bien el clasificador generaliza a una fuente diferente de datos, ejecuté el algoritmo en algunos cuentos de hadas que extraje del Proyecto Gutenberg. Estas son algunas de las oraciones que TWSSed:

  • “El mago africano lo lleva cuidadosamente envuelto en su seno”, dijo la princesa; “Y esto te lo puedo asegurar, porque él lo sacó delante de mí y me lo mostró triunfante”. (Aladdin)
  • Se ha desvanecido; pero no tuve ninguna preocupación en su eliminación. (Aladdin)
  • “Mi hijo”, dijo, “¡qué hombre eres para hacer cosas tan sorprendentes siempre en un abrir y cerrar de ojos!” (Aladdin)
  • “Señor”, respondió Aladdin, “no tengo la menor razón para quejarme de su conducta, ya que no hizo nada más que lo que su deber requería”.
  • Uno era demasiado largo, otro demasiado corto; así que los probó todos hasta llegar a la séptima, y ​​eso fue tan cómodo que se tumbó y pronto se durmió. (Blanco como la nieve)
  • “Oh sí, lo intentaré”, dijo Blancanieves.

Finalmente, presenté una demostración en Heroku (http://twss-classifier.heroku.com/) para jugar mejor con el clasificador. (Nota: la demostración se optimiza para la precisión sobre la recuperación).

Terminología

A los fines de esta respuesta, abreviaré la oración “Eso es lo que ella dijo” como TWSS , me referiré a oraciones para las cuales TWSS es una respuesta apropiada (es decir, las oraciones que estamos interesados ​​en clasificar) como indicaciones , y lo haré consulte la tarea en cuestión como el problema TWSS .

Datos de entrenamiento

El primer paso es recoger un corpus de entrenamiento. En mi opinión, la mejor fuente de datos para este problema es probablemente Twitter por las siguientes razones:

  • Las relaciones TWSS-prompt están estructuradas. Es muy fácil identificar mensajes porque los tweets @ -responden están vinculados a los tweets a los que están respondiendo. [1] Estas son precisamente las oraciones que desea formar su conjunto de entrenamiento. En el caso de que aparezca un TWSS en el medio de un tweet sin respuesta, generalmente puede suponer que el texto que lo precede en el mismo tweet es el indicador.
  • Es actual. La mayoría de los corpus de texto existentes son lo suficientemente antiguos como para que sea poco probable que TWSS aparezca con la suficiente frecuencia como para observar cualquier patrón de uso. [2] Además, Twitter es más coloquial y conversacional que la mayoría de los otros corpus de texto, que utilizan en gran medida documentos más formales como artículos de noticias. Una excepción que se me ocurre es el corpus Switchboard, que consiste en transcripciones de aproximadamente 2000 conversaciones telefónicas [3]; sin embargo, probablemente tampoco funcionará para una tarea que involucre TWSS debido a su edad (principios de los 90, ¿es lo suficientemente tarde?).
  • Es enorme. Hay una gran cantidad de datos disponibles, y está creciendo todo el tiempo.

Otra opción sería utilizar un corpus reciente de transcripciones de mensajes instantáneos , pero no conozco ninguna que esté disponible públicamente o sea de fácil acceso. [4] Si usó un corpus de mensajes instantáneos, no podría identificar el mensaje con la mayor precisión posible con Twitter, pero si incluye algunos de los mensajes que preceden inmediatamente a la aparición de TWSS, creo que debería ser suficiente. (El número exacto de mensajes anteriores a incluir probablemente dependerá de la inspección manual de los datos para una elección prima facie o de la experimentación con un número creciente que cesa cuando comienza a ver caídas precipitadas en la precisión).

No estoy de acuerdo con la respuesta de Ryan Waliany de que Wikipedia sería un buen corpus para usar. TWSS no solo aparece raramente en toda Wikipedia, sino que es mucho más difícil saber cuál es el aviso para cualquier aparición dada de TWSS debido a la naturaleza en prosa de Wikipedia. Además, debido a que Wikipedia es enciclopédica, probablemente tiene algunas oraciones formales artificiales que contienen palabras que nunca vería cerca de un TWSS en un contexto de conversación, por ejemplo:

“Eso es lo que dijo”, abreviado ocasionalmente como TWSS, es una frase principalmente estadounidense y canadiense utilizada en respuesta a un doble sentido accidental, especialmente uno de naturaleza sexual. Por lo general, ‘TWSS’ se dice en respuesta al doble sentido de otro hablante, y rara vez por el hablante original. [5]

Las desventajas de usar Twitter como la fuente principal de datos de capacitación son:

  • No se pueden usar avisos de más de 140 caracteres para entrenar. Si esto importa mucho depende de cuánto tiempo los TWSS tienden a estar en libertad y de las características en las que elegimos entrenar (por ejemplo, un modelo entrenado en árboles de frases probablemente no lidiará bien con un conjunto de mensajes que son más largos que ninguno en el conjunto de entrenamiento, mientras que un modelo entrenado en bolsa de palabras seguirá funcionando bien), pero creo que incluso si el rendimiento sufre por mensajes con más de 140 caracteres, es una buena compensación para obtener un modelo trabajando.
  • Tendrá que pasar tiempo limpiando los datos. Aunque la relación entre las indicaciones y TWSSes es bastante clara, es muy probable que los tweets en sí mismos no estén bien formados en inglés. Asumiendo que lo que está intentando clasificar al final es una oración en inglés bien formada, seguramente querrá eliminar todos los “lol”, “lmao”, etc., ya que a menudo aparecen en relación con TWSS tweets pero no lo haría en ninguna de las oraciones de prueba. También hay una gran cantidad de texto hablado [6] y errores ortográficos.
  • Malas bromas. La gente piensa que son divertidos, pero a veces sus bromas simplemente no tienen sentido. [7] Si todas nuestras indicaciones de entrenamiento fueron malas bromas de TWSS, entonces el clasificador resultante no funcionará muy bien de acuerdo con lo que me gustaría pensar que son estándares de humor más refinados. Tal vez podamos arrancar un conjunto de mensajes comenzando con un conjunto inicial de mensajes extraídos de las mejores listas de chistes de TWSS y encontrando usuarios que respondieron con TWSS a mensajes similares [8], y luego encontrando otros tweets a los que esa persona respondió TWSS con e iterando. Esto probablemente tomará mucho tiempo, a menos que tengamos suerte y nos encontremos con varios fanáticos de TWSS a quienes les gusta dejar una buena broma de TWSS cada vez que tienen la oportunidad. Sin embargo, tal vez valga la pena: no lo sé sin inspeccionar manualmente los datos que obtendríamos de lo contrario.

Nuestro conjunto de capacitación también debe incluir oraciones que no sean buenas indicaciones TWSS. Idealmente, el conjunto de entrenamiento tendría avisos y oraciones no rápidas en aproximadamente la proporción en que aparecen en la naturaleza, pero esto puede no ser factible o manejable, en cuyo caso podemos usar muestreo controlado por caso en combinación con un método de aprendizaje compatible .

Método de aprendizaje y características

Honestamente, creo que algo tan simple como entrenar a un clasificador Naive Bayes con un modelo de bolsa de palabras lo llevará a la mayor parte del camino. La mayoría de las indicaciones de TWSS se caracterizan por el uso de un pequeño conjunto de fichas que ofrecen doble sentido, como rígido , duro , largo , grande , pequeño , pegar , perforar , encajar , comer , chupar , lamer , montar , golpear , venir (y variaciones de las mismas). , por ejemplo, vino , semen y viene ), golpe , boca , manos y apretón . La inclusión de cualquiera de estas palabras en una oración generalmente es suficiente para convertirla en un aviso razonable, incluso si otras palabras tienen poco que ver con insinuaciones sexuales. Si su conjunto de datos es lo suficientemente grande, estoy dispuesto a apostar que suficientes avisos encajarán en esta categoría para que la capacitación sea puramente en apariencias de unigrama (menos palabras de detención) una solución satisfactoria. Si resulta que este no es el caso, es trivial encontrarse con bigrams y trigrams para mejorar la sensibilidad al contexto , aunque esto puede reducir nuestra percepción del recuerdo del clasificador.

¿Por qué podría bajar el recuerdo percibido? Bueno, un efecto secundario interesante de toda esta empresa es que cualquier clasificador que cree inevitablemente terminará creando nuevos chistes TWSS . Piénselo: la naturaleza de los chistes de TWSS es inventar nuevos significados originalmente no intencionados, por lo que hacer que uno requiera que el significado del aviso contenga un pequeño margen de ambigüedad. Una gran cantidad de oraciones que no son TWSSed en realidad serían buenas bromas TWSS. Por lo tanto, si bien nuestro modelo puede clasificar correctamente una oración “no puntual” en nuestro conjunto de pruebas como un indicador, podemos mirarla y pensar para nosotros mismos: “Bueno, en realidad, ¡sería una gran broma después de todo!” Como resultado, podría ser una buena idea optar por un mejor recuerdo a expensas de la precisión, ya que nuestro conjunto de pruebas podría etiquetar algunas buenas indicaciones como no avisos solo porque nadie había sido lo suficientemente inteligente como para responder a ellas con TWSS .

Sin embargo, si no nos preocupa este problema, entonces una buena opción para un enfoque más complejo con potencial para una mayor precisión serían conjuntos de árboles de decisión , que aún se ejecutarán de manera bastante eficiente a pesar del gran espacio de características, aunque definitivamente necesita aplicar algunas podas para deshacerse de lo que seguramente será una gran cantidad de características irrelevantes. También podría intentar usar máquinas de vectores de soporte, pero tomaría una maldita ejecución para siempre. Una posible estrategia es reducir el espacio de características mediante el uso de técnicas más baratas como Naive Bayes o el árbol de decisiones para aprender a encontrar un conjunto de características que sean altamente indicativas de indicaciones y luego usar solo esas características para el SVM. También puede obtener un conjunto de características reducido ejecutando un tf-idf rápido en las solicitudes frente a las que no lo son.

Yendo más allá del simple uso de n-gramas como características, también pensé en usar etiquetas POS (parte del discurso) , pero no creo que se les dé demasiado impulso. Lo que podría ayudar es si analiza oraciones y construye árboles de estructura de frases para que pueda ver si los verbos clave como montar , chupar o soplar afectan un antecedente sin él , lo que creo que es una característica común de las indicaciones: la ambigüedad de lo que presta a ser reutilizado para insinuaciones sexuales. De hecho, la capacitación general sobre el objeto de las oraciones donde el verbo es típico de las indicaciones probablemente ayudaría mucho. Estoy dispuesto a apostar que ciertos sustantivos como plátanos o palitos de helado se muestran con mayor frecuencia como objetos de verbos como montar y chupar que en otras oraciones. El modelo de la bolsa de palabras no entendería esto; los modelos bigram y trigram pueden, pero los árboles de estructura de frase definitivamente serían la forma más consistente de atrapar estas conexiones.

Conclusión

¿Alguien quiere hacer esto conmigo y ver cuánto de mi especulación ociosa resulta ser verdad? Será divertido y rentable (no realmente).

Notas finales

[1] Es decir, si el contestador usó la función de respuesta correctamente en lugar de simplemente escribir “@ screen-name”. En cualquier caso, es bastante fácil ignorar cualquier tweet de respuesta @ que no se vincule a un tweet específico.
[2] La suposición aquí es, por supuesto, que nuestros antepasados ​​eran mucho más exigentes que nosotros. Siéntase libre de corregirme si tiene evidencia de que las generaciones anteriores fueron tan vulgares y entusiastas con los juegos de palabras como parece que somos.
[3] http://www.ldc.upenn.edu/Catalog
[4] Creo que una vez escuché de un conjunto de datos de transcripción de chat de MSN que fue realmente increíble, pero parece que ya no puedo encontrar ninguna mención al respecto. Avíseme si sabe dónde puedo encontrar ese o cualquier otro conjunto de datos de mensajes instantáneos. Sé que algunas salas de IRC se registran públicamente: ¿hay un solo lugar donde uno pueda tomarlas todas a la vez?
[5] http://en.wikipedia.org/wiki/Sai
[6] por ejemplo, “bofetada 1 mes por 4 horas” (visible con su TWSS correspondiente en http://twitter.com/#!/Blaxican_B …)
[7] Por ejemplo: http://twitter.com/#!/BNicole_/s … y http://twitter.com/#!/DomOfTheYe
[8] Supongamos que tenemos alguna métrica razonable para la similitud. Podríamos usar algo como asegurar una distancia mínima de edición por debajo de un umbral o un número de palabras sin parar que dos oraciones comparten por encima de algún umbral.

More Interesting

¿Por qué la minería de datos con aprendizaje automático no implica pruebas de hipótesis estadísticas?

¿Cuál es un buen algoritmo para la extracción de características y la detección de texto escrito a mano?

¿Qué es mejor para la detección de automóviles: Haar Cascade o HOG?

¿Hasta dónde nos pueden llevar las redes neuronales / de aprendizaje profundo / IA para encontrar una solución al problema de las noticias falsas?

¿Qué tipos de características se extraen de los archivos de voz utilizando predicción lineal y predicción no lineal?

¿La normalización de lotes hará la diferencia al entrenar con tamaño de lote = 1?

¿Qué tecnologías existen actualmente para hacer matemáticas en grandes conjuntos de datos?

¿Es el curso de aprendizaje automático de Andrew Ng en Coursera una versión simplificada del curso CS 229: aprendizaje automático que enseñó en Stanford?

¿Pueden las redes neuronales profundas resolver problemas NP-Hard?

Cómo comenzar a hacer un proyecto de aprendizaje automático

Cómo elegir el conjunto de validación para poder representar mejor el conjunto de prueba

¿Es posible tener experiencia en desarrollo web, desarrollo de Android, resolución de problemas, IA y ML para tener un buen trabajo, o solo necesito concentrarme en un campo y no fusionar campos?

¿En qué se centran los principales competidores de Kaggle? ¿Qué les ayudó a hacerlo mejor que otros?

Cómo detectar objetos superpuestos casi circulares en MATLAB

¿Existe alguna implementación del modelo de atención en el flujo tensorial?