V3 · Dynamic Reader Data × Simulator · data + simulator + personalization
Novel Feedback v3:真实数据快照、动态读者 simulator、trajectory/token-level 个性化
这版开始落到实验基建:源数据只放 raw/ 且不修改;另复制/读取生成 processed/ 和 derived/。目标不是静态“用户喜欢什么”,而是模拟真实动态读者:文本会改变和创造期待,反馈更新 reader state,reader state 再驱动 agent memory / critic / planner / retriever / generator 的 transition,并影响后续内容生成。
Answer first
v3 的关键变化:从“规则 synthetic bench”变成“真实数据校准 + 动态 reader state transition”。
我已经在 workspace 内构建了 v3 数据快照:5 个公开 raw 文件、4 个 complete-novel processed copy、12 条动态 reader feedback trajectories、60 条 state-update examples。受 DTA/版权/平台许可限制的 Qidian-Webnovel comments、RoyalRoad、AO3 正文等没有硬抓;只记录获取路径与限制。AHEAD intentionally disabled,本页仍聚焦 user-feedback 下的 state update / transition 如何影响后续生成。
5 public snapshots
Oedon42/webnovelbench + NovelUpdates tags/genres。raw 文件保留 checksum,不在脚本里修改。
4 complete novels
每个 processed novel 保留多个 chapters 和 paragraphs,带 source_ref 与 license_class。
12 trajectories
每条 trajectory 含 explicit feedback 与 implicit actions:dwell、fast_swipe、reread、continue、scroll_depth。
60 state updates
每行含 gold_preference_update、gold_agent_state_update、future probes 与 component targets。
Real data build
真实小说数据下载与改造状态
可公开下载的小样本已经下载;受限源不违规抓取。真正论文版应补 Qidian-Webnovel Corpus DTA 或作者授权 RoyalRoad/ScribbleHub pilot。
| Source | Status | Downloaded / Not | 可改造成什么 |
|---|---|---|---|
| Oedon42/webnovelbench | downloaded raw | novel_data_subset_d_100.json, subset_d.json, 平凡的世界.json | 完整小说/章节/段落结构;作为内容侧 novel source,配 simulator / pseudo-feedback 生成 chapter feedback trajectory。 |
| Feydar NovelUpdates tags/genres | downloaded raw | novelupdates_tags.jsonl, novelupdates_genre.jsonl | trope/genre ontology、用户 prototype、cold-start preference priors。 |
| Goodreads Book Graph / rating samples | recorded, not included in fast raw | 第一次下载 qmaruf CSV 太慢,已清理 incomplete cache | 后续用流式/分块下载来估计 rating bias、review-aspect、shelf trajectory。 |
| Qidian-Webnovel Corpus 110 | restricted | not downloaded | 最佳真实 reader-response:段落/章节评论、用户 profile、双语 webnovel;需要 DTA,不能硬抓或公开重分发。 |
| RoyalRoad / ScribbleHub | permission needed | not downloaded | 最接近英文 serial fiction 的 view/follow/favorite/chapter comments;建议 author-consented pilot。 |
| AO3 metadata | metadata-only candidate | not downloaded | tags/kudos/bookmarks/hits/comments count 可做 engagement priors;正文与用户内容敏感。 |
| Project Gutenberg / Standard Ebooks | future public-domain content | not downloaded in this run | 可公开 rewrite/counterfactual 内容,但缺 native feedback,需要和 simulator/pilot 结合。 |
Raw policy
{
"raw_policy": "raw files are immutable source snapshots; processed/derived files are copies or transformations only",
"data_workspace": "/root/code/vepfs/hermes/novel-demo/personalized-user-feedback-agent-evolution/v3-data",
"download_count": 5,
"complete_novel_paths": 4,
"trajectory_count": 12,
"state_update_example_count": 60
}Public sample files
data/public_manifest.json data/sample_complete_novels.json data/sample_feedback_trajectories.jsonl data/sample_state_update_examples.jsonl data_build_report.md
JSONL Schema
v3 统一数据格式:complete novel + chapter feedback trajectory
每个 event 同时记录文本特征、显式反馈、隐式动作、动态 reader state、gold agent state update 和 future probes。
Current JSONL sample
{
"trajectory_id": "traj_xxx",
"user_id": "u_fast_agency",
"source": "Oedon42/webnovelbench::novel_data/novel_data_subset_d_100.json",
"license_class": "hf_public_or_metadata_review_required",
"hidden_initial_reader_profile": {"fast_pacing": 0.9, "agency": 0.85, "lore": -0.3, "consistency": 0.7},
"dynamic_reader_model_note": "Preferences are not static: trust, fatigue, created expectations and attention targets transition after each chapter based on text and feedback.",
"events": [{
"turn": 1,
"chapter_id": "..._ch01",
"paragraph_refs": ["ch01_p001", "ch01_p002"],
"content_features": {"pacing_speed": 0.31, "female_agency": 0.42, "lore_density": 0.77, "continuity_risk": 0.18},
"observed_feedback": {
"explicit": {"rating": 3, "like": false, "favorite": false, "tags": ["pacing_slow", "agency_low"], "comment": "铺垫有点久,希望主角自己做关键选择"},
"implicit": {"dwell_time_sec": 418.2, "fast_swipe": false, "reread": true, "continue_next": true, "scroll_depth": 0.96}
},
"hidden_reader_state_after": {"trust": 0.62, "fatigue": 0.24, "expectations": ["next chapter should pay off current setup"]},
"gold_agent_state_update": [{"target": "critic.checklist", "operation": "add_or_increase_weight", "scope": "current_arc_action_or_payoff_scenes", "anti_scope": "quiet_reflection_scenes", "ttl": "until_arc_resolution"}],
"future_probes": {"positive": ["next_conflict_scene"], "anti_probe": ["quiet_grief_scene"], "neutral": ["market_description"]}
}]
}User simulator training
动态 user simulator 应该怎么训
训练目标不是复现一个静态偏好向量,而是学习 reading-induced state transition:文本本身会塑造用户期待、疲劳、信任和新偏好。
章节/段落/plan/story-state → narrative axes:pacing、agency、lore、continuity、trope、style。
用户 past feedback + implicit actions + prior state → z_user,t 与 uncertainty。
s_user,t+1 = T(s_user,t, text_t, feedback_t, agent_response_t)。文本会创造新的期待。
输出 rating/comment/tags/actions/dwell/skip/reread/continue/prior_feedback_fulfilled。
agent 根据 feedback 产生 memory / critic / planner / retriever / generator state diff。
用 updated state 生成下一章,再让 simulator 继续阅读,形成 closed-loop eval。
Formula boxes
s_user,t+1 = T_phi(s_user,t, E_text(x_t), feedback_t, agent_response_t)
feedback_t ~ P_theta(explicit, implicit | s_user,t, x_t, story_state_t)
ΔS_agent,t = U_psi(agent_state_t, feedback_t, s_hat_user,t)
y_{t+1} ~ G(· | prompt, story_state_t, ΔS_agent,t)个性化数据
真实评论/评分/收藏/阅读列表校准分布;simulator 生成隐藏状态、曝光、dwell、counterfactual;human pilot 做 active-selected pair 和多轮互动校准。
训练目标
pairwise/ordinal preference loss、implicit action likelihood、comment/tag generation、state transition prediction、swap anti-collapse、calibration ECE、sim-to-real ranking correlation。
给 agent 的反馈
不要给 hidden state;只给 explicit + implicit observations。hidden state / oracle update 只用于 eval,防止 agent 作弊。
Simulator evaluation
user simulator 准确度怎么评估
不能只看 simulator 预测 rating 准不准;要看它是否能产生可校准、可解释、能转移到真人 pilot 的动态行为。
| Metric | 定义 | 为什么必要 |
|---|---|---|
| Feedback prediction AUC / NLL | 预测 like/favorite/continue/skip/rating/comment tags。 | 基本行为拟合,但不是最终证明。 |
| Dwell / action calibration | dwell log-likelihood、Brier、ECE;区分长 dwell=喜欢/困惑。 | 隐式反馈不能简单等于偏好。 |
| Preference-state recovery | 对 simulator hidden state 或 human elicited profile 的 axis recovery。 | 验证 encoder 是否真学用户差异。 |
| Transition accuracy | 预测 reading-induced expectation / fatigue / trust change。 | v3 关键:偏好会被文本改变和创造。 |
| Counterfactual validity | 同用户不同文本、同文本不同用户、同反馈不同 history 的输出是否合理变化。 | 防止 simulator 只是静态情感分类器。 |
| Sim-to-real transfer | 在 simulator 上排名更好的 agent,在 human pilot 中也更好。 | 最终证明 simulator 有评估价值。 |
Dynamic simulator eval · closed-loop dynamic evaluation
把动态 simulator 接入 evaluation
静态指标只回答“这条反馈理解了吗”;动态 eval 要回答“这次 state update 是否改变了后续多章阅读体验”。
Closed-loop reader return
Return = Σ_t γ^t · J_sim(user_state_t, chapter_t, feedback_t) Compare: no-update vs memory-only vs full-state-update vs oracle-update
Dynamic state transition gain
DSTG = E[Return(G(S ⊕ ΔS_model), Sim)] - E[Return(G(S), Sim)] Normalized by oracle-update return to avoid easy scale effects.
Expectation alignment
ExpectationAlign_t = score(chapter_t satisfies expectations created by chapters < t) Penalty if agent satisfies old preference but ignores newly created expectation.
Personalization divergence
PersonalizationDiversity = D_KL(P_tokens(.|u_i,S_i) || P_tokens(.|u_j,S_j)) subject to coherence and story-state constraints.
Metric chart
Dynamic rollout metrics
Metric chart
State transition stress
Metric chart
Personalization without collapse
NTP personalization
LLM 是 NTP,如何避免每个人得到差不多的小说
不要只在 prompt 里写“用户喜欢快节奏”。个性化需要在 trajectory-level planning 和 token-level decoding/reranking 两层进入生成过程。
| 层级 | 机制 | 和 state update 的关系 | 起步实验 |
|---|---|---|---|
| Trajectory-level | state-conditioned planner | feedback 更新 planner.policy / critic.checklist / open-thread priority,改变后续章节事件序列。 | 同一 story seed + 不同 user state,生成 5 章 plan;测 plan divergence、expectation alignment、anti-probe harm。 |
| Candidate-level | personalized reranker / reward model | 生成多候选章节,用 user simulator 或 learned reward 选最符合当前 reader state 的候选。 | 每章 sample k=4,比较 generic likelihood top-1 vs personalized reward top-1。 |
| Token-level | logit bias / control vector / contrastive decoding | 把 user state 转成 soft constraints:提升 agency/action tokens,压低 exposition-heavy continuations,但受 story consistency gate 约束。 | 在局部段落重写中测 token KL、preference token attribution、coherence。 |
| Adapter-level | user/prototype LoRA 或 prefix tuning | 稳定偏好进入小 adapter;短期反馈进入 state/prefix,避免每个用户都训练完整模型。 | 先做 prototype adapters:fast-agency、lore-slowburn、consistency-first。 |
| Online feedback | DPO / IPO / KTO / bandit update | 用户 A/B/skip/comment 形成 online preference pairs,但需要 replay buffer、off-policy eval 和 rollback。 | 用 simulator closed-loop 先验证,再 human pilot 小规模测试。 |
Recommended starting point
先做 state-conditioned planning + personalized reranking,不要一开始训 token-level adapter。
最 solid 的开端是:固定基础 LLM,给每个用户维护结构化 state;每章生成多个 plan/chapter candidate;用 ESUS / learned user reward rerank;再把用户反馈转成 state diff。这样能清楚证明“user-feedback → state transition → future content changes”。token-level 个性化作为第二阶段,用 control vector/logit shaping 去解释为什么两个用户在相同 story seed 下产生不同文本分布。
Next experiments
v3 后续实验路线
下一步不是再写页面,而是把 closed-loop simulator eval 跑起来,比较 memory-only、full-state-update、oracle-update。
| Step | 实验 | 产物 | 成功标准 |
|---|---|---|---|
| 1 | 扩展真实数据 ingest:Qidian DTA / Goodreads streaming / public-domain full novels | raw manifest + processed complete novel + feedback events | 至少 100 novels、1000 trajectories、可复现 checksum。 |
| 2 | 训练 ESUS v0 | user encoder + transition + feedback emitter | rating/action calibration、transition accuracy、counterfactual user separation。 |
| 3 | closed-loop eval | dynamic rollout leaderboard | full-state-update 在 DSTG/selectivity/rollback 上显著超过 memory-only。 |
| 4 | trajectory-level personalization | state-conditioned plans and chapters | 不同用户 trajectory divergence 增加,同时 coherence 不下降。 |
| 5 | human pilot | 24–40 位读者 active-selected pairs + 3–5 turn interaction | sim-to-real agent ranking correlation 显著正相关。 |