Zekun Wu
commited on
Commit
·
8cb47d9
1
Parent(s):
595f661
update
Browse files- pages/4_Benchmarking_Injection.py +26 -0
- util/data.py +62 -0
pages/4_Benchmarking_Injection.py
ADDED
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
import os
|
3 |
+
from util.data import get_data
|
4 |
+
|
5 |
+
def check_password():
|
6 |
+
def password_entered():
|
7 |
+
if password_input == os.getenv('PASSWORD'):
|
8 |
+
st.session_state['password_correct'] = True
|
9 |
+
else:
|
10 |
+
st.error("Incorrect Password, please try again.")
|
11 |
+
|
12 |
+
password_input = st.text_input("Enter Password:", type="password")
|
13 |
+
submit_button = st.button("Submit", on_click=password_entered)
|
14 |
+
|
15 |
+
if submit_button and not st.session_state.get('password_correct', False):
|
16 |
+
st.error("Please enter a valid password to access the demo.")
|
17 |
+
|
18 |
+
|
19 |
+
if not st.session_state.get('password_correct', False):
|
20 |
+
check_password()
|
21 |
+
else:
|
22 |
+
st.sidebar.success("Password Verified. Proceed with the demo.")
|
23 |
+
|
24 |
+
data = get_data(5)
|
25 |
+
st.dataframe(data)
|
26 |
+
|
util/data.py
ADDED
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from datasets import load_dataset
|
2 |
+
import pandas as pd
|
3 |
+
|
4 |
+
|
5 |
+
def get_data(sample_size):
|
6 |
+
dataset = load_dataset("esnli")
|
7 |
+
df = dataset['train'].to_pandas()
|
8 |
+
|
9 |
+
esnli_train_df = df.dropna(subset=['hypothesis', 'explanation_1'])
|
10 |
+
|
11 |
+
prompt_template = """You are an advanced AI trained to understand and explain natural language relationships. I will give you a pair of sentences: a premise and a hypothesis. Your task is to determine the relationship between them and provide a detailed explanation of your reasoning process. The possible relationships are "Entailment," "Contradiction," or "Neutral."
|
12 |
+
|
13 |
+
Instructions:
|
14 |
+
|
15 |
+
Read the given premise and hypothesis carefully.
|
16 |
+
|
17 |
+
Identify the relationship between them based on the following definitions:
|
18 |
+
|
19 |
+
Entailment: The hypothesis logically follows from the premise.
|
20 |
+
Contradiction: The hypothesis directly contradicts the premise.
|
21 |
+
Neutral: The hypothesis neither logically follows from nor contradicts the premise.
|
22 |
+
|
23 |
+
Provide the relationship (Entailment, Contradiction, or Neutral).
|
24 |
+
|
25 |
+
Explain in about ten words your reasoning to justify your conclusion.
|
26 |
+
|
27 |
+
Example:
|
28 |
+
|
29 |
+
Premise: "A man is playing a guitar."
|
30 |
+
Hypothesis: "A man is making music."
|
31 |
+
Relationship: Entailment
|
32 |
+
Explanation: Playing guitar inherently involves creating music, fulfilling the hypothesis.
|
33 |
+
|
34 |
+
Now, try it with the following pair:
|
35 |
+
|
36 |
+
Premise: "{premise}"
|
37 |
+
Hypothesis: "{hypothesis}"
|
38 |
+
Relationship:
|
39 |
+
"""
|
40 |
+
|
41 |
+
# Generate prompts for the dataset
|
42 |
+
def generate_prompts(df):
|
43 |
+
prompts = []
|
44 |
+
for _, row in df.iterrows():
|
45 |
+
prompt = prompt_template.format(premise=row['premise'], hypothesis=row['hypothesis'])
|
46 |
+
prompts.append({
|
47 |
+
'question': prompt,
|
48 |
+
'answer': {0: 'Entailment', 1: 'Neutral', 2: 'Contradiction'}[row['label']],
|
49 |
+
'reference_explanation': row['explanation_1']
|
50 |
+
})
|
51 |
+
return prompts
|
52 |
+
|
53 |
+
sample_df = esnli_train_df.sample(n=sample_size, random_state=42)
|
54 |
+
prompts_data = generate_prompts(sample_df)
|
55 |
+
|
56 |
+
prompts_df = pd.DataFrame(prompts_data)
|
57 |
+
|
58 |
+
return prompts_df
|
59 |
+
|
60 |
+
if __name__ == '__main__':
|
61 |
+
sample_size = 5
|
62 |
+
print(get_data(sample_size))
|