\documentclass[11pt]{article}
\usepackage{acl}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{times}
\usepackage{latexsym}
\usepackage{microtype}
\usepackage{graphicx}
\usepackage{booktabs}
\usepackage{amsmath}
\usepackage{xcolor}

\graphicspath{{figure/}{../artifacts/paper/figures/}}

\definecolor{ssTeal}{HTML}{0F766E}
\definecolor{ssTealBg}{HTML}{E6FFFA}
\definecolor{ssGold}{HTML}{A16207}
\definecolor{ssGoldBg}{HTML}{FEF3C7}
\definecolor{ssRose}{HTML}{BE185D}
\definecolor{ssRoseBg}{HTML}{FCE7F3}

\title{SoloSemantics at SemEval-2026 Task 4: Triplet-Tuned MPNet for Story Similarity}

\author{
Steven Au \\
Independent Researcher \\
\texttt{[steventinwing@gmail.com]}
}

\begin{document}
\maketitle

\begin{abstract}
This paper describes Team SoloSemantics' submissions to SemEval-2026 Task 4: Narrative Story Similarity and Narrative Representation Learning. We began with lightweight neuro-symbolic knowledge-graph baselines, but a triplet-tuned MPNet bi-encoder produced stronger semantic separation in our experiments. We adopted a shared dense encoder family across both tracks and kept the KG and fusion variants as diagnostic baselines. Team SoloSemantics ranked 22nd on Track A and 9th on Track B. Our reproducibility audit further shows that the KG branch was often too sparse on short summaries to represent abstract narrative relations reliably under the current extraction pipeline.
\end{abstract}

\section{Introduction}
SemEval-2026 Task 4 introduces two related challenges: pairwise semantic choice in Track A and narrative embedding generation in Track B \citep{hatzel2026semeval}. Our starting hypothesis was that narrative similarity could be modeled through neuro-symbolic signals derived from entities, relations, and graph motifs. In practice, the resulting knowledge-graph baselines were interpretable but less effective than contrastive text embeddings \citep{reimers-gurevych-2019-sentence} for this task. We therefore shifted to a shared triplet-tuned bi-encoder, a setup that has worked well in zero-shot dense retrieval \citep{thakur2021beir}, and used it across both tracks.

\section{Background}
Narrative similarity remains a fundamental challenge in computational narratology \citep{piper2021computational}. Previous work explored story similarity by aligning plot events and character relationships across different text boundaries \citep{chaturvedi2018where}, whereas symbolic representations have attempted to model these structures through extracted narrative schemas \citep{chambers-jurafsky-2009-unsupervised} and interconnected plot units \citep{lehnert1981plot}.

Recent work has emphasized the need to move beyond rigid symbolic frameworks and surface lexical overlap in order to capture deeper, more continuous structural elements through representation learning \citep{sterner2026contrastive}. Earlier narrative datasets, such as those of \citet{fisseni2012dimensions} and \citet{chen2022semeval}, largely relied on scalar similarity ratings. Those scales are hard to apply consistently and offer limited discrimination for closely related stories. Building on that line of work, the task organizers \citep{hatzel2026semeval} adopted a contrastive setup and defined narrative similarity through three components: the abstract theme, the course of action, and the outcomes of a story \citep{hatzel2024story}.

Hatzel et al.\ built the task from Wikipedia synopses drawn from the English Tell Me Again dataset \citep{hatzel2024tell}. To keep the benchmark computationally manageable while covering many stories, the organizers restricted the data to short summaries of four to eight sentences. The annotation scheme is a variant of Best Worst Scaling. To make the task less dependent on surface text overlap, the dataset was also filtered with rejection sampling to retain only more difficult candidate triples on which commercial language models disagreed. That design choice underscores the subjective nature of narrative similarity and is reflected in the modest inter-annotator agreement reported by the organizers.

Track A evaluates pairwise semantic choice. The input is a triple containing an anchor story and two candidate stories, requiring the system to predict which candidate exhibits greater narrative similarity to the anchor. Figure~\ref{fig:task_setup} illustrates this comparative setup. Track B focuses on representation learning, requiring a single vector representation per story. These representations are evaluated based on how well their cosine distance aligns with the underlying partial similarity orderings annotated for the individual summaries.

\begin{figure*}[t]
\centering
\includegraphics[width=\textwidth]{sample.png}
\caption{The Track A classification setup asking to choose the narratively more similar text. Story A is considered more similar. A, B, and the anchor all tell the story of a lost item that is retrieved. In the case of A, it is found by a third party (as it is in the anchor), while in B it is not found at all.}
\label{fig:task_setup}
\end{figure*}

