Spaces:
Sleeping
Sleeping
title: SELF-DISCOVER | |
emoji: 🔍 | |
colorFrom: gray | |
colorTo: pink | |
sdk: streamlit | |
pinned: false | |
license: apache-2.0 | |
## SELF-DISCOVER FRAMEWORK | |
[Try Hugging Face Demo from Here](https://huggingface.co/spaces/kailashsp/SELF-DISCOVER) | |
## Paper Overview [link](https://arxiv.org/pdf/2402.03620.pdf) | |
This project implements the paper titled "Self-Discover: Large Language Models Self-Compose Reasoning Structures," submitted on February 6, 2024, by Pei Zhou, Jay Pujara, Xiang Ren, Xinyun Chen, Heng-Tze Cheng, Quoc V. Le, Ed H. Chi, Denny Zhou, Swaroop Mishra, and Huaixiu Steven Zheng. The paper introduces SELF-DISCOVER, a framework designed to enhance the performance of Large Language Models (LLMs) on complex reasoning tasks by enabling them to self-discover task-intrinsic reasoning structures. | |
## Functionality (as given in paper) | |
- **Self-Discovery Process:** The system engages in a self-discovery process where it selects atomic reasoning modules and composes them into an explicit reasoning structure. | |
- **Performance Improvement:** SELF-DISCOVER significantly enhances the performance of LLMs on challenging reasoning benchmarks such as BigBench-Hard, grounded agent reasoning, and MATH, achieving up to a 32% improvement compared to conventional prompting methods like Chain of Thought (CoT). | |
- **Efficiency:** Despite its effectiveness, SELF-DISCOVER requires 10-40 times fewer inference computations compared to inference-intensive methods like CoT-Self-Consistency. | |
- **Universality:** The self-discovered reasoning structures are found to be universally applicable across different LLM model families, indicating commonalities with human reasoning patterns. | |
## Project Overview | |
This project consists of a Python script (`self_discover.py`) along with associated modules and prompts. It allows users to input a specific task, and then it guides them through the process of selecting, adapting, and implementing reasoning modules to tackle that task effectively. | |
## Implementation Details | |
- **Model Used:** The implementation Large Language Model (LLM) "gemini-pro" or "gpt-3.5-turbo" | |
- **Tasks:** The system is capable of handling various task to generate reasoning structure | |
- **Actions:** The system performs three main actions: SELECT, ADAPT, and IMPLEMENT. | |
- **SELECT:** This action involves selecting several reasoning modules crucial for solving the given task. | |
- **ADAPT:** The selected reasoning modules are rephrased and specified to better suit the task at hand. | |
- **IMPLEMENT:** The reasoning modules are operationalized into a step-by-step reasoning plan in JSON format, providing a structured approach for solving the task. | |
## Prerequisites | |
- Python 3.10 | |
- Libraries: google-generativeai, openai, dotenv | |
- Input the task you want to generate a reasoning structure in task_example.py | |
## Installation | |
1. Clone this repository: | |
```bash | |
git clone https://github.com/kailashsp/SelfDiscover.git | |
``` | |
2. Install the required libraries: | |
```bash | |
pip install -r requirements.txt | |
``` | |
3. create a .env file | |
4. Open the `.env` file in a text editor. | |
5. Add the following line to the `.env` file: | |
``` | |
GOOGLE_API_KEY=your_google_api_key_here | |
``` | |
Replace `your_google_api_key_here` with your actual Google API key obtained from [google makersuite](https://makersuite.google.com/app/apikey). | |
Your can also use OPENAI_API_KEY as well | |
## Usage | |
1. Initialize a `SelfDiscover` object with a task: | |
```python | |
from self_disover import SelfDiscover | |
from task_example import task1 | |
result = SelfDiscover(task=task1) | |
``` | |
2. Call the `SelfDiscover` object: | |
```python | |
result() | |
``` | |
3. Access the selected and adapted modules also implemented reasoning structure: | |
```python | |
print(f"SELECTED_MODULES : {result.selected_modules}") | |
print(f"ADAPTED_MODULES : {result.adapted_modules}") | |
print(f"REASONING_STRUCTURE : {result.reasoning_structure}") | |
``` | |
## Customization | |
- Modify the `reasoning_modules` variable in `prompts.py` to add, remove, or modify reasoning modules. | |
- Adjust the prompts in `prompts.py` to customize the user interaction flow. | |
## How to use the reasoning JSON structure | |
- As mentioned in the paper | |
```markdown | |
For Stage 2, where we use the self-discovered structure to solve the task instances, we start with the prompt: “Follow the | |
step-by-step reasoning plan in JSON to correctly solve the task. Fill in the values following the keys by reasoning specifically | |
about the task given. Do not simply rephrase the keys.”, followed by the reasoning structure, and finally the task instance. | |
``` | |
You can now give the task with the reasoning structure with the above prompt | |
## Contributing | |
Contributions are welcome! Feel free to open issues or pull requests with any improvements or suggestions. | |
--- | |