{"id":22847613,"url":"https://github.com/gabe-zhang/paper2summary","last_synced_at":"2026-02-16T19:36:13.228Z","repository":{"id":266879404,"uuid":"884507659","full_name":"gabe-zhang/paper2summary","owner":"gabe-zhang","description":"Lightweight scientific paper summarizer using LoRA fine-tuning and RAG-based Q\u0026A","archived":false,"fork":false,"pushed_at":"2026-01-25T08:33:23.000Z","size":273,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-25T11:04:31.050Z","etag":null,"topics":["arxiv","fine-tuning","huggingface","llama","lora-training","nlp","paper-summarization","peft","pytorch","rag","transformers"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gabe-zhang.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-11-06T21:59:29.000Z","updated_at":"2026-01-25T08:33:27.000Z","dependencies_parsed_at":"2024-12-10T11:35:13.686Z","dependency_job_id":"79abf061-af0b-4452-b6e2-38e389b0aac8","html_url":"https://github.com/gabe-zhang/paper2summary","commit_stats":null,"previous_names":["yuanzzhang/paper2summary","gabe-zhang/paper2summary"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/gabe-zhang/paper2summary","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabe-zhang%2Fpaper2summary","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabe-zhang%2Fpaper2summary/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabe-zhang%2Fpaper2summary/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabe-zhang%2Fpaper2summary/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gabe-zhang","download_url":"https://codeload.github.com/gabe-zhang/paper2summary/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabe-zhang%2Fpaper2summary/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29516171,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-16T18:37:19.720Z","status":"ssl_error","status_checked_at":"2026-02-16T18:36:46.920Z","response_time":115,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["arxiv","fine-tuning","huggingface","llama","lora-training","nlp","paper-summarization","peft","pytorch","rag","transformers"],"created_at":"2024-12-13T04:08:35.360Z","updated_at":"2026-02-16T19:36:13.214Z","avatar_url":"https://github.com/gabe-zhang.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# paper2summary\n\n[![Model](https://img.shields.io/badge/HuggingFace-Model-blue)](https://huggingface.co/gabe-zhang/Llama-PaperSummarization-LoRA)\n[![License](https://img.shields.io/badge/License-MIT-green)](./LICENSE)\n\nA lightweight scientific paper summarizer combining LoRA fine-tuning with\nRAG-based question answering. Run locally on consumer hardware.\n\n\n## Overview\n\nReading scientific papers is time-consuming due to knowledge gaps and high\npublication volumes. While LLMs like ChatGPT can help, they lack intuitive\ncitations and have limited scope.\n\n**paper2summary** addresses this by:\n- Fine-tuning a lightweight model (1.3GB) for paper summarization\n- Providing source references with highlighting for fact-checking\n- Supporting local deployment on laptops\n- Enabling flexible switching to larger models via APIs\n- Minimal codebase (~300 lines for fine-tuning)\n\n\n## Demo\n\nRAG-based paper Q\u0026A using [Kotaemon](https://github.com/Cinnamon/kotaemon)\nwith GPT-4o-mini:\n- [Single Document Q\u0026A](https://youtu.be/SqDGsJR9OOI) - Query the\n  \"Attention Is All You Need\" paper\n- [Multi-Document Q\u0026A](https://youtu.be/NsxGwMrflAE) - Compare Transformer\n  and LoRA papers\n\n\n## Results\n\nEvaluated on 6,440 test samples with beam search (beam size = 4):\n\n| Model | ROUGE-1 | ROUGE-2 | ROUGE-3 | ROUGE-L |\n|-------|---------|---------|---------|---------|\n| Llama-3.2-1B-Instruct (baseline) | 36.69 | 7.47 | 1.95 | 19.36 |\n| **Llama-PaperSummarization-LoRA** | **41.56** | **11.31** | **2.67** | **21.86** |\n\nThe [LoRA model](https://huggingface.co/gabe-zhang/Llama-PaperSummarization-LoRA) shows **+51% ROUGE-2** and **+37% ROUGE-3** improvement.\n\n\n## Installation\n\n```bash\ngit clone https://github.com/gabe-zhang/paper2summary.git\ncd paper2summary\n\nuv venv \u0026\u0026 uv sync\nuv run python -m spacy download en_core_web_sm\n```\n\n\n## Usage\n\n### Training\n```bash\nuv run python src/train.py\n```\n\n### Testing\n```bash\n# Quick test (10 samples)\nuv run python src/test.py --model_path ./output/lora\n\n# Full benchmark (6,440 samples)\nuv run python src/test.py --model_path ./output/lora --num_samples 6440\n```\n\n\n## Project Structure\n\n```\npaper2summary/\n├── src/\n│   ├── train.py           # LoRA fine-tuning script\n│   ├── test.py            # Model evaluation script\n│   ├── paper_dataset.py   # Dataset loading utilities\n│   ├── config/\n│   │   └── lora_config.py # Training hyperparameters\n│   └── utils/\n│       ├── eval.py        # ROUGE evaluation metrics\n│       └── testing_utils.py\n├── output/                # Model checkpoints (generated)\n└── pyproject.toml\n```\n\n\n## Training Details\n\n| Parameter | Value |\n|-----------|-------|\n| Base Model | Llama-3.2-1B-Instruct (1.3GB) |\n| LoRA Rank | 8 |\n| Target Modules | q_proj, v_proj |\n| Trainable Parameters | ~850K (0.07%) |\n| Context Length | 10,182 tokens |\n| Gradient Accumulation | 4 steps |\n| Training Steps | 5,000 |\n| Evaluation Interval | Every 20 steps |\n| Training Time | ~28 hours on RTX A6000 |\n\n\n## Dataset\n\nFine-tuned on 10% of\n[ccdv/arxiv-summarization](https://huggingface.co/datasets/ccdv/arxiv-summarization):\n\n| Split | Samples | Avg. Article Tokens | Avg. Abstract Tokens |\n|-------|---------|---------------------|----------------------|\n| Train | ~20,000 | 6,038 | 299 |\n| Validation | ~640 | 5,894 | 172 |\n| Test | 6,440 | 5,905 | 174 |\n\n\n## RAG Architecture\n\nThe RAG pipeline uses [Kotaemon](https://github.com/Cinnamon/kotaemon)\nfor document Q\u0026A:\n\n| Component | Implementation |\n|-----------|----------------|\n| LLM | GPT-4o-mini (or Llama-3.2-1B-LoRA via Ollama) |\n| Embedding | text-embedding-3-small (OpenAI) |\n| Reranker | GPT-4o-mini |\n| Vector DB | Chroma |\n| Document Parser | Docling |\n\n\n## References\n\n- [LoRA: Low-Rank Adaptation of Large Language Models](https://arxiv.org/abs/2106.09685)\n  (Hu et al., ICLR 2022)\n- [A Discourse-Aware Attention Model for Abstractive Summarization of Long Documents](https://arxiv.org/abs/1804.05685)\n  (Cohan et al., NAACL 2018)\n\n\n## License\n\n- **Code**: [MIT License](./LICENSE)\n- **Llama 3.2**: [Llama 3.2 Community License](https://www.llama.com/llama-downloads)\n- **Third-party**: [THIRD_PARTY_LICENSES.md](./THIRD_PARTY_LICENSES.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgabe-zhang%2Fpaper2summary","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgabe-zhang%2Fpaper2summary","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgabe-zhang%2Fpaper2summary/lists"}