-
Notifications
You must be signed in to change notification settings - Fork 800
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Sequence[string] #1844
Comments
@dosue |
@dosu |
RAGAS version 0.1.7 expects the context input to be in the format of a This is a bit tricky, @jjmachan, could you lend your expertise on whether RAGAS specifically requires a flattened format for the context? To continue talking to Dosu, mention @dosu. Help Dosu learn! Give it feedback: Great Response | Irrelevant Answer | Incorrect Sources | Too Verbose | Hallucination | Other |
This issue seems related to #1807. To assist you more effectively, I’ve replicated your described data format in the same development environment (RAGAS version 0.1.7), and everything appears to work fine on my end. However, to expedite troubleshooting and ensure we can address your specific issue accurately, it would be extremely helpful if you could share a portion of your dataset or provide the full code you used. from ragas import evaluate
import datasets
from ragas.metrics import (
answer_relevancy,
faithfulness,
context_recall,
context_precision,
)
sample = {
"contexts": [["context1_chunk1", "context1_chunk2"], ["context2_chunk1"]],
"question": ["question1", "question2"],
"answer": ["answer1", "answer2"]
}
dt = datasets.Dataset.from_dict(a)
result = evaluate(
dt,
metrics=[
faithfulness,
answer_relevancy,
],
)
| | contexts | question | answer | faithfulness | answer_relevancy |
|---|------------------------------------|------------|----------|--------------|------------------|
| 1 | [context1_chunk1, context1_chunk2] | question1 | answer1 | NaN | 0.859496 |
| 2 | [context2_chunk1] | question2 | answer2 | NaN | 0.000000 | |
@hundredeuk2 the full code: import json import numpy as np from langchain_core.outputs import LLMResult, Generation from ragas.llms.prompt import PromptValue current_script_path = Path(file).resolve() Load the ground truth datafile_path= os.path.join('src','assets','GT.json') Load the question and the answer and the chunksfile_path= os.path.join('src','assets','user_llm_interaction_embeddings_c1521dd5_b819_4241_b3a4_3e5c1388037c.json') #creating a dataset of str type Iterate through each dictionary in your data#for item in ground_truth_data: Check the length of context to see if anything was appended#print(f"Number of context entries extracted: {len(context)}") Iterate through each dictionary in your datafor item in llm: Check the length of context to see if anything was appended""" print(f"Number of context entries extracted: {len(context)}") """ Replace the IDs with the corresponding contentchunk_embeddings = [] for sublist in context: Initialize empty lists for datasetnew_ragas_dataset = { Assuming question, context, and answer lists are already availablefor i in range(len(question)):
Print to verify the format#print(f"Dataset length: {len(new_ragas_dataset['question'])}") Initialize an empty list to hold the new datasetdata_set = [] Iterate through the list and combine every two dictionariesfor i in range(0, len(llm), 2): #for j in llm: #def map_chunks(data_set, ground_truth_data):
#data_set = map_chunks(data_set, ground_truth_data) Assuming data_set is a list of dictionariesragas_data = [ Create the required structure that structures the data for the Hugging Face Dataset creation.formatted_data = { Define the column_map to match custom columns to expected onescolumn_map = { Create a Dataset using the Hugging Face
|
@hundredeuk2 |
While reviewing the evaluation process, it appears that the variable This suggests there might be an issue with retrieving or processing the documents during the refinement stage. It would be helpful to double-check if something is being missed or mishandled in that step. Additionally, since the print(new_ragas_dataset)
{'question': ['Quali sono gli errori del macchinario futura, riguardanti la tensione a 3V?',
"La macchina futura prevede qualche specifica per la conduttività dell'acqua?",
'Quali sono gli errori che mi segnalano questi problemi?'],
'contexts': [[], [], []],
'answer': ['Gli errori riguardanti la tensione a 3V per il macchinario Futura sono i seguenti:\n\n1. **E306**: Tensione 3.3V sotto il limite\n - Verificare le connessioni in uscita\n - Sostituire la scheda idrico\n\n2. **E307**: Tensione 3.3V interno sopra il limite\n - Verificare le connessioni in uscita\n - Sostituire la scheda idrico\n\n3. **E716**: Tensione 3.3V sotto il limite\n - Verificare connessioni in uscita\n - Sostituire scheda base tavoletta\n\n4. **E717**: Tensione 3.3V interno sopra il limite\n - Verificare connessioni in uscita\n - Sostituire scheda base tavoletta\n\n5. **E449**: Tensione 3.3V sotto il limite\n - Verificare i collegamenti in uscita\n - Sostituire la scheda poltrona\n\n6. **E450**: Tensione 3.3V interno sopra il limite\n - Verificare i collegamenti in uscita\n - Sostituire la scheda poltrona\n\n7. **E116**: Tensione 3.3V sotto il limite\n - Verificare le connessioni in uscita\n - Sostituire la scheda base tavoletta medico\n\n8. **E117**: Tensione 3.3V interno sopra il limite\n - Verificare le connessioni in uscita\n - Sostituire la scheda base tavoletta medico\n\n9. **E224**: Tensione 3.3V sotto il limite\n - Verificare le connessioni in uscita\n - Sostituire la scheda idrico\n\n10. **E225**: Tensione 3.3V interno sopra il limite\n - Verificare le connessioni in uscita\n - Sostituire la scheda idrico',
"Sì, la macchina Futura prevede specifiche precise per la conduttività dell'acqua utilizzata.\n\nEcco i punti salienti relativi alla conduttività dell'acqua:\n\n1. **Conduttività Massima:** L'acqua demineralizzata distillata utilizzata per l'alimentazione della sterilizzatrice dovrebbe avere una **conduttività inferiore a 15 μS/cm**.\n2. **Sensore di Conduttività:** La sterilizzatrice è dotata di un sensore di conduttività che verifica automaticamente la qualità dell'acqua trattata dal filtro demineralizzatore integrato.\n3. **Allarme Conduttività:** Se i valori di conduttività superano i 20 μS/cm, un allarme segnalerà la necessità di procedere alla sostituzione della cartuccia di resina a scambio ionico.\n4. **Rapporto Ciclo:** La misura di conducibilità dell’acqua viene effettuata automaticamente ad ogni avvio del ciclo di sterilizzazione o di test e il valore relativo è riportato sul rapporto ciclo.\n\nL'utilizzo di acqua con conduttività superiore ai limiti indicati può causare danni al macchinario e compromettere l'efficacia della sterilizzazione, incrementando anche il rischio di ossidazione e la formazione di residui calcarei.",
"Gli errori che possono segnalare problemi relativi alla conduttività dell'acqua sono generalmente associati a malfunzionamenti del sistema idrico o delle sonde di livello. Tuttavia, in base ai documenti forniti, non sembra esserci un errore specifico che segnali direttamente un problema di conduttività dell'acqua. Gli errori che potrebbero indirettamente indicare problemi legati alla qualità dell'acqua o alla conduttività sono:\n\n1. **W64**: **Manca H₂O, riempire serbatoio 2**\n - Azioni: Riempire il serbatoio H₂O₂, verificare la scheda igiene, verificare la sonda di livello.\n\n2. **W212**: **Serbatoio disinfettante pieno**\n - Possibile implicazione di conduttività alta se il serbatoio pieno impedisce il normale funzionamento.\n\n3. **E55**: **S1 livello sonde incongruente Max = on Min = off**\n - Incongruenza sonde serbatoio 1 W.H.E.: Verificare lo stato della scheda igiene, verificare le sonde, verificare lo stato dei led della scheda igiene.\n\n4. **E57**: **S2 Livello sonde incongruente Max = on Min = off**\n - Incongruenza sonde serbatoio 2 del sistema W.H.E.: Verificare lo stato della scheda igiene, verificare le sonde, verificare lo stato dei led della scheda igiene.\n\n5. **E60**: **Durante il funzionamento normale del riunito, lettura di sonda di FULL coperta**\n - Tentare la procedura di svuotamento del sistema W.H.E.. Verificare la presenza di trafilamenti acqua nel sistema W.H.E..\n\n6. **E67**: **Anomalia della sonda di massimo serbatoio 1**\n - Serbatoio 1 eliminato per sonda STOP attiva: Verificare l'ingresso acqua al sistema W.H.E., verificare le sonde del serbatoio W.H.E.\n\n7. **E68**: **Anomalia della sonda di massimo serbatoio 2**\n - Serbatoio 2 eliminato per sonda STOP attiva: Verificare l'ingresso acqua al sistema W.H.E., verificare le sonde del serbatoio W.H.E.\n\nIn caso emerga uno di questi errori, potrebbe essere utile controllare anche la qualità dell'acqua utilizzata per assicurarsi che rientri nei parametri specificati di conduttività per evitare ulteriori problemi di funzionamento del macchinario Futura."]} |
@hundredeuk2 second: the new new_ragas_dataset is my textual dataset I have also another dataset related to the embeddings in the same format to not use API calls for evaluation. i think maybe I have to make some changes in the subclass of customragasllm.what do you think? |
@dosu Could you tell me about this and give me a solution for this? |
To resolve the issue of the
By following these steps, you should be able to identify and resolve the issue with the To continue talking to Dosu, mention @dosu. Help Dosu learn! Give it feedback: Great Response | Irrelevant Answer | Incorrect Sources | Too Verbose | Hallucination | Other |
@hundredeuk2 |
I might not fully understand the exact process you are attempting, but from the perspective of RAGAS Evaluation, your provided code cannot work without The core issue seems to stem from the fact that the Based on the code snippet you shared: chunk_embeddings = []
chunk_string = []
for sublist in context:
strings = []
embeddings = []
for idx, i in enumerate(sublist):
for item in ground_truth_data:
if item['id'] == i:
strings.append(item['content'])
embeddings.append(item['text_vector'])
chunk_embeddings.append(embeddings)
chunk_string.append(strings) The issue seems to arise because nothing is being appended to That said, if creating |
@dosu |
If you already have the question, context, and answer, and you want to avoid using API calls, you don't necessarily need to subclass Here are some steps to consider:
By following these steps, you can effectively use your existing data for evaluation without relying on API calls. To continue talking to Dosu, mention @dosu. Help Dosu learn! Give it feedback: Great Response | Irrelevant Answer | Incorrect Sources | Too Verbose | Hallucination | Other |
@dosu |
If you do not need to generate text or modify the LLM, and you want to avoid API calls, you might not need to subclass However, if you encountered an error related to setting the LLM, it might be due to the framework expecting an LLM instance even if it's not used for text generation. In such cases, you can provide a minimal implementation of Here's a basic example of how you might implement this: class MinimalRagasLLM(BaseRagasLLM):
async def _call(self, prompt: str) -> str:
return "No API call needed"
async def generate_text(self, prompt, n=1, temperature=1e-8, stop=None, callbacks=[]):
return LLMResult(generations=[[Generation(text="No API call needed")]])
async def agenerate_text(self, prompt, n=1, temperature=1e-8, stop=None, callbacks=[]):
return LLMResult(generations=[[Generation(text="No API call needed")]]) This way, you satisfy the framework's requirement for an LLM without making any API calls. Ensure your dataset is correctly formatted and that your embeddings are properly integrated to avoid other potential issues. To continue talking to Dosu, mention @dosu. Help Dosu learn! Give it feedback: Great Response | Irrelevant Answer | Incorrect Sources | Too Verbose | Hallucination | Other |
does RAGAS specifically require a flattened format for the context?
or Do you think this format is ok? Sequence[string]
I am working with version 0.1.7
The text was updated successfully, but these errors were encountered: