Criando uma Tarefa de Análise de Sentimento
Construa uma tarefa completa de classificação de sentimento com botões de rádio, tooltips e atalhos de teclado para uma rotulagem eficiente.
A análise de sentimento é uma das tarefas mais comuns de PLN, e coletar rótulos limpos para ela no Potato é simples. Este tutorial monta uma interface de anotação de sentimento que você pode realmente colocar diante dos anotadores, com os atalhos de teclado e as verificações de qualidade que aceleram a rotulagem.
Visão Geral do Projeto
Estamos anotando publicações de redes sociais. A interface abrange:
- Classificação de sentimento em três vias (Positivo, Negativo, Neutro)
- Avaliações de confiança para cada anotação
- Explicações textuais opcionais
- Atalhos de teclado para agilidade
- Medidas de controle de qualidade
Configuração Completa
Aqui está o config.yaml completo:
annotation_task_name: "Social Media Sentiment Analysis"
# Data configuration
data_files:
- "data/tweets.json"
item_properties:
id_key: id
text_key: text
# Annotation interface
annotation_schemes:
# Primary sentiment label
- annotation_type: radio
name: sentiment
description: "What is the overall sentiment of this post?"
labels:
- name: Positive
tooltip: "Expresses happiness, satisfaction, or approval"
keyboard_shortcut: "1"
- name: Negative
tooltip: "Expresses sadness, frustration, or disapproval"
keyboard_shortcut: "2"
- name: Neutral
tooltip: "Factual, objective, or lacks emotional content"
keyboard_shortcut: "3"
required: true
# Confidence rating
- annotation_type: likert
name: confidence
description: "How confident are you in your sentiment label?"
size: 5
min_label: "Not confident"
max_label: "Very confident"
required: true
# Optional explanation
- annotation_type: text
name: explanation
description: "Why did you choose this label? (Optional)"
multiline: true
required: false
placeholder: "Explain your reasoning..."
# Guidelines
annotation_guidelines:
title: "Sentiment Annotation Guidelines"
content: |
## Your Task
Classify the sentiment expressed in each social media post.
## Labels
**Positive**: The author expresses positive emotions or opinions
- Happiness, excitement, gratitude
- Praise, recommendations, approval
- Examples: "Love this!", "Best day ever!", "Highly recommend"
**Negative**: The author expresses negative emotions or opinions
- Anger, frustration, sadness
- Complaints, criticism, disapproval
- Examples: "Terrible service", "So disappointed", "Worst experience"
**Neutral**: Factual or lacking clear sentiment
- News, announcements, questions
- Mixed or balanced opinions
- Examples: "The store opens at 9am", "Has anyone tried this?"
## Tips
- Focus on the author's sentiment, not the topic
- Sarcasm should be labeled based on intended meaning
- When unsure, lower your confidence rating
# User management
automatic_assignment:
on: true
sampling_strategy: random
labels_per_instance: 1
instance_per_annotator: 100Formato dos Dados de Exemplo
Crie data/tweets.json:
{"id": "t001", "text": "Just got my new laptop and I'm absolutely loving it! Best purchase of the year! #happy"}
{"id": "t002", "text": "Waited 2 hours for customer service and they still couldn't help me. Never shopping here again."}
{"id": "t003", "text": "The new coffee shop on Main Street opens tomorrow at 7am."}
{"id": "t004", "text": "This movie was okay I guess. Some good parts, some boring parts."}
{"id": "t005", "text": "Can't believe how beautiful the sunset was tonight! Nature is amazing."}Executando a Tarefa
Inicie o servidor de anotação:
potato start config.yamlAcesse http://localhost:8000 e faça login para começar a anotar.
Veja o que seus anotadores enxergam assim que o servidor estiver no ar:
A interface de classificação de sentimento mostrando rótulos em botões de rádio, escala de confiança e campo de explicação opcional
Entendendo a Interface
Área Principal de Anotação
A interface exibe:
- O texto a ser anotado (com URLs, menções e hashtags destacados)
- Botões de rádio de sentimento com tooltips
- Escala Likert de confiança
- Caixa de texto de explicação opcional
Fluxo de trabalho por teclado
Quando os anotadores entram em ritmo, o ciclo mais rápido é:
- Ler o texto
- Pressionar
1,2ou3para o sentimento - Clicar no nível de confiança (ou usar o mouse)
- Pressionar
Enterpara enviar
Acompanhamento de Progresso
A interface mostra:
- O progresso atual (por exemplo, "15 / 100")
- O tempo estimado restante
- Estatísticas da sessão
Formato de Saída
As anotações são salvas em annotations/username.jsonl:
{
"id": "t001",
"text": "Just got my new laptop and I'm absolutely loving it!...",
"annotations": {
"sentiment": "Positive",
"confidence": 5,
"explanation": "Clear expression of happiness with the purchase"
},
"annotator": "john_doe",
"timestamp": "2026-01-15T14:30:00Z"
}Adicionando controle de qualidade
Verificações de atenção
Adicione itens de padrão-ouro para verificar a atenção dos anotadores. Para o conjunto completo de opções por trás dos esquemas radio e likert usados aqui, consulte a documentação de origem.
quality_control:
attention_checks:
enabled: true
frequency: 10 # Every 10th item
items:
- text: "I am extremely happy and satisfied! This is the best!"
expected:
sentiment: "Positive"
- text: "This is absolutely terrible and I hate it completely."
expected:
sentiment: "Negative"Concordância Entre Anotadores
Para projetos de pesquisa, habilite múltiplas anotações:
automatic_assignment:
on: true
sampling_strategy: random
labels_per_instance: 3 # Each item annotated by 3 people
instance_per_annotator: 50Analisando os Resultados
Exporte e analise suas anotações:
import json
from collections import Counter
# Load annotations
annotations = []
with open('annotations/annotator1.jsonl') as f:
for line in f:
annotations.append(json.loads(line))
# Sentiment distribution
sentiments = Counter(a['annotations']['sentiment'] for a in annotations)
print(f"Sentiment distribution: {dict(sentiments)}")
# Average confidence
confidences = [a['annotations']['confidence'] for a in annotations]
print(f"Average confidence: {sum(confidences)/len(confidences):.2f}")Próximos Passos
- Configure crowdsourcing para anotação em larga escala
- Adicione sugestões de IA para acelerar a rotulagem
- Implemente aprendizado ativo para priorizar casos difíceis
Explore mais tipos de anotação em nossa documentação.