Table~\ref{tab:dataset_splits} gives the split counts used in our experiments. For Track B synthetic data, the in-repo file contains 1900 contrastive triplets, corresponding to 5700 story slots.

\begin{table}[t]
\centering
\small
\begin{tabular}{lcc}
\toprule
Dataset Split & Track A Data & Track B Data \\
\midrule
Sample & 39 pairs & 108 stories \\
Development & 200 pairs & 478 stories \\
Test & 400 pairs & 849 stories \\
Synthetic & 1900 pairs & 1900 triplets \\
\bottomrule
\end{tabular}
\caption{Dataset counts used in the local experiments. The Track B synthetic file contains 1900 contrastive triplets (5700 story slots).}
\label{tab:dataset_splits}
\end{table}

\section{System Overview}
\subsection{Shared Encoder}
Our main encoder starts from the sentence-transformers checkpoint \texttt{all-mpnet-base-v2}, combining Sentence-BERT pooling \citep{reimers-gurevych-2019-sentence} with MPNet pretraining \citep{song-etal-2020-mpnet}. We then fine-tune it with triplet loss. We chose MPNet as the main checkpoint because the committed clean sweeps with other large encoders were weaker under the same synthetic-only protocol, with best dev accuracy of 0.655 for MPNet versus 0.630 for E5-large-v2 and 0.620 for BGE-large-en-v1.5. We train directly on the provided synthetic anchor, positive, and negative triples and do not add a separate hard-negative mining stage, since the organizer data already defines explicit positive and negative contrasts for each anchor.

\subsection{Track A}
Track A is a relative narrative ranking task. We evaluate a lightweight knowledge-graph baseline built from a custom extraction pipeline. The pipeline extracts named entities and dependency-based subject--verb--object triples with spaCy, falls back to rule-based regular expressions when needed, and represents the resulting structures with NetworkX. We compare this structural baseline against bi-encoder cosine ranking.

For the KG baseline, $\mathrm{sim}_{KG}$ is computed as a weighted sum of three pairwise graph comparisons: cosine similarity between hashed graph vectors built from Weisfeiler-Lehman subtree labels, relation labels, node-type histograms, and appended graph statistics (weight 0.6), plus Jaccard overlap over node labels (0.2) and relation labels (0.2).

To test whether structural and embedding signals are complementary, we also implement a fusion model. It computes the knowledge-graph similarity delta $\Delta_{KG} = \mathrm{sim}_{KG}(\text{anchor}, A) - \mathrm{sim}_{KG}(\text{anchor}, B)$, concatenates that value with dense embedding similarities and margin scores, and trains a logistic regression classifier over the scaled feature vectors. We also include cross-encoder and pretrained pairwise baselines as stronger text-only references.

\subsection{Track B}
Track B requires one embedding per story, so the goal is to preserve narrative neighborhood structure in a single vector. We test a knowledge-graph vector baseline, whole-text embeddings from the bi-encoder, and chunked newline pooling from the same encoder. In the chunked variant, the model encodes text segments separated by existing newline characters and then mean-pools the resulting vectors, with the aim of retaining local plot motifs. In the current Track B development file in the repo, this segmentation is shallow rather than paragraph-like: stories split into a median of one chunk, with mean 1.59 chunks and a maximum of six. We therefore treat newline pooling as a lightweight formatting heuristic rather than as evidence that newline units are inherently better than sentence-level segmentation.

Figure~\ref{fig:system_overview} summarizes the high-level modeling pipeline, including the lightweight KG baseline, the submitted dense branch for Track A, and the whole-text versus chunked Track B embedding variants.

\begin{figure*}[t]
\centering
\includegraphics[width=\textwidth]{schematic_pipeline.png}
\caption{System overview. For Track A, we compare a lightweight KG baseline against a triplet-tuned dense bi-encoder, with fusion used only as a diagnostic. For Track B, we compare a KG vector baseline against dense MPNet-based story embeddings, including the chunked best-sample submission variant used for the final run.}
\label{fig:system_overview}
\end{figure*}

\section{Experimental Setup}
All neural models were trained and evaluated on a single NVIDIA GeForce RTX 3080 GPU. The main triplet sweep explored learning rates of 1e-5 and 2e-5, margins of 0.1 and 0.2, training durations of 1, 2, 3, and 5 epochs, and maximum sequence lengths of 192 and 256. The strongest clean-dev-selected run used learning rate 2e-5, margin 0.2, 2 epochs, and maximum sequence length 192, while the final sample-selected submission used the same learning rate with margin 0.1.

Because the repo contains both synthetic-only and public-label-adapted artifacts, we report three validation regimes. \emph{Clean} excludes dev and sample labels from training, calibration, and model selection. \emph{Clean-dev-selected} keeps synthetic-only training but uses dev labels for checkpoint or hyperparameter selection. \emph{Public-label-adapted} covers runs that reuse dev or sample labels in training or final model selection.

