3,583 papers
arXiv:2508.11454 87 15 авг. 2025 г. FREE

Reference Points: контекстные якоря для точного анализа текста

КЛЮЧЕВАЯ СУТЬ
LLM плохо оценивают текст изолированно. Слово "неплохо" может означать 3 или 5 звёзд - зависит от того, кто пишет. Модель не знает шкалу координат автора. Reference Points позволяет модели оценивать тексты относительно контекста, а не в вакууме - учитывая историю автора и объекта оценки. Фишка: подавать контекст в JSON, а не plain text. Добавляешь якоря - средняя оценка пользователя (U=2.8), средняя оценка объекта (B=4.5), доп. факторы (O). Модель получает систему координат и начинает интерпретировать слова относительно них. Исследование показало: NL-промпт деградирует при добавлении данных, JSON-промпт улучшается.
Адаптировать под запрос

TL;DR

Reference Points — техника, которая добавляет в промпт дополнительные данные как точки сравнения для LLM. Вместо анализа текста в вакууме модель получает контекст: средние показатели пользователя, бенчмарки категории, дополнительные факторы. Всё подаётся в JSON-формате, а не plain text.

Модели плохо оценивают текст изолированно — им не хватает контекста. Если пользователь обычно ставит 2 звезды, а тут поставил 4 — это восторг. Если заведение в среднем получает 4.5, а конкретный отзыв дал 3 — это провал. LLM без этого контекста видит только слова, но не понимает относительную оценку. Именно так работает психология: мы оцениваем не абсолютно, а относительно ожиданий (prospect theory) и прошлого опыта.

Метод добавляет три типа информации в JSON: U (user average) — средняя оценка пользователя из истории, B (business average) — средняя оценка заведения от всех, O (other) — дополнительные факторы вроде часов работы. Модель получает структурированный контекст перед анализом и использует его как систему координат для интерпретации текста.


🔬

Схема метода

ОДНОШАГОВЫЙ ПРОМПТ (всё в одном запросе):

ИНСТРУКЦИЯ: Ты анализируешь отзывы. Оценивай по шкале 1-5.
 При оценке учитывай JSON с контекстом.

ПРИМЕР: 
User review: [пример отзыва]
Supplementary Information: {"user_average_stars": 2.6, "business_average_stars": 3.0}
Output: 5

ЗАДАЧА:
User review: [целевой отзыв]
Supplementary Information: {JSON с данными U/B/O}
Output: _

Модель генерирует одно число (1-5) на основе текста + контекста.


🚀

Пример применения

Задача: Оцениваешь отзыв клиента на ресторан "Белуга" в Москве для системы рекомендаций.

Промпт:

Ты анализируешь отзывы о ресторанах. Оцени отзыв по шкале 1-5.
Учитывай JSON с контекстом: user_average_stars (средняя оценка этого 
пользователя в прошлых отзывах), business_average_stars (средняя оценка 
ресторана от всех клиентов), open_hours (часов работы в неделю).

### Пример
User review: Отличное место, но дороговато.
Supplementary Information: {"user_average_stars": 3.2, 
"business_average_stars": 4.1, "open_hours": 84}
Output: 4

### Задача 
User review: Невероятно! Лучший томленый судак что я пробовал. 
Сервис на уровне, хотя пришлось подождать столик 15 минут.

Supplementary Information: {"user_average_stars": 2.8, 
"business_average_stars": 4.5, "open_hours": 70}
Output: _

Результат:

Модель выдаст число 5. Она видит: пользователь обычно критичен (средняя 2.8), но тут написал восторженно. Ресторан объективно сильный (4.5), текст подтверждает. Модель понимает контрастность оценки: для скептика это прорыв, хотя объективно заведение и так топ.

Без контекста модель могла бы дать 4 (из-за упоминания ожидания). С контекстом она калибрует оценку относительно истории пользователя и репутации места.


🧠

Почему это работает

LLM плохо оценивают относительность. Текст "неплохо" может означать 3 или 5 звёзд в зависимости от того, кто пишет. Модель видит слова, но не знает шкалу координат автора.

