first commit
This commit is contained in:
@@ -0,0 +1,144 @@
|
||||
---
|
||||
name: daily-paper-generator
|
||||
description: Use when the user asks to generate daily paper digests on a general topic. This skill supports both arXiv and bioRxiv (or either one), then produces structured Chinese/English summaries for selected papers.
|
||||
version: 0.5.1
|
||||
---
|
||||
|
||||
# Daily Paper Generator
|
||||
|
||||
## Overview
|
||||
|
||||
Discover, screen, and summarize recent papers for any research topic.
|
||||
|
||||
Supported sources:
|
||||
- arXiv
|
||||
- bioRxiv
|
||||
- both (`--source both`)
|
||||
|
||||
Core workflow:
|
||||
1. Define topic query and time window
|
||||
2. Search papers from arXiv / bioRxiv
|
||||
3. Select Top 10 candidates per field
|
||||
4. Score and narrow to Top 3 per field
|
||||
5. Choose Top 1 per field
|
||||
6. Generate bilingual summaries
|
||||
7. Save outputs to `daily paper/`
|
||||
|
||||
## When to Use
|
||||
|
||||
Use this skill when:
|
||||
- The user asks for a daily/weekly paper digest on any topic
|
||||
- The user wants recent papers from arXiv and/or bioRxiv
|
||||
- The user needs structured bilingual notes for reading and tracking
|
||||
|
||||
## Output Format
|
||||
|
||||
Each summary should contain:
|
||||
1. Paper title
|
||||
2. Authors and venue/source
|
||||
3. Link(s) and date
|
||||
4. Chinese review (~300 words)
|
||||
5. English review (concise academic prose)
|
||||
6. Metadata table
|
||||
7. Appendix (optional resources)
|
||||
|
||||
## Quick Reference
|
||||
|
||||
| Task | Method |
|
||||
|---|---|
|
||||
| Search papers | Use `scripts/arxiv_search.py` with `--source arxiv|biorxiv|both` |
|
||||
| Topic selection | Use general-topic queries from `references/keywords.md` |
|
||||
| Evaluate quality | Use `references/quality-criteria.md` |
|
||||
| Write Chinese review | Use `references/writing-style.md` |
|
||||
| Write English review | Follow scientific writing best practices |
|
||||
|
||||
## Workflow
|
||||
|
||||
### Step 1: Define query
|
||||
|
||||
Choose a concrete topic query. Examples:
|
||||
- `test-time adaptation for medical imaging`
|
||||
- `multimodal foundation model for healthcare`
|
||||
- `protein language model interpretability`
|
||||
|
||||
### Step 2: Search arXiv and/or bioRxiv
|
||||
|
||||
Use helper script:
|
||||
|
||||
```bash
|
||||
python skills/daily-paper-generator/scripts/arxiv_search.py \
|
||||
--query "test-time adaptation for medical imaging" \
|
||||
--source both \
|
||||
--months 1 \
|
||||
--max-results 80 \
|
||||
--output /tmp/papers.json
|
||||
```
|
||||
|
||||
Notes:
|
||||
- `--source arxiv`: arXiv only
|
||||
- `--source biorxiv`: bioRxiv only
|
||||
- `--source both`: merge both sources and sort by date
|
||||
|
||||
### Step 3: Top 10 candidate selection (per field)
|
||||
|
||||
For each candidate paper:
|
||||
1. Check topic relevance from title + abstract
|
||||
2. Remove obviously off-topic papers
|
||||
3. Keep **Top 10 candidates** for this field
|
||||
|
||||
Minimum rule:
|
||||
- Do not jump directly from raw search results to final paper.
|
||||
- Keep an explicit Top 10 list first.
|
||||
|
||||
### Step 4: Top 3 quality shortlist (per field)
|
||||
|
||||
For the Top 10 pool:
|
||||
1. Score each paper with `references/quality-criteria.md`
|
||||
2. Rank by weighted score
|
||||
3. Keep **Top 3**
|
||||
|
||||
### Step 5: Final Top 1 selection (per field)
|
||||
|
||||
For the Top 3 shortlist:
|
||||
1. Compare novelty + method completeness + experimental credibility
|
||||
2. Check practical impact for the field
|
||||
3. Select **Top 1** as the final pick
|
||||
|
||||
Required output trace:
|
||||
- Top 10 candidate list
|
||||
- Top 3 scored shortlist (with weighted scores)
|
||||
- Final Top 1 and one-paragraph selection rationale
|
||||
|
||||
### Step 6: Generate bilingual summaries
|
||||
|
||||
For each selected paper, generate:
|
||||
- 中文评语:背景、挑战、贡献、方法、结果、局限
|
||||
- English Review: concise, factual, non-formulaic
|
||||
|
||||
### Step 7: Save output
|
||||
|
||||
Recommended directory and naming:
|
||||
|
||||
```text
|
||||
daily paper/
|
||||
YYYY-MM-DD-HHMM-paper-1.md
|
||||
YYYY-MM-DD-HHMM-paper-2.md
|
||||
YYYY-MM-DD-HHMM-paper-3.md
|
||||
```
|
||||
|
||||
## Additional Resources
|
||||
|
||||
- `references/keywords.md`: general-topic query templates
|
||||
- `references/quality-criteria.md`: scoring rubric
|
||||
- `references/writing-style.md`: review writing style
|
||||
- `example/daily paper example.md`: output example
|
||||
- `scripts/arxiv_search.py`: arXiv + bioRxiv search helper
|
||||
|
||||
## Important Notes
|
||||
|
||||
1. Use explicit topic queries, avoid single-word vague queries.
|
||||
2. Keep the time window explicit (`--months N`).
|
||||
3. Distinguish source in metadata (`arxiv` vs `biorxiv`).
|
||||
4. Use the fixed narrowing rule: **Top 10 -> Top 3 -> Top 1** (per field).
|
||||
5. If a paper lacks robust evaluation, mark confidence and limitations clearly.
|
||||
6. Do not fabricate unavailable fields (institution/GitHub/code links).
|
||||
@@ -0,0 +1,78 @@
|
||||
# DeeperBrain: A Neuro-Grounded EEG Foundation Model Towards Universal BCI
|
||||
|
||||
## 作者及单位
|
||||
Jiquan Wang, Sha Zhao, Yangxuan Zhou, Yiming Kang, Shijian Li, Gang Pan
|
||||
Zhejiang University, College of Computer Science and Technology
|
||||
|
||||
## arXiv 链接
|
||||
https://arxiv.org/abs/2601.06134
|
||||
|
||||
**发表日期**: 2026-01-05
|
||||
**arXiv ID**: 2601.06134
|
||||
**分类**: cs.LG, q-bio.NC, eess.SP
|
||||
|
||||
---
|
||||
|
||||
## 中文评语
|
||||
|
||||
通用脑机接口的发展受限于 EEG 信号的跨受试和跨任务泛化能力不足。现有基础模型大多采用通用深度学习架构,忽略了 EEG 信号的神经生理学特性和生物物理约束,且在冻结探针评估下效果有限。本研究提出 DeeperBrain,一种神经驱动的 EEG 基础模型,将领域特定的归纳偏差整合到模型设计和学习目标中。在架构层面,该方法包含基于容积传导的通道编码和神经动力学感知的时间编码。在预训练层面,引入双目标策略:掩码 EEG 重建保证局部保真度,神经动力学统计预测以强制与宏观脑状态对齐。实验结果显示,DeeperBrain 在零样本跨受试迁移、跨任务泛化和少样本学习场景下优于现有基础模型。更重要的是,它在严格的冻结探针评估下保持优越效果,验证了将神经科学第一原理嵌入模型能够赋予学习表示通用 BCI 所需的泛化能力。
|
||||
|
||||
## English Review
|
||||
|
||||
Universal Brain-Computer Interfaces are constrained by the limited cross-subject and cross-task generalization of EEG signals. Most existing foundation models employ generic deep learning architectures that overlook neurophysiological characteristics and biophysical constraints, showing limited efficacy under frozen probing evaluation. This study presents DeeperBrain, a neuro-grounded EEG foundation model that integrates domain-specific inductive biases into both architecture design and learning objectives. The model incorporates volume conduction-based channel encoding and neurodynamics-aware temporal encoding to capture spatial and temporal patterns respectively. For pretraining, this study introduces a dual-objective strategy combining masked EEG reconstruction for local fidelity and neurodynamics statistics prediction to align with macroscopic brain states. Experiments show DeeperBrain outperforms existing foundation models across zero-shot cross-subject transfer, cross-task generalization, and few-shot learning scenarios. The model maintains strong performance under frozen probing evaluation, demonstrating that embedding neuroscientific first principles endows learned representations with the generalization needed for universal BCI.
|
||||
|
||||
## 主图
|
||||
|
||||
这里需要将论文的主图进行下载并存放。
|
||||
|
||||
---
|
||||
|
||||
## 论文元数据
|
||||
|
||||
| 项目 | 内容 |
|
||||
|------|------|
|
||||
| **标题** | DeeperBrain: A Neuro-Grounded EEG Foundation Model Towards Universal BCI |
|
||||
| **第一作者** | Jiquan Wang |
|
||||
| **作者列表** | Jiquan Wang, Sha Zhao, Yangxuan Zhou, Yiming Kang, Shijian Li, Gang Pan |
|
||||
| **第一作者单位** | Zhejiang University, College of Computer Science and Technology |
|
||||
| **发表日期** | 2026-01-05 |
|
||||
| **arXiv 链接** | https://arxiv.org/abs/2601.06134 |
|
||||
| **PDF 链接** | https://arxiv.org/pdf/2601.06134 |
|
||||
| **分类** | cs.LG, q-bio.NC, eess.SP |
|
||||
|
||||
---
|
||||
|
||||
## 整合格式
|
||||
|
||||
Daily Paper 0126
|
||||
|
||||
DeeperBrain: A Neuro-Grounded EEG Foundation Model Towards Universal BCI
|
||||
|
||||
https://arxiv.org/abs/2601.06134
|
||||
|
||||
|
||||
|
||||
通用脑机接口的发展受限于 EEG 信号的跨受试和跨任务泛化能力不足。现有基础模型大多采用通用深度学习架构,忽略了 EEG 信号的神经生理学特性和生物物理约束,且在冻结探针评估下效果有限。本研究提出 DeeperBrain,一种神经驱动的 EEG 基础模型,将领域特定的归纳偏差整合到模型设计和学习目标中。在架构层面,该方法包含基于容积传导的通道编码和神经动力学感知的时间编码。在预训练层面,引入双目标策略:掩码 EEG 重建保证局部保真度,神经动力学统计预测以强制与宏观脑状态对齐。实验结果显示,DeeperBrain 在零样本跨受试迁移、跨任务泛化和少样本学习场景下优于现有基础模型。更重要的是,它在严格的冻结探针评估下保持优越效果,验证了将神经科学第一原理嵌入模型能够赋予学习表示通用 BCI 所需的泛化能力。
|
||||
|
||||
|
||||
|
||||
Universal Brain-Computer Interfaces are constrained by the limited cross-subject and cross-task generalization of EEG signals. Most existing foundation models employ generic deep learning architectures that overlook neurophysiological characteristics and biophysical constraints, showing limited efficacy under frozen probing evaluation. This study presents DeeperBrain, a neuro-grounded EEG foundation model that integrates domain-specific inductive biases into both architecture design and learning objectives. The model incorporates volume conduction-based channel encoding and neurodynamics-aware temporal encoding to capture spatial and temporal patterns respectively. For pretraining, this study introduces a dual-objective strategy combining masked EEG reconstruction for local fidelity and neurodynamics statistics prediction to align with macroscopic brain states. Experiments show DeeperBrain outperforms existing foundation models across zero-shot cross-subject transfer, cross-task generalization, and few-shot learning scenarios. The model maintains strong performance under frozen probing evaluation, demonstrating that embedding neuroscientific first principles endows learned representations with the generalization needed for universal BCI.
|
||||
|
||||
## 附录
|
||||
|
||||
**github连接:**未开源
|
||||
|
||||
**补充说明**
|
||||
|
||||
这篇论文的重要价值在于:
|
||||
|
||||
1. **跨学科融合**:将神经科学知识与深度学习结合
|
||||
2. **可解释性**:神经驱动设计提高了模型的可解释性
|
||||
3. **泛化能力**:在跨受试、跨任务场景下表现优异
|
||||
4. **实用价值**:为通用 BCI 系统的开发提供了新方向
|
||||
|
||||
**Sources:**
|
||||
|
||||
- [arXiv Abstract](https://arxiv.org/abs/2601.06134)
|
||||
- [arXiv HTML](https://arxiv.org/html/2601.06134v1)
|
||||
- [Paperverse Review](https://paperverse.io/paper/eabc5d58-8762-4dc9-aaf3-665057852cb7)
|
||||
@@ -0,0 +1,71 @@
|
||||
# General Topic Query Templates
|
||||
|
||||
## Query construction
|
||||
|
||||
Use this template:
|
||||
|
||||
`<task/problem> + <domain> + <method/constraint>`
|
||||
|
||||
Examples:
|
||||
- `test-time adaptation + medical imaging + robustness`
|
||||
- `multimodal retrieval + biomedicine + contrastive learning`
|
||||
- `speech representation + low-resource + self-supervised learning`
|
||||
|
||||
## Topic starters
|
||||
|
||||
### Machine learning
|
||||
- `test-time adaptation`
|
||||
- `domain generalization`
|
||||
- `uncertainty estimation`
|
||||
- `causal representation learning`
|
||||
|
||||
### Multimodal and language
|
||||
- `multimodal foundation model`
|
||||
- `retrieval augmented generation`
|
||||
- `vision-language model evaluation`
|
||||
- `long-context reasoning`
|
||||
|
||||
### Bio/health
|
||||
- `protein language model`
|
||||
- `single-cell foundation model`
|
||||
- `computational pathology`
|
||||
- `clinical prediction model calibration`
|
||||
|
||||
### Neuroscience / BCI
|
||||
- `EEG decoding`
|
||||
- `speech decoding from EEG`
|
||||
- `brain-computer interface`
|
||||
- `neural signal representation learning`
|
||||
|
||||
## Source-specific tips
|
||||
|
||||
### arXiv
|
||||
Search page pattern:
|
||||
|
||||
`https://arxiv.org/search/?searchtype=all&query=<QUERY>&abstracts=show&order=-announced_date_first`
|
||||
|
||||
API pattern:
|
||||
|
||||
`https://export.arxiv.org/api/query?search_query=all:<QUERY>&start=0&max_results=50&sortBy=submittedDate&sortOrder=descending`
|
||||
|
||||
### bioRxiv
|
||||
Use API by date range and then filter by query text:
|
||||
|
||||
`https://api.biorxiv.org/details/biorxiv/<FROM_DATE>/<TO_DATE>/<CURSOR>`
|
||||
|
||||
Example:
|
||||
|
||||
`https://api.biorxiv.org/details/biorxiv/2026-01-01/2026-04-23/0`
|
||||
|
||||
## Practical defaults
|
||||
|
||||
- Query length: 3 to 8 words
|
||||
- Time range: last 3 months (`--months 3`)
|
||||
- Sources: `--source both`
|
||||
- Result cap: `--max-results 50`
|
||||
|
||||
## Anti-patterns
|
||||
|
||||
- Too broad: `AI`, `biology`, `vision`
|
||||
- Too narrow with hard constraints before retrieval
|
||||
- Mixing too many unrelated concepts in one query
|
||||
@@ -0,0 +1,124 @@
|
||||
# 论文质量评审标准
|
||||
|
||||
## 评审维度与权重
|
||||
|
||||
| 维度 | 权重 | 说明 |
|
||||
|------|------|------|
|
||||
| **创新性** | 30% | 论文的创新程度和贡献的新颖性 |
|
||||
| **方法完整性** | 25% | 方法的描述完整性和可复现性 |
|
||||
| **实验充分性** | 25% | 实验设计的全面性和结果的可信度 |
|
||||
| **写作质量** | 10% | 论文表达的清晰度和学术规范性 |
|
||||
| **相关性与影响力** | 10% | 与领域的相关性和潜在影响力 |
|
||||
|
||||
## 详细评分标准
|
||||
|
||||
### 1. 创新性 (30%)
|
||||
|
||||
| 分数 | 标准 |
|
||||
|------|------|
|
||||
| **5分 - 突破性贡献** | 提出全新的范式或方法,对领域有重大影响 |
|
||||
| **4分 - 显著创新** | 在现有方法上有显著改进,提出新的见解 |
|
||||
| **3分 - 方法创新** | 提出了新的方法或框架,有一定的创新性 |
|
||||
| **2分 - 改进型** | 对现有方法有改进,但创新有限 |
|
||||
| **1分 - 增量改进** | 仅有微小的改进或组合现有方法 |
|
||||
|
||||
**评估要点:**
|
||||
- 是否提出了新的问题或视角?
|
||||
- 方法是否有实质性创新?
|
||||
- 是否突破了现有方法的局限?
|
||||
|
||||
### 2. 方法完整性 (25%)
|
||||
|
||||
| 分数 | 标准 |
|
||||
|------|------|
|
||||
| **5分 - 完整且严谨** | 方法描述完整,数学推导严谨,易于复现 |
|
||||
| **4分 - 非常完整** | 方法描述详细,大部分细节可复现 |
|
||||
| **3分 - 可复现** | 核心方法清晰,可基本复现 |
|
||||
| **2分 - 缺乏细节** | 关键细节缺失,复现困难 |
|
||||
| **1分 - 表述不清** | 方法描述不清楚,无法判断有效性 |
|
||||
|
||||
**评估要点:**
|
||||
- 方法描述是否清晰?
|
||||
- 是否提供了足够的细节?
|
||||
- 是否有代码仓库?
|
||||
- 数学推导是否严谨?
|
||||
|
||||
### 3. 实验充分性 (25%)
|
||||
|
||||
| 分数 | 标准 |
|
||||
|------|------|
|
||||
| **5分 - 全面深入** | 多数据集验证,充分消融实验,详细分析 |
|
||||
| **4分 - 非常充分** | 多个数据集,合理消融实验 |
|
||||
| **3分 - 合理验证** | 主干实验完整,结果可信 |
|
||||
| **2分 - 验证不足** | 实验较少,缺乏对比 |
|
||||
| **1分 - 实验不足** | 仅在简单场景验证,结果不可信 |
|
||||
|
||||
**评估要点:**
|
||||
- 是否在标准数据集上验证?
|
||||
- 是否有充分的对比实验?
|
||||
- 是否有消融实验?
|
||||
- 统计显著性如何?
|
||||
|
||||
### 4. 写作质量 (10%)
|
||||
|
||||
| 分数 | 标准 |
|
||||
|------|------|
|
||||
| **5分 - 优秀** | 表达清晰,逻辑严密,学术规范 |
|
||||
| **4分 - 良好** | 表达清楚,逻辑基本完整 |
|
||||
| **3分 - 清晰** - 表达基本清晰,可理解 |
|
||||
| **2分 - 一般** | 表述有模糊之处 |
|
||||
| **1分 - 表述不清** | 表述混乱,难以理解 |
|
||||
|
||||
### 5. 相关性与影响力 (10%)
|
||||
|
||||
| 分数 | 标准 |
|
||||
|------|------|
|
||||
| **5分 - 广泛影响** | 解决重要问题,影响多个领域 |
|
||||
| **4分 - 领域重要** | 解决领域内重要问题 |
|
||||
| **3分 - 相关有意义** - 研究有意义,有一定影响 |
|
||||
| **2分 - 小众问题** | 针对小众问题 |
|
||||
| **1分 - 影响有限** - 影响非常有限 |
|
||||
|
||||
## 自动评分辅助指标
|
||||
|
||||
在人工评审前,可使用以下指标辅助初筛:
|
||||
|
||||
- **摘要质量**:摘要是否包含实验结果和具体数据
|
||||
- **数据集**:是否在知名数据集上验证(如 TUH EEG, BCIC IV 等)
|
||||
- **代码可用性**:是否提供 GitHub 链接
|
||||
- **作者机构**:第一作者/机构的学术声誉(可选)
|
||||
- **引用数**:arXiv 上的早期引用数(可选)
|
||||
|
||||
## 综合评分计算
|
||||
|
||||
```
|
||||
总分 = 创新性×0.30 + 方法完整性×0.25 + 实验充分性×0.25 + 写作质量×0.10 + 相关性与影响力×0.10
|
||||
```
|
||||
|
||||
**评分示例:**
|
||||
- 创新性:4分
|
||||
- 方法完整性:3分
|
||||
- 实验充分性:4分
|
||||
- 写作质量:3分
|
||||
- 相关性与影响力:4分
|
||||
|
||||
总分 = 4×0.30 + 3×0.25 + 4×0.25 + 3×0.10 + 4×0.10 = 1.2 + 0.75 + 1.0 + 0.3 + 0.4 = 3.65
|
||||
|
||||
## 评审流程
|
||||
|
||||
1. **初筛**:根据标题和摘要排除明显不相关的论文
|
||||
2. **Top 10 候选池**:每个领域先固定保留 Top 10
|
||||
3. **全文阅读**:对 Top 10 进行深度阅读/细读摘要与方法实验部分
|
||||
4. **维度打分**:按照5个维度逐一打分
|
||||
5. **计算总分**:加权计算综合得分
|
||||
6. **Top 3 shortlist**:按总分排序,选出 Top 3
|
||||
7. **Top 1 final**:在 Top 3 中结合创新性、实验可信度和领域影响力选出 Top 1
|
||||
|
||||
## 固定收敛规则(每个领域)
|
||||
|
||||
- 必须遵循:**Top 10 -> Top 3 -> Top 1**
|
||||
- 不允许从原始检索结果直接跳到最终 Top 1
|
||||
- 输出必须可审计,至少包含:
|
||||
- Top 10 候选列表
|
||||
- Top 3 评分表(五维分数 + 加权总分)
|
||||
- Top 1 选择理由
|
||||
@@ -0,0 +1,134 @@
|
||||
# 中文评语写作风格指南
|
||||
|
||||
基于 AINet Daily Paper.xlsx 中高质量示例的写作风格总结。
|
||||
|
||||
## 评语结构
|
||||
|
||||
中文评语约 300 字,遵循以下结构:
|
||||
|
||||
```
|
||||
1. 背景 (1-2句) ──> 介绍研究领域的背景和重要性
|
||||
2. 挑战 (2-3句) ──> 指出现有方法面临的关键问题
|
||||
3. 贡献 (1-2句) ──> 概述本工作的核心贡献
|
||||
4. 方法 (2-3句) ──> 描述提出的方法/模型的关键技术
|
||||
5. 实验结果 (2-3句) ──> 总结主要实验发现和性能指标
|
||||
6. 分析与局限 (1-2句) ──> 分析结果意义,指出局限性
|
||||
```
|
||||
|
||||
## 常用句式模板
|
||||
|
||||
### 开头(背景)
|
||||
- `本文针对...问题`
|
||||
- `本研究聚焦于...`
|
||||
- `本文探讨了...这一基本挑战`
|
||||
- `...始终面临诸多挑战`
|
||||
|
||||
### 挑战描述
|
||||
- `尽管...,但现有方法面临...`
|
||||
- `然而,现有方法存在...`
|
||||
- `...高度异构,而以往...难以兼顾...`
|
||||
- `针对这些问题,本文提出...`
|
||||
|
||||
### 方法描述
|
||||
- `为此,本文提出...`
|
||||
- `该研究提出...`
|
||||
- `本文提出...,一种...`
|
||||
- `该方法通过...`
|
||||
|
||||
### 实验结果
|
||||
- `实验结果表明...`
|
||||
- `在...数据集上,该方法...`
|
||||
- `实验在...上取得了...`
|
||||
- `结果表明,...`
|
||||
|
||||
### 分析与局限
|
||||
- `从而验证了...的可行性`
|
||||
- `为...奠定方法学基础`
|
||||
- `该工作打破了...`
|
||||
- `从而验证了...在实际应用中的可行性`
|
||||
|
||||
## 高质量示例分析
|
||||
|
||||
### 示例 1:ECHO (Toward Contextual Seq2Seq Paradigms in Large EEG Models)
|
||||
|
||||
**结构分析:**
|
||||
```
|
||||
[背景] 从脑电信号中统一刻画和理解多样化认知任务始终面临诸多挑战
|
||||
[挑战] 不同任务形式与标签空间差异显著,不同数据集在电极布局和采集范式上高度异构,
|
||||
而以往以编码器为中心、依赖任务专用预测头的建模方式难以兼顾泛化性与灵活性
|
||||
[方法] 为此,本文提出 ECHO,一种以解码器为核心的大规模脑电建模范式,
|
||||
将 EEG 分析重构为统一的序列到序列学习问题
|
||||
[技术细节] 该方法将连续脑电片段、任务标识与标签符号共同组织进自回归解码序列中,
|
||||
使模型能够在同一框架下理解任务语境并生成对应预测
|
||||
[实验] 在涵盖 12 个公开数据集、6 类脑电任务的统一多任务评测中,
|
||||
ECHO 在整体性能、跨数据集泛化以及零样本场景下均显著优于多种代表性基线方法
|
||||
[意义] 为新一代灵活、可扩展的脑机接口系统奠定方法学基础
|
||||
```
|
||||
|
||||
### 示例 2:EEG-to-Voice Decoding
|
||||
|
||||
**结构分析:**
|
||||
```
|
||||
[背景] 本研究聚焦于从非侵入式 EEG 信号中重建有声语音与想象语音,
|
||||
以辅助存在言语障碍的个体进行交流
|
||||
[方法] 其技术框架包括一个被试特异的生成器,以开环方式将预处理后的 EEG 信号映射为 Mel 频谱
|
||||
[技术细节] 随后通过预训练的 HiFi-GAN 声码器和 HuBERT ASR 模块生成语音波形并解码文本
|
||||
[创新点] 该方法避免了显式的时间对齐过程,采用迁移学习将基于有声语音预训练的生成器
|
||||
适配到想象语音任务中,并使用双损失函数进行训练
|
||||
[实验结果] 在有声语音和想象语音两种情形下均实现了稳定的声学重建性能和语言层面的重建性能
|
||||
[额外特点] 在语句长度增加的情况下仍能保持文本层面的解码性能
|
||||
[意义] 从而验证了 EEG 到语音通信在实际应用中的可行性
|
||||
```
|
||||
|
||||
## 写作要点
|
||||
|
||||
### 1. 学术语言规范
|
||||
- 使用正式的学术书面语
|
||||
- 避免口语化表达
|
||||
- 使用精确的技术术语
|
||||
|
||||
### 2. 逻辑连贯
|
||||
- 各部分之间有清晰的逻辑关系
|
||||
- 使用恰当的连接词(然而、为此、从而、同时)
|
||||
- 从问题到解决方案到验证结果
|
||||
|
||||
### 3. 信息密度
|
||||
- 每句话都承载有效信息
|
||||
- 避免冗余表述
|
||||
- 突出核心贡献
|
||||
|
||||
### 4. 客观评价
|
||||
- 准确描述实验结果
|
||||
- 指出方法的局限性
|
||||
- 不夸大成果
|
||||
|
||||
## 英文评语写作
|
||||
|
||||
英文评语应与中文评语对应,保持流畅的学术英语风格:
|
||||
|
||||
- 使用正式的学术英语
|
||||
- 保持与中文评语相同的结构
|
||||
- 注意时态一致性(描述论文内容用现在时,描述实验结果用过去时)
|
||||
- 使用准确的学术词汇
|
||||
|
||||
### 常用句式
|
||||
|
||||
**Opening:**
|
||||
- `This paper addresses the...`
|
||||
- `This study focuses on...`
|
||||
- `The paper proposes...`
|
||||
|
||||
**Problem:**
|
||||
- `While existing...`
|
||||
- `However, current methods face...`
|
||||
- `Despite progress in...`
|
||||
|
||||
**Method:**
|
||||
- `To tackle this, the research proposes...`
|
||||
- `The authors present...`
|
||||
- `This work introduces...`
|
||||
|
||||
**Results:**
|
||||
- `Experiments demonstrate that...`
|
||||
- `The findings show...`
|
||||
- `Results indicate that...`
|
||||
280
文档润色流和知识库构建流/claude-scholar/skills/daily-paper-generator/scripts/arxiv_search.py
Executable file
280
文档润色流和知识库构建流/claude-scholar/skills/daily-paper-generator/scripts/arxiv_search.py
Executable file
@@ -0,0 +1,280 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Research paper search helper for arXiv and bioRxiv.
|
||||
|
||||
Usage:
|
||||
python arxiv_search.py --query "test-time adaptation" --source both --max-results 30
|
||||
python arxiv_search.py --keywords multimodal representation learning --source arxiv
|
||||
python arxiv_search.py --query "protein language model" --source biorxiv --months 6
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import json
|
||||
import re
|
||||
from datetime import datetime, timedelta
|
||||
from typing import Dict, List, Optional
|
||||
from urllib.parse import quote_plus
|
||||
from urllib.request import urlopen
|
||||
|
||||
import feedparser
|
||||
|
||||
|
||||
def _safe_parse_date(value: str) -> Optional[datetime]:
|
||||
if not value:
|
||||
return None
|
||||
for fmt in ("%Y-%m-%d", "%Y-%m-%dT%H:%M:%SZ", "%Y-%m-%dT%H:%M:%S"):
|
||||
try:
|
||||
return datetime.strptime(value[:19], fmt)
|
||||
except ValueError:
|
||||
continue
|
||||
return None
|
||||
|
||||
|
||||
def _in_time_window(date_text: str, months: int) -> bool:
|
||||
parsed = _safe_parse_date(date_text)
|
||||
if parsed is None:
|
||||
return True
|
||||
cutoff = datetime.now() - timedelta(days=months * 30)
|
||||
return parsed >= cutoff
|
||||
|
||||
|
||||
def _token_match(text: str, query: str) -> bool:
|
||||
query_tokens = [t.lower() for t in re.split(r"\s+", query.strip()) if t.strip()]
|
||||
if not query_tokens:
|
||||
return True
|
||||
hay = text.lower()
|
||||
return all(tok in hay for tok in query_tokens)
|
||||
|
||||
|
||||
def search_arxiv(
|
||||
query: str,
|
||||
max_results: int = 50,
|
||||
categories: Optional[List[str]] = None,
|
||||
months: int = 3,
|
||||
) -> List[Dict]:
|
||||
base_url = "https://export.arxiv.org/api/query?"
|
||||
|
||||
if categories:
|
||||
cat_query = " OR ".join([f"cat:{cat}" for cat in categories])
|
||||
search_query = f"search_query=({quote_plus(cat_query)})+AND+all:{quote_plus(query)}"
|
||||
else:
|
||||
search_query = f"search_query=all:{quote_plus(query)}"
|
||||
|
||||
params = f"&start=0&max_results={max_results}&sortBy=submittedDate&sortOrder=descending"
|
||||
url = base_url + search_query + params
|
||||
|
||||
print(f"[arXiv] searching: {url}")
|
||||
feed = feedparser.parse(url)
|
||||
papers: List[Dict] = []
|
||||
|
||||
for entry in feed.entries:
|
||||
published = datetime(*entry.published_parsed[:6])
|
||||
if not _in_time_window(published.strftime("%Y-%m-%d"), months):
|
||||
continue
|
||||
|
||||
authors = [author.name for author in entry.authors] if getattr(entry, "authors", None) else []
|
||||
first_author = authors[0] if authors else "Unknown"
|
||||
arxiv_id = entry.id.split("/abs/")[-1]
|
||||
arxiv_link = f"https://arxiv.org/abs/{arxiv_id}"
|
||||
summary = re.sub(r"\s+", " ", entry.summary).strip()
|
||||
|
||||
papers.append(
|
||||
{
|
||||
"source": "arxiv",
|
||||
"title": entry.title.strip(),
|
||||
"authors": authors,
|
||||
"first_author": first_author,
|
||||
"summary": summary,
|
||||
"published": published.strftime("%Y-%m-%d"),
|
||||
"id": arxiv_id,
|
||||
"arxiv_id": arxiv_id,
|
||||
"link": arxiv_link,
|
||||
"arxiv_link": arxiv_link,
|
||||
"pdf_link": f"https://arxiv.org/pdf/{arxiv_id}.pdf",
|
||||
"categories": [tag.term for tag in getattr(entry, "tags", [])],
|
||||
}
|
||||
)
|
||||
|
||||
print(f"[arXiv] found {len(papers)} papers in last {months} month(s)")
|
||||
return papers
|
||||
|
||||
|
||||
def search_biorxiv(query: str, max_results: int = 50, months: int = 3) -> List[Dict]:
|
||||
end_date = datetime.now().date()
|
||||
start_date = (datetime.now() - timedelta(days=months * 30)).date()
|
||||
|
||||
cursor = 0
|
||||
page_size = 100
|
||||
papers: List[Dict] = []
|
||||
|
||||
# bioRxiv API may reject future date ranges in environments with shifted system dates.
|
||||
# Probe and step back by year until the API accepts the interval.
|
||||
shift_days = 0
|
||||
while True:
|
||||
probe_start = start_date - timedelta(days=shift_days)
|
||||
probe_end = end_date - timedelta(days=shift_days)
|
||||
probe_url = (
|
||||
"https://api.biorxiv.org/details/biorxiv/"
|
||||
f"{probe_start.isoformat()}/{probe_end.isoformat()}/0"
|
||||
)
|
||||
with urlopen(probe_url, timeout=30) as response:
|
||||
probe_payload = json.loads(response.read().decode("utf-8"))
|
||||
status = (
|
||||
probe_payload.get("messages", [{}])[0].get("status", "").strip().lower()
|
||||
)
|
||||
if status != "not available at this time":
|
||||
break
|
||||
shift_days += 365
|
||||
if shift_days > 365 * 8:
|
||||
print("[bioRxiv] API unavailable for probed date ranges.")
|
||||
return []
|
||||
|
||||
if shift_days:
|
||||
print(
|
||||
"[bioRxiv] adjusted date window for API availability: "
|
||||
f"{probe_start.isoformat()} to {probe_end.isoformat()}"
|
||||
)
|
||||
|
||||
while len(papers) < max_results:
|
||||
window_start = start_date - timedelta(days=shift_days)
|
||||
window_end = end_date - timedelta(days=shift_days)
|
||||
url = (
|
||||
"https://api.biorxiv.org/details/biorxiv/"
|
||||
f"{window_start.isoformat()}/{window_end.isoformat()}/{cursor}"
|
||||
)
|
||||
print(f"[bioRxiv] fetching: {url}")
|
||||
with urlopen(url, timeout=30) as response:
|
||||
payload = json.loads(response.read().decode("utf-8"))
|
||||
|
||||
collection = payload.get("collection", [])
|
||||
if not collection:
|
||||
break
|
||||
|
||||
for item in collection:
|
||||
title = item.get("title", "").strip()
|
||||
abstract = re.sub(r"\s+", " ", item.get("abstract", "")).strip()
|
||||
merged_text = f"{title} {abstract}"
|
||||
if not _token_match(merged_text, query):
|
||||
continue
|
||||
|
||||
published = item.get("date", "")
|
||||
if not _in_time_window(published, months):
|
||||
continue
|
||||
|
||||
author_text = item.get("authors", "")
|
||||
authors = [a.strip() for a in re.split(r";|,", author_text) if a.strip()]
|
||||
first_author = authors[0] if authors else "Unknown"
|
||||
|
||||
doi = item.get("doi", "").strip()
|
||||
version = str(item.get("version", "1")).strip() or "1"
|
||||
if doi:
|
||||
link = f"https://www.biorxiv.org/content/{doi}v{version}"
|
||||
else:
|
||||
link = item.get("url", "")
|
||||
|
||||
papers.append(
|
||||
{
|
||||
"source": "biorxiv",
|
||||
"title": title,
|
||||
"authors": authors,
|
||||
"first_author": first_author,
|
||||
"summary": abstract,
|
||||
"published": published,
|
||||
"id": doi or item.get("title", "")[:80],
|
||||
"doi": doi,
|
||||
"link": link,
|
||||
"pdf_link": f"{link}.full.pdf" if link else "",
|
||||
"categories": [item.get("category", "")],
|
||||
}
|
||||
)
|
||||
|
||||
if len(papers) >= max_results:
|
||||
break
|
||||
|
||||
if len(collection) < page_size:
|
||||
break
|
||||
cursor += page_size
|
||||
|
||||
print(f"[bioRxiv] found {len(papers)} papers in last {months} month(s)")
|
||||
return papers
|
||||
|
||||
|
||||
def search_papers(
|
||||
query: str,
|
||||
source: str,
|
||||
max_results: int,
|
||||
months: int,
|
||||
categories: Optional[List[str]],
|
||||
) -> List[Dict]:
|
||||
if source == "arxiv":
|
||||
return search_arxiv(query=query, max_results=max_results, categories=categories, months=months)
|
||||
if source == "biorxiv":
|
||||
return search_biorxiv(query=query, max_results=max_results, months=months)
|
||||
|
||||
# both
|
||||
per_source = max(10, max_results)
|
||||
arxiv = search_arxiv(query=query, max_results=per_source, categories=categories, months=months)
|
||||
biorxiv = search_biorxiv(query=query, max_results=per_source, months=months)
|
||||
|
||||
merged = arxiv + biorxiv
|
||||
merged.sort(key=lambda x: x.get("published", ""), reverse=True)
|
||||
return merged[:max_results]
|
||||
|
||||
|
||||
def print_papers(papers: List[Dict], limit: int = 10) -> None:
|
||||
print(f"\n=== Top {min(limit, len(papers))} paper(s) ===\n")
|
||||
for i, paper in enumerate(papers[:limit], start=1):
|
||||
print(f"[{i}] ({paper.get('source', 'unknown')}) {paper.get('title', 'Untitled')}")
|
||||
print(f" Authors: {paper.get('first_author', 'Unknown')} et al.")
|
||||
print(f" Date: {paper.get('published', 'Unknown')}")
|
||||
print(f" Link: {paper.get('link', '')}")
|
||||
summary = paper.get("summary", "")
|
||||
print(f" Abstract: {summary[:150]}...")
|
||||
print()
|
||||
|
||||
|
||||
def main() -> None:
|
||||
parser = argparse.ArgumentParser(description="Search papers from arXiv and bioRxiv")
|
||||
parser.add_argument("--query", "-q", type=str, help="search query")
|
||||
parser.add_argument("--keywords", "-k", nargs="+", help="keyword list")
|
||||
parser.add_argument("--source", "-s", choices=["arxiv", "biorxiv", "both"], default="both")
|
||||
parser.add_argument("--max-results", "-n", type=int, default=50, help="max number of returned papers")
|
||||
parser.add_argument(
|
||||
"--categories",
|
||||
"-c",
|
||||
nargs="+",
|
||||
default=["cs.CV", "cs.LG", "cs.AI", "q-bio.NC"],
|
||||
help="arXiv categories (used only when source includes arxiv)",
|
||||
)
|
||||
parser.add_argument("--months", "-m", type=int, default=3, help="only keep papers from last N months")
|
||||
parser.add_argument("--output", "-o", type=str, help="output JSON path")
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
if args.query:
|
||||
query = args.query.strip()
|
||||
elif args.keywords:
|
||||
query = " ".join(args.keywords).strip()
|
||||
else:
|
||||
query = "machine learning"
|
||||
|
||||
papers = search_papers(
|
||||
query=query,
|
||||
source=args.source,
|
||||
max_results=args.max_results,
|
||||
months=args.months,
|
||||
categories=args.categories,
|
||||
)
|
||||
|
||||
print_papers(papers, limit=10)
|
||||
|
||||
if args.output:
|
||||
with open(args.output, "w", encoding="utf-8") as f:
|
||||
json.dump(papers, f, ensure_ascii=False, indent=2)
|
||||
print(f"\nSaved results to: {args.output}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user