Diachronic, holistic, cross-disciplinary understanding of science — built from the full arXiv corpus.
Project Title: A Diachronic Lexicon of Academic Phrases from Four Decades of arXiv — with Concept-Network Visualization, Retrieval, and G(A,B) Conductance Built on Top
loomsci_lexicon is a diachronic lexicon of academic phrases built from the full arXiv
corpus (1991–2025, 2.84M papers) — one independent snapshot per year, 35 in total, each
reproducible from source. This repository ships the first 5 years (1991–1995, ~33K
papers) as sample data so the whole pipeline runs out of the box; the full corpus can be
rebuilt from the Kaggle snapshot — the official arXiv Dataset:
https://www.kaggle.com/datasets/Cornell-University/arxiv
(see docs/parquet_format.md for the exact schema mapping).
The chain — the lexicon is the product; everything below it is built on top:
parquet (fact layer, per-year partitions)
→ scan (academic phrase extraction) # the lexicon: terms_YYYY, one per year
→ annotate (per-paper phrase tagging) # per-year slices = the time dimension
→ diachronic lexicon (35 yearly snapshots, 1991–2025)
├── visualize (static / speed / accel graphs + focus subgraphs)
├── search (BM25 + RBO phrase retrieval)
└── G(A,B,t) (concept-pair conductance; cross-field fusion early warning)
Key ideas:
- The lexicon is the asset. 35 yearly snapshots rather than one static word list. Because each year is cut independently, a phrase's birth, growth and decline are directly observable.
- Bottom-up, not curated. Phrases emerge from titles + abstracts via
scan(θ=0.3, freq_min=5, t_merge=3, max_merge_len=6) — no hand-written thesaurus, no LLM-generated vocabulary. - Reproducible, not merely downloadable.
scanreproduces the published lexicon byte-for-byte from the Kaggle snapshot; an independent rebuild verified this (docs/reproduction_report.md). - Concepts as atoms. Phrases (e.g.
black hole,large language model) are the atomic units; nodes = phrases, edges = co-occurring articles. - G(A,B,t) — one application built on it.
G = 1 / effective resistance(all parallel paths via common neighbours), normalised so the strongest pair each year = 1 (cross-year comparable); needs no pre-trained embeddings. First-co-occurrence prediction AUC 0.848–0.870 vs. dynamic embedding 0.87 in arXiv:2411.06577 — on par, fully explainable, two orders of magnitude cheaper. It exists only because the per-year annotated networks do.
Full share boundary is in
SHARE_MANIFEST.md; here grouped by function, reflecting the actual contents of the share package.
loomsci_lexicon/
├── README.md / LICENSE / requirements.txt
├── config.example.yaml # empty template — copy to config.yaml (keys & abs paths go here)
├── SHARE_MANIFEST.md # share / no-share boundary checklist (with reasons)
├── scripts/ # 31 .py files (all shared, all needed to run the service)
│ ├── config & foundations
│ │ ├── config.py # single-point config loader (reads config.yaml)
│ │ ├── key_loader.py # DeepSeek key loader (env → config.yaml)
│ │ ├── tokenizer.py # unified tokenizer (shared by all stages)
│ │ ├── phrase_forms.py # phrase-form normalization (hard dep of g_ab_calc/search_rbo)
│ │ └── dns_patch.py # DNS resilience (hard dep of orchestrate_query)
│ ├── ① lexicon pipeline
│ │ └── scan_year.py # academic phrase dictionary extraction (per year)
│ ├── ② annotation
│ │ └── annotate.py # per-paper phrase annotation → parquet
│ ├── ③ visualization
│ │ ├── visualize.py # three-mode graphs + focus subgraphs
│ │ ├── build_fts_from_parquet.py # FTS: build BM25 index from parquet
│ │ └── build_visual_registry.py # rebuild gallery index data/visual/registry.csv
│ ├── ④ G/R core
│ │ ├── g_ab_calc.py # G/R core library (effective resistance)
│ │ └── run_distance_batch.py # G/R time series for concept-pair batches
│ ├── ⑤ retrieval chain
│ │ ├── rbo.py # RBO ranking-similarity algorithm (pure, no I/O)
│ │ ├── search_rbo.py # RBO semantic search (SQL prefilter + RBO rank, reads raw annotation)
│ │ ├── search_recommend.py# concept-pair recommender (raw prefilter + normalized aggregation)
│ │ ├── orchestrate_query.py # query orchestration (NL→phrases + cache)
│ │ ├── fts_helper.py # FTS(BM25) query helper (reads fts.duckdb)
│ │ └── test_rbo.py # quick sanity check (6 items, zero-destructive)
├── web/
│ ├── explore.py # PaperExplore: 3-mode search + gallery + focus + G/R pages
│ ├── gallery.py # pure-function library (load_registry/focus_map, no Flask app)
│ └── templates/ # explore.html / gallery.html / distance.html
├── docs/
│ ├── parquet_format.md # Kaggle → parquet correspondence (how to build the input)
│ └── pipeline_sop.md # full pipeline runbook (scan → annotate → visualize → G/R)
└── data/ # by_year full + lexicon_2025 + first-5-years parquet/annotation + stopwords + normalize tables
- macOS (developed and tested on macOS; should work on Linux)
- Windows — independently reproduced end-to-end from scratch on Windows
(Core i7 / 16GB, ~48h); see
docs/reproduction_report.md - Python 3.10+ (tested on 3.12)
- venv recommended
python3.12 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txtThe project reads all paths from config.yaml at the repo root.
-
Copy the template:
cp config.example.yaml config.yaml
-
Edit
config.yamlif needed. Defaults already point to the repo's own data (the first 5 years 1991–1995 ship indata/parquet/papers/), so no edit is required to run the demo. Fill in when needed:papers_dir: relativedata/parquet/papersby default; set an absolute path only if you built your own full corpus (seedocs/parquet_format.md).deepseek_api_key: optional — only needed for query orchestration (concept-pair mode NL→phrases translation). The core pipeline (scan → annotate → visualize → G/R) and FTS / RBO retrieval run without any API key.- All other fields have sensible defaults relative to the repo.
-
Never commit
config.yaml. It is already in.gitignore. -
Verify the installation (quick sanity check, zero-destructive):
python scripts/test_rbo.py --quick # 6 checks: data/config/retrievalAll PASS = environment is correct.
Note: the empty template
config.example.yamlhas all keys blank / defaulted; it is the file you share publicly.
# ① scan one year (e.g. 1992) → data/by_year/terms_1992_pipeline2.csv
python scripts/scan_year.py --year 1992
# ② annotate one year → data/annotation/normalized/year=1992/part-0.parquet
python scripts/annotate.py --years 1992 --normalize
# ③ visualize (three modes) — requires annotation output
# --min-edge 5: the shipped sample years hold only ~3K papers each, so the default
# threshold (20) filters out nearly every edge and you'd get a 3-node graph.
# On the full corpus, 20 (or higher) is the sane default.
python scripts/visualize.py --mode static --year 1992 --min-edge 5
python scripts/visualize.py --mode speed --target 1992 --base 1991 --min-edge 5
# accel needs three consecutive years; 1990 is outside the shipped sample → use 1993
python scripts/visualize.py --mode accel --target 1993 --prev 1992 --base 1991 --min-edge 5
# ④ G/R for a concept pair (single-pair, ~2s for 35 years)
python -c "
import sys; sys.path.insert(0, 'scripts')
from g_ab_calc import compute_g_series
_, g = compute_g_series('attention mechanism', 'few shot', [2022, 2023, 2024, 2025])
print(g)
"
# ⑤ build the BM25 retrieval index (needed by the interactive pages)
python scripts/build_fts_from_parquet.py --years 1991-1995 # sample build (<30s)
# ⑥ interactive web (PaperExplore + gallery)
python web/explore.py --port 5010 # http://localhost:5010/explore (gallery at /list)Note on the gallery (
/list): the per-year network graphs (data/visual/static|speed|accel/*.html) and their indexdata/visual/registry.csvare generated artifacts, not shipped — rebuild them once from the shipped annotations + lexicon (a few minutes):for y in 1991 1992 1993 1994 1995; do python scripts/visualize.py --mode static --year $y --min-edge 5 # speed needs a base year → from 1992; accel needs 3 consecutive years → from 1993 [ $y -ge 1992 ] && python scripts/visualize.py --mode speed --target $y --base $((y-1)) --min-edge 5 [ $y -ge 1993 ] && python scripts/visualize.py --mode accel --target $y --prev $((y-1)) --base $((y-2)) --min-edge 5 done python scripts/build_visual_registry.py # writes data/visual/registry.csv
web/gallery.pyis a pure-function library (no Flask app) — all routes (including/list) live inweb/explore.py.
| mode | engine | data source | notes |
|---|---|---|---|
| Concept pairs | search_recommend.py |
raw prefilter + normalized aggregation | LLM translation → concept-pair recommendations (Pairs / bridges) |
| FTS | fts_helper.py |
fts.duckdb |
BM25 exact-keyword search (index built by §5 step ⑤) |
| RBO | search_rbo.py |
raw annotation | semantic search, RBO ranking |
Retrieval-chain division of labor (which file does what):
rbo.py— algorithm only: computes RBO ranking similarity between two ranked lists (rbo()+max_rbo()). No data access, no I/O.search_rbo.py— RBO search service: NL→phrases→SQL prefilter (raw annotation) → RBO ranking→metadata.search_recommend.py— concept-pair recommender: outputs AB pairs and A-C/B bridges for the concept-pair tab. This is the file that "produces AB pairs & bridges".
How the concept-pair mode uses annotation (2-step): it first pre-filters candidate papers from raw annotation (finds papers containing any query phrase, loose match), then re-reads those papers' phrases from normalized annotation to aggregate AB pairs and A-C/B bridges (so
LLM/LLMsare unified, counts are merged). Raw keeps recall, normalized keeps consistency — both are used. Seescripts/search_recommend.py→_load_norm_phrases/_aggregate_from_papers.Search scope note: the RBO and concept-pair modes depend on annotation data. The share package ships the first 5 years (1991-1995) of annotation, so these two modes search those 5 years out of the box. Annotate more years via the pipeline and the scope expands automatically (no code change). The FTS mode covers whatever years you built with
build_fts_from_parquet.py.
The only LLM call in this package is query orchestration (orchestrate_query.py):
the concept-pair mode translates a natural-language query into phrases via
DeepSeek (deepseek-v4-pro). The core pipeline (scan → annotate → visualize → G/R)
and FTS / RBO retrieval run without any API key. The key is read via
key_loader.py from DEEPSEEK_API_KEY env var, falling back to deepseek_api_key
in config.yaml. No key is hard-coded anywhere.
- Random seeds fixed, LLM mapping table version-locked.
docs/pipeline_sop.mddocuments every stage with commands.- The scan step reproduces the published lexicon byte-for-byte (θ=0.3, freq_min=5, t_merge=3, max_merge_len=6).
- Independently reproduced on Windows:
docs/reproduction_report.mddocuments a from-scratch rebuild with artifact cross-checks. All 9 defects it reported are fixed in v21 (2026-08-31) — see §9 of that report for the merge log. data/category_map.duckdb(142MB) exceeds GitHub's 100MB per-file cap, so it ships compressed:data/category_map.duckdb.tar.gz(23MB). Unpack once —tar xzf data/category_map.duckdb.tar.gz -C data/— and domain normalisation is on. Leave it packed and everything still runs; only domain normalisation is off (web/explore.pydegrades gracefully).
- Website: https://LoomSci.com
- Email: qiji.list@gmail.com
- Wechat: ianwest
从全量 arXiv 到科学的宏观理解:历时、整体、跨学科的科学可视化与演化分析。
项目名称:arXiv 四十年历时学术短语词典 —— 及建基于其上的概念网络可视化、检索与 G(A,B) 电导
loomsci_lexicon 是一部历时学术短语词典,从全量 arXiv(1991–2025,284 万篇)构建——
每年一份独立快照,共 35 份,且每份都可从源头复现。本仓库自带**前 5 年(1991-1995,
约 3.3 万篇)**示例数据,开箱即可跑通全管线;全量语料可从 Kaggle 快照重建——arXiv
官方数据集:https://www.kaggle.com/datasets/Cornell-University/arxiv
(字段对应关系见 docs/parquet_format.md)。
链条如下——词典是产品本身,其余都建在它之上:
parquet(事实层,按年分区)
→ scan(学术短语提取) # 词典本体:每年一份 terms_YYYY
→ 标注(逐篇短语标注,逐年分片) # 逐年 = 时间维度
→ 历时词典(1991–2025 共 35 份年度快照)
├── 可视化(静态 / 速度 / 加速度三图 + 焦点子图)
├── 检索(BM25 + RBO 短语检索)
└── G(A,B,t)(概念对电导;跨领域融合早期预警)
核心思想:
- 词典才是资产:35 份年度快照,而不是一张静态词表。每一年独立切分, 因此一个短语的诞生、成长与衰退是可直接观测的。
- 自下而上,而非人工编篡:短语由
scan从标题+摘要中涌现 (θ=0.3, freq_min=5, t_merge=3, max_merge_len=6)——既无人工叙词表,也无 LLM 生成词表。 - 可复现,而不只是可下载:scan 步骤可从 Kaggle 快照逐字节复现已发布词典
(
docs/reproduction_report.md记录了一次独立重建的验证结果)。 - 概念为原子:短语(如
black hole、large language model)是原子单位; 节点=短语,边=共现文章。 - G(A,B,t) 是建在它之上的一个应用:
G = 1 / 有效电阻(经共同邻居的全部并联路径), 归一后当年最强对=1(跨年可比),无需预训练向量。首次共现预测 AUC 0.848–0.870 vs 文献 arXiv:2411.06577 动态嵌入 0.87——性能持平,但完全可解释、计算量低两个数量级。 它能存在,前提正是那些逐年标注好的网络。
完整分享清单见
SHARE_MANIFEST.md;此处按功能分组,反映分享包实际内容。
loomsci_lexicon/
├── README.md / LICENSE / requirements.txt
├── config.example.yaml # 空模板——复制为 config.yaml(key 与绝对路径都在这里填)
├── SHARE_MANIFEST.md # 分享/不分享边界清单(含理由)
├── scripts/ # 31 个 .py(全部分享,均为跑通服务所需)
│ ├── 配置与基础
│ │ ├── config.py # 单点配置加载(读 config.yaml)
│ │ ├── key_loader.py # DeepSeek key 加载(env → config.yaml)
│ │ ├── tokenizer.py # 统一分词器(各阶段共用)
│ │ ├── phrase_forms.py # 短语形态归一(g_ab_calc/search_rbo 硬依赖)
│ │ └── dns_patch.py # DNS 弹性(orchestrate_query 硬依赖)
│ ├── ① 词典管线
│ │ └── scan_year.py # 学术短语词典提取(按年,读 data/stop 停用词表)
│ ├── ② 标注
│ │ └── annotate.py # 逐篇短语标注 → parquet
│ ├── ③ 可视化
│ │ ├── visualize.py # 三图(static/speed/accel)+ 焦点子图
│ │ ├── build_fts_from_parquet.py # FTS:从 parquet 构建 BM25 检索库
│ │ └── build_visual_registry.py # 重建画廊索引 data/visual/registry.csv
│ ├── ④ G/R 核心
│ │ ├── g_ab_calc.py # G/R 核心库(有效电阻,含 lexicon 匹配)
│ │ └── run_distance_batch.py # 概念对批量 G/R 时间序列
│ ├── ⑤ 检索链
│ │ ├── rbo.py # RBO 排名相似度算法(纯函数,无 I/O)
│ │ ├── search_rbo.py # RBO 语义检索(SQL 预筛 + RBO 精排,读 raw 标注)
│ │ ├── search_recommend.py# 概念对推荐(raw 预筛 + normalized 聚合)
│ │ ├── orchestrate_query.py # 查询编排(NL→短语 + 缓存)
│ │ ├── fts_helper.py # FTS(BM25) 查询助手(读 fts.duckdb)
│ │ └── test_rbo.py # 快速冒烟(6 项,零破坏)
├── web/
│ ├── explore.py # PaperExplore:三档检索 + 画廊 + 焦点图 + G/R 页
│ ├── gallery.py # 纯函数库(load_registry/focus_map,无 Flask app)
│ └── templates/ # explore.html / gallery.html / distance.html
├── docs/
│ ├── parquet_format.md # Kaggle → parquet 对应关系(输入如何构建)
│ └── pipeline_sop.md # 全流程运行手册(scan → 标注 → 可视化 → G/R)
└── data/ # by_year 全量 + lexicon_2025 + 前5年 parquet/标注 + 停用词表 + 归一表
- macOS(开发与测试环境;Linux 应也可用)
- Windows —— 已在 Windows(Core i7 / 16GB,约 48 小时)从零独立复现全链路,
详见
docs/reproduction_report.md - Python 3.10+(3.12 实测)
- 建议使用 venv
python3.12 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt项目从仓库根目录的 config.yaml 读取所有路径。
-
复制模板:
cp config.example.yaml config.yaml
-
按需编辑
config.yaml。默认值已指向仓库自带数据(前 5 年 1991-1995 在data/parquet/papers/),跑示例无需修改。需要时填写:papers_dir:默认相对路径data/parquet/papers;仅当你自建全量语料时 改为绝对路径(见docs/parquet_format.md)。deepseek_api_key:可选——仅查询编排(概念对档 NL→短语翻译)需要。 核心管线(scan → 标注 → 可视化 → G/R)与 FTS / RBO 检索无需任何 key 即可运行。- 其余字段均有合理的仓库内默认值。
-
切勿提交
config.yaml(已在.gitignore中)。 -
验证安装(快速冒烟,零破坏):
python scripts/test_rbo.py --quick # 6 项检查:数据/配置/检索全部 PASS = 环境正确。
注:空模板
config.example.yaml的 key 均留空 / 默认——这是你对外分享的文件。
# ① scan 单年(如 1992)→ data/by_year/terms_1992_pipeline2.csv
python scripts/scan_year.py --year 1992
# ② 标注单年 → data/annotation/normalized/year=1992/part-0.parquet
python scripts/annotate.py --years 1992 --normalize
# ③ 可视化(三模式)——需先有标注产物
# --min-edge 5:随包样例每年仅约 3 千篇,默认阈值 20 会滤掉几乎所有边(图只剩 3 个节点);
# 全量语料上用 20 或更高才合理。
python scripts/visualize.py --mode static --year 1992 --min-edge 5
python scripts/visualize.py --mode speed --target 1992 --base 1991 --min-edge 5
# accel 需连续三年;1990 不在随包样例范围内,故用 1993
python scripts/visualize.py --mode accel --target 1993 --prev 1992 --base 1991 --min-edge 5
# ④ 概念对 G/R(单对,35 年约 2 秒)
python -c "
import sys; sys.path.insert(0, 'scripts')
from g_ab_calc import compute_g_series
_, g = compute_g_series('attention mechanism', 'few shot', [2022, 2023, 2024, 2025])
print(g)
"
# ⑤ 构建 BM25 检索索引(交互页检索依赖)
python scripts/build_fts_from_parquet.py --years 1991-1995 # 小样本构建(<30s)
# ⑥ 交互 Web(PaperExplore + 画廊)
python web/explore.py --port 5010 # http://localhost:5010/explore (画廊在 /list)画廊(/list)说明:逐年网络图(
data/visual/static|speed|accel/*.html) 与其索引data/visual/registry.csv是生成产物,不随包分享——用分享的 标注 + 词典一次性重建(约几分钟):for y in 1991 1992 1993 1994 1995; do python scripts/visualize.py --mode static --year $y --min-edge 5 # speed 需要基准年 → 从 1992 起;accel 需要连续三年 → 从 1993 起 [ $y -ge 1992 ] && python scripts/visualize.py --mode speed --target $y --base $((y-1)) --min-edge 5 [ $y -ge 1993 ] && python scripts/visualize.py --mode accel --target $y --prev $((y-1)) --base $((y-2)) --min-edge 5 done python scripts/build_visual_registry.py # 生成 data/visual/registry.csv
web/gallery.py是纯函数库(无 Flask app)——所有路由(含 /list)都在web/explore.py。
| 档位 | 引擎 | 数据源 | 特点 |
|---|---|---|---|
| 概念对 | search_recommend.py |
raw 预筛 + normalized 聚合 | LLM 翻译 → 概念组合推荐(Pairs/桥接) |
| FTS | fts_helper.py |
fts.duckdb |
BM25,精确关键词(索引由 §5 步骤⑤构建) |
| RBO | search_rbo.py |
raw 标注 | 语义检索,RBO 排序 |
检索链分工(哪个文件干什么):
rbo.py—— 纯算法:计算两个排序列表的 RBO 相似度(rbo()+max_rbo()),不碰数据、无 I/O。search_rbo.py—— RBO 检索服务:NL→短语→SQL 倒排预筛(raw 标注)→RBO 精排→元数据。search_recommend.py—— 概念对推荐:输出 AB 对 + AC-CB 桥接,服务"概念对"档位。 "出 AB 对和桥接对"的正式入口是这个文件。
概念对档如何使用标注(两步):先用 raw 标注预筛候选论文(找含任一查询短语 的论文,宽松匹配),再对候选论文从 normalized 标注反查短语、聚合 AB 对与 AC-CB 桥接(
LLM/LLMs归一,计数合并)。raw 保召回、normalized 保一致性——两者都用。 实现见scripts/search_recommend.py→_load_norm_phrases/_aggregate_from_papers。检索范围说明:RBO 档与概念对档依赖标注数据,分享包只含 1991-1995 (前 5 年示例),故这两档在分享数据上检索范围是前 5 年。按 §流程自行标注更多 年份后,检索范围自动扩展(无需改代码)。FTS 档则取决于
build_fts_from_parquet.py构建了哪些年份。
本包中唯一的 LLM 调用是查询编排(orchestrate_query.py):概念对档将自然语言
查询翻译为短语(DeepSeek deepseek-v4-pro)。核心管线(scan → 标注 → 可视化 →
G/R)与 FTS / RBO 检索均无需任何 key。key 经 key_loader.py 从环境变量
DEEPSEEK_API_KEY 读取,回退到 config.yaml 的 deepseek_api_key。
代码中无任何硬编码 key。
- 随机种子固定,LLM 映射表版本锁定。
docs/pipeline_sop.md逐步记录了每个阶段的命令。- scan 步骤可逐字节复现已发布词典(θ=0.3, freq_min=5, t_merge=3, max_merge_len=6)。
- Windows 独立复现:
docs/reproduction_report.md记录了从零重建全链路并交叉核对产物的 全过程;其报告的 9 项缺陷已在 v21(2026-08-31) 全部修复,收编明细见该报告 §9。 data/category_map.duckdb(142MB)超过 GitHub 单文件 100MB 上限,故随包提供压缩版data/category_map.duckdb.tar.gz(23MB)。解压一次即可启用领域归一:tar xzf data/category_map.duckdb.tar.gz -C data/。 不解压也能跑通全链路,仅关闭领域归一(web/explore.py优雅降级,不崩溃)。
从 arXiv 共现网络预测"未直连概念对的未来直连"。完整复现见
docs/sci_predict_reproduce.md。
概念网络 = 电路板:节点 = 学术短语,共现 = 导线;A-B 从未直连(无导线), 但经 A-C-B 间接路径仍有有效电导 G(AB)(欧姆定律 + 并联原理)。
双信号(2026-08-15 用户确认,2000 案例验证):
- G 水平:G(AB) 越大 → 直连预期越强(间接连接密度 = 距离近)。 2015 回测 G 降序 Top100 命中 9.0%(基线 4.3%,≈2 倍)
- G 波动 CV(std/mean):G 小时若涨落大 → 直连预期比无涨落强 (连接在重构 = 正在酝酿)。控制 G_mean 后 AUC 0.687(G<20 档, p=0.0001)
噪声对照(决定性):CV 与 G_mean 正相关(rho=+0.135),不遵循 1/√N 泊松 指纹——G 是聚合电导非原始计数,涨落机制不同。CV 确认为真实信号 (曾因疑受 1/√N 混淆降级为待验证,2026-08-15 检验后推翻,恢复为确认信号)。
| 脚本 | 作用 | 复现 |
|---|---|---|
sci_seeds_balanced.py |
147 平衡 seed(arXiv 47 类,AI 5%) | §1 |
sci_rw_sampler.py |
两跳采样 + 2015 回测 | §2 |
sci_backtest_2016.py |
历史回测(真前验) | §3 |
sci_g_series_fast.py |
快速 G(AB,t) 序列(库函数) | §5 |
sci_predict2026_v3.py |
2026 预判 Top 100 | §4 |
sci_llm_filter_2026.py |
LLM 筛选 50 + 三挡点评 | §6 |
sci_gplots_50.py |
50 图 + 形态分类 | §7 |
sci_rank_experiment.py |
2000 案例排序法则实验 | §8 |
sci_rank_figs.py |
排序实验图(全英文) | §8 |
sci_backtest_fair.py |
对等回测(随机对照组) | §8 |
- 2015 回测命中率 5.8%(2016-2025 直连且增长)vs 随机基线 3%
- 双信号确认(2000 案例,2026-08-15):
- G 水平:G(2015) 降序 Top100 命中 9.0%(基线 4.3%,≈2 倍)——右尾效应
- G 波动 CV:控制 G_mean 后仍显著(G<20 档 AUC 0.687, p=0.0001)
- CV 噪声对照:与 G_mean 正相关(rho=+0.135),不遵循 1/√N 泊松指纹
- 两跳强度 I 弱-中(5-40)最优:强桥(>40)是旧热点(Top100 仅 1.5%,反向)
- 2026 预判:Top 50 三挡 = 看好 20 / 中立 24 / 不看好 4(AI 系仅 16%)
v17 (08-13) 主库分享包(19 脚本)
v18 (08-15) G 预测探索包(7 脚本,独立)
v20 (08-15) 干净合并版:v17 主库 + v18 G 预测,共用基建,无过程文件
- Windows Core i7 16G 基于Qoder + DeepSeek v4 flash, 48小时
- 通俗解释: 学术短语网络中的有效电导
- 网站:https://LoomSci.com
- Email: qiji.list@gmail.com
- 微信: ianwest
Code — MIT. See LICENSE (Copyright (c) 2026 JI, Yanjiang).
Data — CC BY 4.0. The dictionaries, annotations and sample parquet shipped under
data/ are licensed under Creative Commons Attribution 4.0 International —
see data/LICENSE.txt and data/by_year/LICENSE.txt.
They are derived from the arXiv Dataset
(https://www.kaggle.com/datasets/Cornell-University/arxiv); please also respect
arXiv's terms of use for the source data.
代码 — MIT:见 LICENSE(Copyright (c) 2026 JI, Yanjiang)。
数据 — CC BY 4.0:随包分发的 data/ 下词典、标注与示例 parquet
采用 Creative Commons Attribution 4.0 International 许可,
见 data/LICENSE.txt 与 data/by_year/LICENSE.txt。
这些数据派生自 arXiv Dataset
(https://www.kaggle.com/datasets/Cornell-University/arxiv),
使用时请同时遵守 arXiv 对源数据的使用条款。