Сильная сторона LLM — понимать структурированные данные и использовать их для контекстуальных выводов. JSON — это язык, который модель парсит эффективнее, чем plain text с теми же данными. В исследовании NL-промпт с описанием ("средняя оценка пользователя 2.6") проваливается при добавлении информации, а JSON-промпт улучшается.

Механика: Модель получает три типа якорей — U (насколько придирчив автор), B (насколько хорошо заведение в целом), O (дополнительный контекст). Комбинация якорей создаёт систему отсчёта. Если U=2.8 и текст позитивный → это сильный сигнал. Если B=4.5 и текст нейтральный → возможно, разочарование.

Рычаги управления:

  • Числовые reference points (U/B) → убери один, чтобы упростить промпт при нехватке данных
  • Дополнительные факторы (O) → добавь свои: цена, локация, время визита
  • JSON vs NL → всегда JSON для >2 параметров, LLM парсит точнее
  • One-shot vs Few-shot → добавь 2-3 примера если данных мало, но помни про дополнительные переменные

📋

Шаблон промпта

Ты анализируешь {тип_контента}. Оцени по шкале {шкала}.
Учитывай JSON с контекстом: {описание_полей_JSON}.

### Пример
{тип_контента}: {пример_текста}
Supplementary Information: {пример_JSON}
Output: {пример_оценки}

### Задача
{тип_контента}: {целевой_текст}
Supplementary Information: {целевой_JSON}
Output: _

Плейсхолдеры:

  • {тип_контента} — что анализируем: отзывы, комментарии, письма
  • {шкала} — диапазон оценок: 1-5, 1-10, позитив/нейтрал/негатив
  • {описание_полей_JSON} — что означает каждое поле в JSON
  • {пример_текста}, {пример_JSON}, {пример_оценки} — one-shot пример
  • {целевой_текст}, {целевой_JSON} — данные для анализа

🚀 Быстрый старт — вставь в чат:

Вот шаблон Reference Points для анализа с контекстом. Адаптируй 
под мою задачу: [опиши задачу]. Задавай вопросы, чтобы заполнить поля.

[вставить шаблон выше]

LLM спросит: какой контент анализируешь, какая шкала, какие данные есть для reference points. Модель возьмёт структуру промпта и адаптирует под твою задачу — тебе не нужно вручную заполнять JSON.


⚠️

Ограничения

⚠️ Конфликт якорей: Когда user_average сильно расходится с business_average (например, 2 vs 5), точность падает. Модель не знает какому якорю доверять. В исследовании такие кейсы показывали 0% точности в отдельных ячейках матрицы.

⚠️ Качество данных: Если средние оценки неполные (мало истории пользователя) или устаревшие, они скорее вредят. Метод требует достаточного объёма данных для вычисления стабильных средних.

⚠️ Не для субъективных критериев без шкалы: Метод работает на количественных оценках (звёзды, баллы). Для чисто качественного анализа ("креативность текста", "убедительность аргументов") без чёткой шкалы reference points бесполезны.

⚠️ Лёгкий домен-спецификой: Исследовали на отзывах Yelp. Для других типов контента (B2B-письма, научные тексты, код-ревью) нужны свои типы reference points — не факт что user/business average подойдут.


🔍

Как исследовали

Команда взяла 500 отзывов из двух категорий Yelp (рестораны и ночные клубы) и прогнала через Llama 3.2-3B без fine-tuning. Сравнивали с четырьмя baseline моделями (BERT, DistilBERT, RoBERTa, DeBERTa), которые fine-tuning получили на 1000 дополнительных примеров.

Тестировали 6 вариантов промптов: JSON-UBO (все данные), JSON-UB (только средние), JSON-O (только доп. факторы) + аналоги в NL-формате + LLM без контекста. Измеряли Macro-F1 (классификация) и RMSE (регрессия).

Ключевой результат: JSON-UBO без fine-tuning побил все baseline модели, даже fine-tuned RoBERTa. Macro-F1 вырос на 1.6-20.7%, RMSE упал на 9-16%. При этом NL-промпты с теми же данными провалились — точность не росла или даже падала при добавлении информации.

