Skip to main content

CorefChainStats

Struct CorefChainStats 

Source
pub struct CorefChainStats {
    pub long_chain_count: usize,
    pub short_chain_count: usize,
    pub singleton_count: usize,
    pub long_chain_f1: f64,
    pub short_chain_f1: f64,
    pub singleton_f1: f64,
}
Expand description

Statistics for stratified coreference evaluation.

§Why Chain Length Matters: A Narrative

Imagine analyzing “Pride and Prejudice”:

┌─────────────────────────────────────────────────────────────────────────┐
│                    COREFERENCE IN A NOVEL                               │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  LONG CHAINS (>10 mentions) - THE PROTAGONISTS                          │
│  ─────────────────────────────────────────────                          │
│                                                                         │
│  "Elizabeth" ─── "she" ─── "Lizzy" ─── "her" ─── "Miss Bennet" ───...  │
│       │            │          │          │            │                 │
│       └────────────┴──────────┴──────────┴────────────┘                 │
│                         800+ mentions                                   │
│                                                                         │
│  Getting these right = understanding the PLOT.                          │
│  Who did what to whom? What's Elizabeth's arc?                          │
│                                                                         │
│  SHORT CHAINS (2-10 mentions) - SECONDARY CHARACTERS                    │
│  ───────────────────────────────────────────────────                    │
│                                                                         │
│  "Mr. Collins" ─── "he" ─── "the clergyman"                             │
│       │              │             │                                    │
│       └──────────────┴─────────────┘                                    │
│                  15 mentions                                            │
│                                                                         │
│  Important for context, but errors here are less catastrophic.          │
│                                                                         │
│  SINGLETONS (1 mention) - BACKGROUND                                    │
│  ───────────────────────────────────────                                │
│                                                                         │
│  "a tall man" ─── (no other mentions)                                   │
│  "the servant" ─── (no other mentions)                                  │
│                                                                         │
│  These are closer to entity detection than coreference.                  │
│  Including them in CoNLL F1 can change the interpretation of the score.  │
└─────────────────────────────────────────────────────────────────────────┘

§The Problem with Averaged Metrics

Model Performance:

A single averaged metric can hide systematic differences across chain sizes.
Prefer reporting stratified metrics by chain length (and be explicit about
whether singletons are included).

§Research Context (arXiv:2401.00238)

“How to Evaluate Coreference in Literary Texts?”

  • A single CoNLL F1 score is “uninformative, or even misleading.”
  • Stratify by chain length for interpretable results.

§Example

use anno_eval::eval::CorefChainStats;

let stats = CorefChainStats {
    long_chain_count: 3,      // Main characters
    short_chain_count: 15,    // Secondary
    singleton_count: 42,      // Isolated
    long_chain_f1: 0.92,      // Good on main characters
    short_chain_f1: 0.71,     // Weaker on secondary
    singleton_f1: 0.45,       // Poor on singletons
};

// Report metrics separately, not averaged
println!("Main characters: {:.1}% F1", stats.long_chain_f1 * 100.0);

Chain-length stratified statistics for coreference evaluation.

Fields§

§long_chain_count: usize

Number of long chains (>10 mentions).

§short_chain_count: usize

Number of short chains (2-10 mentions).

§singleton_count: usize

Number of singletons (1 mention).

§long_chain_f1: f64

F1 score on long chains only.

§short_chain_f1: f64

F1 score on short chains only.

§singleton_f1: f64

F1 score on singletons (if evaluated).

Implementations§

Source§

impl CorefChainStats

Source

pub fn total_chains(&self) -> usize

Total chain count.

Source

pub fn weighted_f1(&self) -> f64

Weighted F1 (by chain count).

Note: this is not CoNLL F1; it is a diagnostic aggregation over chain strata.

Trait Implementations§

Source§

impl Clone for CorefChainStats

Source§

fn clone(&self) -> CorefChainStats

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Copy for CorefChainStats

Source§

impl Debug for CorefChainStats

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Default for CorefChainStats

Source§

fn default() -> CorefChainStats

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for CorefChainStats

Source§

fn deserialize<__D>( __deserializer: __D, ) -> Result<CorefChainStats, <__D as Deserializer<'de>>::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Serialize for CorefChainStats

Source§

fn serialize<__S>( &self, __serializer: __S, ) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more