All local comparison tables therefore report visible-data evidence only, while official hidden-test performance is listed separately in Table~\ref{tab:official_results}.

\input{../artifacts/paper/official_results_table.tex}

\section{Results}
\subsection{Track A}
\input{../artifacts/paper/track_a_results_table.tex}

Table~\ref{tab:track_a_local_results} summarizes the visible-data Track A comparisons. The KG baselines lagged well behind the triplet MPNet family. These results should not be read as evidence against symbolic narrative modeling in general. Instead, they suggest that our lightweight entity-relation extraction pipeline was too sparse and brittle to capture abstract narrative similarity reliably in short summaries. The highest local dev score came from KG + embedding fusion, but the cleanest reproducible evidence comes from the synthetic-trained triplet family. Because the exact encoder dependency for the committed KG + embedding fusion runs is incomplete, and because the fusion gains depend on public-label-adapted calibration, we treat the fusion aggregate scores as diagnostic rather than primary evidence and use the shared triplet encoder as the main submitted Track A system.

\subsection{Track B}
Track B has no public local hidden-test labels in the repo, so we report two diagnostics only: proxy accuracy on Track A dev triples and synthetic alignment on contrastive triples. Proxy accuracy is computed by embedding the Track A dev anchor, candidate A, and candidate B independently, then checking whether $\cos(\text{anchor}, A) \geq \cos(\text{anchor}, B)$ matches the annotated \texttt{text\_a\_is\_closer} label.

Because synthetic alignment is computed against the same contrastive structure used during training, it should be interpreted only as a sanity check rather than as an estimate of hidden-test performance.

\input{../artifacts/paper/track_b_diagnostics_table.tex}

Table~\ref{tab:track_b_diagnostics} summarizes the local Track B diagnostics. The visible-data diagnostics favor the sweep best-sample (whole-text) model, whereas the final sweep best-sample (chunked submission) run preserves perfect synthetic alignment but drops to 0.600 proxy accuracy. These diagnostics helped guide iteration, but they are not a substitute for hidden-test evaluation. The official Track B submission used the same sweep best-sample (chunked submission) configuration listed in the table, but the local evidence shows only small and inconsistent differences between whole-text and chunked pooling. We therefore describe chunked pooling as a task-specific submission choice rather than a uniformly stronger local encoder.

\subsection{Analysis of Performance}
\input{../artifacts/paper/kg_coverage_table.tex}

Table~\ref{tab:kg_coverage} summarizes KG coverage across the available repo splits. The KG pipeline remained sparse on many short summaries. On Track A dev, unique stories averaged 1.21 non-mention relation edges, with 31.9\% of stories yielding zero extracted SVO-style edges and 67.4\% yielding at most one relation edge. At the triple level, examples correctly ranked by the KG similarity baseline averaged 1.32 relation edges across their three stories, compared with 1.18 for KG similarity baseline failures. The difference is small, but it is consistent with the broader pattern that structural extraction often lacked enough explicit event content to compete with dense semantic matching. A visual summary of the same coverage pattern appears in Appendix Figure~\ref{fig:kg_sparsity}.

The results suggest that triplet fine-tuning improved separation between narratively similar and dissimilar summaries beyond pretrained sentence embeddings. However, because the task examples are short Wikipedia-style summaries, the system may still rely partly on high-level semantic overlap rather than deeper event-structure reasoning.

Preliminary inspection of dev examples suggests that the system struggles most when two candidates share a broad theme with the anchor but differ in causal structure, agency, or final outcome. Dense bi-encoders compress each story into a single vector, which can blur whether a conflict is resolved, whether the same character type drives the action, or whether the ending reverses the anchor's narrative trajectory. The KG baseline occasionally helps when explicit participants or event schemas align cleanly, but such cases are relatively rare under the current extraction pipeline. A reproducible fusion baseline sometimes rescues dense errors, yet coefficient analysis still points to the dense similarity margin as the strongest individual feature, which is consistent with the adapted-only nature of the larger fusion gains. Appendix Figure~\ref{fig:qualitative_example} shows one development triple in which the dense encoder correctly recovers the broader romance-and-class trajectory, while the lightweight KG baseline is drawn toward a candidate whose extracted local actions look superficially similar.

\section{Conclusion}
This paper presented a unified triplet-tuned MPNet bi-encoder for SemEval-2026 Task 4. Across both tracks, dense contrastive representations outperformed our lightweight entity-relation graph baselines and provided a simple, consistent architecture for pairwise ranking and story embedding generation. The system ranked 22nd on Track A and 9th on Track B on the organizer leaderboard. These results suggest that synthetic contrastive triples can serve as useful supervision for narrative similarity, while our diagnostics also point to the need for stronger symbolic representations, stricter leakage controls, and hierarchical encoders for longer narratives.

