Ir para o conteúdo

Visualização e Qualidade de Dados no Wikidata/Avaliação de Qualidade no Wikidata/ORES-LiftWing/script

De Wikiversidade

O desenvolvimento de sistemas de inteligência artificial para moderação e avaliação de conteúdo em plataformas colaborativas constitui um campo de relevância crescente na gestão do conhecimento digital. A Wikimedia Foundation, responsável pela manutenção de projetos como Wikipedia e Wikidata, implementou ao longo dos anos soluções tecnológicas para enfrentar os desafios inerentes à curação de conteúdo gerado por milhões de usuários globalmente.

O ORES (Objective Revision Evaluation Service) surgiu em meados da década de 2010 como resposta aos desafios de escalabilidade na moderação de edições nos projetos Wikimedia. Este serviço web representou um marco na implementação de Machine Learning as a Service (MLaaS) desenvolvido especificamente para avaliação automática de contribuições editoriais. Sua arquitetura baseava-se em um modelo monolítico estruturado como API REST, que hospedava modelos pré-treinados para classificação de diferentes aspectos das edições.

Arquitetura e Funcionamento

[editar | editar código]

A infraestrutura técnica do ORES fundamentava-se em algoritmos de aprendizado supervisionado, incorporando principalmente técnicas de Gradient Boosting por meio da biblioteca revscoring, Random Forest para classificação de qualidade, Support Vector Machines para detecção de edições danosas e regressão logística para modelos de menor complexidade. O processo de funcionamento seguia um fluxo estruturado iniciar com a extração de características específicas das edições, incluindo métricas quantitativas como tamanho da edição em bytes, características textuais relacionadas ao uso de maiúsculas e presença de termos inadequados, metadados do editor e características estruturais referentes às seções modificadas.

Após a extração, o sistema processava os dados por meio de modelos treinados com conjuntos de dados históricos previamente rotulados, retornando pontuações probabilísticas em escala contínua de zero a um. Valores próximos a zero indicavam baixa probabilidade de pertencimento à categoria avaliada, enquanto valores próximos a um representavam alta probabilidade. Esses scores funcionavam como estimativas de confiança, permitindo estabelecer limiares de decisão customizáveis conforme necessidades operacionais específicas.

No funcionamento do ORES, a interação com os usuários e ferramentas externas se dá por meio de endpoints expostos via API REST. Esses endpoints recebem como parâmetro identificadores de revisões ou itens, retornando como resposta a predição de um modelo específico. Por exemplo, o endpoint https://ores.wikimedia.org/v3/scores/wikidatawiki/?models=itemquality&revids={rev_id} permite solicitar a avaliação de qualidade de um item do Wikidata a partir de uma revisão determinada. A estrutura do endpoint inclui: (i) o projeto de origem (wikidatawiki), (ii) o modelo aplicado (itemquality), e (iii) os identificadores das revisões a serem analisadas.

O modelo selecionado é responsável por processar as características extraídas da revisão e aplicar algoritmos de aprendizado supervisionado previamente treinados. No caso do Wikidata, o modelo itemquality classifica os itens em uma escala categórica de cinco níveis (A a E), refletindo o grau de completude e consistência de informações estruturadas. Essa abordagem difere de modelos binários de detecção de vandalismo, pois fornece uma avaliação mais granular e voltada ao uso editorial.

A saída da API contém um objeto denominado score, que agrega os principais resultados do processamento. Dentro dele estão duas dimensões fundamentais: (i) a classe prevista (prediction), que corresponde à categoria de qualidade mais provável atribuída pelo modelo, e (ii) o conjunto de probabilidades (probability), representado por um dicionário de pares chave–valor. Nesse dicionário, cada chave corresponde a uma classe (A, B, C, D ou E), e cada valor corresponde à probabilidade numérica, em escala contínua entre 0 e 1, associada a essa classe. Por exemplo, um item pode receber previsão final de classe “C”, acompanhada de probabilidades distribuídas como 0,05 para “A”, 0,15 para “B”, 0,60 para “C”, 0,15 para “D” e 0,05 para “E”.

Essa estrutura de saída permite que os consumidores da API não apenas utilizem a classificação categórica mais provável, mas também considerem a distribuição probabilística completa, ajustando limiares de decisão de acordo com suas necessidades. Ferramentas voltadas à revisão de conteúdo podem, por exemplo, priorizar casos em que a diferença entre classes seja pequena (indicando maior incerteza), enquanto fluxos automatizados podem operar com cortes mais rígidos, baseando-se em probabilidades superiores a um valor mínimo predefinido.

Aplicações no Wikidata

[editar | editar código]

No contexto do Wikidata, o ORES desenvolveu modelos especializados para atender às particularidades deste ambiente. O modelo de qualidade de item constituía uma adaptação dos sistemas de avaliação de artigos, focando especificamente na análise de itens por meio de métricas como completude de propriedades, presença e qualidade de referências, disponibilidade de rótulos e descrições em múltiplos idiomas, e conexões semânticas com outros itens. Diferentemente dos scores probabilísticos utilizados para detecção de edições danosas, o modelo de qualidade de item emprega uma escala categórica que varia de A (qualidade mais alta) a E (qualidade mais baixa), proporcionando classificação mais intuitiva para editores e ferramentas automatizadas.

