SELF-DISCOVER / README.md
Kailash S Prem
Create: main.yml
3ad4364
---
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.
---