Анализ отзывов нейросетью стоит начинать не с просьбы «найди главные жалобы», а с конкретного вопроса и правил подсчёта. Тогда результат можно связать с исходными текстами, проверить по ID и превратить в следующий шаг — не выдавая предположение о причине за установленный факт.
Какие данные собрать и как выбрать помощника
Сначала зафиксируйте, что именно хотите узнать. Например: «В скольких отзывах выбранной выборки упоминается срок ответа и где есть явная отрицательная оценка ожидания?» Укажите площадки или другие источники, период, тип отзывов и критерии включения. Если источник, дата или оценка неизвестны, так и запишите: не просите модель заполнить пропуск догадкой.
Для разбора подготовьте таблицу:
| ID | Дата | Источник | Оценка на площадке | Текст отзыва | Дубликат |
|---|---|---|---|---|---|
| R001 | дата или «неизвестно» | площадка или «неизвестно» | значение или «неизвестно» | исходный текст без изменений | ID исходной записи или пусто |
Сохраняйте ID и исходный текст: по ним агент сможет проверить, откуда взята цитата. Точный дубль не удаляйте бесследно — укажите, с какой исходной записью он связан. Для тематических частот считайте уникальные отзывы, а количество исходных записей и связи дублей храните отдельно.
Перед передачей данных уберите поля, которые не нужны для анализа. Идентифицирующие детали можно заменить нейтральными обозначениями; порядок доступа и хранения сверяйте с правилами вашей организации. Если часть отзывов поступает из непубличных каналов, заранее проверьте, можно ли передавать их выбранному помощнику.
Для разового разбора подготовленной таблицы может подойти текстовый чат, если в него можно передать данные в нужном формате и результат удобно проверить. В справке GigaChat указана возможность анализа прикреплённых файлов DOCX, PDF и TXT (документы GigaChat). Это подтверждает работу с перечисленными форматами, но не интеграцию с площадкой отзывов и не пригодность сервиса для любого массива.
Сервис сбора и мониторинга стоит рассматривать, если отзывы нужно регулярно получать из нескольких источников. Перед выбором выясните, доступны ли нужные вам источники, можно ли сохранить ID и исходный текст, выгрузить данные и ограничить доступ. Сверьте актуальные условия и стоимость у поставщика: подтверждённой цены в этой инструкции нет. Наличие сервиса не означает, что он уже подключён к вашей площадке.
Порядок работы от исходников до результата
- Опишите выборку. Запишите бизнес-вопрос, источники, период, тип отзывов, критерии включения и число исходных записей. Отдельно посчитайте уникальные ID и отметьте дубли.
- Подготовьте вход. Передайте агенту таблицу с ID и исходными текстами. Агент может проверить пропуски, формат, повторы и связи дублей по заданным правилам. Неизвестные значения оставьте неизвестными.
- Определите темы и тональность. Задайте, что относится к каждой теме, и как различать положительную, отрицательную, нейтральную, смешанную и неясную оценку. Тональность определяйте отдельно для каждого аспекта: в одном отзыве может быть и факт выполненной работы, и отрицательная оценка ожидания.
- Попросите разметку с основаниями. Для каждой метки нужны ID, дословная цитата и краткое объяснение. Отделяйте то, что произошло по тексту, от оценки этого события.
- Поручите агенту техническую сверку. По исходникам проверьте покрытие уникальных ID, наличие цитат в текстах, учёт дублей и арифметику. Для каждого тематического процента должны быть видны числитель и знаменатель.
- Сделайте аудит меток на выбранной подвыборке. Вручную разметьте несколько выбранных ID по тем же определениям тем, передайте эти метки агенту и попросите сопоставить их с результатом модели. Посчитайте совпадения и расхождения по парам «ID — аспект». Это проверка на выбранной подвыборке, а не повод вручную перепроверять каждый отзыв. Агент может выбрать записи и посчитать расхождения; человек задаёт эталонные метки там, где для этого нужны бизнес-критерии.
- Запишите следующий шаг. Для повторяющейся темы сформулируйте наблюдение, возможное объяснение и способ проверить его по данным компании. Не выдавайте гипотезу о причине за вывод из текста отзыва.
Технические сбор, сопоставление и проверки агент может выполнять по правилам. Человек уточняет отсутствующие бизнес-условия и принимает решения по исключениям — например, когда непонятно, считать ли конкретное выражение жалобой по принятому в компании критерию.
Готовый промпт и заполненный пример
Разметить отзывы по темам и превратить наблюдения в проверяемые действия. Полный промпт и заполненный учебный результат на раскрытых входных данных.
Промпт и пример
Ниже ровно четыре вымышленные записи: R1 «Ответили на следующий день»; R2 «Цену согласовали до ремонта»; R3 «Молнию заменили, но ждать ответа пришлось долго»; R4 — точный дубль R1. Исходных записей четыре, уникальных отзывов три. Даты, площадки и оценки не заданы. Это учебный пример, не клиентский кейс и не испытание сервиса.
Универсальный промпт ниже не предписывает конкретные метки по этим ID. В рабочем запросе замените значения в фигурных скобках, вставьте исходные записи и, если проводите аудит, добавьте метки выбранной вручную подвыборки. В справке GigaChat для запроса на письмо советуют указать адресата, содержание и важные детали (работа с текстом в GigaChat); здесь тот же принцип конкретизации применён к задаче разметки отзывов.
{
"task": "Разметить отзывы по темам и тональности, сохранив проверяемую связь с исходными текстами.",
"scope": {
"business_question": "{{Вопрос анализа}}",
"sources": "{{Источники или неизвестно}}",
"period": "{{Период или неизвестно}}",
"inclusion_rules": "{{Критерии включения}}",
"theme_definitions": "{{Определения тем или просьба предложить предварительные метки}}"
},
"input_records": [
{
"id": "{{ID записи}}",
"date": "{{Дата или неизвестно}}",
"source": "{{Источник или неизвестно}}",
"rating": "{{Оценка или неизвестно}}",
"text": "{{Исходный текст без изменений}}",
"duplicate_of": null
}
],
"audit_reference": [
{
"id": "{{ID из выбранной для аудита подвыборки}}",
"aspect": "{{Аспект}}",
"theme": "{{Ручная метка темы}}",
"sentiment": "{{Ручная метка тональности}}"
}
],
"rules": [
"Обработай записи по ID. Точный дубль сохрани с указанием duplicate_of, но не включай повторно в тематические счётчики уникальных отзывов.",
"Не заполняй отсутствующие даты, источники, оценки и контекст предположениями; неизвестное оставляй неизвестным.",
"Не определяй возраст, личность или автора по тексту. Не представляй описанное в отзыве событие как независимо подтверждённый факт.",
"Размечай темы отдельно. Для каждого аспекта укажи тональность: положительная, отрицательная, нейтральная, смешанная или неясная.",
"Отделяй описание события от его оценки. Не называй нейтральное упоминание жалобой без явной отрицательной оценки.",
"Для каждой метки укажи ID и дословную цитату из исходного текста. Не исправляй цитату и не добавляй сведения, которых в записи нет.",
"Если аспект или тональность неоднозначны, отметь это и укажи, какого бизнес-условия или контекста не хватает.",
"Для каждой темы посчитай число уникальных ID с этой темой и процент: число таких ID / число уникальных отзывов в выборке × 100. Один отзыв может входить в несколько тематических счётчиков.",
"Разделяй наблюдение по тексту, гипотезу о причине и предлагаемое действие.",
"Если переданы ручные метки audit_reference, сопоставь с ними метки модели по парам ID — аспект и посчитай совпадения и расхождения. Не создавай ручные эталонные метки самостоятельно. Если ручных меток нет, укажи, что аудит не измерен.",
"Выполни техническую сверку покрытия ID, цитат, дублей и расчётов. Не заявляй, что эта сверка доказывает истинность интерпретаций."
],
"result": {
"sample": {
"input_records": "{{Число исходных записей}}",
"unique_records": "{{Число уникальных отзывов}}",
"duplicate_links": [
{
"id": "{{ID дубля}}",
"duplicate_of": "{{ID исходной записи}}"
}
]
},
"items": [
{
"id": "{{ID}}",
"original_quote": "{{Исходный текст без изменений}}",
"duplicate_of": null,
"included_in_unique_counts": true,
"aspects": [
{
"aspect": "{{Тема или аспект}}",
"sentiment": "{{Положительная / отрицательная / нейтральная / смешанная / неясная}}",
"interpretation": "{{Что сказано; отдели событие от оценки}}",
"evidence_quote": "{{Дословная цитата}}"
}
]
}
],
"summary": {
"themes": [
{
"theme": "{{Тема}}",
"unique_ids": ["{{ID}}"],
"count": "{{Число уникальных ID}}",
"denominator": "{{Число уникальных отзывов}}",
"percent": "{{count / denominator × 100}}"
}
],
"audit": {
"compared_pairs": "{{Число сопоставленных пар ID — аспект или null}}",
"matches": "{{Число совпадений или null}}",
"discrepancies": "{{Число расхождений или null}}",
"agreement_percent": "{{matches / compared_pairs × 100 или null}}",
"note": "{{Что именно проверено; если эталонных меток нет — аудит не измерен}}"
},
"observations": ["{{Наблюдения, подтверждаемые текстами и подсчётами}}"],
"hypotheses_to_check": ["{{Возможные объяснения, не установленные по текстам}}"],
"next_checks": ["{{Проверка по данным компании}}"]
},
"limits": ["{{Границы вывода}}"]
}
}
Заполненный результат ниже фиксирует ожидаемую разметку для учебных входных данных. Конкретную модель не запускали; поэтому здесь нет результата сравнения её ответа с ручными метками и нет замера качества.
{
"task": "Разметить отзывы по темам и тональности, сохранив проверяемую связь с исходными текстами.",
"scope": {
"business_question": "В скольких уникальных отзывах упоминается срок ответа и есть ли явная отрицательная оценка ожидания?",
"sources": "Неизвестно",
"period": "Неизвестно",
"inclusion_rules": "Четыре учебные записи; точный дубль хранится, но не включается в счётчики уникальных отзывов.",
"theme_definitions": "Срок ответа — упоминание срока или ожидания ответа. Жалоба на задержку — явная отрицательная оценка ожидания ответа. Согласование цены и выполнение работы — отдельные аспекты."
},
"input_records": [
{
"id": "R1",
"date": "неизвестно",
"source": "неизвестно",
"rating": "неизвестно",
"text": "Ответили на следующий день",
"duplicate_of": null
},
{
"id": "R2",
"date": "неизвестно",
"source": "неизвестно",
"rating": "неизвестно",
"text": "Цену согласовали до ремонта",
"duplicate_of": null
},
{
"id": "R3",
"date": "неизвестно",
"source": "неизвестно",
"rating": "неизвестно",
"text": "Молнию заменили, но ждать ответа пришлось долго",
"duplicate_of": null
},
{
"id": "R4",
"date": "неизвестно",
"source": "неизвестно",
"rating": "неизвестно",
"text": "Ответили на следующий день",
"duplicate_of": "R1"
}
],
"audit_reference": [],
"rules": [
"R4 сохранён как точный дубль R1 и не включён в тематические счётчики уникальных отзывов.",
"Тональность указана отдельно для каждого аспекта. Факт без явной оценки не назван положительным или отрицательным.",
"Цитаты дословные; неизвестные даты, источники и оценки не заполнены предположениями.",
"Для каждой темы процент рассчитан как число уникальных ID с темой / 3 уникальных отзыва × 100. Один отзыв может входить в несколько тем."
],
"result": {
"sample": {
"input_records": 4,
"unique_records": 3,
"duplicate_links": [
{
"id": "R4",
"duplicate_of": "R1"
}
]
},
"items": [
{
"id": "R1",
"original_quote": "Ответили на следующий день",
"duplicate_of": null,
"included_in_unique_counts": true,
"aspects": [
{
"aspect": "Срок ответа",
"sentiment": "нейтральная",
"interpretation": "Срок ответа упомянут; явной жалобы или похвалы нет.",
"evidence_quote": "Ответили на следующий день"
}
]
},
{
"id": "R2",
"original_quote": "Цену согласовали до ремонта",
"duplicate_of": null,
"included_in_unique_counts": true,
"aspects": [
{
"aspect": "Согласование цены",
"sentiment": "нейтральная",
"interpretation": "Сообщён факт согласования цены до ремонта; явная оценка не выражена.",
"evidence_quote": "Цену согласовали до ремонта"
}
]
},
{
"id": "R3",
"original_quote": "Молнию заменили, но ждать ответа пришлось долго",
"duplicate_of": null,
"included_in_unique_counts": true,
"aspects": [
{
"aspect": "Выполнение работы",
"sentiment": "нейтральная",
"interpretation": "Сообщён факт замены молнии; явная оценка выполнения работы не выражена.",
"evidence_quote": "Молнию заменили"
},
{
"aspect": "Срок ответа",
"sentiment": "отрицательная",
"interpretation": "Долгое ожидание ответа оценено отрицательно.",
"evidence_quote": "ждать ответа пришлось долго"
}
]
},
{
"id": "R4",
"original_quote": "Ответили на следующий день",
"duplicate_of": "R1",
"included_in_unique_counts": false,
"aspects": [
{
"aspect": "Срок ответа",
"sentiment": "нейтральная",
"interpretation": "Точный дубль R1; запись сохранена для контроля происхождения, повторно в счётчик не включена.",
"evidence_quote": "Ответили на следующий день"
}
]
}
],
"summary": {
"themes": [
{
"theme": "Упоминание срока ответа",
"unique_ids": ["R1", "R3"],
"count": 2,
"denominator": 3,
"percent": "2 / 3 × 100 = 66,7%"
},
{
"theme": "Явная жалоба на задержку ответа",
"unique_ids": ["R3"],
"count": 1,
"denominator": 3,
"percent": "1 / 3 × 100 = 33,3%"
},
{
"theme": "Согласование цены до ремонта",
"unique_ids": ["R2"],
"count": 1,
"denominator": 3,
"percent": "1 / 3 × 100 = 33,3%"
},
{
"theme": "Факт выполнения работы без явной оценки",
"unique_ids": ["R3"],
"count": 1,
"denominator": 3,
"percent": "1 / 3 × 100 = 33,3%"
}
],
"audit": {
"compared_pairs": null,
"matches": null,
"discrepancies": null,
"agreement_percent": null,
"note": "Аудит не измерен: ответа модели и ручных эталонных меток нет."
},
"observations": [
"Упоминание срока ответа есть в двух из трёх уникальных отзывов; явная отрицательная оценка ожидания есть только в R3.",
"R1 — нейтральное упоминание срока, не жалоба.",
"В R3 замена молнии описана как факт выполнения без явной оценки этого аспекта."
],
"hypotheses_to_check": [
"Причина долгого ожидания ответа в этих фразах не указана. Возможные объяснения остаются гипотезами до проверки собственных данных об обращениях."
],
"next_checks": [
"В собственных данных найти реальные обращения, где первый ответ был позже принятого компанией критерия задержки, и проверить время поступления и первого ответа.",
"Уточнить, какой критерий задержки принят в компании и какие данные по обращениям доступны для проверки.",
"Назначить владельца проверки и записать, какое изменение процесса будет оцениваться."
]
},
"limits": [
"Все четыре записи вымышленные; это учебный пример, не клиентский кейс и не испытание сервиса.",
"2 из 3 — доля уникальных отзывов с упоминанием срока ответа только в этой учебной выборке, а не доля недовольных клиентов.",
"R1 содержит нейтральное упоминание срока; явная жалоба на задержку есть только в R3: 1 из 3 уникальных отзывов.",
"Один отзыв может входить в несколько тематических счётчиков, поэтому сумма процентов по темам может превышать 100%.",
"Даты, источники и оценки неизвестны; выводы примера относятся только к трём уникальным записям."
]
}
}
Проверка, ограничения и следующий шаг
Как проверить тематическую разметку. Выберите подвыборку ID и вручную разметьте её по тем же определениям тем и тональности, которые передали модели. Затем поручите агенту сопоставить ручные метки с результатом модели по парам «ID — аспект». Для каждой пары зафиксируйте совпадение или расхождение. Посчитайте число совпадений и расхождений; процент совпадений — число совпавших пар, делённое на число всех сопоставленных пар и умноженное на 100. Если один отзыв содержит несколько аспектов, сравнивайте каждый отдельно. Размер и способ выбора подвыборки укажите рядом с результатом.
Такое сравнение показывает согласованность модели с ручными метками на выбранной подвыборке. Оно не доказывает автоматически, что определения тем подходят бизнес-задаче или что интерпретация верна во всех неоднозначных случаях. Если метки расходятся, агент может показать ID, цитату и применённое правило; человек уточняет бизнес-условие или решает исключение. В учебном примере модель не запускалась, поэтому доля совпадений не рассчитана.
Отдельно поручите агенту проверить целостность результата: каждый уникальный ID учтён, цитаты дословно присутствуют в исходниках, дубли отмечены и не посчитаны повторно, числители и знаменатели соответствуют выборке, проценты пересчитаны. Это техническая сверка исходных данных и вычислений, а не независимое подтверждение смысла каждой метки.
Как считать частоту темы. Для каждой темы отдельно посчитайте число уникальных ID с этой темой, разделите его на число уникальных отзывов в выбранной выборке и умножьте на 100. В учебном примере срок ответа упомянут в двух из трёх уникальных отзывов: 2 / 3 × 100 = 66,7%. Явная жалоба на задержку есть только в R3: 1 / 3 × 100 = 33,3%. R1 входит в счётчик упоминаний срока, но не в счётчик жалоб. Один отзыв может попасть в несколько тематических счётчиков, поэтому сумма процентов по темам может превысить 100%. Показывайте числитель, знаменатель и правило учёта дублей.
Как перейти от наблюдения к действию. «В R3 сказано, что пришлось долго ждать ответа» — наблюдение по вымышленной фразе. Оно не связывает R3 с реальным обращением и не объясняет причину задержки. Для проверки в собственных данных найдите реальные обращения с задержкой по принятому в компании критерию, сопоставьте время поступления и первого ответа, затем назначьте владельца проверки. Если причина подтвердится, запишите, какое изменение процесса будете оценивать. До такой проверки причина остаётся гипотезой.
Разметка отзывов и подготовка ответа клиенту — разные задачи. Для ответа нужны согласованные тон, полномочия и факты о том, что компания может предложить. Наличие тематической классификации само по себе не означает, что модели можно поручить отправку ответа.
Где заканчиваются выводы. Вывод относится к выбранным источникам, периоду, типам отзывов и критериям включения. В корпусе публичных отзывов не представлены клиенты, которые не оставили отзыв; кроме того, выборка не охватывает площадки и каналы, которые в неё не включили. Поэтому долю темы в таких записях нельзя переносить на всех клиентов или считать долей всех недовольных. По тексту также нельзя определять возраст, личность или автора, а описание события не становится независимо подтверждённым фактом. Если причина важна для решения, проверяйте её по доступным данным компании.
Если следующий шаг — отдельно разобрать аудиторию, см. анализ целевой аудитории с нейросетью. Для работы со связкой данных и показателей пригодится материал об анализе маркетинговых данных с нейросетью.