A natureza dinâmica do Wikidata tornava impraticável a manutenção manual de avaliações de qualidade atualizadas. Nesse contexto, o modelo automático de qualidade desempenhava função crucial no preenchimento dessas lacunas avaliativas, fornecendo análises sistemáticas para itens não avaliados ou modificados substancialmente.

Paralelamente, o modelo de detecção de edições danosas foi adaptado para identificar atividades prejudiciais específicas ao ambiente estruturado do Wikidata, incluindo vandalismo estrutural caracterizado pela remoção maliciosa de declarações e adição de informações falsas ou não verificáveis.

Modernização

[editar | editar código]

Apesar de sua importância histórica, o ORES apresentava limitações técnicas que motivaram sua modernização. A arquitetura monolítica implicava que todos os modelos compartilhavam a mesma infraestrutura, criando pontos únicos de falha. A escalabilidade limitada dificultava o dimensionamento independente de modelos conforme demandas específicas, enquanto a rigidez tecnológica restringia a flexibilidade de desenvolvimento.

Adicionalmente, a manutenção do sistema requeria atualizações que exigiam redeployment completo do serviço, processo que poderia resultar em interrupções temporárias. A especialização restrita do ORES, focada na avaliação de edições, limitava seu potencial de expansão para outros casos de uso de inteligência artificial.

Transição para o LiftWing

[editar | editar código]

O LiftWing representa uma mudança paradigmática na infraestrutura de aprendizado de máquina da Wikimedia, constituindo-se como plataforma escalável de servimento de modelos baseada em Kubernetes e KServe. Esta transição foi motivada pela necessidade estratégica de ampliar o escopo de aplicação além da avaliação de edições, melhorar a eficiência operacional e facilitar a experimentação com novos modelos.

A arquitetura do LiftWing fundamenta-se no paradigma de microsserviços, onde cada modelo opera como serviço independente em seu próprio container, permitindo a utilização de stacks tecnológicos específicos e configurações de recursos dedicadas. Essa abordagem contrasta significativamente com a estrutura monolítica do ORES, oferecendo vantagens em termos de escalabilidade, manutenibilidade e flexibilidade operacional.

A infraestrutura baseada em Kubernetes proporciona orquestração automática de containers, auto-scaling baseado em métricas de utilização, service discovery e load balancing nativos, além de tolerância a falhas com reinicialização automática.

Migração

[editar | editar código]

A implementação da transição adotou abordagem híbrida por meio da construção de um serviço Kubernetes denominado ores-legacy, que mantém a mesma interface do ORES original enquanto utiliza o LiftWing como backend. Essa estratégia garante compatibilidade retroativa para ferramentas existentes, permite migração gradual de serviços dependentes e possibilita testes extensivos antes da desativação completa da infraestrutura anterior.

No contexto do Wikidata, a transição resultou em melhorias significativas nos modelos existentes e no desenvolvimento de novas capacidades. O modelo de qualidade de item aprimorado oferece maior precisão por meio de características expandidas, processamento mais eficiente com otimizações de inferência e escalabilidade dinâmica para gerenciar picos de demanda.

Implementação

[editar | editar código]
# Importa bibliotecas necessárias
import requests      # Para fazer requisições HTTP (chamada ao serviço ORES)
import pywikibot     # Biblioteca oficial para interagir com projetos Wikimedia (Wikidata, Wikipedia etc.)

# === Conexão com o Wikidata ===
site = pywikibot.Site("wikidata", "wikidata")  # Cria um objeto representando o site "wikidata"
repo = site.data_repository()                  # Obtém o repositório de dados associado (o próprio Wikidata)

# === Seleção do item ===
item = pywikibot.ItemPage(repo, "Q42")  # Cria um objeto que representa o item "Q42" (Douglas Adams)
item.get()                              # Carrega os dados completos do item via API (labels, descrições, declarações etc.)

# === Última revisão ===
rev_id = item.latest_revision_id        # Obtém o ID da revisão mais recente do item Q42
print("Revisão atual de Q42:", rev_id)  # Exibe no console qual é o número dessa revisão

# === Montagem da URL para o serviço ORES ===
# O ORES é um serviço de modelos da Wikimedia que avalia qualidade e detecta vandalismo
ores_url = f"https://ores.wikimedia.org/v3/scores/wikidatawiki/?models=itemquality&revids={rev_id}"

# Faz a requisição HTTP para o endpoint do ORES
response = requests.get(ores_url)  
data = response.json()  # Converte a resposta em JSON (dicionário Python)

# === Extração dos resultados ===
# Acessa dentro do JSON a seção de pontuação para a revisão que pedimos
score = data["wikidatawiki"]["scores"][str(rev_id)]["itemquality"]["score"]

# Pega a classe de qualidade prevista (exemplo: "E", "D", "C", "B", "A")
pred_class = score["prediction"]

# Pega as probabilidades associadas a cada classe (um dicionário {classe: valor})
probs = score["probability"]

# === Exibição dos resultados ===
print(f"Classe de qualidade prevista: {pred_class}")  # Mostra a classe mais provável
for cls, prob in probs.items():                       # Percorre todas as classes possíveis
    print(f"Probabilidade de {cls}: {prob:.2f}")      # Exibe a probabilidade formatada com 2 casas decimais