Прошу прощение за возможно «желтый» заголовок, потому срау перехожу к сути. В ходе работы потребовалось протестировать систему осуществляющую качественный анализ текста по различным классификаторам, таким как пол, сентимент (настроение), возраст и прочее. В качестве одного из тестируемых образцов решил взять суру из корана, а потом проанализировал весь текст манускрипта.
Изначально возникло желание «пропустить» Коран через небезызвестный Watson, тем более, что сервис позволяет анализировать текст на арабском языке. Первая сура Watson'ом была отвергнута, т.к. содержала совсем мало текста, поэтому решено было использовать вторую. Результаты оказались информативными, но не совсем то, что требовалось, поскольку Watson не дает оценки по сентименту, полу и возрасту.
Обработав суру Al Baqarah, Watson представил числовые значения основных характеристик автора текста, которые можно посмотреть в JSON формате.
Абсолютный интроверт (практически замкнутый), с узким эмоциональный диапазоном, выраженной импульсивностью. Готов пробовать что-то новое. Дисциплинированный и обязательный. Альтруизм, скромность, сочувствие и доброта не обнаружены. Высокая степень доверчивости. Выражает острую потребность в любви, гармонии, близости и организованности распорядка. Придает значение традициям и достижениям в рамках общепринятых социальных стандартов. Не заинтересован в помощи другим и получении наслаждения от жизни.
Любопытно то, что практически все характеристики предоставленные «Ватсоном» возведены в абсолют, что редко встречалось при анализе других текстов, иначе говоря, Watson редко демонстрирует такую высокую степень уверенности в полученных результатах.
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/420/bb5/6af/420bb56af43f7d2af3e677d315840cdf.png)
Помимо числовых значений, Watson еще предоставляет и небольшое текстовое описание полученных результатов, в так называемом «human readable format». Сам факт наличия такого описания удобен, но мало интересен, а вот процесс его генерации немного неожиданный. Код отвечающий за создание текста реализован на стороне клиента, на JavaScript — Выделяются наиболее яркие черты, ранжируются и каждой присваевается идентификатор. Потом сторятся предложения вида:
Очередной условно бесплатный сервис, использующий технологии машинного обучения для анализа текста по выбранным классификаторам. Выбор пал на него по двум причинам — высокие результаты на тестовых выборках и наличие требуемых классификаторов. Более того, отсутствие ограничения на минимальное количество слов для анализа, что позволяет проанализировать каждую отдельно взятую суру.
К сожалению uClassify работает только с текстом написанном на Английском языке, поэтому анализу подвергся текст корана в Английском переводе. Опираясь на информацию из разных источников, я выбрал наиболее точный, широко признанный и часто используемый вариант перевода.
Начал с классификатора сентимент, который демонстрирует общее настроение повествования — негативное или позитивное.
На графике ниже отчетливо заметно, что текст Корана начинается крайне позитивно, а потом интенсивно устремляется в негатив, причем негативные настроения сохраняются на протяжении всего текста, лишь незначительно ослабевая ближе к окончанию, когда настроение повествования приближается к нейтральному (негатив 54%).
![sentiment graph](https://habrastorage.org/r/w1560/getpro/habr/post_images/dfc/d55/a50/dfcd55a500bc698a3d7149b412234dc5.png)
Вполне закономерно и то, что негативное настроение превалирует на протяжении всего текста, тем более если учесть тот факт, что первая сура несоизмеримо мала по обьему, в сравнении с каждой последующей.
![sentiment graph](https://habrastorage.org/r/w1560/getpro/habr/post_images/e6d/0d3/565/e6d0d35658f463ed323bd36754f3e9bc.png)
Если предположить, что текст Корана писался не одним человеком, а несколькими и проанализировать гендерный классификатор, то получается не менее интересная «картина»:
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/1cd/927/32f/1cd92732f2f04eac02a45d927357c903.png)
Корреляция между двумя массивами данных отчетливо заметна даже визуально, а именно 0.7839422223, что говорит о прямой связи между классификаторами пола и настроенем текста.
Конечно это всего лишь цифры, графики и формулы.
Watson
Изначально возникло желание «пропустить» Коран через небезызвестный Watson, тем более, что сервис позволяет анализировать текст на арабском языке. Первая сура Watson'ом была отвергнута, т.к. содержала совсем мало текста, поэтому решено было использовать вторую. Результаты оказались информативными, но не совсем то, что требовалось, поскольку Watson не дает оценки по сентименту, полу и возрасту.
Обработав суру Al Baqarah, Watson представил числовые значения основных характеристик автора текста, которые можно посмотреть в JSON формате.
Абсолютный интроверт (практически замкнутый), с узким эмоциональный диапазоном, выраженной импульсивностью. Готов пробовать что-то новое. Дисциплинированный и обязательный. Альтруизм, скромность, сочувствие и доброта не обнаружены. Высокая степень доверчивости. Выражает острую потребность в любви, гармонии, близости и организованности распорядка. Придает значение традициям и достижениям в рамках общепринятых социальных стандартов. Не заинтересован в помощи другим и получении наслаждения от жизни.
JSON
(Предупреждение про 285 слов это баг ватсона, возможно связанно с особенностями обработки арабской вязи. На самом деле 285 строф, слов значительно больше).
{
"id": "*UNKNOWN*",
"source": "*UNKNOWN*",
"tree": {
"id": "r",
"name": "root",
"children": [
{
"id": "personality",
"name": "Big 5",
"children": [
{
"id": "Extraversion_parent",
"name": "Extraversion",
"category": "personality",
"percentage": 0,
"children": [
{
"id": "Openness",
"name": "Openness",
"category": "personality",
"percentage": 0.7401994172490934,
"sampling_error": 0.0632961745,
"children": [
{
"id": "Adventurousness",
"name": "Adventurousness",
"category": "personality",
"percentage": 0.99,
"sampling_error": 0.0531619985
},
{
"id": "Artistic interests",
"name": "Artistic interests",
"category": "personality",
"percentage": 0.01376496058079709,
"sampling_error": 0.1084097325
},
{
"id": "Emotionality",
"name": "Emotionality",
"category": "personality",
"percentage": 0,
"sampling_error": 0.049707709
},
{
"id": "Imagination",
"name": "Imagination",
"category": "personality",
"percentage": 0.99,
"sampling_error": 0.0672327285
},
{
"id": "Intellect",
"name": "Intellect",
"category": "personality",
"percentage": 0.99,
"sampling_error": 0.0588966455
},
{
"id": "Liberalism",
"name": "Authority-challenging",
"category": "personality",
"percentage": 0.99,
"sampling_error": 0.0869470685
}
]
},
{
"id": "Conscientiousness",
"name": "Conscientiousness",
"category": "personality",
"percentage": 0.9123376288115044,
"sampling_error": 0.079482993,
"children": [
{
"id": "Achievement striving",
"name": "Achievement striving",
"category": "personality",
"percentage": 0.9259149497833751,
"sampling_error": 0.102722867
},
{
"id": "Cautiousness",
"name": "Cautiousness",
"category": "personality",
"percentage": 0.99,
"sampling_error": 0.09507552899999999
},
{
"id": "Dutifulness",
"name": "Dutifulness",
"category": "personality",
"percentage": 0.009847553196768501,
"sampling_error": 0.063380138
},
{
"id": "Orderliness",
"name": "Orderliness",
"category": "personality",
"percentage": 0.00951030345654535,
"sampling_error": 0.0730250425
},
{
"id": "Self-discipline",
"name": "Self-discipline",
"category": "personality",
"percentage": 0.7957300993092047,
"sampling_error": 0.048516363
},
{
"id": "Self-efficacy",
"name": "Self-efficacy",
"category": "personality",
"percentage": 0.031706902665228645,
"sampling_error": 0.096044686
}
]
},
{
"id": "Extraversion",
"name": "Extraversion",
"category": "personality",
"percentage": 0,
"sampling_error": 0.059340869500000004,
"children": [
{
"id": "Activity level",
"name": "Activity level",
"category": "personality",
"percentage": 0,
"sampling_error": 0.0810636685
},
{
"id": "Assertiveness",
"name": "Assertiveness",
"category": "personality",
"percentage": 0,
"sampling_error": 0.0866103315
},
{
"id": "Cheerfulness",
"name": "Cheerfulness",
"category": "personality",
"percentage": 0,
"sampling_error": 0.10896341150000001
},
{
"id": "Excitement-seeking",
"name": "Excitement-seeking",
"category": "personality",
"percentage": 0,
"sampling_error": 0.083409996
},
{
"id": "Friendliness",
"name": "Outgoing",
"category": "personality",
"percentage": 0.004154940124177926,
"sampling_error": 0.078376899
},
{
"id": "Gregariousness",
"name": "Gregariousness",
"category": "personality",
"percentage": 0.006610468323581309,
"sampling_error": 0.059563857
}
]
},
{
"id": "Agreeableness",
"name": "Agreeableness",
"category": "personality",
"percentage": 0.99,
"sampling_error": 0.100387345,
"children": [
{
"id": "Altruism",
"name": "Altruism",
"category": "personality",
"percentage": 0.00835173524008939,
"sampling_error": 0.073512979
},
{
"id": "Cooperation",
"name": "Cooperation",
"category": "personality",
"percentage": 0.99,
"sampling_error": 0.0826257435
},
{
"id": "Modesty",
"name": "Modesty",
"category": "personality",
"percentage": 0,
"sampling_error": 0.058549201499999995
},
{
"id": "Morality",
"name": "Uncompromising",
"category": "personality",
"percentage": 0.99,
"sampling_error": 0.06559944549999999
},
{
"id": "Sympathy",
"name": "Sympathy",
"category": "personality",
"percentage": 0.00899654205884867,
"sampling_error": 0.101299643
},
{
"id": "Trust",
"name": "Trust",
"category": "personality",
"percentage": 0.99,
"sampling_error": 0.059132582
}
]
},
{
"id": "Neuroticism",
"name": "Emotional range",
"category": "personality",
"percentage": 0.12553186654101073,
"sampling_error": 0.094767615,
"children": [
{
"id": "Anger",
"name": "Fiery",
"category": "personality",
"percentage": 0.009857823702785023,
"sampling_error": 0.0976305695
},
{
"id": "Anxiety",
"name": "Prone to worry",
"category": "personality",
"percentage": 0.10522549628333466,
"sampling_error": 0.0574906605
},
{
"id": "Depression",
"name": "Melancholy",
"category": "personality",
"percentage": 0.0012238948047045572,
"sampling_error": 0.061626443999999996
},
{
"id": "Immoderation",
"name": "Immoderation",
"category": "personality",
"percentage": 0.25656958950189773,
"sampling_error": 0.0550395485
},
{
"id": "Self-consciousness",
"name": "Self-consciousness",
"category": "personality",
"percentage": 0.06392969963372698,
"sampling_error": 0.0593781605
},
{
"id": "Vulnerability",
"name": "Susceptible to stress",
"category": "personality",
"percentage": 0.10113758876238299,
"sampling_error": 0.088768721
}
]
}
]
}
]
},
{
"id": "needs",
"name": "Needs",
"children": [
{
"id": "Ideal_parent",
"name": "Ideal",
"category": "needs",
"percentage": 0.003832960708229936,
"children": [
{
"id": "Challenge",
"name": "Challenge",
"category": "needs",
"percentage": 0.6100166548928185,
"sampling_error": 0.086264993
},
{
"id": "Closeness",
"name": "Closeness",
"category": "needs",
"percentage": 0.8251348807632928,
"sampling_error": 0.08506778699999999
},
{
"id": "Curiosity",
"name": "Curiosity",
"category": "needs",
"percentage": 0.6427034487726155,
"sampling_error": 0.1232055355
},
{
"id": "Excitement",
"name": "Excitement",
"category": "needs",
"percentage": 0.005544228138235261,
"sampling_error": 0.11254523300000001
},
{
"id": "Harmony",
"name": "Harmony",
"category": "needs",
"percentage": 0.99,
"sampling_error": 0.112534116
},
{
"id": "Ideal",
"name": "Ideal",
"category": "needs",
"percentage": 0.003832960708229936,
"sampling_error": 0.10201695250000001
},
{
"id": "Liberty",
"name": "Liberty",
"category": "needs",
"percentage": 0.5752122746131392,
"sampling_error": 0.1490213055
},
{
"id": "Love",
"name": "Love",
"category": "needs",
"percentage": 0.99,
"sampling_error": 0.103592588
},
{
"id": "Practicality",
"name": "Practicality",
"category": "needs",
"percentage": 0.99,
"sampling_error": 0.089956072
},
{
"id": "Self-expression",
"name": "Self-expression",
"category": "needs",
"percentage": 0.009886632263973901,
"sampling_error": 0.083656981
},
{
"id": "Stability",
"name": "Stability",
"category": "needs",
"percentage": 0.011545403965898251,
"sampling_error": 0.109521769
},
{
"id": "Structure",
"name": "Structure",
"category": "needs",
"percentage": 0.99,
"sampling_error": 0.0821582255
}
]
}
]
},
{
"id": "values",
"name": "Values",
"children": [
{
"id": "Self-transcendence_parent",
"name": "Self-transcendence",
"category": "values",
"percentage": 0,
"children": [
{
"id": "Conservation",
"name": "Conservation",
"category": "values",
"percentage": 0.99,
"sampling_error": 0.069950964
},
{
"id": "Openness to change",
"name": "Openness to change",
"category": "values",
"percentage": 0.008825493504679734,
"sampling_error": 0.0660268375
},
{
"id": "Hedonism",
"name": "Hedonism",
"category": "values",
"percentage": 0.008326985786020414,
"sampling_error": 0.140913567
},
{
"id": "Self-enhancement",
"name": "Self-enhancement",
"category": "values",
"percentage": 0.765277368499976,
"sampling_error": 0.10627466249999999
},
{
"id": "Self-transcendence",
"name": "Self-transcendence",
"category": "values",
"percentage": 0,
"sampling_error": 0.0846075525
}
]
}
]
}
]
},
"warnings": [
{
"id": "WORD_COUNT_MESSAGE",
"message": "There were 285 words in the input. We need a minimum of 3,500, preferably 6,000 or more, to compute statistically significant estimates"
}
]
}
Любопытно то, что практически все характеристики предоставленные «Ватсоном» возведены в абсолют, что редко встречалось при анализе других текстов, иначе говоря, Watson редко демонстрирует такую высокую степень уверенности в полученных результатах.
![image](https://habrastorage.org/getpro/habr/post_images/420/bb5/6af/420bb56af43f7d2af3e677d315840cdf.png)
Помимо числовых значений, Watson еще предоставляет и небольшое текстовое описание полученных результатов, в так называемом «human readable format». Сам факт наличия такого описания удобен, но мало интересен, а вот процесс его генерации немного неожиданный. Код отвечающий за создание текста реализован на стороне клиента, на JavaScript — Выделяются наиболее яркие черты, ранжируются и каждой присваевается идентификатор. Потом сторятся предложения вида:
switch (intervalFor(valuesList[0].percentage)) {
case 0:
sentence = format(tphrase('You are relatively unconcerned with both %s and %s'), term1, term2) + '.';
break;
case 1:
sentence = format(tphrase("You don't find either %s or %s to be particularly motivating for you"), term1, term2) + '.';
break;
}
Ссылка на весь JS-файл
uClassify
Очередной условно бесплатный сервис, использующий технологии машинного обучения для анализа текста по выбранным классификаторам. Выбор пал на него по двум причинам — высокие результаты на тестовых выборках и наличие требуемых классификаторов. Более того, отсутствие ограничения на минимальное количество слов для анализа, что позволяет проанализировать каждую отдельно взятую суру.
К сожалению uClassify работает только с текстом написанном на Английском языке, поэтому анализу подвергся текст корана в Английском переводе. Опираясь на информацию из разных источников, я выбрал наиболее точный, широко признанный и часто используемый вариант перевода.
Начал с классификатора сентимент, который демонстрирует общее настроение повествования — негативное или позитивное.
Сура | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
Негатив | 9% | 76% | 71% | 76% | 60% | 60% | 54% |
Позитив | 91% | 24% | 29% | 24% | 40% | 40% | 46% |
На графике ниже отчетливо заметно, что текст Корана начинается крайне позитивно, а потом интенсивно устремляется в негатив, причем негативные настроения сохраняются на протяжении всего текста, лишь незначительно ослабевая ближе к окончанию, когда настроение повествования приближается к нейтральному (негатив 54%).
![sentiment graph](https://habrastorage.org/getpro/habr/post_images/dfc/d55/a50/dfcd55a500bc698a3d7149b412234dc5.png)
Вполне закономерно и то, что негативное настроение превалирует на протяжении всего текста, тем более если учесть тот факт, что первая сура несоизмеримо мала по обьему, в сравнении с каждой последующей.
![sentiment graph](https://habrastorage.org/getpro/habr/post_images/e6d/0d3/565/e6d0d35658f463ed323bd36754f3e9bc.png)
Если предположить, что текст Корана писался не одним человеком, а несколькими и проанализировать гендерный классификатор, то получается не менее интересная «картина»:
![image](https://habrastorage.org/getpro/habr/post_images/1cd/927/32f/1cd92732f2f04eac02a45d927357c903.png)
Сура | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
Мужчина | 20% | 49% | 48% | 60% | 69% | 54% | 47% |
Девушка | 80% | 51% | 52% | 40% | 31% | 46% | 53% |
Корреляция между двумя массивами данных отчетливо заметна даже визуально, а именно 0.7839422223, что говорит о прямой связи между классификаторами пола и настроенем текста.
Эпилог
Конечно это всего лишь цифры, графики и формулы.