AI Fiction in the Wild

An interactive visualizer of ~195,000 fiction-related ChatGPT conversations.

This website hosts real-world AI-generated fiction. The data is drawn from WildChat, which includes millions of real-world ChatGPT conversations that were collected voluntarily — and with explicit user consent — through an interface hosted on the website HuggingFace.

To classify the 573,000 English-language conversations, we incorporated the use of an LLM as a classifier. We showed the model — specifically, GPT-4o-mini — a human-ChatGPT conversation and asked whether the user’s prompt contains a request for fiction. We provide a detailed explanation, specifying that fiction can be any “content that is imaginative, speculative, or not grounded in real-world facts,” including “original stories, speculative scenarios, or alternate histories.”

We find high agreement between our own judgments and the model’s.

What you can explore here

This site is an interactive visualizer over the subset of WildChat conversations we identify as fiction-related — about 195,000 conversations from roughly 10,000 estimated users. You can search the conversations, browse by user, follow how individual users iterated on the same story over weeks, and zoom into a map of the dataset to see what kinds of stories cluster together.

Search

Keyword-search the fiction conversations. Results are grouped by estimated user and ranked by how many fiction conversations they had.

Maps

Two zoomable maps of the dataset. The Fiction map plots ~195,000 conversations so that similar opening prompts sit close together. The Users map plots active users by what they tend to write about.

Methodology: estimating users & story permutations

Estimating users from hashed IPs

Because the WildChat data is anonymized, it is difficult to know exactly how many unique users are represented in the dataset. While the original research team recorded hashed IP addresses for every conversation, if someone used WildChat at home, a coffee shop, and the library, that would show up as multiple IP addresses, overcounting users in that case. To address this issue, we bundle together IP addresses that posted at least one near-duplicate fiction prompt (longer than 30 characters) from the same geographic region. Two IPs from the same state that ever submitted prompts in the same DBSCAN cluster — meaning embedding-similar opening turns — are treated as the same estimated user. This process reduced 12,873 unique IP addresses to 10,042 estimated unique users — with 610 multi-IP groups absorbing the rest, and the remaining 9,432 IPs counted as single-IP users.

Technical details

We run a global DBSCAN over every fiction conversation's opening prompt (all-MiniLM-L6-v2 embeddings, cosine distance, ε=0.1, min_samples=2). Two IP addresses from the same geographic state are then merged into the same estimated user if at least one of their prompts (longer than 30 characters) falls in the same DBSCAN cluster — meaning the prompts are near-duplicates. Groups are merged transitively (connected components in the IP graph). On the Users map, each estimated user's position is the mean of its IPs' profile embeddings, reduced to 50 dims with PCA then to 2D with UMAP. Topic labels come from a spatial grid over the 2D layout, with each cell named by GPT-4o.

Story permutations: clustering an estimated user's prompts

For any user with many fiction conversations, we group their opening prompts into story permutations — clusters of prompts that ask for the same scenario with small variations (different characters, settings, or details). This lets you see at a glance whether a user is iterating on one story dozens of times or roaming across many genres.

Each prompt is again encoded with the all-MiniLM-L6-v2 sentence transformer, and we cluster the resulting vectors with DBSCAN — a density-based algorithm that groups vectors that sit close together in embedding space and leaves outliers unassigned. We chose DBSCAN over a hierarchical method because it doesn’t force every prompt into a cluster: one-off prompts stay isolated, which produces cleaner, more interpretable groups for repetitive users. Each cluster’s representative label is the longest common prefix shared by its prompts.

Technical details

DBSCAN parameters: eps = 0.1 in cosine distance space (so two prompts must be within ~0.9 cosine similarity to chain together), min_samples = 2. Embeddings are L2-normalized before clustering. We run DBSCAN once globally over every fiction conversation's opening prompt, then aggregate per estimated user. Prompts that don't have a near-duplicate neighbor are labeled noise by DBSCAN and don't appear as their own permutation in the UI. The story-permutations panel only appears for users with at least one cluster.

Word-level diffs within a story permutation

When you click into a story permutation, each prompt is displayed as a word-level diff against the previous one in chronological order. Green highlights the words the user added compared to the previous prompt; red strike-through marks the words they removed. This makes it easy to see how a user revised their request — tightening a character description, adding a new plot beat, dropping a constraint — without having to read the full text of each variation.

Technical details

Diffs are computed in Python with difflib.SequenceMatcher on whitespace-tokenized words. Equal runs are rendered as plain text; insertions are wrapped in <span class="diff-ins">; deletions in <span class="diff-del">; replace opcodes render both the old text (struck through) and the new text (highlighted), making substitutions easy to read. The first prompt in a cluster has no preceding prompt to compare against and is shown as-is.

Who made this

Melanie Walsh, Neel Gupta, Advait Deshmukh, Maria Antoniak

Paper & data

A longer paper accompanying this visualizer — with the full theoretical argument, methodology, and analysis — is in preparation. We’ll link the pre-print here as soon as it’s up.

Pre-print coming soon

To support further research, we release the subset of fiction-related WildChat conversations that we identify on Hugging Face:
huggingface.co/datasets/neelgupta2112/Wildchat-1M-English-Fiction-Labels

Talk

Presented at the UC Berkeley School of Information Cultural Analytics Series, co-sponsored by the Berkeley Institute for Data Science. October 24, 2025.

What this site is built with

Flask (Python web framework), Elasticsearch (full-text search), deck.gl (WebGL maps), Svelte (front-page scrolly story), Sentence Transformers (embeddings), HDBSCAN (topic clustering), UMAP (dimensionality reduction), GPT-4o (topic-label generation), and Docker. The source code is open: github.com/melaniewalsh/ai-fiction-wild-viz.

How to cite this site

Walsh, Melanie, Neel Gupta, and Maria Antoniak. "AI Fiction in the Wild." Web visualization, 2026. https://ai-fiction-wild.org/

A formal BibTeX entry will be added once the pre-print is out.

Related projects & data

WildChat

The underlying corpus — 1M ChatGPT conversations collected with user consent by the Allen Institute for AI.

wildchat.allen.ai
WildChat paper

Zhao et al. "WildChat: 1M ChatGPT Interaction Logs in the Wild" (ICLR 2024).

arxiv.org
WildVisualizer

A more general search tool over the full WildChat dataset (not fiction-filtered).

wildvisualizer.com