Paso 11: Programación 5: el humor del mundo de la computación
La luz de estado de ánimo debe ser lo suficientemente sensible para reflejar lo que acaba de suceder en el mundo, pero debe no ser tan excesivamente sensible en cuanto a ser susceptibles al ruido y también no ser demasiado lento a fines de informarle de un evento de gran mundo.
Lo importante es normalizar y suavizar los datos cuidadosamente y ajustar los umbrales para dar el nivel correcto de sensibilidad y alarma. (es decir, debe destellar cuando una noticia de titular
sucede y no cuando un programa comienza, GMT)
Emoción y estado de ánimo, temperamento
En primer lugar, se calcula la "emoción del mundo" buscando en twitter por los tweets con cada uno de los tipos 7 Estado de ánimo (amor, alegría, sorpresa, ira, miedo, envidia, tristeza).
Una medida de "tweets por minuto" se utiliza para calcular la emoción actual. Un mayor número de tweets por minuto sugiere que más personas actualmente sienten esa emoción.
Las emociones son volátiles, por lo que estos estados emocionales de breve duración se suavizan con el tiempo mediante el uso de una "media móvil exponencial rápida"
(ver en.wikipedia.org/wiki/Moving_average#Exponential_moving_average)
Esto nos da razones para los diferentes Estados de ánimo.
Cada relación Estado de ánimo se compara a una línea de base, una "lenta media móvil exponencial", que yo llamo el "temperamento del mundo".
El estado de ánimo que se ha desviado más alejado de su valor de temperamento de base se considera que el estado de ánimo actual de mundo.
La desviación se mide como un porcentaje, así, por ejemplo, si el miedo cambia de contabilidad 5% de tweets a 10%, entonces esto es más significativo que la alegría cambia de 40% a 45% (son ambos un + 5% en términos aditivos, pero temen aumentó en un 100% en términos multiplicativas.)
Por último, los valores de temperamento del mundo son retocados ligeramente a la luz de este nuevo resultado. Esto da al sistema un auto propiedad de ajuste para que el temperamento del mundo puede cambiar muy lentamente con el tiempo.
Estos valores en WorldMood.pde se utilizan para ajustar cómo sensibles el sistema es la información.
- ¿Quieres captar cuando las personas están felices sobre un resultado deportivo o miedo sobre el clima?
- O ¿sólo rastrear grandes eventos como desastres naturales o ataques terroristas?
ajustar en consecuencia...
#define emotionSmoothingFactor (0.1f)
#define moodSmoothingFactor (0.05f)
#define moderateMoodThreshold (2.0f)
#define extremeMoodThreshold (4.0f)
MOOD_TYPEWorldMood::ComputeCurrentMood() {/ / encontrar lo ratios de corriente floatsum = 0; para (inti = 0; i < NUM_MOOD_TYPES; i ++) {suma += m_worldMoodCounts [i]; } Si (suma < 1e-4f) {#ifdefDEBUG m_printer -> Imprimir ("inesperado total m_worldMoodCounts"); #endif / / ifdef depuración returnm_worldMood; } para (inti = 0; i < NUM_MOOD_TYPES; i ++) {m_worldMoodRatios [i] = m_worldMoodCounts [i] / sum; } / / Encuentre la relación que se ha incrementado en la mayoría, como proporción de su media móvil. Así que, por ejemplo, un aumento del 5% al 10% es más significativo que un aumento del 50% al 55%. floatmaxIncrease = - 1.0f; para (inti = 0; i < NUM_MOOD_TYPES; i ++) {floatdifference = m_worldMoodRatios [i] - m_worldTemperamentRatios [i]; Si (m_worldTemperamentRatios [i] < 1e-4f) {#ifdefDEBUG m_printer -> Imprimir ("m_worldTemperamentRatios inesperado"); #endif / / ifdef depuración continúe; } de la diferencia / = m_worldTemperamentRatios [i]; Si (diferencia > maxIncrease) {maxIncrease = diferencia; m_worldMood = (MOOD_TYPE). Este es ahora el estado de ánimo más dominante del mundo! }} / / actualiza el temperamento del mundo, como una media móvil exponencial del estado de ánimo. Esto permite que los ratios de referencia, por ejemplo temperamento del mundo, a cambiar lentamente con el tiempo. Esto significa, en efecto, que el 2 º derivado del estado de ánimo mundo wrt tiempo forma parte de los actuales métodos de estado de ánimo. y así, después de un gran evento de inducción de ira, podemos ver cuando la gente comienza a enojarse menos. suma = 0; para (inti = 0; i < NUM_MOOD_TYPES; i ++) {si (m_worldTemperamentRatios [i] < = 0) {#ifdefDEBUG m_printer -> Imprimir ("m_worldTemperamentRatios debe ser inicializado en la construcción"); #endif / / #ifdef DEBUG m_worldTemperamentRatios [i] = m_worldMoodRatios [i]; } else {constfloata = m_moodSmoothingFactor; m_worldTemperamentRatios [i] = (m_worldTemperamentRatios [i] * (1.0f - un)) + (m_worldMoodRatios [i] * un); } suma += m_worldTemperamentRatios [i]; } Si (suma < 1e-4f) {#ifdefDEBUG m_printer -> Imprimir ("total m_worldTemperamentRatios total inesperado"); #endif / / #ifdef DEBUG returnm_worldMood; } / / y, finalmente, renormalise, para mantener la suma de los cocientes promedio móviles como 1.0f para (inti = 0; i < NUM_MOOD_TYPES; i ++) {m_worldTemperamentRatios [i] * = 1.0f / sum; #ifdefDEBUG m_printer -> Imprimir ("cociente del temperamento:"); m_printer -> println(m_worldTemperamentRatios[i]); #endif} #ifdefDEBUG / / depurar código - comprobar suma es 1. suma = 0; para (inti = 0; i < NUM_MOOD_TYPES; i ++) {suma += m_worldTemperamentRatios [i]; } Si (suma > 1.0f + 1e-4f || suma < 1.0f - 1e-4f) {m_printer -> println ("renormalise inesperado resultado"); } #endif / / #ifdef DEBUG returnm_worldMood; }