diff --git a/core/dr-face/src/assign.rs b/core/dr-face/src/assign.rs index 66a7236..e5e433e 100644 --- a/core/dr-face/src/assign.rs +++ b/core/dr-face/src/assign.rs @@ -58,9 +58,10 @@ //! and the better covered the person, the more fragments there are to lose to. //! //! A fragment is not a rival. An identity the user has actually asserted is, so -//! the denominator counts only people a confirmation names ([`Cluster::person`]) -//! — and counts them **per person, not per group**, since a named person is -//! left in several anchored groups for the same reason. Keying it by group had +//! the denominator counts only the people they have ruled on — a group carries +//! a [`Cluster::person`] when it holds a confirmation, a name, or an ignore — +//! and counts them **per person, not per group**, since one person is left in +//! several anchored groups for the same reason. Keying it by group had //! Catherine competing with Catherine and put the median suggestion onto a //! named person at 39%; keying it by person put it at 99.5%. //! @@ -209,10 +210,11 @@ pub fn identity_shares(faces: usize, clusters: &[Cluster], pairs: &[Pair], top: ours = score; coherence = score / counted as f32; } else if matches!(who, Identity::Person(_)) { - // Only an identity the user has asserted competes. An unnamed - // group that matches this face is far more likely to be another - // fragment of the same person than a different one — see the - // module note, and the library it was measured on. + // Only an identity the user has ruled on competes. A group + // nobody has ruled on and that matches this face is far more + // likely to be another fragment of the same person than a + // different one — see the module note, and the library it was + // measured on. rivals += score; } } diff --git a/docs/faces.md b/docs/faces.md index 40ed45e..6abfcfd 100644 --- a/docs/faces.md +++ b/docs/faces.md @@ -758,9 +758,10 @@ equally well land at 0.5 each, which is the truth about a sibling. **Only named people compete, and they compete per person.** This is the part that had to be measured rather than reasoned about. Normalising across *every* group made the number useless on a real 18,000-face library — median suggestion 21%, four in five under half — because clustering leaves one -person spread across many groups, so a face competes against itself. Counting only groups holding a -confirmation fixed most of it; counting them **per person** rather than per group fixed the rest, -since a named person is left in several anchored groups for the same reason. +person spread across many groups, so a face competes against itself. Counting only the groups the user has +ruled on — one holding a confirmation, a name, or an ignore — fixed most of it; counting them **per +person** rather than per group fixed the rest, since one person is left in several anchored groups +for the same reason. **Rivals are gathered below the merge threshold**, down to even odds: a named person who matches at 0.6 will never be merged into but is exactly the competition a suggestion should be discounted for.