| --- |
| license: cc-by-nc-4.0 |
| language: |
| - en |
| tags: |
| - query-decomposition |
| - retrieval |
| - rag |
| - baselines |
| --- |
| |
| # Query Decomposition Baselines |
|
|
| 复杂问题「查询分割 / 查询分解」的 4 个 baseline 方法,**代码 + 权重一体**,`git clone` 后 |
| (自备基座 Llama)即可直接以 Python 函数调用运行。中文完整说明见仓库内 **[使用说明.md](使用说明.md)**。 |
|
|
| Four query-decomposition baselines that split a complex question into sub-questions. |
| This repo ships **both the code and the weights**, so you can run them directly. |
|
|
| | # | method | call | needs | |
| |---|---|---|---| |
| | ① | supervised (LoRA Llama) | `supervised_decompose(q)` | base **Llama-3.1-8B-Instruct** (bring your own) + the LoRA in `weights/` | |
| | ② | unsupervised (XLM) | `unsupervised_decompose(q)` | the XLM ckpt in `weights/` + GPU | |
| | ③ | icl (Socratic, gpt-4o-mini) | `icl_decompose(q)` | an API key, or plug your own `llm_fn` | |
| | ④ | icl+feedback (SearChain) | service (see 使用说明.md §4) | API key + a ColBERT index | |
|
|
| ①②③ are plain in-process Python functions — **no servers, no ports, no HTTP**. |
|
|
| ## What's inside |
|
|
| ``` |
| decompose.py # unified entry: query -> list[str] sub-queries |
| qd_baselines/ # in-process implementations (①②③), lazy-loaded |
| methods/ examples/ start/ reference/ |
| weights/ |
| decom_baseline_strategyqa_lora/ # ① supervised LoRA adapter (~120MB) |
| xlm_unsup_decomp.pth # ② XLM checkpoint (~3.1GB) |
| ``` |
|
|
| The code **auto-discovers** the weights under `weights/`, so after cloning you only |
| need to provide the **base Llama** (gated, not redistributed here) for method ①. |
|
|
| ## Quick start |
|
|
| ```bash |
| git lfs install |
| git clone https://huggingface.co/Veblen34/Query-decompose-baselines |
| cd Query-decompose-baselines |
| pip install -r requirements.txt |
| |
| # ② unsupervised — weights auto-found in weights/, just needs a GPU: |
| python -c "from decompose import unsupervised_decompose; \ |
| print(unsupervised_decompose('which magazine was started first arthur\\'s magazine or first for women ?'))" |
| |
| # ① supervised — also provide the gated base model: |
| export RAGQA_LLAMA_MODEL=/path/to/Llama-3.1-8B-Instruct # from meta-llama on the Hub |
| python -c "from decompose import supervised_decompose; \ |
| print(supervised_decompose('Which team did the player with the most NBA championships play for?'))" |
| |
| # ③ icl — set an API key (or pass your own llm_fn to stay fully local): |
| export CHATANYWHERE_API_KEY=... # gpt-4o-mini |
| python -c "from decompose import icl_decompose; \ |
| print(icl_decompose('Who directed the highest-grossing film of 1997?'))" |
| ``` |
|
|
| Batch over your own file (one query per line): |
| ```bash |
| python examples/demo_decompose.py --method icl --input examples/sample_queries.txt --output out.jsonl |
| ``` |
|
|
| ## Weights |
|
|
| - `weights/decom_baseline_strategyqa_lora/` — the supervised query-decomposition **LoRA adapter** |
| (rank 64, targets q/k/v/o proj). Requires the base `meta-llama/Llama-3.1-8B-Instruct`, |
| which is **gated and NOT included** — obtain it yourself from the Meta repo and set |
| `RAGQA_LLAMA_MODEL`. |
| - `weights/xlm_unsup_decomp.pth` — the **XLM seq2seq** unsupervised-decomposition checkpoint |
| (self-contained; dictionary embedded). Derived from Facebook |
| UnsupervisedDecomposition/XLM; provided for research reproduction. |
|
|
| ## License / notes |
|
|
| Set to `cc-by-nc-4.0` (the most restrictive component: the XLM-derived checkpoint is |
| non-commercial). The LoRA adapter is our own trained artifact. The base Llama model is |
| subject to Meta's own license and is not redistributed here. Adjust the license field if |
| your usage differs. |
|
|
| Full Chinese usage guide: **[使用说明.md](使用说明.md)**. |
|
|