Проверка на "обман": Исследователи опасались, что модель просто копирует средние оценки вместо анализа. Разбили данные на 5 групп по величине разрыва между reference point и реальной оценкой. Если бы модель читерила — точность была бы максимальной при нулевом разрыве. Но оказалось наоборот: точность росла когда оценка отклонялась от средней (особенно вверх). Модель действительно использует reference points для контекстуального рассуждения, а не как подсказку ответа.

Матрица взаимодействий: Построили 5×5 сетку где строки — user_average, столбцы — business_average, ячейки — точность. Обнаружили: модель работает идеально (100%) когда якоря согласованы (диагональ матрицы) и проваливается (0%) при конфликте якорей. Это показывает что модель не просто смотрит на один якорь, а взвешивает оба.

Важный инсайт: Лёгкая модель (3B параметров) + структурированный промпт обгоняет тяжёлые fine-tuned модели. Это означает что prompt engineering с правильным контекстом может заменить дорогой fine-tuning для задач где доступны rich данные.


📄

Оригинал из исследования

### Instruction
You are a helpful assistant evaluating the review texts about 
the restaurant. Please evaluate the review text and assign an 
integer score ranging from 1 for the most negative comment to 
5 for the most positive comment. The output should be a single 
integer from 1 to 5.

When evaluating the review, consider both the textual sentiment 
and the supplementary information in JSON format. Use 
'user_average' (the average score this user has given in their 
past reviews) to understand the user's typical rating behavior 
and 'restaurant_average' (the average score this restaurant has 
received across all users) to compare this restaurant's 
performance relative to others. Additionally, use 
'restaurant_name', 'open_hours' (the total number of hours the 
restaurant is open in a week), and 'open_days' (the total number 
of days the restaurant is open in a week) to contextualize the 
review.

### Example
User review: This restaurant was...
Supplementary Information: {"user_average_stars": 2.6, 
"business_average_stars": 3.0}
Output: 5

### Task
User review: {user_review}
Supplementary Information: {JSON_data}
Output: _

Контекст: Исследователи использовали этот промпт для JSON-UBO модели (с полным набором данных: user average + business average + other factors). Модель генерирует одно число после Output и останавливается.


💡

Адаптации и экстраполяции

💡 Адаптация для анализа performance review:

Тот же принцип reference points применим к оценке сотрудников. Вместо user_average → manager_average (насколько строгий руководитель), вместо business_average → team_average (средняя оценка команды).

Ты анализируешь performance review сотрудника. Оцени по шкале 1-5.
Учитывай JSON с контекстом: manager_average (средняя оценка которую 
этот руководитель обычно ставит), team_average (средняя оценка команды), 
tenure_months (стаж сотрудника в компании).

### Пример
Review: Отличный квартал. Закрыл 3 сделки, хотя две сорвались из-за макро.
Supplementary Information: {"manager_average": 3.2, "team_average": 3.8, 
"tenure_months": 18}
Output: 4

### Задача
Review: {текст_ревью}
Supplementary Information: {JSON_данные}
Output: _

🔧 Техника: Добавь "reasoning" поле → видеть логику модели

Исследование использует text-completion где модель выдаёт только число. Но можно попросить модель объяснить почему она выбрала эту оценку на основе reference points.

Output format: {"score": [1-5], "reasoning": "[объяснение]"}