\section{Limitations}
Our methodology has several limitations. First, the lightweight entity-relation pipeline is sparse on short summaries, which weakens the KG branch precisely on the implicit thematic cases that dominate this shared task. This should not be read as evidence against symbolic narrative modeling in general; it reflects the limits of the lightweight extraction pipeline used here. Second, the main neural training signal comes from synthetic triples, so the encoder may inherit synthetic-data biases even when hidden-test transfer is acceptable. Third, some historical checkpoints referenced by the repo, notably \texttt{models/st\_mpnet\_triplet\_a} and the clean sweep directories, were not preserved, so part of the historical record can be verified only through stored result artifacts rather than exact reruns. Finally, the encoder settings are tuned for short Wikipedia-style synopses and would likely need hierarchical extensions for substantially longer narratives.

\bibliography{acl_natbib}

\appendix
\section{Reproducibility}
All generated evidence files for the paper are recreated by running \texttt{python scripts/build\_paper\_artifacts.py}. The command writes audited tables, verification files, and revision notes to \texttt{artifacts/paper/}.

\input{../artifacts/paper/hyperparameter_table.tex}

\section{Qualitative Example}
\begin{figure}[t]
\centering
{\setlength{\fboxsep}{8pt}%
\begin{minipage}{0.95\columnwidth}
\fcolorbox{ssTeal}{ssTealBg}{%
\begin{minipage}{0.90\linewidth}
\textbf{\textcolor{ssTeal}{Anchor}}\\
\small Lucile leaves a secure but loveless arrangement, falls for a poorer man, becomes pregnant, and eventually returns to the older benefactor who waited for her.
\end{minipage}}
\end{minipage}

\vspace{0.5em}

\begin{minipage}{0.95\columnwidth}
\fcolorbox{ssGold}{ssGoldBg}{%
\begin{minipage}{0.90\linewidth}
\textbf{\textcolor{ssGold}{Candidate A (gold)}}\\
\small A wealthy heiress falls for a lower-status man, flees family control, and the couple survive class decline before finally stabilizing together.
\end{minipage}}
\end{minipage}

\vspace{0.5em}

\begin{minipage}{0.95\columnwidth}
\fcolorbox{ssRose}{ssRoseBg}{%
\begin{minipage}{0.90\linewidth}
\textbf{\textcolor{ssRose}{Candidate B}}\\
\small A reporter marries after a pregnancy but repeatedly leaves for work and war, creating local event overlap without the same romance-and-class trajectory.
\end{minipage}}
\end{minipage}

\vspace{0.6em}

\begin{minipage}{0.95\columnwidth}
\fcolorbox{ssTeal}{white}{%
\begin{minipage}{0.90\linewidth}
\textbf{\textcolor{ssTeal}{Model Outputs}}\\
\small Gold label: \textbf{Candidate A}. KG similarity baseline chooses \textbf{Candidate B} with $\text{sim}_{KG}(A)=0.6045$ and $\text{sim}_{KG}(B)=0.6412$. Triplet bi-encoder cosine chooses \textbf{Candidate A} with $\cos(\text{anchor}, A)=0.6821$ and $\cos(\text{anchor}, B)=0.3798$. KG + embedding fusion also chooses \textbf{Candidate A} with $P(A)=0.8722$.
\end{minipage}}
\end{minipage}

\vspace{0.6em}

\begin{minipage}{0.95\columnwidth}
\fcolorbox{ssTeal}{ssTealBg}{%
\begin{minipage}{0.90\linewidth}
\textbf{\textcolor{ssTeal}{Interpretation}}\\
\small The dense encoder tracks the broader romance-and-class arc shared by the anchor and Candidate A, whereas the lightweight KG baseline is drawn toward Candidate B by locally extracted actions such as meeting, pregnancy, and leaving.
\end{minipage}}
\end{minipage}}
\caption{Stylized development example from the reproducible error-analysis bundle (\texttt{fusion\_public\_096}). The dense models recover the broader romance-and-class trajectory, while the lightweight KG baseline overweights locally extracted action overlap.}
\label{fig:qualitative_example}
\end{figure}

\section{KG Coverage Figure}
\begin{figure}[h]
\centering
\includegraphics[width=\columnwidth]{kg_sparsity_overview.png}
\caption{Lightweight KG coverage across the available repo splits. Even before pairwise comparison, many stories produce zero or at most one non-mention relation edge, limiting the structural signal available to the KG baseline.}
\label{fig:kg_sparsity}
\end{figure}

\end{document}
