Skip to content
Tutorials4 min read

Construindo Sua Primeira Tarefa de Anotação NER

Guia passo a passo para construir uma tarefa de reconhecimento de entidades nomeadas no Potato, com configuração de anotação de spans, cores de rótulos, spans sobrepostos, atalhos de teclado e exportação CoNLL.

Potato Team

O Reconhecimento de Entidades Nomeadas é uma tarefa que a maioria das equipes de PLN encontra mais cedo ou mais tarde. Este tutorial constrói uma interface de anotação NER funcional a partir do zero, com destaque de spans, atalhos de teclado e seleção de tipos de entidade. Para as opções de configuração de spans por trás disso, consulte a documentação de anotação de texto.

O Que Vamos Construir

Ao final deste tutorial, você terá uma interface de anotação onde os anotadores podem:

  • Destacar spans de texto clicando e arrastando
  • Atribuir tipos de entidade (Pessoa, Organização, Local, etc.)
  • Usar atalhos de teclado para anotar mais rápido
  • Editar ou excluir anotações existentes

Pré-requisitos

  • Potato instalado (pip install potato-annotation)
  • Familiaridade básica com YAML
  • Dados de texto de exemplo para anotar

Passo 1: Configurar o Esquema de Anotação

Crie um arquivo config.yaml:

yaml
annotation_task_name: "Named Entity Recognition"
 
data_files:
  - data/sentences.json
 
item_properties:
  id_key: id
  text_key: text
 
# Enable span annotation
annotation_schemes:
  - annotation_type: span
    name: entities
    description: "Highlight and label named entities in the text"
    labels:
      - name: PER
        description: "Person names"
        color: "#FF6B6B"
        keyboard_shortcut: "p"
      - name: ORG
        description: "Organizations"
        color: "#4ECDC4"
        keyboard_shortcut: "o"
      - name: LOC
        description: "Locations"
        color: "#45B7D1"
        keyboard_shortcut: "l"
      - name: DATE
        description: "Dates and times"
        color: "#96CEB4"
        keyboard_shortcut: "d"
      - name: MISC
        description: "Miscellaneous entities"
        color: "#FFEAA7"
        keyboard_shortcut: "m"
    min_spans: 0  # Allow sentences with no entities

Passo 2: Preparar Seus Dados

Crie data/sentences.json com seus dados de texto:

json
{"id": "1", "text": "Apple Inc. announced that CEO Tim Cook will visit Paris next Tuesday."}
{"id": "2", "text": "The United Nations headquarters in New York hosted delegates from Japan."}
{"id": "3", "text": "Dr. Sarah Johnson published her research at Stanford University in March 2024."}

Passo 3: Adicionar Diretrizes de Anotação

Ajude seus anotadores com diretrizes claras:

yaml
# Add to config.yaml
annotation_guidelines:
  title: "NER Annotation Guidelines"
  content: |
    ## Entity Types
 
    **PER (Person)**: Names of people, including fictional characters
    - Examples: "John Smith", "Dr. Johnson", "Batman"
 
    **ORG (Organization)**: Companies, institutions, agencies
    - Examples: "Apple Inc.", "United Nations", "Stanford University"
 
    **LOC (Location)**: Places, including countries, cities, landmarks
    - Examples: "Paris", "New York", "Mount Everest"
 
    **DATE**: Dates, times, and temporal expressions
    - Examples: "Tuesday", "March 2024", "next week"
 
    **MISC**: Other named entities not fitting above categories
    - Examples: "Nobel Prize", "iPhone", "COVID-19"
 
    ## Annotation Rules
    1. Include titles (Dr., Mr.) with person names
    2. For nested entities, annotate the largest meaningful span
    3. Don't include articles (the, a) in entity spans

A interface de anotação de spans permite que os anotadores destaquem texto e atribuam rótulos de entidade:

Interface de anotação de spans de entidades nomeadas com tipos de entidade codificados por corOs anotadores destacam spans de texto e atribuem rótulos de entidade como PER, ORG, LOC e DATE

Passo 4: Começar a Anotar

Inicie sua tarefa NER:

bash
potato start config.yaml

Fluxo de Trabalho de Anotação

  1. Selecione o texto: Clique e arraste para destacar um span
  2. Escolha o tipo de entidade: Clique em um botão de rótulo ou use o atalho de teclado
  3. Edite anotações: Clique em um span existente para modificar ou excluir
  4. Envie: Pressione Enter ou clique em Enviar quando terminar

Passo 5: Revisar a Saída

As anotações são salvas no formato JSONL:

json
{
  "id": "1",
  "text": "Apple Inc. announced that CEO Tim Cook will visit Paris next Tuesday.",
  "annotations": {
    "entities": [
      {"start": 0, "end": 10, "label": "ORG", "text": "Apple Inc."},
      {"start": 30, "end": 38, "label": "PER", "text": "Tim Cook"},
      {"start": 50, "end": 55, "label": "LOC", "text": "Paris"},
      {"start": 61, "end": 73, "label": "DATE", "text": "next Tuesday"}
    ]
  }
}

Dicas para uma Melhor Anotação NER

A maior parte das divergências em NER vem de diretrizes vagas, então quanto mais claras forem suas regras, menos seus anotadores discutirão sobre o mesmo span. Conduza as pessoas pelos casos limítrofes complicados antes de começarem, e não depois, e continue discutindo os exemplos difíceis em equipe. Quando a concordância entre anotadores cai, esse costuma ser o primeiro sinal de que uma diretriz precisa ser ajustada.

Próximos Passos


Precisa de ajuda? Consulte nossa documentação de anotação de spans para mais detalhes.