### Example
...
Output: {"score": 5, "reasoning": "Пользователь обычно критичен (2.8), 
но тут восторг → сильный позитив. Место топ (4.5), подтверждает."}

Эффект: Ты видишь КАК модель использует якоря. Полезно для дебага и понимания где модель ошибается.


💡 Экстраполяция: Reference points для оценки бизнес-идей

Принцип применим к оценке startups. Вместо sentiment analysis → feasibility scoring.

Ты оцениваешь бизнес-идею по шкале 1-10 (реализуемость).
Учитывай JSON: founder_success_rate (% успешных проектов основателя 
в прошлом), market_avg_failure_rate (% провалов в этой нише), 
runway_months (денег хватит на N месяцев).

### Пример
Pitch: Маркетплейс для аренды дронов с доставкой за 1 час в Москве.
Supplementary Information: {"founder_success_rate": 0.2, 
"market_avg_failure_rate": 0.7, "runway_months": 6}
Output: 3

### Задача
Pitch: {описание_идеи}
Supplementary Information: {JSON_данные}
Output: _

Логика: Модель калибрует оценку относительно track record фаундера и сложности ниши. Низкий success rate + жёсткий рынок → скептичная оценка даже при хорошей идее.


🔗

Ресурсы

Reference Points in LLM Sentiment Analysis: The Role of Structured Context — Junichiro Niimi (Meijo University, RIKEN AIP), препринт 2025.

Датасет: Yelp Open Dataset

Модель: Llama 3.2-3B-Instruct (Meta)


📋 Дайджест исследования

Ключевая суть

LLM плохо оценивают текст изолированно. Слово "неплохо" может означать 3 или 5 звёзд - зависит от того, кто пишет. Модель не знает шкалу координат автора. Reference Points позволяет модели оценивать тексты относительно контекста, а не в вакууме - учитывая историю автора и объекта оценки. Фишка: подавать контекст в JSON, а не plain text. Добавляешь якоря - средняя оценка пользователя (U=2.8), средняя оценка объекта (B=4.5), доп. факторы (O). Модель получает систему координат и начинает интерпретировать слова относительно них. Исследование показало: NL-промпт деградирует при добавлении данных, JSON-промпт улучшается.

Принцип работы

Три типа якорей создают систему отсчёта. U (user average) - насколько придирчив автор. B (business average) - насколько хорош объект в целом. O (other factors) - дополнительный контекст. Комбинация якорей выставляет шкалу модели. Если U=2.8 и текст позитивный → сильный сигнал. Если B=4.5 и текст нейтральный → возможно разочарование. Модель интерпретирует слова относительно координат, а не абсолютно.

Почему работает

LLM сильны в обработке структурированных данных - JSON это язык который модель понимает точнее чем текстовое описание. Plain text промпт с теми же данными ("средняя оценка 2.6") деградирует при добавлении информации. JSON-промпт улучшается. Второй момент: люди оценивают относительно ожиданий (prospect theory). Модель без контекста видит только слова. Не понимает шкалу автора. Якоря U/B создают эту шкалу - модель перестаёт гадать и начинает выставлять оценки относительно истории.

Когда применять

Анализ тональности и оценка контента → конкретно для отзывов, комментариев, обратной связи с числовыми шкалами (1-5, 1-10), особенно когда есть исторические данные о пользователе и объекте оценки. НЕ подходит для субъективных критериев без чёткой шкалы - креативность текста, убедительность аргументов.

Мини-рецепт

1. Собери якоря: Вычисли средние оценки пользователя (U) и объекта (B), добавь доп. факторы (O) если есть
2. Структурируй в JSON: {"user_average_stars": 2.8, "business_average_stars": 4.5}
3. Опиши поля в промпте: Объясни что означает каждый ключ - "user_average_stars (средняя оценка этого пользователя в прошлых отзывах)"
4. Добавь one-shot пример: Покажи пример отзыва с JSON и корректным выводом - модель поймёт логику калибровки

Примеры

[ПЛОХО] : Оцени отзыв: "Неплохо, но дороговато" (Непонятно для кого "неплохо" - для привередливого критика или для фаната)
[ХОРОШО] : Оцени отзыв 1-5. Контекст: {"user_avg": 2.3, "business_avg": 4.2} Отзыв: "Неплохо, но дороговато" Output: _ (Модель видит: автор обычно ставит 2.3, а заведение топ (4.2) - "неплохо" от скептика про топовое место = скорее 4 звезды, не 3)
Источник: Reference Points in LLM Sentiment Analysis: The Role of Structured Context
ArXiv ID: 2508.11454 | Сгенерировано: 2026-01-12 01:10

Работа с исследованием

Адаптируйте исследование под ваши задачи или создайте готовый промпт на основе техник из исследования.

0 / 2000
~0.5-2 N-токенов ~10-30с
~0.3-1 N-токенов ~5-15с