Expand description
NER and Coreference evaluation framework.
§Feature Gating
This module lives in the anno-eval crate (which is not intended for crates.io
publishing right now) and intentionally pulls in a large amount of evaluation
infrastructure: datasets, registries, harnesses, and reporting.
For a minimal dependency surface, prefer the anno crate without evaluation tooling.
For evaluation workflows, depend on anno-eval (or use the anno CLI).
§Relation to anno::eval
The anno crate also exposes a small anno::eval module behind the legacy eval
feature (and the preferred alias analysis). That module contains only light,
analysis-oriented primitives (e.g. coref metrics and cross-context clustering helpers).
The full evaluation harness remains here in anno-eval::eval.
§Overview
This module provides comprehensive evaluation tools for:
- Named Entity Recognition (NER): Standard metrics, error analysis, significance testing
- Coreference Resolution: MUC, B³, CEAF, LEA, BLANC, CoNLL F1
§Why Multiple Coreference Metrics?
No single metric captures all aspects of coreference quality:
| Metric | Measures | Blind to |
|---|---|---|
| MUC | Link recall/precision | Singletons, entity count |
| B³ | Mention-level overlap | Link structure |
| CEAF | Optimal entity alignment | Within-cluster structure |
| LEA | Links weighted by entity size | Nothing (comprehensive) |
| BLANC | Rand index (coreference + non-coref) | Entity semantics |
The CoNLL F1 (average of MUC, B³, CEAF-e) is the standard benchmark metric.
§Metric Divergence: A Diagnostic Tool
When metrics disagree significantly, it reveals systematic model behaviors:
- High MUC, Low B³: Model makes too few links (conservative)
- Low MUC, High B³: Model over-clusters (aggressive)
- High CEAF variance: Inconsistent entity boundaries
Use MetricDivergence to quantify this and diagnose model behavior.
§NER Evaluation
use anno_eval::eval::{evaluate_ner_model, GoldEntity, ErrorAnalysis};
use anno::RegexNER;
let model = RegexNER::new();
let test_cases = vec![
("Meeting on January 15".to_string(), vec![
GoldEntity::new("January 15", anno::EntityType::Date, 11),
]),
];
let results = evaluate_ner_model(&model, &test_cases)?;
println!("F1: {:.1}%", results.f1 * 100.0);§Coreference Evaluation
use anno_eval::eval::{CorefChain, Mention, conll_f1, muc_score, b_cubed_score};
let gold = vec![
CorefChain::new(0, vec![Mention::new("John", 0, 4), Mention::new("he", 20, 22)]),
];
let pred = gold.clone(); // Perfect match
let (p, r, f1) = conll_f1(&gold, &pred);
assert!((f1 - 1.0).abs() < 0.001);§Dataset Support
| Dataset | Type | Size | Format |
|---|---|---|---|
| CoNLL-2003 | NER | ~22k sentences | BIO tags |
| WikiGold | NER | 145 docs | CoNLL |
| WNUT-17 | NER | ~5k tweets | CoNLL |
| MultiNERD | NER | ~50k examples | JSONL |
| GAP | Coref | 4.5k examples | TSV |
| PreCo | Coref | 12k docs | JSON |
§Metrics
NER Metrics:
- Precision, Recall, F1 (micro/macro)
- Per-entity-type breakdown
- Partial match (boundary overlap)
- Confidence threshold analysis
Coreference Metrics:
- MUC (link-based)
- B³ (mention-based)
- CEAF-e/m (entity/mention alignment)
- LEA (link-based entity-aware)
- BLANC (rand-index based)
- CoNLL F1 (average of MUC, B³, CEAF-e)
Error Analysis:
- Confusion matrix
- Error categorization (type, boundary, spurious, missed)
- Statistical significance testing (paired t-test)
Re-exports§
pub use bio_adapter::BioScheme;pub use modes::EvalConfig as ModeConfig;pub use modes::EvalMode;pub use datasets::GoldEntity;pub use dataset_registry::AnnotationScheme;pub use dataset_registry::DataFormat;pub use dataset_registry::DatasetId as RegistryDatasetId;pub use datasets::DatasetMetadata;pub use loader::DatasetLoader;pub use loader::LoadableDatasetId;pub use loader::LoadedDataset;pub use dataset::AnnotatedExample;pub use dataset::DatasetStats;pub use dataset::Difficulty;pub use dataset::Domain;pub use dataset::NERDataset;pub use harness::BackendAggregateResult;pub use harness::BackendDatasetResult;pub use harness::BackendRegistry;pub use harness::DatasetStatsSummary;pub use harness::EvalConfig;pub use harness::EvalHarness;pub use harness::EvalResults;pub use types::CorefDocStats;pub use types::DocumentScale;pub use types::GoalCheck;pub use types::GoalCheckResult;pub use types::LabelShift;pub use types::MetricDivergence;pub use types::MetricValue;pub use types::MetricWithVariance;pub use coref_loader::adversarial_coref_examples;pub use coref_loader::synthetic_coref_dataset;pub use coref_loader::CorefLoader;pub use coref_loader::GapExample;pub use book_scale::BookScaleAnalysis;pub use book_scale::BookScaleAnalyzer;pub use book_scale::BookScaleConfig;pub use book_scale::BookScaleDiagnostics;pub use book_scale::CorefEvalScores;pub use book_scale::MetricReliability;pub use book_scale::MultiBookReport;pub use book_scale::PerBookEvaluation;pub use book_scale::ReliabilityLevel;pub use book_scale::Scores;pub use book_scale::StratifiedEvaluation;pub use book_scale::WindowedEvaluation;pub use inter_doc_coref::InterDocCorefMetrics;pub use cdcr::comprehensive_cdcr_dataset;pub use cdcr::financial_news_dataset;pub use cdcr::political_news_dataset;pub use cdcr::science_news_dataset;pub use cdcr::sports_news_dataset;pub use cdcr::tech_news_dataset;pub use cdcr::CDCRConfig;pub use cdcr::CDCRMetrics;pub use cdcr::CDCRResolver;pub use cdcr::CrossDocCluster;pub use cdcr::Document;pub use cdcr::LSHBlocker;pub use cdcr::MentionRef;pub use discontinuous::evaluate_discontinuous_ner;pub use discontinuous::DiscontinuousEvalConfig;pub use discontinuous::DiscontinuousGold;pub use discontinuous::DiscontinuousNERMetrics;pub use discontinuous::TypeMetrics as DiscontinuousTypeMetrics;pub use relation::evaluate_relations;pub use relation::RelationEvalConfig;pub use relation::RelationGold;pub use relation::RelationMetrics;pub use relation::RelationPrediction;pub use relation::RelationTypeMetrics;pub use advanced_evaluator::evaluator_for_task;pub use advanced_evaluator::DiscontinuousEvaluator;pub use advanced_evaluator::EvalResults as AdvancedEvalResults;pub use advanced_evaluator::RelationEvaluator;pub use advanced_evaluator::TaskEvaluator;pub use visual::evaluate_visual_ner;pub use visual::synthetic_visual_examples;pub use visual::BoundingBox;pub use visual::VisualEvalConfig;pub use visual::VisualGold;pub use visual::VisualNERMetrics;pub use visual::VisualPrediction;pub use visual::VisualTypeMetrics;pub use advanced_harness::evaluate_discontinuous_gold_vs_gold;pub use advanced_harness::evaluate_discontinuous_synthetic;pub use advanced_harness::evaluate_relations_gold_vs_gold;pub use advanced_harness::evaluate_relations_synthetic;pub use advanced_harness::evaluate_visual_gold_vs_gold;pub use advanced_harness::synthetic_dataset_stats;pub use advanced_harness::AdvancedTaskResults;pub use advanced_harness::ModelResult;pub use advanced_harness::SyntheticDatasetStats;pub use gender_bias::create_comprehensive_bias_templates;pub use gender_bias::create_neopronoun_templates;pub use gender_bias::create_winobias_templates;pub use gender_bias::occupation_stereotype;pub use gender_bias::GenderBiasEvaluator;pub use gender_bias::GenderBiasResults;pub use gender_bias::OccupationBiasMetrics;pub use gender_bias::PronounGender;pub use gender_bias::StereotypeType;pub use gender_bias::WinoBiasExample;pub use bias_config::BiasDatasetConfig;pub use bias_config::DistributionValidation;pub use bias_config::FrequencyWeightedResults;pub use bias_config::StatisticalBiasResults;pub use demographic_bias::create_diverse_location_dataset;pub use demographic_bias::create_diverse_name_dataset;pub use demographic_bias::DemographicBiasEvaluator;pub use demographic_bias::DemographicBiasResults;pub use demographic_bias::Ethnicity;pub use demographic_bias::LocationExample;pub use demographic_bias::LocationType;pub use demographic_bias::NameExample;pub use demographic_bias::NameFrequency;pub use demographic_bias::NameResult;pub use demographic_bias::Region;pub use demographic_bias::RegionalBiasResults;pub use demographic_bias::Script;pub use temporal_bias::create_temporal_name_dataset;pub use temporal_bias::Decade;pub use temporal_bias::TemporalBiasEvaluator;pub use temporal_bias::TemporalBiasResults;pub use temporal_bias::TemporalGender;pub use temporal_bias::TemporalNameExample;pub use length_bias::create_length_varied_dataset;pub use length_bias::EntityLengthEvaluator;pub use length_bias::LengthBiasResults;pub use length_bias::LengthBucket;pub use length_bias::LengthTestExample;pub use length_bias::WordCountBucket;pub use calibration::calibration_grade;pub use calibration::confidence_entropy;pub use calibration::confidence_gap_grade;pub use calibration::confidence_variance;pub use calibration::CalibrationEvaluator;pub use calibration::CalibrationResults;pub use calibration::EntropyFilter;pub use calibration::ReliabilityBin;pub use calibration::ThresholdMetrics;pub use robustness::robustness_grade;pub use robustness::Perturbation;pub use robustness::PerturbationMetrics;pub use robustness::RobustnessEvaluator;pub use robustness::RobustnessResults;pub use ood_detection::ood_rate_grade;pub use ood_detection::OODAnalysisResults;pub use ood_detection::OODConfig;pub use ood_detection::OODDetector;pub use ood_detection::OODStatus;pub use ood_detection::VocabCoverageStats;pub use dataset_quality::check_leakage;pub use dataset_quality::entity_imbalance_ratio;pub use dataset_quality::DatasetQualityAnalyzer;pub use dataset_quality::DifficultyMetrics;pub use dataset_quality::QualityReport;pub use dataset_quality::ReliabilityMetrics;pub use dataset_quality::ValidityMetrics;pub use learning_curve::suggested_train_sizes;pub use learning_curve::CurveFitParams;pub use learning_curve::DataPoint;pub use learning_curve::LearningCurveAnalysis;pub use learning_curve::LearningCurveAnalyzer;pub use learning_curve::SampleEfficiencyMetrics;pub use ensemble::agreement_grade;pub use ensemble::kappa_interpretation;pub use ensemble::DisagreementDetail;pub use ensemble::EnsembleAnalysisResults;pub use ensemble::EnsembleAnalyzer;pub use ensemble::ModelPrediction;pub use ensemble::SingleExampleAnalysis;pub use dataset_comparison::compare_datasets;pub use dataset_comparison::compute_stats;pub use dataset_comparison::estimate_difficulty;pub use dataset_comparison::DatasetComparison;pub use dataset_comparison::DatasetStats as ComparisonStats;pub use dataset_comparison::DifficultyEstimate;pub use dataset_comparison::LengthStats;pub use drift::ConfidenceDrift;pub use drift::DistributionDrift;pub use drift::DriftConfig;pub use drift::DriftDetector;pub use drift::DriftReport;pub use drift::DriftWindow;pub use drift::VocabularyDrift;pub use active_learning::entities_to_candidates;pub use active_learning::estimate_budget;pub use active_learning::export_annotation_priority;pub use active_learning::rank_for_annotation;pub use active_learning::select_for_annotation;pub use active_learning::ActiveLearner;pub use active_learning::Candidate;pub use active_learning::SamplingStrategy;pub use active_learning::ScoreStats;pub use active_learning::SelectionResult;pub use error_analysis::EntityInfo;pub use error_analysis::ErrorAnalyzer;pub use error_analysis::ErrorCategory;pub use error_analysis::ErrorInstance;pub use error_analysis::ErrorPattern;pub use error_analysis::ErrorReport;pub use error_analysis::PredictedEntity;pub use error_analysis::TypeErrorStats;pub use threshold_analysis::format_threshold_table;pub use threshold_analysis::interpret_curve;pub use threshold_analysis::PredictionWithConfidence;pub use threshold_analysis::ThresholdAnalyzer;pub use threshold_analysis::ThresholdCurve;pub use threshold_analysis::ThresholdPoint;pub use report::BiasSummary;pub use report::CalibrationSummary;pub use report::CoreMetrics;pub use report::DataQualitySummary;pub use report::DemographicBiasMetrics;pub use report::ErrorSummary;pub use report::EvalReport;pub use report::GenderBiasMetrics;pub use report::LengthBiasMetrics;pub use report::Priority;pub use report::Recommendation;pub use report::RecommendationCategory;pub use report::ReportBuilder;pub use report::SimpleGoldEntity;pub use report::TestCase;pub use report::TypeMetrics as ReportTypeMetrics;pub use unified_evaluator::EvalMetadata;pub use unified_evaluator::EvalSystem;pub use unified_evaluator::UnifiedEvalResults;pub use unified_evaluator::BiasEvalResults;pub use unified_evaluator::CalibrationEvalResults;pub use unified_evaluator::DataQualityEvalResults;pub use unified_evaluator::StandardEvalResults;pub use backend_name::BackendName;pub use config_builder::BiasDatasetConfigBuilder;pub use config_builder::TaskEvalConfigBuilder;pub use few_shot::simulate_few_shot_task;pub use few_shot::FewShotEvaluator;pub use few_shot::FewShotGold;pub use few_shot::FewShotPrediction;pub use few_shot::FewShotResults;pub use few_shot::FewShotTask;pub use few_shot::FewShotTaskResults;pub use few_shot::SupportExample;pub use long_tail::format_long_tail_results;pub use long_tail::EntityFrequency;pub use long_tail::FrequencyBucket;pub use long_tail::FrequencySplit;pub use long_tail::LongTailAnalyzer;pub use long_tail::LongTailResults;pub use long_tail::TypePerformance;pub use analysis::build_confusion_matrix;pub use analysis::compare_ner_systems;pub use analysis::ConfusionMatrix;pub use analysis::ErrorAnalysis;pub use analysis::ErrorType;pub use analysis::NERError;pub use analysis::NERSignificanceTest;pub use sampling::multi_seed_eval;pub use sampling::stratified_sample;pub use sampling::stratified_sample_ner;pub use evaluator::*;pub use metrics::*;pub use validation::*;
Modules§
- abstract_
anaphora - Abstract anaphora evaluation infrastructure.
- active_
learning - Active learning utilities for NER annotation.
- advanced_
evaluator - Advanced evaluators for specialized NER tasks.
- advanced_
harness - Advanced evaluation harness for specialized NER tasks.
- analysis
- Error analysis and diagnostics for NER evaluation.
- annotator
- Multi-annotator disagreement modeling.
- backend_
factory - Backend Factory for Runtime Backend Creation
- backend_
name - Backend Name Enum
- benchmark
- Large-scale benchmark datasets for NER evaluation.
- bias_
config - Configuration and statistical utilities for bias evaluation.
- bio_
adapter - BIO tag sequence adapter.
- book_
scale - Book-Scale Coreference Diagnostics
- bridging
- Bridging Anaphora Resolution.
- calibration
- Confidence calibration metrics for NER evaluation.
- cdcr
- Cross-Document Coreference Resolution (CDCR).
- cluster_
encoder - Cross-context clustering primitives (shared via
anno-metrics). - config_
builder - Configuration Builder Pattern
- coref
- Coreference resolution data structures.
- coref_
loader - Coreference dataset loading and parsing.
- coref_
metrics - Coreference metrics (shared via
anno-metrics). - coref_
resolver - Coreference resolvers (shared via
anno::metrics). - cross_
context_ eval - Cross-Context Coreference Evaluation Harness.
- dataset
- Dataset API for NER evaluation.
- dataset_
comparison - Dataset comparison for understanding distribution differences.
- dataset_
metadata - Table-driven dataset metadata.
- dataset_
quality - Dataset quality metrics for NER evaluation.
- dataset_
registry - Dataset Registry: Single Source of Truth
- dataset_
spec - Dataset specifications and metadata for NER evaluation.
- datasets
- Dataset loading for NER evaluation.
- demographic_
bias - Demographic bias evaluation for Named Entity Recognition.
- discontinuous
- Discontinuous NER evaluation metrics.
- discourse_
deixis - Discourse Deixis Resolution.
- drift
- Temporal drift detection for production NER monitoring.
- ensemble
- Ensemble disagreement metrics for multi-model NER systems.
- error_
analysis - Error analysis for NER systems.
- evaluator
- NER evaluation trait and implementations.
- few_
shot - Few-shot learning evaluation for NER.
- gender_
bias - Gender bias evaluation for coreference resolution.
- harness
- Evaluation harness for comprehensive NER benchmarking.
- history
- Evaluation history tracking with optional SQLite index.
- incremental_
coref - Incremental Coreference Resolution for Book-Scale Documents
- inter_
doc_ coref - Evaluation metrics for inter-document coreference resolution.
- learning_
curve - Learning curve analysis for NER evaluation.
- length_
bias - Entity length bias evaluation for Named Entity Recognition.
- loader
- Dataset downloading and caching for NER evaluation.
- long_
tail - Long-tail entity evaluation for NER.
- low_
resource - Low-resource and morphologically complex language evaluation metrics.
- metrics
- Advanced evaluation metrics for NER.
- modes
- NER evaluation modes following SemEval-2013 Task 9.1.
- multi_
run - Multi-run evaluation for statistical robustness.
- ner_
metrics - Legacy NER Evaluation Metrics (MUC/SemEval-2013 standards).
- neural_
cluster_ encoder - Neural Cluster Encoder for Cross-Context Coreference.
- ood_
detection - Out-of-Distribution (OOD) detection for NER systems.
- prelude
- Evaluation prelude - commonly used types for quick imports.
- profiling
- Profiling utilities for performance analysis.
- ranking
- Ranking evaluation metrics for Named Entity Disambiguation (NED).
- relation
- Relation extraction evaluation metrics.
- report
- Unified evaluation report.
- robustness
- Robustness testing for NER models.
- sampling
- Sampling strategies for NER evaluation.
- shell_
nouns - Shell Noun Resolution.
- synthetic
- Synthetic NER Test Datasets
- synthetic_
gen - Auto-generated synthetic test data.
- task_
evaluator - Comprehensive Task-Dataset-Backend Evaluation System
- task_
mapping - Task-Dataset-Backend Mapping System
- temporal_
bias - Temporal bias evaluation for Named Entity Recognition.
- threshold_
analysis - Confidence threshold analysis for NER systems.
- types
- Evaluation types: MetricValue, GoalCheckResult, etc.
- unified_
evaluator - Unified Evaluation System
- validation
- Validation utilities for NER evaluation.
- visual
- Visual NER evaluation metrics.
Structs§
- Aggregate
Coref Evaluation - Aggregate evaluation results across multiple documents.
- Coref
Chain - A coreference chain: mentions that all refer to the same entity.
- Coref
Chain Stats - Statistics for stratified coreference evaluation.
- Coref
Config - Configuration for
SimpleCorefResolver. - Coref
Document - A document with coreference annotations.
- Coref
Evaluation - Complete coreference evaluation results.
- Coref
Scores - Coreference evaluation scores (precision, recall, F1).
- Evaluation
Metadata - Additional evaluation metadata for reproducibility.
- Mention
- A single mention (text span) that may corefer with other mentions.
- NEREvaluation
Results - NER evaluation results.
- Significance
Test - Result of a paired significance test between two systems (very rough p-value approximation).
- Simple
Coref Resolver - Simple rule-based coreference resolver.
- Type
Metrics - Per-entity-type metrics.
Enums§
- Coref
Metric - Coreference evaluation metrics.
- Eval
Task - Evaluation task type.
- Gender
- Gender classification for NLP tasks.
- Mention
Type - Type of referring expression in coreference.
Traits§
- Coreference
Resolver - Trait for coreference resolution algorithms.
Functions§
- b_
cubed_ score - B-cubed mention-based metric (Bagga & Baldwin, 1998).
- blanc_
score - BLANC Rand-index-style metric (Recasens & Hovy, 2010).
- ceaf_
e_ score - CEAF entity-based metric (Luo, 2005), using the phi4 (Dice) similarity.
- ceaf_
m_ score - CEAF mention-based metric (Luo, 2005), using the phi3 similarity function.
- compare_
ner_ models - Compare multiple NER models on the same dataset.
- compare_
systems - Compare two systems using a paired t-test on CoNLL F1.
- conll_
f1 - CoNLL F1: the official shared-task aggregate (Pradhan et al., 2012).
- entity_
type_ matches - Entity type matching for evaluation.
- entity_
type_ to_ string - Convert EntityType to string label.
- evaluate_
ner_ model - Evaluate NER model on a dataset.
- evaluate_
ner_ model_ with_ mapper - Evaluate NER model with optional type normalization.
- lea_
score - LEA link-based entity-aware metric (Moosavi & Strube, 2016).
- load_
conll2003 - Load CoNLL-2003 format dataset.
- muc_
score - MUC link-based metric (Vilain et al., 1995).