02805 · go nuts · week 5 · the Marvel network gets language

Friends, foes & family

For four weeks a Marvel link meant one thing: page A mentions page B. This week the pages got their text back, so we read the sentence behind every one of the 1,784 links and asked what kind of relationship it records. Then we asked the question the network half could not: do Marvel's enemies live in other communities?

links read
1,613
sentences behind them
5,745
lexicon words
—
checked by reading
60

scroll — the map on the left follows the story

01 · representation first

What is a node, what is an edge, what is a relationship?

Nodes are the 303 character pages of the frozen 26 Aug 2026 snapshot. Edges are the 1,784 directed text links, A → B when the running text of A's article links to B. New this week, each edge gets a type, read from A's text only. B's page is allowed to disagree, and we measure how often it does (section 05).

Communities come from week-4 Louvain on the undirected, unweighted Marvel graph (1,434 pairs). We ran 20 seeds and kept the best: seed 5, Q = 0.395, 9 communities. Their halos on the map are the “borders” we test against.

    02 · a concordance with one line per edge

    Can we find B on A's page?

    A rendered page keeps the anchor text but not the link, so we look for B by name: its title, its English Wikidata aliases (frozen in data/week5_aliases.json), and the real name in its blurb, e.g. Wolverine → Logan, James Howlett. An alias is only used on A's page if no other character A links to and not A itself owns it. Otherwise “Ghost Rider” on Danny Ketch's page would mostly find Danny Ketch.

    • 1,613 links pinned to ≥1 sentence (90.4%)
    • 138 named nowhere in the prose, probably linked from a list, caption or piped alias we don't know
    • 33 with no usable name at all (every alias is shared with another linked page)

    Sentences come from spaCy en_core_web_sm. Paragraph breaks are hard sentence breaks, so a section heading never glues onto the next sentence. One thing to try: search the map for and read her link to Eddie Brock on the tape.

    03 · your lexicon, your network

    Four word lists turn links into relationships

    Each sentence gives one vote to every type whose words appear in it. Other characters' names are masked first. The link takes the type with most votes. A tie is mixed, and no votes means none (a mention with no relationship word). Everything below is recomputed in your browser from the shipped sentences, so edit away.

    match on
    lemma: “fought” → fight · surface: only the exact word
    window around B
    how close a relationship word must sit to B's name

    04 · the question

    Do foes cross community borders more than friends do?

    For each type we count how many of its links join two characters in the same Louvain community. Across all read links the share is 56.3%. As a null, we shuffle the type labels over the same 1,613 links: same network, same communities, same number of foes, but no relation between type and community. The grey band is the middle 95% of 1,000 shuffles.

    05 · the result is a preprocessing choice

    Tighten the window and the foes come home

    We reran the whole pipeline for 8 settings: lemma or surface form, and a window of the whole sentence, ±10, ±5 or ±3 tokens around B's name. The family signal holds under every setting and gets stronger when the window tightens. Ally gets stronger too. The foe signal is the fragile one. It is borderline with whole sentences and gone at ±5.

    z-score of each type's within-community share against the label-shuffle null (400 shuffles per setting, precomputed in analyse_week5.py). Solid lines use lemmas, dashed lines use surface forms. The shaded strip is |z| < 2.

    Why? With a whole sentence, “kill” and “battle” are often about someone else. In “the Collective, who kills Guardian, Vindicator, Shaman, and Puck”, Guardian → Puck becomes a feud between two teammates who die together. Crossover events kill across teams, so this noise looks like border-crossing. A tight window keeps the word next to the name, and the effect goes with the noise.

    Leave one word out: how much the foe-minus-ally gap in within-community share moves when a single lexicon word is deleted. kill and fight each move it by about three percentage points, in opposite directions. The whole effect is only about seven.

    06 · two pages, one relationship?

    When A and B link each other, do they agree what they are?

    350 pairs link both ways. In 110 of them both directions got a single type. They agree in 72 (65%), Cohen's κ = 0.47. The biggest off-diagonal cell is foe ↔ ally: one page calls it a fight, the other a team-up.

    Unordered reciprocal pairs, published settings. The diagonal is agreement.

    Some of those frenemies, click one to read both sides:

      07 · who gets fought

      Most-fought is mostly most-linked

      Spider-Man receives the most foe links, but he also receives the most links of any kind (in-degree 106). Dividing by in-degree changes the order, a week-3 lesson in new clothes. Sort the table both ways.

        Link weight (week 4: how many times A links B) tells a quieter story. Links with no relationship word are the ones linked only once. Family and romance links are the most repeated.

        08 · the text wins

        Be the ground truth

        A lexicon label is a measurement, and it needs a check. We froze a sample of 60 links (12 per lexicon label, drawn from the 1,354 links with at most 5 evidence sentences so that you can read all of it). Label them yourself below. The lexicon's answer is hidden until you commit.

        A first reading, done by the AI agent (not a human)

        The agent that built this page read all 60 samples and labelled what A's text says about A and B. That is another model's reading, not ground truth. It's here so the error analysis isn't empty, and each of us re-labels it in the widget above (labels in data/week5_human_check.tsv, column human_label).

        Wrong: the word belongs to someone else

        Isaiah Bradley → Luke Cage is labelled romance because of “the wedding of Storm and Black Panther”. Mayday Parker → Scarlet Spider is labelled family because she “adopted the costume”. Northstar → Hulk is labelled family because of “the twins” (Northstar and Aurora).

        Subtly wrong: the word is right, the relation isn't

        Whizzer → Scarlet Witch is family, but the Whizzer erroneously believes he is the father. Venom → Mayday Parker is family, but only figuratively (“considering the symbiote family”). Negation and belief are invisible to a word list.

        Missed: the lexicon never had the word

        Northstar → Hercules: “a sexual relationship” gets none. Turbo → Nova: “attacked by the Air Force while training with Nova” is a foe label for a training partnership.

        09 · what we found, honestly

        Family stays home. Foes might travel.

        • Counted: 1,613 of 1,784 Marvel links, each typed from the sentences on A's page that name B, with a —-word lexicon and one vote per sentence.
        • Compared against: the same links with shuffled type labels (communities fixed), eight preprocessing settings, 20 Louvain seeds, and a 60-link reading check.
        • Holds up: family links stay inside their community more than chance under every setting (z from +2.3 to +4.2). Ally links do too once the window is ±5 tokens or tighter.
        • Does not hold up: “foes cross borders.” It is z ≈ −1.9 with whole sentences, gone at ±5 tokens, moved by single words, and the foe label is right only about half the time when read.

        What surprised us

        We expected foes to be the loud signal and family the footnote. It came out the other way around. Also, two pages that link each other only agree on what their relationship is about two-thirds of the time. A link is symmetric in the undirected graph but not in the prose.

        What we checked in the raw text

        • Anne Weying's page literally contains “She is the ex-wife of Eddie Brock.” Her link is romance, and the tape shows the same sentence.
        • Guardian → Puck is labelled foe from “the Collective, who kills Guardian, Vindicator, Shaman, and Puck”. We confirmed the sentence is on Guardian's page, so the error is real and not a parsing bug.
        • The browser relabels all links with the same rule as Python and must reproduce the published label counts exactly. The badge in section 03 says whether it did.

        Limitations

        A word list sees words, not who does what to whom. We do not handle negation, belief or time (“former ally”), and a dependency parse would fix much of the third-party problem. Aliases from today's Wikidata are applied to an August snapshot. The 60-link check was read by an AI agent and has not been re-read by a person yet. The widget above is where that happens.