From 8db58f9781d9855704d092b66dc54fa22043ccf9 Mon Sep 17 00:00:00 2001 From: awinml <97467100+awinml@users.noreply.github.com> Date: Wed, 21 Aug 2024 08:23:08 +0530 Subject: [PATCH] Add detailed comments and update paper --- README.md | 4 +- paper/llm_blender.pdf | Bin 537813 -> 544578 bytes src/llm_blender/billsum/llama.py | 49 +++++++++++++- .../billsum/llm_blender_ranker_all_llms.py | 36 ++++++++++- .../billsum/llm_blender_ranker_top_3_llms.py | 35 ++++++++++ src/llm_blender/billsum/mistral.py | 49 +++++++++++++- src/llm_blender/billsum/openchat.py | 60 ++++++++++++++++- src/llm_blender/billsum/openhermes.py | 50 +++++++++++++- src/llm_blender/billsum/phi.py | 49 +++++++++++++- src/llm_blender/billsum/qwen.py | 60 ++++++++++++++++- src/llm_blender/billsum/solar.py | 60 ++++++++++++++++- src/llm_blender/billsum/starling.py | 61 +++++++++++++++++- src/llm_blender/mix_instruct/llama.py | 51 ++++++++++++++- .../llm_blender_ranker_all_llms.py | 58 ++++++++++++----- .../llm_blender_ranker_top_3_llms.py | 37 ++++++++++- src/llm_blender/mix_instruct/mistral.py | 49 +++++++++++++- src/llm_blender/mix_instruct/openchat.py | 50 +++++++++++++- src/llm_blender/mix_instruct/openhermes.py | 50 +++++++++++++- src/llm_blender/mix_instruct/phi.py | 50 +++++++++++++- src/llm_blender/mix_instruct/qwen.py | 50 +++++++++++++- src/llm_blender/mix_instruct/solar.py | 50 +++++++++++++- src/llm_blender/mix_instruct/starling.py | 50 +++++++++++++- 22 files changed, 952 insertions(+), 56 deletions(-) diff --git a/README.md b/README.md index a795931..2706ce5 100644 --- a/README.md +++ b/README.md @@ -80,7 +80,9 @@ print(ranked_answers) # ] ``` -The API documentation can be found [here](src/llm_blender/README.md). +The detailed documentation can be found in the [LLM-Blender API Reference](src/llm_blender/README.md). + +As the [`llm-blender` library](https://github.com/yuchenlin/LLM-Blender) lacks a stable release, the necessary code has been incorporated into this project under `src/llm_blender/llm_blender_utils`. ## Results diff --git a/paper/llm_blender.pdf b/paper/llm_blender.pdf index 235a6a19f6ec99b417912d3332d57ddf48a1dc38..5e4ea79a4136a753c978be4bdeca4dfc0889fb25 100644 GIT binary patch delta 110938 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 delta 104411 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 z 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 diff --git a/src/llm_blender/billsum/llama.py b/src/llm_blender/billsum/llama.py index 50284c4..1e62259 100644 --- a/src/llm_blender/billsum/llama.py +++ b/src/llm_blender/billsum/llama.py @@ -1,3 +1,16 @@ +"""Evaluation of Llama-3-8b on the BillSum dataset + +This script implements a pipeline to evaluate the Llama-3-8b model on the BillSum dataset +on the BLEURT, BARTScore, and BERTScore metrics. + +The pipeline performs the following steps: +1. Loads the Llama-3-8b model using the LlamaCppGenerator from Haystack. +2. Generates responses for prompts and instructions from the BillSum dataset. +3. Evaluates the generated responses against reference outputs using the BLEURT, BARTScore, and BERTScore metrics. + +This evaluation provides a baseline for the model's performance on the BillSum dataset. +""" + from datasets import load_dataset from haystack_integrations.components.generators.llama_cpp import LlamaCppGenerator @@ -8,7 +21,19 @@ def generate_result( generator: LlamaCppGenerator, prompt: str = "", ) -> str: + """ + Generate a response using the LlamaCppGenerator. + The prompt and instruction are formatted to be compatible with the model. + + Args: + generator (LlamaCppGenerator): The initialized LlamaCppGenerator object. + prompt (str): The main text input for the model. + + Returns: + str: The generated response from the model. + """ + # Additional instructions for the model for Summarization instruction = ( """ Provide a comprehensive summary of the given text. """ """The summary should cover all the key points and main ideas presented in the original text, """ @@ -16,38 +41,58 @@ def generate_result( ) # Format prompt to be compatible with meta-llama-3-8b-instruct + # This specific format is required for the model to distinguish between user input and expected output formatted_prompt = ( """<|begin_of_text|><|start_header_id|>user<|end_header_id|> """ f"""{instruction} {prompt} <|eot_id|><|start_header_id|>assistant<|end_header_id|>""" ) - # Generate text + # Generate text using the LlamaCppGenerator result = generator.run( formatted_prompt, generation_kwargs={"max_tokens": 500, "temperature": 0.1}, ) + + # Extract the generated text from the result generated_answer = result["replies"][0] return generated_answer +# Define the path to the model weights model = "meta-llama-3-8b-instruct.Q4_K_M.gguf" + +# Initialize the LlamaCppGenerator with the specified model and context window size generator = LlamaCppGenerator( model=model, n_ctx=256, ) + +# Warm up the generator (loading the model into memory) generator.warm_up() +# Load the dataset from the HuggingFace dataset = load_dataset("billsum", split="test") + +# Convert the dataset to a pandas DataFrame for easier manipulation dataset = dataset.to_pandas() + +# Generate results for each row in the dataset +# Apply the generate_result function to each row, using the 'text' column +# Store the results in the 'result' column dataset.loc[:, "result"] = dataset.apply( lambda row: str(generate_result(generator=generator, prompt=row["text"])), axis=1 ) -dataset.to_csv("output_llama.csv", index=False) +# Save the generated texts to a CSV file +dataset.to_csv("output_llama.csv", index=False) +# Initialize the LLMBlenderEvaluator with the generated results and the reference outputs evaluator = LLMBlenderEvaluator(preds=dataset["result"], labels=dataset["output"]) + +# Compute various metrics to evaluate the generated results against the reference outputs metrics = evaluator.compute_metrics() +# Print the computed metrics print("BLEURT Score", metrics["bleurt"]) print("BARTSCORE Score", metrics["bartscore"]) print("BERTSCORE Score", metrics["bertscore"]) diff --git a/src/llm_blender/billsum/llm_blender_ranker_all_llms.py b/src/llm_blender/billsum/llm_blender_ranker_all_llms.py index cd65e79..a6fac93 100644 --- a/src/llm_blender/billsum/llm_blender_ranker_all_llms.py +++ b/src/llm_blender/billsum/llm_blender_ranker_all_llms.py @@ -1,3 +1,19 @@ +""" +Evaluation of ensemble of LLMs on the BillSum dataset using LLM Blender + +This script implements a pipeline to ensemble multiple language models on the Mix-Instruct dataset. The pipeline is +evaluated on the BLEURT, BARTScore, and BERTScore metrics. + +The pipeline performs the following steps: +1. Loads multiple language models (LLaMA, Phi, OpenChat, OpenHermes, Solar, Qwen, Mistral). +2. Builds prompts for each model using specific templates. +3. Generates responses for prompts from the Mix-Instruct dataset using each model. +4. Ranks the generated responses from all the models using the LLM Blender Ranker. +5. Evaluates the top-ranked response against reference outputs using multiple metrics. + +The evaluation showcases the effectiveness of the ensembling approach using LLM-Blender with 7 diverse LLMs. +""" + from datasets import load_dataset from haystack import Pipeline from haystack.components.builders import PromptBuilder @@ -5,8 +21,10 @@ from llm_blender import LLMBlenderEvaluator, LLMBlenderRanker +# Load the BillSum dataset dataset = load_dataset("billsum", split="test") +# Define prompt templates for each model llama_prompt_template = ( """<|begin_of_text|><|start_header_id|>user<|end_header_id|> Provide a comprehensive summary of the given """ """text. The summary should cover all the key points and main ideas presented in the original text, while """ @@ -51,6 +69,7 @@ """a concise and easy-to-understand format.: {{ prompt }} [/INST] """ ) +# Initialize PromptBuilder for each model llama_prompt_builder = PromptBuilder(template=llama_prompt_template) phi_prompt_builder = PromptBuilder(template=phi_prompt_template) openchat_prompt_builder = PromptBuilder(template=openchat_prompt_template) @@ -59,8 +78,10 @@ qwen_prompt_builder = PromptBuilder(template=qwen_prompt_template) mistral_prompt_builder = PromptBuilder(template=mistral_prompt_template) +# Define model and generation parameters for all models model_params = {"n_ctx": 256, "generation_kwargs": {"max_tokens": 500, "temperature": 0.1}} +# Initialize LlamaCppGenerator for each model llama_model = LlamaCppGenerator(model="models/meta-llama-3-8b-instruct.Q4_K_M.gguf", **model_params) phi_model = LlamaCppGenerator(model="models/phi-3-mini-4k-instruct.Q4_K_M.gguf", **model_params) openchat_model = LlamaCppGenerator(model="models/openchat-3.5-0106.Q4_K_M.gguf", **model_params) @@ -69,11 +90,13 @@ qwen_model = LlamaCppGenerator(model="models/qwen1_5-7b-chat-Q4_K_M.gguf", **model_params) mistral_model = LlamaCppGenerator(model="models/mistral-7b-Q4_K_M.gguf", **model_params) +# Initialize LLMBlenderRanker to ensemble multiple models llm_blender_ranker = LLMBlenderRanker(model="llm-blender/PairRM", device="cpu") - +# Create the main pipeline blender_pipeline = Pipeline() +# Add components to the pipeline blender_pipeline.add_component(instance=llama_prompt_builder, name="llama_prompt_builder") blender_pipeline.add_component(instance=llama_model, name="llama_model") @@ -97,6 +120,8 @@ blender_pipeline.add_component(instance=llm_blender_ranker, name="llm_blender_ranker") +# Connect components in the pipeline +# Connect the prompt builders to the respective model blender_pipeline.connect("llama_prompt_builder", "llama_model") blender_pipeline.connect("phi_prompt_builder", "phi_model") blender_pipeline.connect("openchat_prompt_builder", "openchat_model") @@ -105,6 +130,7 @@ blender_pipeline.connect("qwen_prompt_builder", "qwen_model") blender_pipeline.connect("mistral_prompt_builder", "mistral_model") +# Connect all the models to the LLMBlenderRanker for ensembling blender_pipeline.connect("llama_model", "llm_blender_ranker") blender_pipeline.connect("phi_model", "llm_blender_ranker") blender_pipeline.connect("openchat_model", "llm_blender_ranker") @@ -113,10 +139,13 @@ blender_pipeline.connect("qwen_model", "llm_blender_ranker") blender_pipeline.connect("mistral_model", "llm_blender_ranker") +# Process the dataset and generate answers generated_answers_labels = [] for row in dataset: prompt = row["input"] label = row["output"] + + # Run the pipeline for each input output = blender_pipeline.run( { {"llama_prompt_builder": {"prompt": prompt}}, @@ -130,6 +159,7 @@ ) generated_answers_labels.append((output["answers"], label)) +# Prepare data for evaluation preds = [] labels = [] for ranked_answers, label in generated_answers_labels: @@ -137,9 +167,13 @@ preds.append(ranked_answers[0].data) labels.append(label) +# Initialize the LLMBlenderEvaluator with the generated results and the reference outputs evaluator = LLMBlenderEvaluator(preds=preds, labels=labels) + +# Compute various metrics to evaluate the generated results against the reference outputs metrics = evaluator.compute_metrics() +# Print the evaluation metrics print("BLEURT Score", metrics["bleurt"]) print("BARTSCORE Score", metrics["bartscore"]) print("BERTSCORE Score", metrics["bertscore"]) diff --git a/src/llm_blender/billsum/llm_blender_ranker_top_3_llms.py b/src/llm_blender/billsum/llm_blender_ranker_top_3_llms.py index 72d2d3a..dce0115 100644 --- a/src/llm_blender/billsum/llm_blender_ranker_top_3_llms.py +++ b/src/llm_blender/billsum/llm_blender_ranker_top_3_llms.py @@ -1,3 +1,19 @@ +""" +Evaluation of ensemble of best performing LLMs on the BillSum dataset using LLM Blender + +This script implements a pipeline to ensemble multiple language models on the BillSum dataset. The pipeline is + evaluated on the BLEURT, BARTScore, and BERTScore metrics. + +The pipeline performs the following steps: +1. Loads 3 top performing LLMs: LLaMA, Phi and Mistral. +2. Builds prompts for each model using specific templates. +3. Generates responses for prompts from the Mix-Instruct dataset using each model. +4. Ranks the generated responses from all the models using the LLM Blender Ranker. +5. Evaluates the top-ranked response against reference outputs using multiple metrics. + +The evaluation showcases the effectiveness of the ensembling approach using LLM-Blender with diverse LLMs. +""" + from datasets import load_dataset from haystack import Pipeline from haystack.components.builders import PromptBuilder @@ -5,8 +21,10 @@ from llm_blender import LLMBlenderEvaluator, LLMBlenderRanker +# Load the BillSum dataset dataset = load_dataset("billsum", split="test") +# Define prompt templates for each model llama_prompt_template = ( """<|begin_of_text|><|start_header_id|>user<|end_header_id|> Provide a comprehensive summary of the given """ """text. The summary should cover all the key points and main ideas presented in the original text, while """ @@ -26,20 +44,26 @@ """a concise and easy-to-understand format.: {{ prompt }} [/INST] """ ) +# Initialize PromptBuilder for each model llama_prompt_builder = PromptBuilder(template=llama_prompt_template) phi_prompt_builder = PromptBuilder(template=phi_prompt_template) mistral_prompt_builder = PromptBuilder(template=mistral_prompt_template) +# Define model and generation parameters for all models model_params = {"n_ctx": 256, "generation_kwargs": {"max_tokens": 500, "temperature": 0.1}} +# Initialize LlamaCppGenerator for each model llama_model = LlamaCppGenerator(model="models/meta-llama-3-8b-instruct.Q4_K_M.gguf", **model_params) phi_model = LlamaCppGenerator(model="models/phi-3-mini-4k-instruct.Q4_K_M.gguf", **model_params) mistral_model = LlamaCppGenerator(model="models/mistral-7b-Q4_K_M.gguf", **model_params) +# Initialize LLMBlenderRanker to ensemble multiple models llm_blender_ranker = LLMBlenderRanker(model="llm-blender/PairRM", device="cpu") +# Create the main pipeline blender_pipeline = Pipeline() +# Add components to the pipeline blender_pipeline.add_component(instance=llama_prompt_builder, name="llama_prompt_builder") blender_pipeline.add_component(instance=llama_model, name="llama_model") @@ -51,18 +75,24 @@ blender_pipeline.add_component(instance=llm_blender_ranker, name="llm_blender_ranker") +# Connect components in the pipeline +# Connect the prompt builders to the respective model blender_pipeline.connect("llama_prompt_builder", "llama_model") blender_pipeline.connect("phi_prompt_builder", "phi_model") blender_pipeline.connect("mistral_prompt_builder", "mistral_model") +# Connect all the models to the LLMBlenderRanker for ensembling blender_pipeline.connect("llama_model", "llm_blender_ranker") blender_pipeline.connect("phi_model", "llm_blender_ranker") blender_pipeline.connect("mistral_model", "llm_blender_ranker") +# Process the dataset and generate answers generated_answers_labels = [] for row in dataset: prompt = row["input"] label = row["output"] + + # Run the pipeline for each input output = blender_pipeline.run( { { @@ -74,6 +104,7 @@ ) generated_answers_labels.append((output["answers"], label)) +# Prepare data for evaluation preds = [] labels = [] for ranked_answers, label in generated_answers_labels: @@ -81,9 +112,13 @@ preds.append(ranked_answers[0].data) labels.append(label) +# Initialize the LLMBlenderEvaluator with the generated results and the reference outputs evaluator = LLMBlenderEvaluator(preds=preds, labels=labels) + +# Compute various metrics to evaluate the generated results against the reference outputs metrics = evaluator.compute_metrics() +# Print the evaluation metrics print("BLEURT Score", metrics["bleurt"]) print("BARTSCORE Score", metrics["bartscore"]) print("BERTSCORE Score", metrics["bertscore"]) diff --git a/src/llm_blender/billsum/mistral.py b/src/llm_blender/billsum/mistral.py index fd7b53c..bed26d9 100644 --- a/src/llm_blender/billsum/mistral.py +++ b/src/llm_blender/billsum/mistral.py @@ -1,3 +1,16 @@ +"""Evaluation of Mistral-7b on the BillSum dataset + +This script implements a pipeline to evaluate the Mistral-7b model on the BillSum dataset +on the BLEURT, BARTScore, and BERTScore metrics. + +The pipeline performs the following steps: +1. Loads the Mistral-7b model using the LlamaCppGenerator from Haystack. +2. Generates responses for prompts and instructions from the BillSum dataset. +3. Evaluates the generated responses against reference outputs using the BLEURT, BARTScore, and BERTScore metrics. + +This evaluation provides a baseline for the model's performance on the BillSum dataset. +""" + from datasets import load_dataset from haystack_integrations.components.generators.llama_cpp import LlamaCppGenerator @@ -8,7 +21,19 @@ def generate_result( generator: LlamaCppGenerator, prompt: str = "", ) -> str: + """ + Generate a response using the LlamaCppGenerator. + The prompt and instruction are formatted to be compatible with the model. + + Args: + generator (LlamaCppGenerator): The initialized LlamaCppGenerator object. + prompt (str): The main text input for the model. + + Returns: + str: The generated response from the model. + """ + # Additional instructions for the model for Summarization instruction = ( """ Provide a comprehensive summary of the given text. """ """The summary should cover all the key points and main ideas presented in the original text, """ @@ -16,35 +41,55 @@ def generate_result( ) # Format prompt to be compatible with mistral-7b-instruct-v0.2 + # This specific format is required for the model to distinguish between user input and expected output formatted_prompt = f"""[INST] {instruction} {prompt} [/INST] """ - # Generate text + # Generate text using the LlamaCppGenerator result = generator.run( formatted_prompt, generation_kwargs={"max_tokens": 500, "temperature": 0.1}, ) + + # Extract the generated text from the result generated_answer = result["replies"][0] return generated_answer +# Define the path to the model weights model = "mistral-7b-instruct-v0.2.Q4_K_M.gguf" + +# Initialize the LlamaCppGenerator with the specified model and context window size generator = LlamaCppGenerator( model=model, n_ctx=256, ) + +# Warm up the generator (loading the model into memory) generator.warm_up() +# Load the dataset from the HuggingFace dataset = load_dataset("billsum", split="test") + +# Convert the dataset to a pandas DataFrame for easier manipulation dataset = dataset.to_pandas() + +# Generate results for each row in the dataset +# Apply the generate_result function to each row, using the 'text' column +# Store the results in the 'result' column dataset.loc[:, "result"] = dataset.apply( lambda row: str(generate_result(generator=generator, prompt=row["text"])), axis=1 ) -dataset.to_csv("output_mistral.csv", index=False) +# Save the generated texts to a CSV file +dataset.to_csv("output_mistral.csv", index=False) +# Initialize the LLMBlenderEvaluator with the generated results and the reference outputs evaluator = LLMBlenderEvaluator(preds=dataset["result"], labels=dataset["output"]) + +# Compute various metrics to evaluate the generated results against the reference outputs metrics = evaluator.compute_metrics() +# Print the computed metrics print("BLEURT Score", metrics["bleurt"]) print("BARTSCORE Score", metrics["bartscore"]) print("BERTSCORE Score", metrics["bertscore"]) diff --git a/src/llm_blender/billsum/openchat.py b/src/llm_blender/billsum/openchat.py index cca895a..40b1f28 100644 --- a/src/llm_blender/billsum/openchat.py +++ b/src/llm_blender/billsum/openchat.py @@ -1,10 +1,33 @@ +"""Evaluation of OpenChat on the BillSum dataset + +This script implements a pipeline to evaluate the OpenChat model on the BillSum dataset +on the BLEURT, BARTScore, and BERTScore metrics. + +The pipeline performs the following steps: +1. Loads the OpenChat model using the LlamaCppGenerator from Haystack. +2. Generates responses for prompts and instructions from the BillSum dataset. +3. Evaluates the generated responses against reference outputs using the BLEURT, BARTScore, and BERTScore metrics. + +This evaluation provides a baseline for the model's performance on the BillSum dataset. +""" + from datasets import load_dataset from haystack_integrations.components.generators.llama_cpp import LlamaCppGenerator from llm_blender import LLMBlenderEvaluator -def construct_prompt(prompt=""): +def construct_prompt(prompt: str = ""): + """ + Construct a prompt with instructions for summarization. + + Args: + prompt (str): The main text input for the model. + + Returns: + str: The constructed for the model. + """ + # Additional instructions for the model for Summarization prompt_with_instruction = ( """ Provide a comprehensive summary of the given text. """ """The summary should cover all the key points and main ideas presented in the original text, """ @@ -18,37 +41,68 @@ def generate_result( generator: LlamaCppGenerator, prompt: str = "", ) -> str: + """ + Generate a response using the LlamaCppGenerator. + + The prompt and instruction are formatted to be compatible with the model. + + Args: + generator (LlamaCppGenerator): The initialized LlamaCppGenerator object. + prompt (str): The main text input for the model. + Returns: + str: The generated response from the model. + """ # Format prompt to be compatible with openchat-3.5-0106 + # This specific format is required for the model to distinguish between user input and expected output formatted_prompt = construct_prompt(prompt) - # Generate text + # Generate text using the LlamaCppGenerator result = generator.run( formatted_prompt, generation_kwargs={"max_tokens": 128, "temperature": 0.2}, ) + + # Extract the generated text from the result generated_answer = result["replies"][0] return generated_answer +# Define the path to the model weights model = "models/openchat-3.5-0106.Q4_K_M.gguf" + +# Initialize the LlamaCppGenerator with the specified model and context window size generator = LlamaCppGenerator( model=model, n_ctx=256, ) + +# Warm up the generator (loading the model into memory) generator.warm_up() +# Load the dataset from the HuggingFace dataset = load_dataset("billsum", split="test") + +# Convert the dataset to a pandas DataFrame for easier manipulation dataset = dataset.to_pandas() + +# Generate results for each row in the dataset +# Apply the generate_result function to each row, using the 'text' column +# Store the results in the 'result' column dataset.loc[:, "result"] = dataset.apply( lambda row: str(generate_result(generator=generator, prompt=row["text"])), axis=1 ) -dataset.to_csv("output_openchat.csv", index=False) +# Save the generated texts to a CSV file +dataset.to_csv("output_openchat.csv", index=False) +# Initialize the LLMBlenderEvaluator with the generated results and the reference outputs evaluator = LLMBlenderEvaluator(preds=dataset["result"], labels=dataset["output"]) + +# Compute various metrics to evaluate the generated results against the reference outputs metrics = evaluator.compute_metrics() +# Print the computed metrics print("BLEURT Score", metrics["bleurt"]) print("BARTSCORE Score", metrics["bartscore"]) print("BERTSCORE Score", metrics["bertscore"]) diff --git a/src/llm_blender/billsum/openhermes.py b/src/llm_blender/billsum/openhermes.py index af28273..6649ece 100644 --- a/src/llm_blender/billsum/openhermes.py +++ b/src/llm_blender/billsum/openhermes.py @@ -1,3 +1,16 @@ +"""Evaluation of OpenHermes on the BillSum dataset + +This script implements a pipeline to evaluate the OpenHermes model on the BillSum dataset +on the BLEURT, BARTScore, and BERTScore metrics. + +The pipeline performs the following steps: +1. Loads the OpenHermes model using the LlamaCppGenerator from Haystack. +2. Generates responses for prompts and instructions from the BillSum dataset. +3. Evaluates the generated responses against reference outputs using the BLEURT, BARTScore, and BERTScore metrics. + +This evaluation provides a baseline for the model's performance on the BillSum dataset. +""" + from datasets import load_dataset from haystack_integrations.components.generators.llama_cpp import LlamaCppGenerator @@ -8,6 +21,19 @@ def generate_result( generator: LlamaCppGenerator, prompt: str = "", ) -> str: + """ + Generate a response using the LlamaCppGenerator. + + The prompt and instruction are formatted to be compatible with the model. + + Args: + generator (LlamaCppGenerator): The initialized LlamaCppGenerator object. + prompt (str): The main text input for the model. + + Returns: + str: The generated response from the model. + """ + # Additional instructions for the model for Summarization instruction = ( """ Provide a comprehensive summary of the given text. """ """The summary should cover all the key points and main ideas presented in the original text, """ @@ -15,39 +41,59 @@ def generate_result( ) # Format prompt to be compatible with openhermes-2.5-mistral-7b + # This specific format is required for the model to distinguish between user input and expected output formatted_prompt = f"""<|im_start|>system {instruction}<|im_end|> <|im_start|>user {prompt}<|im_end|> <|im_start|>assistant""" - # Generate text + # Generate text using the LlamaCppGenerator result = generator.run( formatted_prompt, generation_kwargs={"max_tokens": 500, "temperature": 0.1}, ) + + # Extract the generated text from the result generated_answer = result["replies"][0] return generated_answer +# Define the path to the model weights model = "openhermes-2.5-mistral-7b.Q4_K_M.gguf" + +# Initialize the LlamaCppGenerator with the specified model and context window size generator = LlamaCppGenerator( model=model, n_ctx=256, ) + +# Warm up the generator (loading the model into memory) generator.warm_up() +# Load the dataset from the HuggingFace dataset = load_dataset("billsum", split="test") + +# Convert the dataset to a pandas DataFrame for easier manipulation dataset = dataset.to_pandas() + +# Generate results for each row in the dataset +# Apply the generate_result function to each row, using the 'text' column +# Store the results in the 'result' column dataset.loc[:, "result"] = dataset.apply( lambda row: str(generate_result(generator=generator, prompt=row["text"])), axis=1 ) -dataset.to_csv("output_openchat.csv", index=False) +# Save the generated texts to a CSV file +dataset.to_csv("output_openchat.csv", index=False) +# Initialize the LLMBlenderEvaluator with the generated results and the reference outputs evaluator = LLMBlenderEvaluator(preds=dataset["result"], labels=dataset["output"]) + +# Compute various metrics to evaluate the generated results against the reference outputs metrics = evaluator.compute_metrics() +# Print the computed metrics print("BLEURT Score", metrics["bleurt"]) print("BARTSCORE Score", metrics["bartscore"]) print("BERTSCORE Score", metrics["bertscore"]) diff --git a/src/llm_blender/billsum/phi.py b/src/llm_blender/billsum/phi.py index 841499a..4da16d4 100644 --- a/src/llm_blender/billsum/phi.py +++ b/src/llm_blender/billsum/phi.py @@ -1,3 +1,16 @@ +"""Evaluation of Phi-3 on the BillSum dataset + +This script implements a pipeline to evaluate the Phi-3 model on the BillSum dataset +on the BLEURT, BARTScore, and BERTScore metrics. + +The pipeline performs the following steps: +1. Loads the Phi-3 model using the LlamaCppGenerator from Haystack. +2. Generates responses for prompts and instructions from the BillSum dataset. +3. Evaluates the generated responses against reference outputs using the BLEURT, BARTScore, and BERTScore metrics. + +This evaluation provides a baseline for the model's performance on the BillSum dataset. +""" + from datasets import load_dataset from haystack_integrations.components.generators.llama_cpp import LlamaCppGenerator @@ -8,7 +21,19 @@ def generate_result( generator: LlamaCppGenerator, prompt: str = "", ) -> str: + """ + Generate a response using the LlamaCppGenerator. + The prompt and instruction are formatted to be compatible with the model. + + Args: + generator (LlamaCppGenerator): The initialized LlamaCppGenerator object. + prompt (str): The main text input for the model. + + Returns: + str: The generated response from the model. + """ + # Additional instructions for the model for Summarization instruction = ( """ Provide a comprehensive summary of the given text. """ """The summary should cover all the key points and main ideas presented in the original text, """ @@ -16,35 +41,55 @@ def generate_result( ) # Format prompt to be compatible with phi-3-mini-4k-instruct + # This specific format is required for the model to distinguish between user input and expected output formatted_prompt = f"""<|user|>\n{instruction} {prompt} <|end|>\n<|assistant|>""" - # Generate text + # Generate text using the LlamaCppGenerator result = generator.run( formatted_prompt, generation_kwargs={"max_tokens": 500, "temperature": 0.1}, ) + + # Extract the generated text from the result generated_answer = result["replies"][0] return generated_answer +# Define the path to the model weights model = "phi-3-mini-4k-instruct.Q4_K_M.gguf" + +# Initialize the LlamaCppGenerator with the specified model and context window size generator = LlamaCppGenerator( model=model, n_ctx=256, ) + +# Warm up the generator (loading the model into memory) generator.warm_up() +# Load the dataset from the HuggingFace dataset = load_dataset("billsum", split="test") + +# Convert the dataset to a pandas DataFrame for easier manipulation dataset = dataset.to_pandas() + +# Generate results for each row in the dataset +# Apply the generate_result function to each row, using the 'text' column +# Store the results in the 'result' column dataset.loc[:, "result"] = dataset.apply( lambda row: str(generate_result(generator=generator, prompt=row["text"])), axis=1 ) -dataset.to_csv("output_phi.csv", index=False) +# Save the generated texts to a CSV file +dataset.to_csv("output_phi.csv", index=False) +# Initialize the LLMBlenderEvaluator with the generated results and the reference outputs evaluator = LLMBlenderEvaluator(preds=dataset["result"], labels=dataset["output"]) + +# Compute various metrics to evaluate the generated results against the reference outputs metrics = evaluator.compute_metrics() +# Print the computed metrics print("BLEURT Score", metrics["bleurt"]) print("BARTSCORE Score", metrics["bartscore"]) print("BERTSCORE Score", metrics["bertscore"]) diff --git a/src/llm_blender/billsum/qwen.py b/src/llm_blender/billsum/qwen.py index 6474e0b..3c5878b 100644 --- a/src/llm_blender/billsum/qwen.py +++ b/src/llm_blender/billsum/qwen.py @@ -1,10 +1,33 @@ +"""Evaluation of Qwen on the BillSum dataset + +This script implements a pipeline to evaluate the Qwen model on the BillSum dataset +on the BLEURT, BARTScore, and BERTScore metrics. + +The pipeline performs the following steps: +1. Loads the Qwen model using the LlamaCppGenerator from Haystack. +2. Generates responses for prompts and instructions from the BillSum dataset. +3. Evaluates the generated responses against reference outputs using the BLEURT, BARTScore, and BERTScore metrics. + +This evaluation provides a baseline for the model's performance on the BillSum dataset. +""" + from datasets import load_dataset from haystack_integrations.components.generators.llama_cpp import LlamaCppGenerator from llm_blender import LLMBlenderEvaluator -def construct_prompt(prompt=""): +def construct_prompt(prompt: str = ""): + """ + Construct a prompt with instructions for summarization. + + Args: + prompt (str): The main text input for the model. + + Returns: + str: The constructed for the model. + """ + # Additional instructions for the model for Summarization prompt_with_instruction = ( """ Provide a comprehensive summary of the given text. """ """The summary should cover all the key points and main ideas presented in the original text, """ @@ -24,37 +47,68 @@ def generate_result( generator: LlamaCppGenerator, prompt: str = "", ) -> str: + """ + Generate a response using the LlamaCppGenerator. + + The prompt and instruction are formatted to be compatible with the model. + Args: + generator (LlamaCppGenerator): The initialized LlamaCppGenerator object. + prompt (str): The main text input for the model. + + Returns: + str: The generated response from the model. + """ # Format prompt to be compatible with qwen1.5-7b + # This specific format is required for the model to distinguish between user input and expected output formatted_prompt = construct_prompt(prompt) - # Generate text + # Generate text using the LlamaCppGenerator result = generator.run( formatted_prompt, generation_kwargs={"max_tokens": 500, "temperature": 0.1}, ) + + # Extract the generated text from the result generated_answer = result["replies"][0] return generated_answer +# Define the path to the model weights model = "models/qwen1_5-7b-chat-q4_k_m.gguf" + +# Initialize the LlamaCppGenerator with the specified model and context window size generator = LlamaCppGenerator( model=model, n_ctx=256, ) + +# Warm up the generator (loading the model into memory) generator.warm_up() +# Load the dataset from the HuggingFace dataset = load_dataset("billsum", split="test") + +# Convert the dataset to a pandas DataFrame for easier manipulation dataset = dataset.to_pandas() + +# Generate results for each row in the dataset +# Apply the generate_result function to each row, using the 'text' column +# Store the results in the 'result' column dataset.loc[:, "result"] = dataset.apply( lambda row: str(generate_result(generator=generator, prompt=row["text"])), axis=1 ) -dataset.to_csv("output_openchat.csv", index=False) +# Save the generated texts to a CSV file +dataset.to_csv("output_qwen.csv", index=False) +# Initialize the LLMBlenderEvaluator with the generated results and the reference outputs evaluator = LLMBlenderEvaluator(preds=dataset["result"], labels=dataset["output"]) + +# Compute various metrics to evaluate the generated results against the reference outputs metrics = evaluator.compute_metrics() +# Print the computed metrics print("BLEURT Score", metrics["bleurt"]) print("BARTSCORE Score", metrics["bartscore"]) print("BERTSCORE Score", metrics["bertscore"]) diff --git a/src/llm_blender/billsum/solar.py b/src/llm_blender/billsum/solar.py index 943950b..433fe1c 100644 --- a/src/llm_blender/billsum/solar.py +++ b/src/llm_blender/billsum/solar.py @@ -1,10 +1,33 @@ +"""Evaluation of Solar on the BillSum dataset + +This script implements a pipeline to evaluate the Solar model on the BillSum dataset +on the BLEURT, BARTScore, and BERTScore metrics. + +The pipeline performs the following steps: +1. Loads the Solar model using the LlamaCppGenerator from Haystack. +2. Generates responses for prompts and instructions from the BillSum dataset. +3. Evaluates the generated responses against reference outputs using the BLEURT, BARTScore, and BERTScore metrics. + +This evaluation provides a baseline for the model's performance on the BillSum dataset. +""" + from datasets import load_dataset from haystack_integrations.components.generators.llama_cpp import LlamaCppGenerator from llm_blender import LLMBlenderEvaluator -def construct_prompt(prompt=""): +def construct_prompt(prompt: str = ""): + """ + Construct a prompt with instructions for summarization. + + Args: + prompt (str): The main text input for the model. + + Returns: + str: The constructed for the model. + """ + # Additional instructions for the model for Summarization prompt_with_instruction = ( """ Provide a comprehensive summary of the given text. """ """The summary should cover all the key points and main ideas presented in the original text, """ @@ -21,37 +44,68 @@ def generate_result( generator: LlamaCppGenerator, prompt: str = "", ) -> str: + """ + Generate a response using the LlamaCppGenerator. + + The prompt and instruction are formatted to be compatible with the model. + + Args: + generator (LlamaCppGenerator): The initialized LlamaCppGenerator object. + prompt (str): The main text input for the model. + Returns: + str: The generated response from the model. + """ # Format prompt to be compatible with solar-10.7b-instruct-v1.0 + # This specific format is required for the model to distinguish between user input and expected output formatted_prompt = construct_prompt(prompt) - # Generate text + # Generate text using the LlamaCppGenerator result = generator.run( formatted_prompt, generation_kwargs={"max_tokens": 128, "temperature": 0.2}, ) + + # Extract the generated text from the result generated_answer = result["replies"][0] return generated_answer +# Define the path to the model weights model = "models/solar-10.7b-instruct-v1.0.Q4_K_M" + +# Initialize the LlamaCppGenerator with the specified model and context window size generator = LlamaCppGenerator( model=model, n_ctx=256, ) + +# Warm up the generator (loading the model into memory) generator.warm_up() +# Load the dataset from the HuggingFace dataset = load_dataset("billsum", split="test") + +# Convert the dataset to a pandas DataFrame for easier manipulation dataset = dataset.to_pandas() + +# Generate results for each row in the dataset +# Apply the generate_result function to each row, using the 'text' column +# Store the results in the 'result' column dataset.loc[:, "result"] = dataset.apply( lambda row: str(generate_result(generator=generator, prompt=row["text"])), axis=1 ) -dataset.to_csv("output_openchat.csv", index=False) +# Load the dataset from the HuggingFace +dataset.to_csv("output_openchat.csv", index=False) +# Initialize the LLMBlenderEvaluator with the generated results and the reference outputs evaluator = LLMBlenderEvaluator(preds=dataset["result"], labels=dataset["output"]) + +# Compute various metrics to evaluate the generated results against the reference outputs metrics = evaluator.compute_metrics() +# Print the computed metrics print("BLEURT Score", metrics["bleurt"]) print("BARTSCORE Score", metrics["bartscore"]) print("BERTSCORE Score", metrics["bertscore"]) diff --git a/src/llm_blender/billsum/starling.py b/src/llm_blender/billsum/starling.py index 703fde5..287b562 100644 --- a/src/llm_blender/billsum/starling.py +++ b/src/llm_blender/billsum/starling.py @@ -1,10 +1,33 @@ +"""Evaluation of Starling on the BillSum dataset + +This script implements a pipeline to evaluate the Starling model on the BillSum dataset +on the BLEURT, BARTScore, and BERTScore metrics. + +The pipeline performs the following steps: +1. Loads the Starling model using the LlamaCppGenerator from Haystack. +2. Generates responses for prompts and instructions from the BillSum dataset. +3. Evaluates the generated responses against reference outputs using the BLEURT, BARTScore, and BERTScore metrics. + +This evaluation provides a baseline for the model's performance on the BillSum dataset. +""" + from datasets import load_dataset from haystack_integrations.components.generators.llama_cpp import LlamaCppGenerator from llm_blender import LLMBlenderEvaluator -def construct_prompt(prompt=""): +def construct_prompt(prompt: str = ""): + """ + Construct a prompt with instructions for summarization. + + Args: + prompt (str): The main text input for the model. + + Returns: + str: The constructed for the model. + """ + # Additional instructions for the model for Summarization prompt_with_instruction = ( """ Provide a comprehensive summary of the given text. """ """The summary should cover all the key points and main ideas presented in the original text, """ @@ -18,37 +41,69 @@ def generate_result( generator: LlamaCppGenerator, prompt: str = "", ) -> str: + """ + Generate a response using the LlamaCppGenerator. + + The prompt and instruction are formatted to be compatible with the model. + + Args: + generator (LlamaCppGenerator): The initialized LlamaCppGenerator object. + prompt (str): The main text input for the model. + + Returns: + str: The generated response from the model. + """ # Format prompt to be compatible with starling-lm-7b-alpha + # This specific format is required for the model to distinguish between user input and expected output formatted_prompt = construct_prompt(prompt) - # Generate text + # Generate text using the LlamaCppGenerator result = generator.run( formatted_prompt, generation_kwargs={"max_tokens": 500, "temperature": 0.1}, ) + + # Extract the generated text from the result generated_answer = result["replies"][0] return generated_answer +# Define the path to the model weights model = "models/starling-lm-7b-alpha.Q4_K_M.gguf" + +# Initialize the LlamaCppGenerator with the specified model and context window size generator = LlamaCppGenerator( model=model, n_ctx=256, ) + +# Warm up the generator (loading the model into memory) generator.warm_up() +# Load the dataset from the HuggingFace dataset = load_dataset("billsum", split="test") + +# Convert the dataset to a pandas DataFrame for easier manipulation dataset = dataset.to_pandas() + +# Generate results for each row in the dataset +# Apply the generate_result function to each row, using the 'text' column +# Store the results in the 'result' column dataset.loc[:, "result"] = dataset.apply( lambda row: str(generate_result(generator=generator, prompt=row["text"])), axis=1 ) -dataset.to_csv("output_starling.csv", index=False) +# Save the generated texts to a CSV file +dataset.to_csv("output_starling.csv", index=False) +# Initialize the LLMBlenderEvaluator with the generated results and the reference outputs evaluator = LLMBlenderEvaluator(preds=dataset["result"], labels=dataset["output"]) + +# Compute various metrics to evaluate the generated results against the reference outputs metrics = evaluator.compute_metrics() +# Print the computed metrics print("BLEURT Score", metrics["bleurt"]) print("BARTSCORE Score", metrics["bartscore"]) print("BERTSCORE Score", metrics["bertscore"]) diff --git a/src/llm_blender/mix_instruct/llama.py b/src/llm_blender/mix_instruct/llama.py index 2ae3222..9060c51 100644 --- a/src/llm_blender/mix_instruct/llama.py +++ b/src/llm_blender/mix_instruct/llama.py @@ -1,3 +1,16 @@ +"""Evaluation of Llama-3-8b on the Mix-Instruct dataset + +This script implements a pipeline to evaluate the Llama-3-8b model on the Mix-Instruct dataset +on the BLEURT, BARTScore, and BERTScore metrics. + +The pipeline performs the following steps: +1. Loads the Llama-3-8b model using the LlamaCppGenerator from Haystack. +2. Generates responses for prompts and instructions from the Mix-Instruct dataset. +3. Evaluates the generated responses against reference outputs using the BLEURT, BARTScore, and BERTScore metrics. + +This evaluation provides a baseline for the model's performance on the Mix-Instruct dataset. +""" + from datasets import load_dataset from haystack_integrations.components.generators.llama_cpp import LlamaCppGenerator @@ -9,40 +22,72 @@ def generate_result( prompt: str = "", instruction: str = "", ) -> str: + """ + Generate a response using the LlamaCppGenerator. - # Format prompt to be compatible with meta-llama-3-8b-instruct + The prompt and instruction are formatted to be compatible with the model. + + Args: + generator (LlamaCppGenerator): The initialized LlamaCppGenerator object. + prompt (str): The main text input for the model. + instruction (str): Additional instructions for the model. + + Returns: + str: The generated response from the model. + """ + # Format prompt to be compatible with meta-llama-3-8b-instruct model + # This specific format is required for the model to distinguish between user input and expected output formatted_prompt = ( """<|begin_of_text|><|start_header_id|>user<|end_header_id|> """ f"""{instruction} {prompt} <|eot_id|><|start_header_id|>assistant<|end_header_id|>""" ) - # Generate text + # Generate text using the LlamaCppGenerator result = generator.run( formatted_prompt, generation_kwargs={"max_tokens": 128, "temperature": 0.2}, ) + + # Extract the generated text from the result generated_answer = result["replies"][0] return generated_answer +# Define the path to the model weights model = "meta-llama-3-8b-instruct.Q4_K_M.gguf" + +# Initialize the LlamaCppGenerator with the specified model and context window size generator = LlamaCppGenerator( model=model, n_ctx=256, ) + +# Warm up the generator (loading the model into memory) generator.warm_up() +# Load the dataset from the HuggingFace dataset = load_dataset("llm-blender/mix-instruct", split="validation") + +# Convert the dataset to a pandas DataFrame for easier manipulation dataset = dataset.to_pandas() + +# Generate results for each row in the dataset +# Apply the generate_result function to each row, using the 'input' and 'instruction' columns +# Store the results in the 'result' column dataset.loc[:, "result"] = dataset.apply( lambda row: str(generate_result(generator=generator, prompt=row["input"], instruction=row["instruction"])), axis=1 ) -dataset.to_csv("output_llama.csv", index=False) +# Save the generated texts to a CSV file +dataset.to_csv("output_llama.csv", index=False) +# Initialize the LLMBlenderEvaluator with the generated results and the reference outputs evaluator = LLMBlenderEvaluator(preds=dataset["result"], labels=dataset["output"]) + +# Compute various metrics to evaluate the generated results against the reference outputs metrics = evaluator.compute_metrics() +# Print the computed metrics print("BLEURT Score", metrics["bleurt"]) print("BARTSCORE Score", metrics["bartscore"]) print("BERTSCORE Score", metrics["bertscore"]) diff --git a/src/llm_blender/mix_instruct/llm_blender_ranker_all_llms.py b/src/llm_blender/mix_instruct/llm_blender_ranker_all_llms.py index be67605..b6bea1f 100644 --- a/src/llm_blender/mix_instruct/llm_blender_ranker_all_llms.py +++ b/src/llm_blender/mix_instruct/llm_blender_ranker_all_llms.py @@ -1,3 +1,19 @@ +""" +Evaluation of ensemble of LLMs on the Mix-Instruct dataset using LLM Blender + +This script implements a pipeline to ensemble multiple language models on the Mix-Instruct dataset. The pipeline is +evaluated on the BLEURT, BARTScore, and BERTScore metrics. + +The pipeline performs the following steps: +1. Loads multiple language models (LLaMA, Phi, OpenChat, OpenHermes, Solar, Qwen, Mistral). +2. Builds prompts for each model using specific templates. +3. Generates responses for prompts from the Mix-Instruct dataset using each model. +4. Ranks the generated responses from all the models using the LLM Blender Ranker. +5. Evaluates the top-ranked response against reference outputs using multiple metrics. + +The evaluation showcases the effectiveness of the ensembling approach using LLM-Blender with 7 diverse LLMs. +""" + from datasets import load_dataset from haystack import Pipeline from haystack.components.builders import PromptBuilder @@ -5,9 +21,10 @@ from llm_blender import LLMBlenderEvaluator, LLMBlenderRanker +# Load the Mix-Instruct dataset dataset = load_dataset("llm-blender/mix-instruct", split="validation") - +# Define prompt templates for each model llama_prompt_template = ( """<|begin_of_text|><|start_header_id|>user<|end_header_id|> Provide a comprehensive summary of the given """ """text. The summary should cover all the key points and main ideas presented in the original text, while """ @@ -41,6 +58,7 @@ mistral_prompt_template = """[INST] {{ instruction }} {{ prompt }} [/INST] """ +# Initialize PromptBuilder for each model llama_prompt_builder = PromptBuilder(template=llama_prompt_template) phi_prompt_builder = PromptBuilder(template=phi_prompt_template) openchat_prompt_builder = PromptBuilder(template=openchat_prompt_template) @@ -49,8 +67,10 @@ qwen_prompt_builder = PromptBuilder(template=qwen_prompt_template) mistral_prompt_builder = PromptBuilder(template=mistral_prompt_template) +# Define model and generation parameters for all models model_params = {"n_ctx": 256, "generation_kwargs": {"max_tokens": 128, "temperature": 0.2}} +# Initialize LlamaCppGenerator for each model llama_model = LlamaCppGenerator(model="models/meta-llama-3-8b-instruct.Q4_K_M.gguf", **model_params) phi_model = LlamaCppGenerator(model="models/phi-3-mini-4k-instruct.Q4_K_M.gguf", **model_params) openchat_model = LlamaCppGenerator(model="models/openchat-3.5-0106.Q4_K_M.gguf", **model_params) @@ -59,34 +79,31 @@ qwen_model = LlamaCppGenerator(model="models/qwen1_5-7b-chat-Q4_K_M.gguf", **model_params) mistral_model = LlamaCppGenerator(model="models/mistral-7b-Q4_K_M.gguf", **model_params) +# Initialize LLMBlenderRanker to ensemble multiple models llm_blender_ranker = LLMBlenderRanker(model="llm-blender/PairRM", device="cpu") - +# Create the main pipeline blender_pipeline = Pipeline() +# Add components to the pipeline blender_pipeline.add_component(instance=llama_prompt_builder, name="llama_prompt_builder") blender_pipeline.add_component(instance=llama_model, name="llama_model") - blender_pipeline.add_component(instance=phi_prompt_builder, name="phi_prompt_builder") blender_pipeline.add_component(instance=phi_model, name="phi_model") - blender_pipeline.add_component(instance=openchat_prompt_builder, name="openchat_prompt_builder") blender_pipeline.add_component(instance=openchat_model, name="openchat_model") - blender_pipeline.add_component(instance=openhermes_prompt_builder, name="openhermes_prompt_builder") blender_pipeline.add_component(instance=openhermes_model, name="openhermes_model") - blender_pipeline.add_component(instance=solar_prompt_builder, name="solar_prompt_builder") blender_pipeline.add_component(instance=solar_model, name="solar_model") - blender_pipeline.add_component(instance=qwen_prompt_builder, name="qwen_prompt_builder") blender_pipeline.add_component(instance=qwen_model, name="qwen_model") - blender_pipeline.add_component(instance=mistral_prompt_builder, name="mistral_prompt_builder") blender_pipeline.add_component(instance=mistral_model, name="mistral_model") - blender_pipeline.add_component(instance=llm_blender_ranker, name="llm_blender_ranker") +# Connect components in the pipeline +# Connect the prompt builders to the respective model blender_pipeline.connect("llama_prompt_builder", "llama_model") blender_pipeline.connect("phi_prompt_builder", "phi_model") blender_pipeline.connect("openchat_prompt_builder", "openchat_model") @@ -95,6 +112,7 @@ blender_pipeline.connect("qwen_prompt_builder", "qwen_model") blender_pipeline.connect("mistral_prompt_builder", "mistral_model") +# Connect all the models to the LLMBlenderRanker for ensembling blender_pipeline.connect("llama_model", "llm_blender_ranker") blender_pipeline.connect("phi_model", "llm_blender_ranker") blender_pipeline.connect("openchat_model", "llm_blender_ranker") @@ -103,24 +121,28 @@ blender_pipeline.connect("qwen_model", "llm_blender_ranker") blender_pipeline.connect("mistral_model", "llm_blender_ranker") +# Process the dataset and generate answers generated_answers_labels = [] for row in dataset: instruction = row["instruction"] prompt = row["input"] label = row["output"] + + # Run the pipeline for each input output = blender_pipeline.run( { - {"llama_prompt_builder": {"prompt": prompt}}, - {"phi_prompt_builder": {"prompt": prompt}}, - {"openchat_prompt_builder": {"instruction": instruction, "prompt": prompt}}, - {"openhermes_prompt_builder": {"instruction": instruction, "prompt": prompt}}, - {"solar_prompt_builder": {"instruction": instruction, "prompt": prompt}}, - {"qwen_prompt_builder": {"instruction": instruction, "prompt": prompt}}, - {"mistral_prompt_builder": {"instruction": instruction, "prompt": prompt}}, + "llama_prompt_builder": {"prompt": prompt}, + "phi_prompt_builder": {"prompt": prompt}, + "openchat_prompt_builder": {"instruction": instruction, "prompt": prompt}, + "openhermes_prompt_builder": {"instruction": instruction, "prompt": prompt}, + "solar_prompt_builder": {"instruction": instruction, "prompt": prompt}, + "qwen_prompt_builder": {"instruction": instruction, "prompt": prompt}, + "mistral_prompt_builder": {"instruction": instruction, "prompt": prompt}, } ) generated_answers_labels.append((output["answers"], label)) +# Prepare data for evaluation preds = [] labels = [] for ranked_answers, label in generated_answers_labels: @@ -128,9 +150,13 @@ preds.append(ranked_answers[0].data) labels.append(label) +# Initialize the LLMBlenderEvaluator with the generated results and the reference outputs evaluator = LLMBlenderEvaluator(preds=preds, labels=labels) + +# Compute various metrics to evaluate the generated results against the reference outputs metrics = evaluator.compute_metrics() +# Print the evaluation metrics print("BLEURT Score", metrics["bleurt"]) print("BARTSCORE Score", metrics["bartscore"]) print("BERTSCORE Score", metrics["bertscore"]) diff --git a/src/llm_blender/mix_instruct/llm_blender_ranker_top_3_llms.py b/src/llm_blender/mix_instruct/llm_blender_ranker_top_3_llms.py index 2bf4df8..e354c7b 100644 --- a/src/llm_blender/mix_instruct/llm_blender_ranker_top_3_llms.py +++ b/src/llm_blender/mix_instruct/llm_blender_ranker_top_3_llms.py @@ -1,3 +1,19 @@ +""" +Evaluation of ensemble of best performing LLMs on the Mix-Instruct dataset using LLM Blender + +This script implements a pipeline to ensemble multiple language models on the Mix-Instruct dataset. The pipeline is + evaluated on the BLEURT, BARTScore, and BERTScore metrics. + +The pipeline performs the following steps: +1. Loads 3 top performing LLMs: LLaMA, Phi and Mistral. +2. Builds prompts for each model using specific templates. +3. Generates responses for prompts from the Mix-Instruct dataset using each model. +4. Ranks the generated responses from all the models using the LLM Blender Ranker. +5. Evaluates the top-ranked response against reference outputs using multiple metrics. + +The evaluation showcases the effectiveness of the ensembling approach using LLM-Blender with diverse LLMs. +""" + from datasets import load_dataset from haystack import Pipeline from haystack.components.builders import PromptBuilder @@ -5,8 +21,10 @@ from llm_blender import LLMBlenderEvaluator, LLMBlenderRanker +# Load the Mix-Instruct dataset dataset = load_dataset("llm-blender/mix-instruct", split="validation") +# Define prompt templates for each model llama_prompt_template = ( """<|begin_of_text|><|start_header_id|>user<|end_header_id|> Provide a comprehensive summary of the given """ """text. The summary should cover all the key points and main ideas presented in the original text, while """ @@ -26,21 +44,26 @@ """a concise and easy-to-understand format.: {{ prompt }} [/INST] """ ) +# Initialize PromptBuilder for each model llama_prompt_builder = PromptBuilder(template=llama_prompt_template) phi_prompt_builder = PromptBuilder(template=phi_prompt_template) mistral_prompt_builder = PromptBuilder(template=mistral_prompt_template) +# Define model and generation parameters for all models model_params = {"n_ctx": 256, "generation_kwargs": {"max_tokens": 128, "temperature": 0.2}} - +# Initialize LlamaCppGenerator for each model llama_model = LlamaCppGenerator(model="models/meta-llama-3-8b-instruct.Q4_K_M.gguf", **model_params) phi_model = LlamaCppGenerator(model="models/phi-3-mini-4k-instruct.Q4_K_M.gguf", **model_params) mistral_model = LlamaCppGenerator(model="models/mistral-7b-Q4_K_M.gguf", **model_params) +# Initialize LLMBlenderRanker to ensemble multiple models llm_blender_ranker = LLMBlenderRanker(model="llm-blender/PairRM", device="cpu") +# Create the main pipeline blender_pipeline = Pipeline() +# Add components to the pipeline blender_pipeline.add_component(instance=llama_prompt_builder, name="llama_prompt_builder") blender_pipeline.add_component(instance=llama_model, name="llama_model") @@ -52,18 +75,25 @@ blender_pipeline.add_component(instance=llm_blender_ranker, name="llm_blender_ranker") +# Connect components in the pipeline +# Connect the prompt builders to the respective model blender_pipeline.connect("llama_prompt_builder", "llama_model") blender_pipeline.connect("phi_prompt_builder", "phi_model") blender_pipeline.connect("mistral_prompt_builder", "mistral_model") +# Connect all the models to the LLMBlenderRanker for ensembling blender_pipeline.connect("llama_model", "llm_blender_ranker") blender_pipeline.connect("phi_model", "llm_blender_ranker") blender_pipeline.connect("mistral_model", "llm_blender_ranker") + +# Process the dataset and generate answers generated_answers_labels = [] for row in dataset: instruction = row["instruction"] prompt = row["input"] label = row["output"] + + # Run the pipeline for each input output = blender_pipeline.run( { {"llama_prompt_builder": {"instruction": instruction, "prompt": prompt}}, @@ -73,6 +103,7 @@ ) generated_answers_labels.append((output["answers"], label)) +# Prepare data for evaluation preds = [] labels = [] for ranked_answers, label in generated_answers_labels: @@ -80,9 +111,13 @@ preds.append(ranked_answers[0].data) labels.append(label) +# Initialize the LLMBlenderEvaluator with the generated results and the reference outputs evaluator = LLMBlenderEvaluator(preds=preds, labels=labels) + +# Compute various metrics to evaluate the generated results against the reference outputs metrics = evaluator.compute_metrics() +# Print the evaluation metrics print("BLEURT Score", metrics["bleurt"]) print("BARTSCORE Score", metrics["bartscore"]) print("BERTSCORE Score", metrics["bertscore"]) diff --git a/src/llm_blender/mix_instruct/mistral.py b/src/llm_blender/mix_instruct/mistral.py index 99718ef..c047526 100644 --- a/src/llm_blender/mix_instruct/mistral.py +++ b/src/llm_blender/mix_instruct/mistral.py @@ -1,3 +1,16 @@ +"""Evaluation of Mistral-7b on the Mix-Instruct dataset + +This script implements a pipeline to evaluate the Mistral-7b model on the Mix-Instruct dataset +on the BLEURT, BARTScore, and BERTScore metrics. + +The pipeline performs the following steps: +1. Loads the Mistral-7b model using the LlamaCppGenerator from Haystack. +2. Generates responses for prompts and instructions from the Mix-Instruct dataset. +3. Evaluates the generated responses against reference outputs using the BLEURT, BARTScore, and BERTScore metrics. + +This evaluation provides a baseline for the model's performance on the Mix-Instruct dataset. +""" + from datasets import load_dataset from haystack_integrations.components.generators.llama_cpp import LlamaCppGenerator @@ -9,37 +22,69 @@ def generate_result( prompt: str = "", instruction: str = "", ) -> str: + """ + Generate a response using the LlamaCppGenerator. + The prompt and instruction are formatted to be compatible with the model. + + Args: + generator (LlamaCppGenerator): The initialized LlamaCppGenerator object. + prompt (str): The main text input for the model. + instruction (str): Additional instructions for the model. + + Returns: + str: The generated response from the model. + """ # Format prompt to be compatible with mistral-7b-instruct-v0.2 + # This specific format is required for the model to distinguish between user input and expected output formatted_prompt = f"""[INST] {instruction} {prompt} [/INST] """ - # Generate text + # Generate text using the LlamaCppGenerator result = generator.run( formatted_prompt, generation_kwargs={"max_tokens": 128, "temperature": 0.2}, ) + + # Extract the generated text from the result generated_answer = result["replies"][0] return generated_answer +# Define the path to the model weights model = "mistral-7b-instruct-v0.2.Q4_K_M.gguf" + +# Initialize the LlamaCppGenerator with the specified model and context window size generator = LlamaCppGenerator( model=model, n_ctx=256, ) + +# Warm up the generator (loading the model into memory) generator.warm_up() +# Load the dataset from the HuggingFace dataset = load_dataset("llm-blender/mix-instruct", split="validation") + +# Convert the dataset to a pandas DataFrame for easier manipulation dataset = dataset.to_pandas() + +# Generate results for each row in the dataset +# Apply the generate_result function to each row, using the 'input' and 'instruction' columns +# Store the results in the 'result' column dataset.loc[:, "result"] = dataset.apply( lambda row: str(generate_result(generator=generator, prompt=row["input"], instruction=row["instruction"])), axis=1 ) -dataset.to_csv("output_mistral.csv", index=False) +# Save the generated texts to a CSV file +dataset.to_csv("output_mistral.csv", index=False) +# Initialize the LLMBlenderEvaluator with the generated results and the reference outputs evaluator = LLMBlenderEvaluator(preds=dataset["result"], labels=dataset["output"]) + +# Compute various metrics to evaluate the generated results against the reference outputs metrics = evaluator.compute_metrics() +# Print the computed metrics print("BLEURT Score", metrics["bleurt"]) print("BARTSCORE Score", metrics["bartscore"]) print("BERTSCORE Score", metrics["bertscore"]) diff --git a/src/llm_blender/mix_instruct/openchat.py b/src/llm_blender/mix_instruct/openchat.py index 6d529a5..f8119bf 100644 --- a/src/llm_blender/mix_instruct/openchat.py +++ b/src/llm_blender/mix_instruct/openchat.py @@ -1,3 +1,16 @@ +"""Evaluation of OpenChat-3.5 on the Mix-Instruct dataset + +This script implements a pipeline to evaluate the OpenChat-3.5 model on the Mix-Instruct dataset +on the BLEURT, BARTScore, and BERTScore metrics. + +The pipeline performs the following steps: +1. Loads the OpenChat-3.5 model using the LlamaCppGenerator from Haystack. +2. Generates responses for prompts and instructions from the Mix-Instruct dataset. +3. Evaluates the generated responses against reference outputs using the BLEURT, BARTScore, and BERTScore metrics. + +This evaluation provides a baseline for the model's performance on the Mix-Instruct dataset. +""" + from datasets import load_dataset from haystack_integrations.components.generators.llama_cpp import LlamaCppGenerator @@ -9,37 +22,70 @@ def generate_result( prompt: str = "", instruction: str = "", ) -> str: + """ + Generate a response using the LlamaCppGenerator. + + The prompt and instruction are formatted to be compatible with the model. + + Args: + generator (LlamaCppGenerator): The initialized LlamaCppGenerator object. + prompt (str): The main text input for the model. + instruction (str): Additional instructions for the model. + + Returns: + str: The generated response from the model. + """ # Format prompt to be compatible with openchat-3.5-0106 + # This specific format is required for the model to distinguish between user input and expected output formatted_prompt = f"""GPT4 Correct User: {instruction}\n{prompt}<|end_of_turn|>GPT4 Correct Assistant:""" - # Generate text + # Generate text using the LlamaCppGenerator result = generator.run( formatted_prompt, generation_kwargs={"max_tokens": 128, "temperature": 0.2}, ) + + # Extract the generated text from the result generated_answer = result["replies"][0] return generated_answer +# Define the path to the model weights model = "models/openchat-3.5-0106.Q4_K_M.gguf" + +# Initialize the LlamaCppGenerator with the specified model and context window size generator = LlamaCppGenerator( model=model, n_ctx=256, ) + +# Warm up the generator (loading the model into memory) generator.warm_up() +# Load the dataset from the HuggingFace dataset = load_dataset("llm-blender/mix-instruct", split="validation") + +# Convert the dataset to a pandas DataFrame for easier manipulation dataset = dataset.to_pandas() + +# Generate results for each row in the dataset +# Apply the generate_result function to each row, using the 'input' and 'instruction' columns +# Store the results in the 'result' column dataset.loc[:, "result"] = dataset.apply( lambda row: str(generate_result(generator=generator, prompt=row["input"], instruction=row["instruction"])), axis=1 ) -dataset.to_csv("output_openchat.csv", index=False) +# Save the generated texts to a CSV file +dataset.to_csv("output_openchat.csv", index=False) +# Initialize the LLMBlenderEvaluator with the generated results and the reference outputs evaluator = LLMBlenderEvaluator(preds=dataset["result"], labels=dataset["output"]) + +# Compute various metrics to evaluate the generated results against the reference outputs metrics = evaluator.compute_metrics() +# Print the computed metrics print("BLEURT Score", metrics["bleurt"]) print("BARTSCORE Score", metrics["bartscore"]) print("BERTSCORE Score", metrics["bertscore"]) diff --git a/src/llm_blender/mix_instruct/openhermes.py b/src/llm_blender/mix_instruct/openhermes.py index 6d1fd13..651fa97 100644 --- a/src/llm_blender/mix_instruct/openhermes.py +++ b/src/llm_blender/mix_instruct/openhermes.py @@ -1,3 +1,16 @@ +"""Evaluation of OpenHermes-2.5 on the Mix-Instruct dataset + +This script implements a pipeline to evaluate the OpenHermes-2.5 model on the Mix-Instruct dataset +on the BLEURT, BARTScore, and BERTScore metrics. + +The pipeline performs the following steps: +1. Loads the OpenHermes-2.5 model using the LlamaCppGenerator from Haystack. +2. Generates responses for prompts and instructions from the Mix-Instruct dataset. +3. Evaluates the generated responses against reference outputs using the BLEURT, BARTScore, and BERTScore metrics. + +This evaluation provides a baseline for the model's performance on the Mix-Instruct dataset. +""" + from datasets import load_dataset from haystack_integrations.components.generators.llama_cpp import LlamaCppGenerator @@ -9,41 +22,74 @@ def generate_result( prompt: str = "", instruction: str = "", ) -> str: + """ + Generate a response using the LlamaCppGenerator. + + The prompt and instruction are formatted to be compatible with the model. + + Args: + generator (LlamaCppGenerator): The initialized LlamaCppGenerator object. + prompt (str): The main text input for the model. + instruction (str): Additional instructions for the model. + + Returns: + str: The generated response from the model. + """ # Format prompt to be compatible with openhermes-2.5-mistral-7b + # This specific format is required for the model to distinguish between user input and expected output formatted_prompt = f"""<|im_start|>system {instruction}<|im_end|> <|im_start|>user {prompt}<|im_end|> <|im_start|>assistant""" - # Generate text + # Generate text using the LlamaCppGenerator result = generator.run( formatted_prompt, generation_kwargs={"max_tokens": 128, "temperature": 0.2}, ) + + # Extract the generated text from the result generated_answer = result["replies"][0] return generated_answer +# Define the path to the model weights model = "openhermes-2.5-mistral-7b.Q4_K_M.gguf" + +# Initialize the LlamaCppGenerator with the specified model and context window size generator = LlamaCppGenerator( model=model, n_ctx=256, ) + +# Warm up the generator (loading the model into memory) generator.warm_up() +# Load the dataset from the HuggingFace dataset = load_dataset("llm-blender/mix-instruct", split="validation") + +# Convert the dataset to a pandas DataFrame for easier manipulation dataset = dataset.to_pandas() + +# Generate results for each row in the dataset +# Apply the generate_result function to each row, using the 'input' and 'instruction' columns +# Store the results in the 'result' column dataset.loc[:, "result"] = dataset.apply( lambda row: str(generate_result(generator=generator, prompt=row["input"], instruction=row["instruction"])), axis=1 ) -dataset.to_csv("output_openchat.csv", index=False) +# Save the generated texts to a CSV file +dataset.to_csv("output_openchat.csv", index=False) +# Initialize the LLMBlenderEvaluator with the generated results and the reference outputs evaluator = LLMBlenderEvaluator(preds=dataset["result"], labels=dataset["output"]) + +# Compute various metrics to evaluate the generated results against the reference outputs metrics = evaluator.compute_metrics() +# Print the computed metrics print("BLEURT Score", metrics["bleurt"]) print("BARTSCORE Score", metrics["bartscore"]) print("BERTSCORE Score", metrics["bertscore"]) diff --git a/src/llm_blender/mix_instruct/phi.py b/src/llm_blender/mix_instruct/phi.py index 027fdd4..b787888 100644 --- a/src/llm_blender/mix_instruct/phi.py +++ b/src/llm_blender/mix_instruct/phi.py @@ -1,3 +1,16 @@ +"""Evaluation of Phi-3-mini on the Mix-Instruct dataset + +This script implements a pipeline to evaluate the Phi-3-mini model on the Mix-Instruct dataset +on the BLEURT, BARTScore, and BERTScore metrics. + +The pipeline performs the following steps: +1. Loads the Phi-3-mini model using the LlamaCppGenerator from Haystack. +2. Generates responses for prompts and instructions from the Mix-Instruct dataset. +3. Evaluates the generated responses against reference outputs using the BLEURT, BARTScore, and BERTScore metrics. + +This evaluation provides a baseline for the model's performance on the Mix-Instruct dataset. +""" + from datasets import load_dataset from haystack_integrations.components.generators.llama_cpp import LlamaCppGenerator @@ -9,37 +22,70 @@ def generate_result( prompt: str = "", instruction: str = "", ) -> str: + """ + Generate a response using the LlamaCppGenerator. + + The prompt and instruction are formatted to be compatible with the model. + + Args: + generator (LlamaCppGenerator): The initialized LlamaCppGenerator object. + prompt (str): The main text input for the model. + instruction (str): Additional instructions for the model. + + Returns: + str: The generated response from the model. + """ # Format prompt to be compatible with phi-3-mini-4k-instruct + # This specific format is required for the model to distinguish between user input and expected output formatted_prompt = f"""<|user|>\n{instruction} {prompt} <|end|>\n<|assistant|>""" - # Generate text + # Generate text using the LlamaCppGenerator result = generator.run( formatted_prompt, generation_kwargs={"max_tokens": 128, "temperature": 0.2}, ) + + # Extract the generated text from the result generated_answer = result["replies"][0] return generated_answer +# Define the path to the model weights model = "phi-3-mini-4k-instruct.Q4_K_M.gguf" + +# Initialize the LlamaCppGenerator with the specified model and context window size generator = LlamaCppGenerator( model=model, n_ctx=256, ) + +# Warm up the generator (loading the model into memory) generator.warm_up() +# Load the dataset from the HuggingFace dataset = load_dataset("llm-blender/mix-instruct", split="validation") + +# Convert the dataset to a pandas DataFrame for easier manipulation dataset = dataset.to_pandas() + +# Generate results for each row in the dataset +# Apply the generate_result function to each row, using the 'input' and 'instruction' columns +# Store the results in the 'result' column dataset.loc[:, "result"] = dataset.apply( lambda row: str(generate_result(generator=generator, prompt=row["input"], instruction=row["instruction"])), axis=1 ) -dataset.to_csv("output_phi.csv", index=False) +# Save the generated texts to a CSV file +dataset.to_csv("output_phi.csv", index=False) +# Initialize the LLMBlenderEvaluator with the generated results and the reference outputs evaluator = LLMBlenderEvaluator(preds=dataset["result"], labels=dataset["output"]) + +# Compute various metrics to evaluate the generated results against the reference outputs metrics = evaluator.compute_metrics() +# Print the computed metrics print("BLEURT Score", metrics["bleurt"]) print("BARTSCORE Score", metrics["bartscore"]) print("BERTSCORE Score", metrics["bertscore"]) diff --git a/src/llm_blender/mix_instruct/qwen.py b/src/llm_blender/mix_instruct/qwen.py index 321faef..cefae0c 100644 --- a/src/llm_blender/mix_instruct/qwen.py +++ b/src/llm_blender/mix_instruct/qwen.py @@ -1,3 +1,16 @@ +"""Evaluation of Qwen-1.5-7b on the Mix-Instruct dataset + +This script implements a pipeline to evaluate the Qwen-1.5-7b model on the Mix-Instruct dataset +on the BLEURT, BARTScore, and BERTScore metrics. + +The pipeline performs the following steps: +1. Loads the Qwen-1.5-7b model using the LlamaCppGenerator from Haystack. +2. Generates responses for prompts and instructions from the Mix-Instruct dataset. +3. Evaluates the generated responses against reference outputs using the BLEURT, BARTScore, and BERTScore metrics. + +This evaluation provides a baseline for the model's performance on the Mix-Instruct dataset. +""" + from datasets import load_dataset from haystack_integrations.components.generators.llama_cpp import LlamaCppGenerator @@ -9,41 +22,74 @@ def generate_result( prompt: str = "", instruction: str = "", ) -> str: + """ + Generate a response using the LlamaCppGenerator. + + The prompt and instruction are formatted to be compatible with the model. + + Args: + generator (LlamaCppGenerator): The initialized LlamaCppGenerator object. + prompt (str): The main text input for the model. + instruction (str): Additional instructions for the model. + + Returns: + str: The generated response from the model. + """ # Format prompt to be compatible with qwen1.5-7b + # This specific format is required for the model to distinguish between user input and expected output formatted_prompt = f"""<|im_start|>system You are a helpful assistant.<|im_end|> <|im_start|>user {instruction}: {prompt}<|im_end|> <|im_start|>assistant""" - # Generate text + # Generate text using the LlamaCppGenerator result = generator.run( formatted_prompt, generation_kwargs={"max_tokens": 128, "temperature": 0.2}, ) + + # Extract the generated text from the result generated_answer = result["replies"][0] return generated_answer +# Define the path to the model weights model = "models/qwen1_5-7b-chat-q4_k_m.gguf" + +# Initialize the LlamaCppGenerator with the specified model and context window size generator = LlamaCppGenerator( model=model, n_ctx=256, ) + +# Warm up the generator (loading the model into memory) generator.warm_up() +# Load the dataset from the HuggingFace dataset = load_dataset("llm-blender/mix-instruct", split="validation") + +# Convert the dataset to a pandas DataFrame for easier manipulation dataset = dataset.to_pandas() + +# Generate results for each row in the dataset +# Apply the generate_result function to each row, using the 'input' and 'instruction' columns +# Store the results in the 'result' column dataset.loc[:, "result"] = dataset.apply( lambda row: str(generate_result(generator=generator, prompt=row["input"], instruction=row["instruction"])), axis=1 ) -dataset.to_csv("output_openchat.csv", index=False) +# Save the generated texts to a CSV file +dataset.to_csv("output_openchat.csv", index=False) +# Initialize the LLMBlenderEvaluator with the generated results and the reference outputs evaluator = LLMBlenderEvaluator(preds=dataset["result"], labels=dataset["output"]) + +# Compute various metrics to evaluate the generated results against the reference outputs metrics = evaluator.compute_metrics() +# Print the computed metrics print("BLEURT Score", metrics["bleurt"]) print("BARTSCORE Score", metrics["bartscore"]) print("BERTSCORE Score", metrics["bertscore"]) diff --git a/src/llm_blender/mix_instruct/solar.py b/src/llm_blender/mix_instruct/solar.py index 5f4ba8a..157d102 100644 --- a/src/llm_blender/mix_instruct/solar.py +++ b/src/llm_blender/mix_instruct/solar.py @@ -1,3 +1,16 @@ +"""Evaluation of Solar-10.7b-Instruct on the Mix-Instruct dataset + +This script implements a pipeline to evaluate the Solar-10.7b-Instruct model on the Mix-Instruct dataset +on the BLEURT, BARTScore, and BERTScore metrics. + +The pipeline performs the following steps: +1. Loads the Solar-10.7b-Instruct model using the LlamaCppGenerator from Haystack. +2. Generates responses for prompts and instructions from the Mix-Instruct dataset. +3. Evaluates the generated responses against reference outputs using the BLEURT, BARTScore, and BERTScore metrics. + +This evaluation provides a baseline for the model's performance on the Mix-Instruct dataset. +""" + from datasets import load_dataset from haystack_integrations.components.generators.llama_cpp import LlamaCppGenerator @@ -9,38 +22,71 @@ def generate_result( prompt: str = "", instruction: str = "", ) -> str: + """ + Generate a response using the LlamaCppGenerator. + + The prompt and instruction are formatted to be compatible with the model. + + Args: + generator (LlamaCppGenerator): The initialized LlamaCppGenerator object. + prompt (str): The main text input for the model. + instruction (str): Additional instructions for the model. + + Returns: + str: The generated response from the model. + """ # Format prompt to be compatible with solar-10.7b-instruct-v1.0 + # This specific format is required for the model to distinguish between user input and expected output formatted_prompt = f"""### User: {instruction} {prompt} ### Assistant:""" - # Generate text + # Generate text using the LlamaCppGenerator result = generator.run( formatted_prompt, generation_kwargs={"max_tokens": 128, "temperature": 0.2}, ) + + # Extract the generated text from the result generated_answer = result["replies"][0] return generated_answer +# Define the path to the model weights model = "models/solar-10.7b-instruct-v1.0.Q4_K_M" + +# Initialize the LlamaCppGenerator with the specified model and context window size generator = LlamaCppGenerator( model=model, n_ctx=256, ) + +# Warm up the generator (loading the model into memory) generator.warm_up() +# Load the dataset from the HuggingFace dataset = load_dataset("llm-blender/mix-instruct", split="validation") + +# Convert the dataset to a pandas DataFrame for easier manipulation dataset = dataset.to_pandas() + +# Generate results for each row in the dataset +# Apply the generate_result function to each row, using the 'input' and 'instruction' columns +# Store the results in the 'result' column dataset.loc[:, "result"] = dataset.apply( lambda row: str(generate_result(generator=generator, prompt=row["input"], instruction=row["instruction"])), axis=1 ) -dataset.to_csv("output_openchat.csv", index=False) +# Save the generated texts to a CSV file +dataset.to_csv("output_openchat.csv", index=False) +# Initialize the LLMBlenderEvaluator with the generated results and the reference outputs evaluator = LLMBlenderEvaluator(preds=dataset["result"], labels=dataset["output"]) + +# Compute various metrics to evaluate the generated results against the reference outputs metrics = evaluator.compute_metrics() +# Print the computed metrics print("BLEURT Score", metrics["bleurt"]) print("BARTSCORE Score", metrics["bartscore"]) print("BERTSCORE Score", metrics["bertscore"]) diff --git a/src/llm_blender/mix_instruct/starling.py b/src/llm_blender/mix_instruct/starling.py index 0773539..3f51455 100644 --- a/src/llm_blender/mix_instruct/starling.py +++ b/src/llm_blender/mix_instruct/starling.py @@ -1,3 +1,16 @@ +"""Evaluation of Starling-7b on the Mix-Instruct dataset + +This script implements a pipeline to evaluate the Starling-7b model on the Mix-Instruct dataset +on the BLEURT, BARTScore, and BERTScore metrics. + +The pipeline performs the following steps: +1. Loads the Starling-7b model using the LlamaCppGenerator from Haystack. +2. Generates responses for prompts and instructions from the Mix-Instruct dataset. +3. Evaluates the generated responses against reference outputs using the BLEURT, BARTScore, and BERTScore metrics. + +This evaluation provides a baseline for the model's performance on the Mix-Instruct dataset. +""" + from datasets import load_dataset from haystack_integrations.components.generators.llama_cpp import LlamaCppGenerator @@ -9,37 +22,70 @@ def generate_result( prompt: str = "", instruction: str = "", ) -> str: + """ + Generate a response using the LlamaCppGenerator. + + The prompt and instruction are formatted to be compatible with the model. + + Args: + generator (LlamaCppGenerator): The initialized LlamaCppGenerator object. + prompt (str): The main text input for the model. + instruction (str): Additional instructions for the model. + + Returns: + str: The generated response from the model. + """ # Format prompt to be compatible with starling-lm-7b-alpha + # This specific format is required for the model to distinguish between user input and expected output formatted_prompt = f"""GPT4 Correct User: {instruction}\n{prompt}<|end_of_turn|>GPT4 Correct Assistant:""" - # Generate text + # Generate text using the LlamaCppGenerator result = generator.run( formatted_prompt, generation_kwargs={"max_tokens": 128, "temperature": 0.2}, ) + + # Extract the generated text from the result generated_answer = result["replies"][0] return generated_answer +# Define the path to the model weights model = "models/starling-lm-7b-alpha.Q4_K_M.gguf" + +# Initialize the LlamaCppGenerator with the specified model and context window size generator = LlamaCppGenerator( model=model, n_ctx=256, ) + +# Warm up the generator (loading the model into memory) generator.warm_up() +# Load the dataset from the HuggingFace dataset = load_dataset("llm-blender/mix-instruct", split="validation") + +# Convert the dataset to a pandas DataFrame for easier manipulation dataset = dataset.to_pandas() + +# Generate results for each row in the dataset +# Apply the generate_result function to each row, using the 'input' and 'instruction' columns +# Store the results in the 'result' column dataset.loc[:, "result"] = dataset.apply( lambda row: str(generate_result(generator=generator, prompt=row["input"], instruction=row["instruction"])), axis=1 ) -dataset.to_csv("output_starling.csv", index=False) +# Save the generated texts to a CSV file +dataset.to_csv("output_starling.csv", index=False) +# Initialize the LLMBlenderEvaluator with the generated results and the reference outputs evaluator = LLMBlenderEvaluator(preds=dataset["result"], labels=dataset["output"]) + +# Compute various metrics to evaluate the generated results against the reference outputs metrics = evaluator.compute_metrics() +# Print the computed metrics print("BLEURT Score", metrics["bleurt"]) print("BARTSCORE Score", metrics["bartscore"]) print("BERTSCORE Score", metrics["bertscore"])