From 6e4b54efa1de314786300edba130749791ef1022 Mon Sep 17 00:00:00 2001 From: bits-bytes-nn Date: Wed, 14 Oct 2026 08:42:14 +0900 Subject: [PATCH 1/2] Show a paper post's citation count from Semantic Scholar Paper posts take an optional paper_doi (paper types only, a bare DOI; the lint checks both). js/citations.js fetches the count in the browser, caches it for a day, and hides the meta-panel field on failure or zero. All 28 paper posts are backfilled from their source arXiv link. --- README.ko.md | 10 +-- README.md | 6 +- _data/post_conventions.yml | 9 ++- _includes/footer.html | 3 +- _layouts/post.html | 9 +++ ...approach-to-query-focused-summarization.md | 1 + ...n-foundation-and-fine-tuned-chat-models.md | 1 + ...nd-efficient-foundation-language-models.md | 1 + ...source-language-models-with-longtermism.md | 1 + ...n-in-mixture-of-experts-language-models.md | 1 + ...ogramming-the-rise-of-code-intelligence.md | 1 + ...processing-for-tree-organized-retrieval.md | 1 + _posts/2025-02-27-mistral-7b.md | 1 + ...tical-reasoning-in-open-language-models.md | 1 + _posts/2025-04-04-mixtral-of-experts.md | 1 + _posts/2025-10-03-gemma-3-technical-report.md | 1 + ...0-03-kimi-k2--open-agentic-intelligence.md | 1 + ...cient-mixture-of-experts-language-model.md | 1 + ...rs-in-open-language-model-post-training.md | 1 + ...lity-in-llms-via-reinforcement-learning.md | 1 + ...2025-10-07-deepseek-v3-technical-report.md | 1 + ...pen-language-models-at-a-practical-size.md | 1 + .../2025-10-07-the-llama-3-herd-of-models.md | 1 + _posts/2025-10-08-qwen3-technical-report.md | 1 + _posts/2025-10-10-pixtral-12b.md | 1 + ...ily-of-highly-capable-multimodal-models.md | 1 + ...nd-next-generation-agentic-capabilities.md | 1 + ...nguage-model-is-secretly-a-reward-model.md | 1 + ...-efficient-finetuning-of-quantized-llms.md | 1 + ...-frontier-of-open-large-language-models.md | 1 + ...ional-ai--harmlessness-from-ai-feedback.md | 1 + ...and-fast-retrieval-augmented-generation.md | 1 + ...dge-graph-architecture-for-agent-memory.md | 1 + _sass/_dark.scss | 3 +- _sass/_post.scss | 13 +++- docs/tech-doc.md | 26 +++++--- js/citations.js | 61 +++++++++++++++++++ script/lint-posts.rb | 7 +++ test/test_lint_posts.rb | 11 ++++ 39 files changed, 167 insertions(+), 19 deletions(-) create mode 100644 js/citations.js diff --git a/README.ko.md b/README.ko.md index 01b38d3..d97a068 100644 --- a/README.ko.md +++ b/README.ko.md @@ -85,6 +85,7 @@ _plugins/ reading_time.rb (한·영 읽기 시간 계산) css/ main.scss(Sass 진입점) · search.css(검색 페이지 전용) js/ main.js(테마 토글·코드 복사·목차·메뉴·이미지 확대 등) search.js(검색창 동작) + citations.js(논문 글의 인용 수, Semantic Scholar에서) assets/images/ 토픽별 커버 이미지와 글의 그림·다이어그램(플랫) assets// 일부 오래된 글의 그림 폴더. 새 글은 assets/images/를 씀 search.json 전체 본문 검색 색인 (simple-jekyll-search가 사용) @@ -99,8 +100,8 @@ _data/ post_conventions.yml (카테고리·표지·통제 태그· workflow-lint.yml: actionlint와 shellcheck ``` -**최상위 페이지:** `index.html`(홈), 네 개의 섹션 페이지인 `paper-reviews.md`· -`paper-summaries.md`·`tech-guides.md`·`insights.md`, 그리고 `categories.html`· +**최상위 페이지:** `index.html`(홈), 다섯 개의 섹션 페이지인 `paper-reviews.md`· +`paper-summaries.md`·`paper-surveys.md`·`tech-guides.md`·`insights.md`, 그리고 `categories.html`· `tags.html`·`search.md`·`about.md`·`404.html`. `sitemap.xml`·`feed.xml`·`robots.txt`는 플러그인이 생성하며 원본 파일이 없습니다. @@ -118,6 +119,7 @@ title: "<글 제목>" subtitle: "<한 줄 소개>" # 선택 — 헤더의 제목 아래에 표시됩니다 date: YYYY-MM-DD HH:MM:SS paper_author: "<기관>" # 논문을 낸 기관(사람 이름 아님). 논문 글에만 +paper_doi: "10.48550/arXiv." # 선택, 논문 글에만 — 메타 패널의 인용 수 seo_title: "<짧은 제목>" # 선택 — 논문 제목이 너무 길 때 에 대신 씁니다 description: >- # 선택, 평문 — 아래 설명 참고 <검색 결과에 노출될 문장, 150자 안팎> @@ -154,8 +156,8 @@ RSS `<summary>`에 실리는 문장입니다. 생략하면 `_plugins/post_descri 카테고리는 **두 단계**입니다. -- `categories[0]` — **유형**: `Paper Reviews`, `Paper Summaries`, `Tech Guides`, - `Insights` 중 하나. 글이 어느 내비 탭에 들어갈지를 정합니다. 아직 글이 없는 유형도 +- `categories[0]` — **유형**: `Paper Reviews`, `Paper Summaries`, `Paper Surveys`, + `Tech Guides`, `Insights` 중 하나. 글이 어느 내비 탭에 들어갈지를 정합니다. 아직 글이 없는 유형도 **탭을 유지하고** 빈 상태 문구를 띄웁니다 — 탭이 없으면 채우는 중인 섹션이 아니라 없어진 섹션으로 읽히기 때문입니다. - `categories[1]` — **주제**: `_data/post_conventions.yml`의 `topics` 중 하나이며, 표지 diff --git a/README.md b/README.md index 71c5980..ac78cf0 100644 --- a/README.md +++ b/README.md @@ -87,6 +87,7 @@ _plugins/ reading_time.rb (KO/EN-aware read time) css/ main.scss (Sass entry point) · search.css (search page only) js/ main.js (theme toggle, code-copy, TOC, menu, image zoom…) search.js (drives the search box) + citations.js (a paper post's citation count, from Semantic Scholar) assets/images/ Topic cover images, plus post figures and diagrams (flat) assets/<slug>/ Figures of some older posts; new posts use assets/images/ search.json Full-text search index (consumed by simple-jekyll-search) @@ -102,7 +103,7 @@ _data/ post_conventions.yml (categories, covers, controlled and ``` **Top-level pages:** `index.html` (home), plus `paper-reviews.md`, -`paper-summaries.md`, `tech-guides.md`, `insights.md` (the four section pages), +`paper-summaries.md`, `paper-surveys.md`, `tech-guides.md`, `insights.md` (the five section pages), `categories.html`, `tags.html`, `search.md`, `about.md`, and `404.html`. `sitemap.xml`, `feed.xml` and `robots.txt` are generated by the plugins; there is no source file for any of them. @@ -123,6 +124,7 @@ title: "<Post Title>" subtitle: "<one-line pitch>" # optional — shown under the title in the header date: YYYY-MM-DD HH:MM:SS paper_author: "<Org>" # the paper's org, not people; paper posts only +paper_doi: "10.48550/arXiv.<id>" # optional, paper posts only — the citation count in the meta panel seo_title: "<shorter title>" # optional — for <title> when the paper title is too long description: >- # optional, plain text — see below <search-snippet, ~150 chars> @@ -161,7 +163,7 @@ CI fails the build otherwise. They ship as plain text, so the lint rejects Categories are **two levels**: - `categories[0]` — the **type**: `Paper Reviews`, `Paper Summaries`, - `Tech Guides`, or `Insights`. This decides which nav tab the post appears under. + `Paper Surveys`, `Tech Guides`, or `Insights`. This decides which nav tab the post appears under. A type with no posts yet keeps its tab and renders an empty-state line: a missing tab reads as a section that was removed, not one still filling up. - `categories[1]` — the **topic**, one of the `topics` in diff --git a/_data/post_conventions.yml b/_data/post_conventions.yml index b772f71..1cd1e42 100644 --- a/_data/post_conventions.yml +++ b/_data/post_conventions.yml @@ -9,11 +9,16 @@ # of repeating the lists. # categories[0]. `paper`: the post reviews one paper, so it names the paper's -# organisation in `paper_author`. `cover`: the image every post of the type uses; -# without one, the topic's image below. +# organisation in `paper_author`, and may give the paper's DOI in `paper_doi` +# (10.48550/arXiv.<id> when the paper is on arXiv, else the venue's DOI) +# for the citation count in the post's meta panel; no other type may set it. +# Paper Surveys walk one topic through several papers in the order they came +# out, so no single paper's keys apply. `cover`: the image every post of the +# type uses; without one, the topic's image below. types: Paper Reviews: { paper: true } Paper Summaries: { paper: true } + Paper Surveys: {} Tech Guides: {} Insights: { cover: /assets/images/insights.jpg } diff --git a/_includes/footer.html b/_includes/footer.html index 373f56f..bd778a4 100644 --- a/_includes/footer.html +++ b/_includes/footer.html @@ -11,7 +11,7 @@ <h2 class="footer-heading">{{ site.title }}</h2> <p><strong>Site Map</strong></p> <ul class="pages"> - {% include nav_links.html %} + {% include nav_links.html full=true %} </ul> </div> @@ -61,6 +61,7 @@ <h2 class="footer-heading">{{ site.title }}</h2> {% endif %} <script src="{{ '/js/main.js' | prepend: site.baseurl }}" defer></script> +{% if page.paper_doi %}<script src="{{ '/js/citations.js' | prepend: site.baseurl }}" defer></script>{% endif %} <!-- Do not write Liquid tag delimiters in these HTML comments. Liquid tokenizes tags inside comments too, so a tag named in prose is opened for real and the diff --git a/_layouts/post.html b/_layouts/post.html index 0fbfe9f..f85fa3b 100644 --- a/_layouts/post.html +++ b/_layouts/post.html @@ -36,6 +36,15 @@ <h1 class="title">{{ page.title }}</h1> {% endfor %} </div> {% endif %} + {%- comment -%} + Hidden until js/citations.js fills it from Semantic Scholar. Last, so + the fields before it stay put when it appears. + {%- endcomment -%} + {% if page.paper_doi %} + <div class="post-citations" data-paper-doi="{{ page.paper_doi | escape }}" hidden> + <span class="meta-label">Citations</span> + </div> + {% endif %} </div> {% if page.tags.size > 0 %} <div class="post-tags"> diff --git a/_posts/2025-01-17-from-local-to-global-a-graph-rag-approach-to-query-focused-summarization.md b/_posts/2025-01-17-from-local-to-global-a-graph-rag-approach-to-query-focused-summarization.md index 750ba61..717096b 100644 --- a/_posts/2025-01-17-from-local-to-global-a-graph-rag-approach-to-query-focused-summarization.md +++ b/_posts/2025-01-17-from-local-to-global-a-graph-rag-approach-to-query-focused-summarization.md @@ -3,6 +3,7 @@ layout: post title: "From Local to Global: A Graph RAG Approach to Query-Focused Summarization" date: 2024-04-24 18:38:11 paper_author: "Microsoft Research" +paper_doi: "10.48550/arXiv.2404.16130" description: >- Graph RAG는 LLM으로 엔티티 지식 그래프와 커뮤니티 요약을 미리 만들어 전역 질문에 맵-리듀스로 답합니다. 기존 RAG보다 포괄성과 다양성에서 앞섰고, 루트 레벨 요약은 원문 요약보다 토큰을 97% 이상 덜 씁니다. 색인 구축과 평가를 정리합니다. categories: ["Paper Reviews", "Retrieval-Augmented-Generation"] diff --git a/_posts/2025-01-27-llama-2-open-foundation-and-fine-tuned-chat-models.md b/_posts/2025-01-27-llama-2-open-foundation-and-fine-tuned-chat-models.md index 171b4dd..c4f7275 100644 --- a/_posts/2025-01-27-llama-2-open-foundation-and-fine-tuned-chat-models.md +++ b/_posts/2025-01-27-llama-2-open-foundation-and-fine-tuned-chat-models.md @@ -3,6 +3,7 @@ layout: post title: "Llama 2: Open Foundation and Fine-Tuned Chat Models" date: 2023-07-18 14:31:57 paper_author: "Meta AI" +paper_doi: "10.48550/arXiv.2307.09288" description: >- Llama 2는 7B~70B 규모로 2조 토큰을 사전학습하고 SFT와 RLHF, 고스트 어텐션(GAtt)으로 대화 모델 Llama 2-Chat을 만들었습니다. 350명 이상의 레드팀이 안전성을 시험했습니다. 학습 과정과 안전성 강화 방법을 정리합니다. categories: ["Paper Reviews", "Language-Models"] diff --git a/_posts/2025-01-28-llama-open-and-efficient-foundation-language-models.md b/_posts/2025-01-28-llama-open-and-efficient-foundation-language-models.md index 8406cbc..9cf5974 100644 --- a/_posts/2025-01-28-llama-open-and-efficient-foundation-language-models.md +++ b/_posts/2025-01-28-llama-open-and-efficient-foundation-language-models.md @@ -3,6 +3,7 @@ layout: post title: "LLaMA: Open and Efficient Foundation Language Models" date: 2023-02-27 17:11:15 paper_author: "Meta AI" +paper_doi: "10.48550/arXiv.2302.13971" description: >- LLaMA는 공개 데이터만으로 7B~65B 모델을 1.4T 토큰까지 학습해, 13B 모델이 대부분의 벤치마크에서 GPT-3(175B)를 앞서고 65B 모델이 PaLM-540B와 견줄 성능을 냈습니다. 데이터 구성, 아키텍처 개선과 학습 효율화 방법을 정리합니다. categories: ["Paper Reviews", "Language-Models"] diff --git a/_posts/2025-02-03-deepseek-llm-scaling-open-source-language-models-with-longtermism.md b/_posts/2025-02-03-deepseek-llm-scaling-open-source-language-models-with-longtermism.md index 7895fee..4434f34 100644 --- a/_posts/2025-02-03-deepseek-llm-scaling-open-source-language-models-with-longtermism.md +++ b/_posts/2025-02-03-deepseek-llm-scaling-open-source-language-models-with-longtermism.md @@ -3,6 +3,7 @@ layout: post title: "DeepSeek LLM: Scaling Open-Source Language Models with Longtermism" date: 2024-01-05 18:59:13 paper_author: "DeepSeek AI" +paper_doi: "10.48550/arXiv.2401.02954" description: >- DeepSeek LLM은 비임베딩 FLOPs/토큰으로 모델 규모를 나타내 스케일링 법칙을 다시 세우고 2조 토큰으로 7B·67B 모델을 학습했습니다. 67B는 코드·수학·추론에서 LLaMA-2 70B를 앞섰습니다. 스케일링 분석과 학습 과정을 정리합니다. categories: ["Paper Reviews", "Language-Models"] diff --git a/_posts/2025-02-05-deepseekmoe-towards-ultimate-expert-specialization-in-mixture-of-experts-language-models.md b/_posts/2025-02-05-deepseekmoe-towards-ultimate-expert-specialization-in-mixture-of-experts-language-models.md index 040a3fa..93f7835 100644 --- a/_posts/2025-02-05-deepseekmoe-towards-ultimate-expert-specialization-in-mixture-of-experts-language-models.md +++ b/_posts/2025-02-05-deepseekmoe-towards-ultimate-expert-specialization-in-mixture-of-experts-language-models.md @@ -4,6 +4,7 @@ title: "DeepSeekMoE: Towards Ultimate Expert Specialization in Mixture-of-Expert seo_title: "DeepSeekMoE: Ultimate Expert Specialization in MoE" # <title> only; the paper title runs past a results list date: 2024-01-11 17:31:42 paper_author: "DeepSeek AI" +paper_doi: "10.48550/arXiv.2401.06066" description: >- DeepSeekMoE는 세밀한 전문가 분할과 공유 전문가 분리로 MoE의 지식 혼재와 중복 문제를 줄입니다. 16B 모델은 LLaMA2 7B의 약 40% 계산량으로 대등한 성능을 냈고 145B까지 확장했습니다. 구조와 부하 균형 기법을 정리합니다. categories: ["Paper Reviews", "Language-Models"] diff --git a/_posts/2025-02-14-deepseek-coder-when-the-large-language-model-meets-programming-the-rise-of-code-intelligence.md b/_posts/2025-02-14-deepseek-coder-when-the-large-language-model-meets-programming-the-rise-of-code-intelligence.md index 14bdd33..faecf45 100644 --- a/_posts/2025-02-14-deepseek-coder-when-the-large-language-model-meets-programming-the-rise-of-code-intelligence.md +++ b/_posts/2025-02-14-deepseek-coder-when-the-large-language-model-meets-programming-the-rise-of-code-intelligence.md @@ -4,6 +4,7 @@ title: "DeepSeek-Coder: When the Large Language Model Meets Programming - The Ri seo_title: "DeepSeek-Coder: The Rise of Code Intelligence" # <title> only; the paper title runs past a results list date: 2024-01-25 14:17:53 paper_author: "DeepSeek AI" +paper_doi: "10.48550/arXiv.2401.14196" description: >- DeepSeek-Coder는 87개 프로그래밍 언어의 2조 토큰을 저장소 단위로 구성하고 FIM과 16K 컨텍스트로 1.3B~33B 코드 모델을 학습했습니다. Instruct 33B는 대부분의 벤치마크에서 GPT-3.5 Turbo를 앞섰습니다. 데이터 구축과 학습 전략을 정리합니다. categories: ["Paper Reviews", "Language-Models"] diff --git a/_posts/2025-02-14-raptor-recursive-abstractive-processing-for-tree-organized-retrieval.md b/_posts/2025-02-14-raptor-recursive-abstractive-processing-for-tree-organized-retrieval.md index 8a9cf90..83d1205 100644 --- a/_posts/2025-02-14-raptor-recursive-abstractive-processing-for-tree-organized-retrieval.md +++ b/_posts/2025-02-14-raptor-recursive-abstractive-processing-for-tree-organized-retrieval.md @@ -3,6 +3,7 @@ layout: post title: "RAPTOR: Recursive Abstractive Processing for Tree-Organized Retrieval" date: 2024-01-31 18:30:21 paper_author: "Stanford University" +paper_doi: "10.48550/arXiv.2401.18059" description: >- RAPTOR는 텍스트 청크를 재귀적으로 임베딩·클러스터링·요약해 여러 추상화 수준의 트리를 만들고 검색에 씁니다. GPT-4와 결합해 QuALITY에서 기존 최고 정확도를 20%포인트 높였습니다. 트리 구축과 축소된 트리 검색 방식을 정리합니다. categories: ["Paper Reviews", "Retrieval-Augmented-Generation"] diff --git a/_posts/2025-02-27-mistral-7b.md b/_posts/2025-02-27-mistral-7b.md index afa3a7d..13e9fac 100644 --- a/_posts/2025-02-27-mistral-7b.md +++ b/_posts/2025-02-27-mistral-7b.md @@ -3,6 +3,7 @@ layout: post title: "Mistral 7B" date: 2023-10-10 17:54:58 paper_author: "Mistral AI" +paper_doi: "10.48550/arXiv.2310.06825" description: >- Mistral 7B는 그룹 쿼리 어텐션과 슬라이딩 윈도우 어텐션을 갖춰, 거의 모든 벤치마크에서 Llama 2 13B를, 추론·수학·코드에서 Llama 1 34B를 앞섭니다. 롤링 버퍼 캐시와 청킹을 포함한 아키텍처와 평가 결과를 정리합니다. categories: ["Paper Reviews", "Language-Models"] diff --git a/_posts/2025-02-28-deepseekmath-pushing-the-limits-of-mathematical-reasoning-in-open-language-models.md b/_posts/2025-02-28-deepseekmath-pushing-the-limits-of-mathematical-reasoning-in-open-language-models.md index 573d907..7b93dc8 100644 --- a/_posts/2025-02-28-deepseekmath-pushing-the-limits-of-mathematical-reasoning-in-open-language-models.md +++ b/_posts/2025-02-28-deepseekmath-pushing-the-limits-of-mathematical-reasoning-in-open-language-models.md @@ -3,6 +3,7 @@ layout: post title: "DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models" date: 2024-02-05 18:55:32 paper_author: "DeepSeek AI" +paper_doi: "10.48550/arXiv.2402.03300" description: >- DeepSeekMath는 Common Crawl에서 1,200억 개 수학 토큰을 모으고 GRPO로 강화 학습해, 7B 모델로 MATH 정확도 51.7%를 기록했습니다. 데이터 선택 파이프라인과 비평 모델 없이 동작하는 GRPO의 원리를 정리합니다. categories: ["Paper Reviews", "Language-Models"] diff --git a/_posts/2025-04-04-mixtral-of-experts.md b/_posts/2025-04-04-mixtral-of-experts.md index f77f701..12a36d4 100644 --- a/_posts/2025-04-04-mixtral-of-experts.md +++ b/_posts/2025-04-04-mixtral-of-experts.md @@ -4,6 +4,7 @@ title: "Mixtral of Experts" subtitle: "Mixtral of Experts: 전문가 혼합 모델의 새로운 지평" date: 2024-01-08 18:47:34 paper_author: "Mistral AI" +paper_doi: "10.48550/arXiv.2401.04088" description: >- Mixtral 8x7B는 층마다 8개 전문가 중 2개를 고르는 희소 전문가 혼합 모델로, 총 47B 중 13B만 활성화하고도 대부분의 벤치마크에서 Llama 2 70B·GPT-3.5와 같거나 앞섭니다. 라우팅 구조와 학습 과정을 정리합니다. categories: ["Paper Reviews", "Language-Models"] diff --git a/_posts/2025-10-03-gemma-3-technical-report.md b/_posts/2025-10-03-gemma-3-technical-report.md index 351911d..2f719d5 100644 --- a/_posts/2025-10-03-gemma-3-technical-report.md +++ b/_posts/2025-10-03-gemma-3-technical-report.md @@ -3,6 +3,7 @@ layout: post title: "Gemma 3 Technical Report" date: 2025-03-25 15:52:34 paper_author: "Google DeepMind" +paper_doi: "10.48550/arXiv.2503.19786" description: >- Gemma 3는 로컬 어텐션 5개마다 글로벌 어텐션 1개를 두어 128K 컨텍스트의 메모리 부담을 줄였고, 27B 모델은 Chatbot Arena에서 Elo 1,338점으로 공동 9위에 올랐습니다. 멀티모달 처리와 지식 증류 기반 학습 방법을 정리합니다. categories: ["Paper Reviews", "Multimodal-Learning"] diff --git a/_posts/2025-10-03-kimi-k2--open-agentic-intelligence.md b/_posts/2025-10-03-kimi-k2--open-agentic-intelligence.md index 3958482..aafa1cf 100644 --- a/_posts/2025-10-03-kimi-k2--open-agentic-intelligence.md +++ b/_posts/2025-10-03-kimi-k2--open-agentic-intelligence.md @@ -4,6 +4,7 @@ title: "Kimi K2: Open Agentic Intelligence" subtitle: "Kimi K2: 오픈 에이전틱 인텔리전스" date: 2025-07-28 05:35:43 paper_author: "Moonshot AI" +paper_doi: "10.48550/arXiv.2507.20534" description: >- Kimi K2는 활성 32B, 총 1조 매개변수의 MoE 모델로, MuonClip 옵티마이저로 15.5조 토큰을 손실 스파이크 없이 학습했고 SWE-Bench Verified에서 65.8점을 얻었습니다. 에이전틱 데이터 합성과 강화학습 과정을 정리합니다. categories: ["Paper Reviews", "Language-Models"] diff --git a/_posts/2025-10-05-deepseek-v2--a-strong--economical--and-efficient-mixture-of-experts-language-model.md b/_posts/2025-10-05-deepseek-v2--a-strong--economical--and-efficient-mixture-of-experts-language-model.md index 30e29ad..ce072d4 100644 --- a/_posts/2025-10-05-deepseek-v2--a-strong--economical--and-efficient-mixture-of-experts-language-model.md +++ b/_posts/2025-10-05-deepseek-v2--a-strong--economical--and-efficient-mixture-of-experts-language-model.md @@ -4,6 +4,7 @@ title: "DeepSeek-V2: A Strong, Economical, and Efficient Mixture-of-Experts Lang subtitle: "DeepSeek-V2: 강력하고 경제적이며 효율적인 Mixture-of-Experts 언어 모델" date: 2024-05-07 15:56:43 paper_author: "DeepSeek AI" +paper_doi: "10.48550/arXiv.2405.04434" description: >- DeepSeek-V2는 MLA와 DeepSeekMoE를 결합한 236B 규모 MoE 모델로, 토큰당 21B만 활성화하며 DeepSeek 67B 대비 KV 캐시를 93.3% 줄이고 생성 처리량을 5.76배 높였습니다. 두 아키텍처의 설계와 학습 과정을 정리합니다. categories: ["Paper Reviews", "Language-Models"] diff --git a/_posts/2025-10-06-tulu-3--pushing-frontiers-in-open-language-model-post-training.md b/_posts/2025-10-06-tulu-3--pushing-frontiers-in-open-language-model-post-training.md index 7712235..64dd57b 100644 --- a/_posts/2025-10-06-tulu-3--pushing-frontiers-in-open-language-model-post-training.md +++ b/_posts/2025-10-06-tulu-3--pushing-frontiers-in-open-language-model-post-training.md @@ -4,6 +4,7 @@ title: "Tulu 3: Pushing Frontiers in Open Language Model Post-Training" subtitle: "Tülu 3: 오픈 언어 모델 사후 훈련의 새로운 지평" date: 2024-11-22 18:44:04 paper_author: "Allen Institute for AI" +paper_doi: "10.48550/arXiv.2411.15124" description: >- Tülu 3는 Llama 3.1 기반 모델에 SFT, DPO, 검증 가능한 보상 강화학습 RLVR을 차례로 적용한 공개 사후 훈련 모델로, 8B 모델이 GSM8K 87.6%, IFEval 82.4%를 기록했습니다. 데이터 구성과 평가 체계, RLVR을 정리합니다. categories: ["Paper Reviews", "Language-Models"] diff --git a/_posts/2025-10-07-deepseek-r1--incentivizing-reasoning-capability-in-llms-via-reinforcement-learning.md b/_posts/2025-10-07-deepseek-r1--incentivizing-reasoning-capability-in-llms-via-reinforcement-learning.md index 7d8f0be..8c6fe51 100644 --- a/_posts/2025-10-07-deepseek-r1--incentivizing-reasoning-capability-in-llms-via-reinforcement-learning.md +++ b/_posts/2025-10-07-deepseek-r1--incentivizing-reasoning-capability-in-llms-via-reinforcement-learning.md @@ -4,6 +4,7 @@ title: "DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcemen subtitle: "DeepSeek-R1: 강화학습을 통한 대규모 언어 모델의 추론 능력 향상" date: 2025-01-22 15:19:35 paper_author: "DeepSeek AI" +paper_doi: "10.48550/arXiv.2501.12948" description: >- DeepSeek-R1-Zero는 SFT 없이 강화학습만으로 AIME 2024 pass@1을 15.6%에서 71.0%로 끌어올렸고, DeepSeek-R1은 콜드 스타트 데이터와 다단계 학습으로 OpenAI-o1-1217 수준에 이르렀습니다. 학습 과정과 증류 결과를 정리합니다. categories: ["Paper Reviews", "Language-Models"] diff --git a/_posts/2025-10-07-deepseek-v3-technical-report.md b/_posts/2025-10-07-deepseek-v3-technical-report.md index dd4cd8e..3994cbe 100644 --- a/_posts/2025-10-07-deepseek-v3-technical-report.md +++ b/_posts/2025-10-07-deepseek-v3-technical-report.md @@ -4,6 +4,7 @@ title: "DeepSeek-V3 Technical Report" subtitle: "DeepSeek-V3 기술 보고서" date: 2024-12-27 04:03:16 paper_author: "DeepSeek AI" +paper_doi: "10.48550/arXiv.2412.19437" description: >- DeepSeek-V3는 총 671B, 토큰당 37B 파라미터가 활성화되는 MoE 모델로, MLA와 보조 손실 없는 부하 분산, FP8 혼합 정밀도 학습을 결합해 2.788M H800 GPU 시간만으로 학습을 마쳤습니다. 아키텍처와 학습 인프라를 정리합니다. categories: ["Paper Reviews", "Language-Models"] diff --git a/_posts/2025-10-07-gemma-2--improving-open-language-models-at-a-practical-size.md b/_posts/2025-10-07-gemma-2--improving-open-language-models-at-a-practical-size.md index 4cfcaf9..d1de9e5 100644 --- a/_posts/2025-10-07-gemma-2--improving-open-language-models-at-a-practical-size.md +++ b/_posts/2025-10-07-gemma-2--improving-open-language-models-at-a-practical-size.md @@ -4,6 +4,7 @@ title: "Gemma 2: Improving Open Language Models at a Practical Size" subtitle: "Gemma 2: 실용적 크기에서 오픈 언어 모델 개선" date: 2024-07-31 19:13:07 paper_author: "Google DeepMind" +paper_doi: "10.48550/arXiv.2408.00118" description: >- Gemma 2는 2B·9B 모델을 다음 토큰 예측 대신 지식 증류로 학습하고 로컬-글로벌 어텐션과 GQA를 적용해 2-3배 큰 모델과 경쟁하는 성능을 냈습니다. 증류로 2B 평균 점수가 7.4점 오른 실험과 아키텍처를 정리합니다. categories: ["Paper Reviews", "Language-Models"] diff --git a/_posts/2025-10-07-the-llama-3-herd-of-models.md b/_posts/2025-10-07-the-llama-3-herd-of-models.md index ec6d8c4..d87b7c2 100644 --- a/_posts/2025-10-07-the-llama-3-herd-of-models.md +++ b/_posts/2025-10-07-the-llama-3-herd-of-models.md @@ -3,6 +3,7 @@ layout: post title: "The Llama 3 Herd of Models" date: 2024-07-31 17:54:27 paper_author: "Meta AI" +paper_doi: "10.48550/arXiv.2407.21783" description: >- Llama 3는 약 15조 토큰으로 사전 학습한 8B·70B·405B 조밀한 트랜스포머로, 128K 컨텍스트를 지원하며 405B 모델이 HumanEval 89.0%, MGSM 91.6%를 기록했습니다. 데이터 정제와 사후 학습, 멀티모달 어댑터 설계를 정리합니다. categories: ["Paper Reviews", "Language-Models"] diff --git a/_posts/2025-10-08-qwen3-technical-report.md b/_posts/2025-10-08-qwen3-technical-report.md index 9fc398e..fb27a0c 100644 --- a/_posts/2025-10-08-qwen3-technical-report.md +++ b/_posts/2025-10-08-qwen3-technical-report.md @@ -4,6 +4,7 @@ title: "Qwen3 Technical Report" subtitle: "Qwen3 기술 보고서" date: 2025-05-14 13:41:34 paper_author: "Alibaba Group" +paper_doi: "10.48550/arXiv.2505.09388" description: >- Qwen3는 사고 모드와 비사고 모드를 한 모델에 통합하고 사고 예산으로 추론 깊이를 조절하는 dense·MoE 모델군으로, 119개 언어 36조 토큰으로 사전 학습해 AIME'24 85.7점을 기록했습니다. 3단계 사전 학습과 사후 학습 과정을 정리합니다. categories: ["Paper Reviews", "Language-Models"] diff --git a/_posts/2025-10-10-pixtral-12b.md b/_posts/2025-10-10-pixtral-12b.md index 08cde39..b1c06b0 100644 --- a/_posts/2025-10-10-pixtral-12b.md +++ b/_posts/2025-10-10-pixtral-12b.md @@ -3,6 +3,7 @@ layout: post title: "Pixtral 12B" date: 2024-10-09 17:16:22 paper_author: "Mistral AI" +paper_doi: "10.48550/arXiv.2410.07073" description: >- Pixtral 12B는 원본 해상도와 종횡비를 그대로 처리하는 4억 파라미터 비전 인코더와 Mistral Nemo 12B 디코더를 결합해 7배 큰 Llama-3.2 90B를 앞서고 MM-MT-Bench 6.05점을 기록했습니다. 구조와 새 벤치마크를 정리합니다. categories: ["Paper Reviews", "Multimodal-Learning"] diff --git a/_posts/2025-10-11-gemini--a-family-of-highly-capable-multimodal-models.md b/_posts/2025-10-11-gemini--a-family-of-highly-capable-multimodal-models.md index 284cdb7..9f2e235 100644 --- a/_posts/2025-10-11-gemini--a-family-of-highly-capable-multimodal-models.md +++ b/_posts/2025-10-11-gemini--a-family-of-highly-capable-multimodal-models.md @@ -4,6 +4,7 @@ title: "Gemini: A Family of Highly Capable Multimodal Models" subtitle: "Gemini: 고도로 능력 있는 멀티모달 모델 패밀리" date: 2023-12-19 02:39:27 paper_author: "Google DeepMind" +paper_doi: "10.48550/arXiv.2312.11805" description: >- Gemini는 이미지, 오디오, 비디오, 텍스트를 함께 다루도록 설계된 Ultra, Pro, Nano 모델군으로, Gemini Ultra는 32개 벤치마크 중 30개에서 최고 성능을 경신하고 MMLU 90.04%로 인간 전문가 수준을 넘었습니다. 구조와 평가를 정리합니다. categories: ["Paper Reviews", "Multimodal-Learning"] diff --git a/_posts/2025-10-11-gemini-2.5--pushing-the-frontier-with-advanced-reasoning--multimodality--long-context--and-next-generation-agentic-capabilities.md b/_posts/2025-10-11-gemini-2.5--pushing-the-frontier-with-advanced-reasoning--multimodality--long-context--and-next-generation-agentic-capabilities.md index ae63430..5f45197 100644 --- a/_posts/2025-10-11-gemini-2.5--pushing-the-frontier-with-advanced-reasoning--multimodality--long-context--and-next-generation-agentic-capabilities.md +++ b/_posts/2025-10-11-gemini-2.5--pushing-the-frontier-with-advanced-reasoning--multimodality--long-context--and-next-generation-agentic-capabilities.md @@ -5,6 +5,7 @@ seo_title: "Gemini 2.5: 추론·멀티모달·긴 컨텍스트·에이전틱 능 subtitle: "Gemini 2.5: 첨단 추론, 멀티모달리티, 긴 컨텍스트, 차세대 에이전틱 능력으로 경계를 넓히다" date: 2025-07-07 17:36:04 paper_author: "Google DeepMind" +paper_doi: "10.48550/arXiv.2507.06261" description: >- Gemini 2.5는 희소 MoE 트랜스포머에 사고 기능을 더해 최대 100만 토큰 컨텍스트를 지원하고, 2.5 Pro는 3시간 분량 비디오를 처리하며 LiveCodeBench 74.2%, GPQA diamond 86.4%를 기록했습니다. 모델 구성과 훈련, 안전성 평가를 정리합니다. categories: ["Paper Reviews", "Multimodal-Learning"] diff --git a/_posts/2025-10-19-direct-preference-optimization--your-language-model-is-secretly-a-reward-model.md b/_posts/2025-10-19-direct-preference-optimization--your-language-model-is-secretly-a-reward-model.md index 76ff9e5..ea9d5e2 100644 --- a/_posts/2025-10-19-direct-preference-optimization--your-language-model-is-secretly-a-reward-model.md +++ b/_posts/2025-10-19-direct-preference-optimization--your-language-model-is-secretly-a-reward-model.md @@ -3,6 +3,7 @@ layout: post title: "Direct Preference Optimization: Your Language Model is Secretly a Reward Model" date: 2023-05-29 17:57:46 paper_author: "Stanford University" +paper_doi: "10.48550/arXiv.2305.18290" description: >- DPO는 RLHF의 보상 모델 학습과 강화학습 루프를 이진 교차 엔트로피 손실 하나로 대체합니다. TL;DR 요약 과제에서 GPT-4 기준 승률 약 61%로 PPO의 57%를 앞섰습니다. 보상 재매개변수화 유도와 세 가지 실험을 정리합니다. categories: ["Paper Reviews", "Finetuning"] diff --git a/_posts/2025-10-24-qlora--efficient-finetuning-of-quantized-llms.md b/_posts/2025-10-24-qlora--efficient-finetuning-of-quantized-llms.md index 5bb839b..425f409 100644 --- a/_posts/2025-10-24-qlora--efficient-finetuning-of-quantized-llms.md +++ b/_posts/2025-10-24-qlora--efficient-finetuning-of-quantized-llms.md @@ -4,6 +4,7 @@ title: "QLoRA: Efficient Finetuning of Quantized LLMs" subtitle: "QLoRA: 양자화된 대규모 언어 모델의 효율적인 파인튜닝" date: 2023-05-23 17:50:33 paper_author: "University of Washington" +paper_doi: "10.48550/arXiv.2305.14314" description: >- QLoRA는 4비트 NF4 양자화, Double Quantization, Paged Optimizers로 65B 모델을 단일 48GB GPU에서 파인튜닝합니다. Guanaco는 Vicuna 벤치마크에서 ChatGPT 대비 99.3%에 도달했습니다. 세 기법과 평가를 정리합니다. categories: ["Paper Reviews", "Finetuning"] diff --git a/_posts/2026-01-12-deepseek-v3.2--pushing-the-frontier-of-open-large-language-models.md b/_posts/2026-01-12-deepseek-v3.2--pushing-the-frontier-of-open-large-language-models.md index 7952476..752631f 100644 --- a/_posts/2026-01-12-deepseek-v3.2--pushing-the-frontier-of-open-large-language-models.md +++ b/_posts/2026-01-12-deepseek-v3.2--pushing-the-frontier-of-open-large-language-models.md @@ -4,6 +4,7 @@ title: "DeepSeek-V3.2: Pushing the Frontier of Open Large Language Models" subtitle: "DeepSeek-V3.2: 오픈 대규모 언어 모델의 새로운 지평" date: 2025-12-02 09:25:14 paper_author: "DeepSeek AI" +paper_doi: "10.48550/arXiv.2512.02556" description: >- DeepSeek-V3.2는 DeepSeek Sparse Attention, 사전 훈련 비용의 10%를 넘는 강화학습, 에이전트 작업 합성을 결합했습니다. Speciale 변형은 IMO 2025에서 42점 중 35점을 받았습니다. 세 기술과 벤치마크 결과를 정리합니다. categories: ["Paper Reviews", "Language-Models"] diff --git a/_posts/2026-01-16-constitutional-ai--harmlessness-from-ai-feedback.md b/_posts/2026-01-16-constitutional-ai--harmlessness-from-ai-feedback.md index 8f20f17..0862fba 100644 --- a/_posts/2026-01-16-constitutional-ai--harmlessness-from-ai-feedback.md +++ b/_posts/2026-01-16-constitutional-ai--harmlessness-from-ai-feedback.md @@ -4,6 +4,7 @@ title: "Constitutional AI: Harmlessness from AI Feedback" subtitle: "Constitutional AI: AI 피드백을 통한 무해성 구현" date: 2022-12-15 06:19:23 paper_author: "Anthropic" +paper_doi: "10.48550/arXiv.2212.08073" description: >- Constitutional AI는 유해성에 대한 인간 레이블 없이 16개 원칙으로 된 헌법만으로 무해한 어시스턴트를 훈련합니다. 자기 비평과 수정을 거친 지도 학습, AI 피드백 강화학습(RLAIF)으로 회피하지 않는 무해한 응답을 얻는 과정을 정리합니다. categories: ["Paper Reviews", "Finetuning"] diff --git a/_posts/2026-03-25-lightrag--simple-and-fast-retrieval-augmented-generation.md b/_posts/2026-03-25-lightrag--simple-and-fast-retrieval-augmented-generation.md index 39f2346..13e85a0 100644 --- a/_posts/2026-03-25-lightrag--simple-and-fast-retrieval-augmented-generation.md +++ b/_posts/2026-03-25-lightrag--simple-and-fast-retrieval-augmented-generation.md @@ -3,6 +3,7 @@ layout: post title: "LightRAG: Simple and Fast Retrieval-Augmented Generation" date: 2024-10-08 08:00:12 paper_author: "Beijing University of Posts and Telecommunications" +paper_doi: "10.48550/arXiv.2410.05779" description: >- LightRAG는 그래프 기반 텍스트 인덱싱과 이중 수준 검색을 결합하고 증분 업데이트로 인덱스 재구축을 없앴습니다. 검색 단계에서 GraphRAG는 약 610,000 토큰을 쓰지만 LightRAG는 100 토큰 미만만 씁니다. 인덱싱과 검색 구조, 비용 비교를 정리합니다. categories: ["Paper Reviews", "Retrieval-Augmented-Generation"] diff --git a/_posts/2026-06-07-zep-a-temporal-knowledge-graph-architecture-for-agent-memory.md b/_posts/2026-06-07-zep-a-temporal-knowledge-graph-architecture-for-agent-memory.md index 08e6eed..c45c104 100644 --- a/_posts/2026-06-07-zep-a-temporal-knowledge-graph-architecture-for-agent-memory.md +++ b/_posts/2026-06-07-zep-a-temporal-knowledge-graph-architecture-for-agent-memory.md @@ -4,6 +4,7 @@ title: "Zep: A Temporal Knowledge Graph Architecture for Agent Memory" subtitle: "Zep: 에이전트 메모리를 위한 시간 인식 지식 그래프 아키텍처" date: 2025-01-20 16:52:48 paper_author: "Zep AI" +paper_doi: "10.48550/arXiv.2501.13956" description: >- Zep은 시간 인식 지식 그래프 엔진 Graphiti로 사실의 유효 기간을 추적하는 에이전트 메모리 계층입니다. DMR에서 94.8%로 MemGPT의 93.4%를 앞섰고 LongMemEval에서는 응답 지연을 약 90% 줄였습니다. 그래프 구조와 검색 파이프라인을 정리합니다. categories: ["Paper Reviews", "Retrieval-Augmented-Generation"] diff --git a/_sass/_dark.scss b/_sass/_dark.scss index 02ec754..003ba87 100644 --- a/_sass/_dark.scss +++ b/_sass/_dark.scss @@ -96,10 +96,11 @@ } .page-content .post { - .post-date, .post-categories, .post-tags, .post-readtime { color: $fg-muted; } + .post-date, .post-categories, .post-tags, .post-readtime, .post-citations { color: $fg-muted; } .post-meta { border-color: $border; border-left-color: $link; } .post-tags { border-top-color: $border; } .meta-value { color: $fg; } + a.meta-value { text-decoration-color: $fg-muted; &:hover { color: $link; text-decoration-color: currentColor; } } .meta-label { color: $fg-muted; } } diff --git a/_sass/_post.scss b/_sass/_post.scss index fbc017f..4811f1e 100644 --- a/_sass/_post.scss +++ b/_sass/_post.scss @@ -151,7 +151,7 @@ align-items: baseline; } - .post-date, .post-readtime, .post-categories, .post-tags { + .post-date, .post-readtime, .post-citations, .post-categories, .post-tags { display: flex; flex-wrap: wrap; align-items: baseline; @@ -175,6 +175,17 @@ white-space: nowrap; } + // Its `display: flex` above would otherwise override the attribute. + .post-citations[hidden] { display: none; } + + // A link, but set like the values beside it. + a.meta-value { + text-decoration: underline; + text-decoration-color: $medium-gray; + text-underline-offset: 0.2em; + &:hover { color: $action-color; text-decoration-color: currentColor; } + } + // Shared chip shape; category vs tag differ in fill so the two metadata // levels read as distinct at a glance. .category, .post-tags .tag { diff --git a/docs/tech-doc.md b/docs/tech-doc.md index 31e4ec0..2f01ab5 100644 --- a/docs/tech-doc.md +++ b/docs/tech-doc.md @@ -108,8 +108,8 @@ Pages가 그대로 서빙.** 포스트는 프런트매터에 **2단계** 카테고리를 가진다: `categories: ["<유형>", "<주제>"]`. -- **0단계 (유형)** — `Paper Reviews`, `Paper Summaries`, `Tech Guides`, `Insights` 중 하나. - 글이 어느 내비 탭에 들어갈지를 정한다. 넷 다 전용 페이지와 탭을 가지며, 글이 없는 유형은 +- **0단계 (유형)** — `Paper Reviews`, `Paper Summaries`, `Paper Surveys`, `Tech Guides`, + `Insights` 중 하나. 글이 어느 내비 탭에 들어갈지를 정한다. 다섯 모두 전용 페이지와 탭을 가지며, 글이 없는 유형은 빈 상태 문구를 띄운다(아래 "내비게이션은 코드가 아니라 데이터가 만든다" 참조). - **1단계 (주제)** — `_data/post_conventions.yml`의 `topics` 중 하나. 주제마다 표지 이미지가 정해져 있고(Insights는 유형 표지 `insights.jpg`가 우선), 맞는 주제가 없으면 먼저 거기에 추가한다. 목록에 없는 값은 린트가 막는다. @@ -142,16 +142,19 @@ _site/paper-reviews/language-models/2025/01/23/<slug>.html 상단 메뉴는 하드코딩이 아니다. `_includes/nav_links.html`이 **프런트매터에 `main_nav: true`가 달린 모든 페이지**를 찾아 `nav_order` 숫자 순으로 자동 나열한다. 새 탭을 넣고 싶으면 페이지 -프런트매터에 두 값을 더하면 된다. 현재 순서: +프런트매터에 두 값을 더하면 된다. 탭 이름은 페이지 `title`이고, `nav_title`이 있으면 그것을 쓴다 — +메뉴 폭이 48em이라 "Paper"로 시작하는 탭 셋이 두 줄로 넘쳤기 때문이다(Summaries·Reviews·Surveys). +현재 순서: | nav_order | 페이지 | 소스 | |-----------|--------|------| | 1 | About | `about.md` | -| 2 | Paper Summaries | `paper-summaries.md` — `site.categories['Paper Summaries']` 필터 | -| 3 | Paper Reviews | `paper-reviews.md` — `site.categories['Paper Reviews']` 필터, 주제별 그룹화 | -| 4 | Tech Guides | `tech-guides.md` — `site.categories['Tech Guides']` 필터 | -| 5 | Insights | `insights.md` — `site.categories['Insights']` 필터 | -| 6 | Search | `search.md` | +| 2 | Summaries | `paper-summaries.md` — `site.categories['Paper Summaries']` 필터 | +| 3 | Reviews | `paper-reviews.md` — `site.categories['Paper Reviews']` 필터, 주제별 그룹화 | +| 4 | Surveys | `paper-surveys.md` — `site.categories['Paper Surveys']` 필터 | +| 5 | Tech Guides | `tech-guides.md` — `site.categories['Tech Guides']` 필터 | +| 6 | Insights | `insights.md` — `site.categories['Insights']` 필터 | +| 7 | Search | `search.md` | **빈 섹션도 탭을 유지한다.** 글이 없는 유형은 `_includes/category-posts.html`의 `empty` 문구를 띄운다("Summaries are in the works…"). 편수가 0이라고 `main_nav`를 떼지 않는다 — @@ -377,6 +380,13 @@ Bourbon → base/ → Neat → _layout → _post → _tags → _syntax(Rouge 코 `<author>`가 모두 `site.author`를 쓴다. 논문을 낸 기관은 `author`가 아니라 `paper_author`에 적고 화면에 "Paper by …"로만 표시한다 — jekyll-feed가 글의 `author`를 피드 저자로 쓰기 때문이다. +- **인용 수** — `paper_doi`가 있는 논문 글은 메타 패널 끝에 Semantic Scholar 인용 수(Citations)를 + 보여 준다. 빌드가 아니라 브라우저에서 `js/citations.js`가 받아 오므로 정적 페이지에 숫자가 굳지 + 않는다. arXiv DOI(`10.48550/arXiv.<id>`)는 `arXiv:<id>`로, 그 밖의 DOI는 `DOI:<doi>`로 + 조회한다. 키 없는 API는 한도를 전 세계가 함께 써서 429가 잦으므로 결과를 `localStorage`에 + 하루 동안 두고, 실패하면 마지막으로 받은 값을 보여 주거나 칸을 숨긴다. 0회와 찾지 못한 + 논문(404)도 숨긴다 — 0은 Semantic Scholar가 논문의 중복 레코드에 돌려주는 값이다. OpenAlex는 프리프린트와 + 출판본을 따로 세어 인용 수가 크게 적게 나와 쓰지 않는다. - **검색 노출 검사** — `script/validate-site.sh`가 빌드된 사이트를 훑어 사이트맵·피드가 파싱되는지, 페이지당 `h1`이 1개인지, 헤딩 레벨을 건너뛰지 않는지, 모든 페이지에 설명문과 canonical이 있는지, 설명문·제목이 중복되지 않는지 등을 확인한다. **검사 목록의 정본은 diff --git a/js/citations.js b/js/citations.js new file mode 100644 index 0000000..53ef613 --- /dev/null +++ b/js/citations.js @@ -0,0 +1,61 @@ +// A paper post's citation count, from Semantic Scholar, filled into the meta +// panel field _layouts/post.html prints for a post with `paper_doi`. Fetched in the +// browser rather than at build time, so a static page never shows a stale count. +// The keyless API shares one rate limit worldwide and often answers 429, so a +// result is kept for a day, and a failure shows the last one or nothing. +(function () { + var el = document.querySelector('[data-paper-doi]'); + if (!el) return; + + var doi = el.getAttribute('data-paper-doi'); + var DAY = 24 * 60 * 60 * 1000; + var key = 'citations:' + doi; + // Semantic Scholar finds an arXiv paper by its arXiv ID, not by the DOI + // arXiv registers for it. + var arxiv = doi.match(/^10\.48550\/arXiv\.(.+)$/i); + var id = arxiv ? 'arXiv:' + arxiv[1] : 'DOI:' + doi; + + // Zero is not a count worth showing: Semantic Scholar answers it for a + // duplicate record of a paper, and it stands in for "not found" below. + function show(entry) { + if (!(entry.count > 0)) return; + var count = entry.count.toLocaleString('en-US'); + var link = document.createElement('a'); + link.className = 'meta-value'; + link.title = 'Semantic Scholar'; + // `title` reaches neither touch screen readers nor the keyboard. + link.setAttribute('aria-label', count + ' citations on Semantic Scholar'); + link.href = 'https://www.semanticscholar.org/paper/' + encodeURIComponent(entry.paperId); + link.textContent = count; + el.appendChild(link); + el.hidden = false; + } + + var cached = null; + try { cached = JSON.parse(localStorage.getItem(key)); } catch (e) {} + if (cached && typeof cached.count !== 'number') cached = null; + if (cached && Date.now() - cached.at < DAY) return show(cached); + + var controller = new AbortController(); + var timer = setTimeout(function () { controller.abort(); }, 5000); + fetch('https://api.semanticscholar.org/graph/v1/paper/' + encodeURI(id) + '?fields=citationCount', + { signal: controller.signal }) + .then(function (res) { + // Not found stays not found: cached as a zero, it is asked again tomorrow + // rather than on every view. A count already known is kept instead. + if (res.status === 404 && !cached) return { citationCount: 0 }; + if (!res.ok) throw new Error('Semantic Scholar answered ' + res.status); + return res.json(); + }) + .then(function (data) { + if (typeof data.citationCount !== 'number') throw new Error('no citationCount for ' + id); + var entry = { count: data.citationCount, paperId: data.paperId, at: Date.now() }; + try { localStorage.setItem(key, JSON.stringify(entry)); } catch (e) {} + show(entry); + }) + .catch(function (err) { + console.error('Citation count:', err); + if (cached) show(cached); + }) + .finally(function () { clearTimeout(timer); }); +})(); diff --git a/script/lint-posts.rb b/script/lint-posts.rb index 1f78021..b31da95 100644 --- a/script/lint-posts.rb +++ b/script/lint-posts.rb @@ -127,6 +127,13 @@ def self.front_matter(post, spec) unless author.is_a?(String) && !author.strip.empty? && !author.match?(/et al/i) found << "1: paper_author must name the paper's organisation, got #{author.inspect}" end + # js/citations.js puts it in the request path as is, so a URL, a `doi:` + # prefix, or a `?` or `#` in it finds nothing there. + if data.key?("paper_doi") && !data["paper_doi"].to_s.match?(%r{\A10\.\d{4,9}/[^\s?#]+\z}) + found << "1: paper_doi is a bare DOI (10.<registrant>/<suffix>), got #{data["paper_doi"].inspect}" + end + elsif data.key?("paper_doi") + found << "1: paper_doi is for #{spec["types"].select { |_, t| t["paper"] }.keys.join(" and ")} posts" end cover = spec["types"][type]["cover"] || spec["topics"][topic] diff --git a/test/test_lint_posts.rb b/test/test_lint_posts.rb index cb4222f..34ae32d 100644 --- a/test/test_lint_posts.rb +++ b/test/test_lint_posts.rb @@ -269,5 +269,16 @@ def test_paper_author_is_one_string_without_et_al assert_equal [], lint(front: FRONT.sub('"Mistral AI"', '"Google DeepMind, Google Research, Stanford"')) assert_finding(/paper_author/, lint(front: FRONT.sub('"Mistral AI"', '["A", "B"]'))) end + + def test_paper_doi_is_a_bare_doi_on_paper_posts_only + with_doi = ->(doi) { FRONT.sub("paper_author: \"Mistral AI\"\n", "\\0paper_doi: #{doi}\n") } + assert_equal [], lint(front: with_doi.call('"10.48550/arXiv.2310.06825"')) + assert_equal [], lint(front: with_doi.call('"10.18653/v1/2024.acl-long.1"')) + ['"https://doi.org/10.48550/arXiv.2310.06825"', '"arXiv:2310.06825"', '""', "10.48550", '"10.1000/a?b"', '"10.1000/a#b"'].each do |doi| + assert_finding(/paper_doi is a bare DOI/, lint(front: with_doi.call(doi))) + end + guide = with_doi.call('"10.48550/arXiv.2310.06825"').sub('"Paper Reviews", "Language-Models"', '"Tech Guides", "Agentic-AI"') + assert_finding(/paper_doi is for Paper Reviews and Paper Summaries posts/, lint(front: guide)) + end end From f2911b2565822f58e00f0096fec3d030c47d4a73 Mon Sep 17 00:00:00 2001 From: bits-bytes-nn <aldente0630@gmail.com> Date: Wed, 14 Oct 2026 08:42:14 +0900 Subject: [PATCH 2/2] Add the Paper Surveys type with its section page and tab Seven tabs wrapped the 48em nav bar, so tabs take a shorter nav_title (Summaries, Reviews, Surveys) and desktop link padding drops to 1.1em; the footer site map keeps the full titles. --- _includes/nav_links.html | 7 ++++++- _sass/_layout.scss | 8 +++++--- categories.html | 2 +- insights.md | 2 +- paper-reviews.md | 1 + paper-summaries.md | 1 + paper-surveys.md | 19 +++++++++++++++++++ search.md | 2 +- tech-guides.md | 2 +- 9 files changed, 36 insertions(+), 8 deletions(-) create mode 100644 paper-surveys.md diff --git a/_includes/nav_links.html b/_includes/nav_links.html index f6cd7a5..51fbf95 100644 --- a/_includes/nav_links.html +++ b/_includes/nav_links.html @@ -1,6 +1,11 @@ +{%- comment -%} + `nav_title`: a shorter tab name than the page's title. The bar is 48em wide, + and three tabs that each began with "Paper" wrapped it to two rows. The + footer's site map has the room, so it passes full=true for the titles. +{%- endcomment -%} {% assign nav_pages = site.pages | where: "main_nav", true | sort: "nav_order" %} {% for page in nav_pages %} <li class="nav-link"> - <a href="{{ page.url | prepend: site.baseurl }}">{{ page.title }}</a> + <a href="{{ page.url | prepend: site.baseurl }}">{% if include.full %}{{ page.title }}{% else %}{{ page.nav_title | default: page.title }}{% endif %}</a> </li> {% endfor %} diff --git a/_sass/_layout.scss b/_sass/_layout.scss index bc1c540..dcb1d34 100644 --- a/_sass/_layout.scss +++ b/_sass/_layout.scss @@ -558,13 +558,15 @@ blockquote { // Tighter until $desktop: at 1.5em the links did not fit beside the logo // from 768px to about 785px, iPad portrait included. The bar wrapped to - // two rows, 130px tall, and hid the top of every page beneath it. + // two rows, 130px tall, and hid the top of every page beneath it. 1.1em + // above it: seven tabs at 1.5em wrapped in the fallback font, before the + // web font arrives. @include media ($tablet) { padding-right: 1em; } @include media ($desktop) { - padding-right: 1.5em; + padding-right: 1.1em; } &.active { @@ -587,7 +589,7 @@ blockquote { } @include media ($desktop) { - right: 1.5em; + right: 1.1em; } } } diff --git a/categories.html b/categories.html index d2315b5..9ccfec8 100644 --- a/categories.html +++ b/categories.html @@ -4,7 +4,7 @@ permalink: /categories/ description: >- Every post on this blog grouped by category — Paper Reviews, Paper Summaries, - Tech Guides, and Insights. + Paper Surveys, Tech Guides, and Insights. --- {%- comment -%} diff --git a/insights.md b/insights.md index 523efde..994315b 100644 --- a/insights.md +++ b/insights.md @@ -6,7 +6,7 @@ description: >- The threads a single paper can't hold — agentic-AI architecture, industry shifts, and the design decisions underneath them. main_nav: true -nav_order: 5 +nav_order: 6 --- {%- comment -%} diff --git a/paper-reviews.md b/paper-reviews.md index e5be43b..74dd2b4 100644 --- a/paper-reviews.md +++ b/paper-reviews.md @@ -7,6 +7,7 @@ description: >- Deep teardowns of key AI/ML papers — LLMs, multimodal, fine-tuning, RAG — down to their design decisions and trade-offs, grouped by topic. main_nav: true +nav_title: Reviews nav_order: 3 --- diff --git a/paper-summaries.md b/paper-summaries.md index 93f9a8c..cd16437 100644 --- a/paper-summaries.md +++ b/paper-summaries.md @@ -10,6 +10,7 @@ description: >- # was removed, not one that is still filling up. The empty-state line below is # the honest signal, and the tab is what says this blog does summaries. main_nav: true +nav_title: Summaries nav_order: 2 --- diff --git a/paper-surveys.md b/paper-surveys.md new file mode 100644 index 0000000..54498aa --- /dev/null +++ b/paper-surveys.md @@ -0,0 +1,19 @@ +--- +lang: en +layout: page +title: Paper Surveys +permalink: /paper-surveys/ +description: >- + One topic traced across the papers that shaped it — read in the order they + appeared, and summarised as one line of work. +# In the nav before its first post; see paper-summaries.md. +main_nav: true +nav_title: Surveys +nav_order: 4 +--- + +{%- comment -%} No heading here — see insights.md. {%- endcomment -%} +<p class="desc"><em>{{ page.description }}</em></p> + +{% include category-posts.html category="Paper Surveys" empty="Surveys are in the works — this space will fill up soon." %} +<br> diff --git a/search.md b/search.md index 27e5986..09edb49 100644 --- a/search.md +++ b/search.md @@ -6,7 +6,7 @@ description: >- Full-text search across every post on this blog — by title, body, category, or tag. main_nav: true -nav_order: 6 +nav_order: 7 stylesheet: /css/search.css # An empty shell until JavaScript runs, so there is nothing here for a search # engine to index. diff --git a/tech-guides.md b/tech-guides.md index 44164d7..e4d88b6 100644 --- a/tech-guides.md +++ b/tech-guides.md @@ -8,7 +8,7 @@ description: >- and platforms I work with. # Stays in the nav even with no posts yet — see paper-summaries.md. main_nav: true -nav_order: 4 +nav_order: 5 --- {%- comment -%} No heading here — see insights.md. {%- endcomment -%}