File size: 23,039 Bytes
e4bbd30 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 |
supported_templates = [
"DIRECT",
"MEANING",
"INDIRECT",
"FS-DIRECT",
"FS-DIRECT_MAJ",
"FS-DIRECT_FR",
"FS-DIRECT_MAJ_FR",
"FS-DIRECT_FR_MIN",
"NETWORK"
]
def print_templates():
print("Supported templates:")
for tmplt in supported_templates:
print(tmplt)
def check_template_name(name):
assert name in supported_templates, f""+name+" not support, supported templates: "+str(supported_templates)
def make_prompt(name, reference, hypothese, model, tokenizer, device):
use_fs = False
if "FS-" in name:
name = name.split("-")[1]
use_fs = True
match name:
case "DIRECT":
template = [
{"role": "user", "content": "You will receive two sentences A and B."
+" Do these two sentences mean the same thing?"
+" Answer with only one word \"yes\" or \"no\"."},
{"role": "assistant", "content": "Please provide the sentences for me to evaluate."},
]
if use_fs:
template.append({"role": "user", "content": "A: \""+"Amrozi accused his brother , whom he called \" the witness \" , of deliberately distorting his evidence ."+"\"; B: \""+"Amrozi accused his brother , whom he disparagingly referred to as 'the liar witness', of intentionally twisting his testimony ."+"\""})
template.append({"role": "assistant", "content": "No"})
template.append({"role": "user", "content": "A: \""+"Pennmakkal is an Indian Malayalam film from 1966 , produced by J. Sasikumar and directed by KP Kottarakkara ."+"\"; B: \""+"The Indian Malayalam film 'Pennmakkal', released in 1966, was produced by J. Sasikumar and directed by KP Kottarakkara ."+"\""})
template.append({"role": "assistant", "content": "Yes"})
template.append({"role": "user", "content": "A: \""+"Sorkin , who faces charges of conspiracy to obstruct justice and lying to a grand jury , was to have been tried separately ."+"\"; B: \""+"Despite being accused of conspiring to obstruct justice and perjury , Sorkin was supposed to stand trial on his own ."+"\""})
template.append({"role": "assistant", "content": "No"})
template.append({"role": "user", "content": "A: \""+"Gilroy police and FBI agents described Gehring as cooperative , but said Saturday that he had revealed nothing about what had happened to the children ."+"\"; B: \""+"Although Gilroy police and FBI agents reported that Gehring was cooperative , he hadn't disclosed any information about the children's whereabouts or what had happened to them as of Saturday ."+"\""})
template.append({"role": "assistant", "content": "No"})
template.append({"role": "user", "content": "A: \""+"Whereas '' e `` the electric charge of the particle and A is the magnetic vector potential of the electromagnetic field ."+"\"; B: \""+"The electric charge of the particle is denoted by ''e'', and the magnetic vector potential of the electromagnetic field is denoted by 'A' ."+"\""})
template.append({"role": "assistant", "content": "Yes"})
template.append({"role": "user", "content": "A: \""+"The Jidanul River is a tributary of the Jiul de Vest River in Romania ."+"\"; B: \""+"The Jidanul River is a mere insignificant stream that flows into the grand Jiul de Vest River in Romania ."+"\""})
template.append({"role": "assistant", "content": "No"})
template.append({"role": "user", "content": "A: \""+reference+"\"; B: \""+hypothese+"\""})
yes = [v for v in template]
no = [v for v in template]
yes.append({"role": "assistant", "content": "Yes"})
no.append({"role": "assistant", "content": "No"})
return yes,no
case "NETWORK":
template = [
{"role": "user", "content": "You will receive two sentences A and B."
+" Do these two sentences express the same network policy?"
+" Answer with only one word \"Yes\" or \"No\"."},
{"role": "assistant", "content": "Please provide the sentences for me to evaluate."},
]
#Few shots
template.append({"role": "user", "content": "A: \""+"Everquest is blocked by the University firewall"+"\"; B: \""+"Everquest is not allowed by the University firewall"+"\""})
template.append({"role": "assistant", "content": "Yes"})
template.append({"role": "user", "content": "A: \""+"Quotas for students are 5000 Megabyte per hr download and 2000 Megabyte per hour upload"+"\"; B: \""+"Students have a download quota of 5000 MB per hour and an upload quota of 2000 MB per hour"+"\""})
template.append({"role": "assistant", "content": "Yes"})
template.append({"role": "user", "content": "A: \""+"from endpoint('guests') to endpoint('servers') for group('host') block traffic('any')"+"\"; B: \""+"RHIT-OPEN will work in labs, classrooms and residence halls but does not allow the user to access the internal Rose-Hulman network"+"\""})
template.append({"role": "assistant", "content": "No"})
template.append({"role": "user", "content": "A: \""+"Housing does not normally limit the amount of bandwidth"+"\"; B: \""+"There is no bandwidth limit for the dorms"+"\""})
template.append({"role": "assistant", "content": "No"})
template.append({"role": "user", "content": "A: \""+"for endpoint('university') add middlebox('firewall') allow traffic('H323 video conferencing')"+"\"; B: \""+"H323 video conferencing is allowed by the University firewall"+"\""})
template.append({"role": "assistant", "content": "Yes"})
template.append({"role": "user", "content": "A: \""+"H323 video conferencing is allowed by the University firewall"+"\"; B: \""+"The network firewall does not block H.323 video conferencing"+"\""})
template.append({"role": "assistant", "content": "No"})
# template.append({"role": "user", "content": "A: \""+"HERE_A"+"\"; B: \""+"HERE_B"+"\""})
# template.append({"role": "assistant", "content": "HERE_ANS"})
template.append({"role": "user", "content": "A: \""+reference+"\"; B: \""+hypothese+"\""})
yes = [v for v in template]
no = [v for v in template]
yes.append({"role": "assistant", "content": "Yes"})
no.append({"role": "assistant", "content": "No"})
return yes,no
case "DIRECT_FR":
template = [
{"role": "user", "content": "Tu vas recevoir deux phrases, A et B."
+" Est-ce que ces deux phrases veulent dire la même chose ?"
+" Réponds avec un seul mot : \"oui\" ou \"non\"."},
{"role": "assistant", "content": "S'il te plaît, fournis-moi les deux phrases que je dois évaluer."},
]
if use_fs:
template.append({"role": "user", "content": "A: \""+"Amrozi a accusé son frère, qu'il appelait \"le témoin\", d'avoir délibérément déformé ses preuves ."+"\"; B: \""+"Amrozi a accusé son frère, qu'il désignait de manière péjorative comme \"le témoin menteur\", d'avoir intentionnellement falsifié son témoignage."+"\""})
template.append({"role": "assistant", "content": "Non"})
template.append({"role": "user", "content": "A: \""+"Pennmakkal est un film indien en malayalam de 1966, produit par J. Sasikumar et réalisé par KP Kottarakkara ."+"\"; B: \""+"Le film indien en malayalam 'Pennmakkal', sorti en 1966, a été produit par J. Sasikumar et réalisé par KP Kottarakkara ."+"\""})
template.append({"role": "assistant", "content": "Oui"})
template.append({"role": "user", "content": "A: \""+"Sorkin, qui fait face à des accusations de complot pour entraver la justice et de faux témoignage devant un grand jury, devait être jugé séparément ."+"\"; B: \""+"Malgré les accusations de complot pour entraver la justice et de parjure, Sorkin devait être jugé seul ."+"\""})
template.append({"role": "assistant", "content": "Non"})
template.append({"role": "user", "content": "A: \""+"La police de Gilroy et les agents du FBI ont décrit Gehring comme coopératif, mais ont déclaré samedi qu'il n'avait révélé aucune information sur ce qui était arrivé aux enfants ."+"\"; B: \""+"Bien que la police de Gilroy et les agents du FBI aient rapporté que Gehring était coopératif, il n'avait pas divulgué d'informations sur le lieu où se trouvaient les enfants ou sur ce qui leur était arrivé samedi ."+"\""})
template.append({"role": "assistant", "content": "Non"})
template.append({"role": "user", "content": "A: \""+"Dans lequel ''e'' représente la charge électrique de la particule et A est le vecteur du potentiel magnétique du champ électromagnétique ."+"\"; B: \""+"La charge électrique de la particule est désignée par ''e'', et le vecteur du potentiel magnétique du champ électromagnétique est désigné par 'A' ."+"\""})
template.append({"role": "assistant", "content": "Oui"})
template.append({"role": "user", "content": "A: \""+"La rivière Jidanul est un affluent de la rivière Jiul de Vest en Roumanie ."+"\"; B: \""+"La rivière Jidanul est un simple ruisseau insignifiant qui se jette dans la grande rivière Jiul de Vest en Roumanie ."+"\""})
template.append({"role": "assistant", "content": "Non"})
template.append({"role": "user", "content": "A: \""+reference+"\"; B: \""+hypothese+"\""})
yes = [v for v in template]
no = [v for v in template]
yes.append({"role": "assistant", "content": "Oui"})
no.append({"role": "assistant", "content": "Non"})
return yes,no
case "DIRECT_FR_MIN":
template = [
{"role": "user", "content": "Tu vas recevoir deux phrases, A et B."
+" Est-ce que ces deux phrases veulent dire la même chose ?"
+" Réponds avec un seul mot : \"oui\" ou \"non\"."},
{"role": "assistant", "content": "S'il te plaît, fournis-moi les deux phrases que je dois évaluer."},
]
if use_fs:
template.append({"role": "user", "content": "A: \""+"Amrozi a accusé son frère, qu'il appelait \"le témoin\", d'avoir délibérément déformé ses preuves ."+"\"; B: \""+"Amrozi a accusé son frère, qu'il désignait de manière péjorative comme \"le témoin menteur\", d'avoir intentionnellement falsifié son témoignage."+"\""})
template.append({"role": "assistant", "content": "non"})
template.append({"role": "user", "content": "A: \""+"Pennmakkal est un film indien en malayalam de 1966, produit par J. Sasikumar et réalisé par KP Kottarakkara ."+"\"; B: \""+"Le film indien en malayalam 'Pennmakkal', sorti en 1966, a été produit par J. Sasikumar et réalisé par KP Kottarakkara ."+"\""})
template.append({"role": "assistant", "content": "oui"})
template.append({"role": "user", "content": "A: \""+"Sorkin, qui fait face à des accusations de complot pour entraver la justice et de faux témoignage devant un grand jury, devait être jugé séparément ."+"\"; B: \""+"Malgré les accusations de complot pour entraver la justice et de parjure, Sorkin devait être jugé seul ."+"\""})
template.append({"role": "assistant", "content": "non"})
template.append({"role": "user", "content": "A: \""+"La police de Gilroy et les agents du FBI ont décrit Gehring comme coopératif, mais ont déclaré samedi qu'il n'avait révélé aucune information sur ce qui était arrivé aux enfants ."+"\"; B: \""+"Bien que la police de Gilroy et les agents du FBI aient rapporté que Gehring était coopératif, il n'avait pas divulgué d'informations sur le lieu où se trouvaient les enfants ou sur ce qui leur était arrivé samedi ."+"\""})
template.append({"role": "assistant", "content": "non"})
template.append({"role": "user", "content": "A: \""+"Dans lequel ''e'' représente la charge électrique de la particule et A est le vecteur du potentiel magnétique du champ électromagnétique ."+"\"; B: \""+"La charge électrique de la particule est désignée par ''e'', et le vecteur du potentiel magnétique du champ électromagnétique est désigné par 'A' ."+"\""})
template.append({"role": "assistant", "content": "oui"})
template.append({"role": "user", "content": "A: \""+"La rivière Jidanul est un affluent de la rivière Jiul de Vest en Roumanie ."+"\"; B: \""+"La rivière Jidanul est un simple ruisseau insignifiant qui se jette dans la grande rivière Jiul de Vest en Roumanie ."+"\""})
template.append({"role": "assistant", "content": "non"})
template.append({"role": "user", "content": "A: \""+reference+"\"; B: \""+hypothese+"\""})
yes = [v for v in template]
no = [v for v in template]
yes.append({"role": "assistant", "content": "oui"})
no.append({"role": "assistant", "content": "non"})
return yes,no
case "DIRECT_MAJ_FR":
template = [
{"role": "user", "content": "Tu vas recevoir deux phrases, A et B."
+" Est-ce que ces deux phrases veulent dire la même chose ?"
+" Réponds avec un seul mot : \"Oui\" ou \"Non\"."},
{"role": "assistant", "content": "S'il te plaît, fournis-moi les deux phrases que je dois évaluer."},
]
if use_fs:
template.append({"role": "user", "content": "A: \""+"Amrozi a accusé son frère, qu'il appelait \"le témoin\", d'avoir délibérément déformé ses preuves ."+"\"; B: \""+"Amrozi a accusé son frère, qu'il désignait de manière péjorative comme \"le témoin menteur\", d'avoir intentionnellement falsifié son témoignage."+"\""})
template.append({"role": "assistant", "content": "Non"})
template.append({"role": "user", "content": "A: \""+"Pennmakkal est un film indien en malayalam de 1966, produit par J. Sasikumar et réalisé par KP Kottarakkara ."+"\"; B: \""+"Le film indien en malayalam 'Pennmakkal', sorti en 1966, a été produit par J. Sasikumar et réalisé par KP Kottarakkara ."+"\""})
template.append({"role": "assistant", "content": "Oui"})
template.append({"role": "user", "content": "A: \""+"Sorkin, qui fait face à des accusations de complot pour entraver la justice et de faux témoignage devant un grand jury, devait être jugé séparément ."+"\"; B: \""+"Malgré les accusations de complot pour entraver la justice et de parjure, Sorkin devait être jugé seul ."+"\""})
template.append({"role": "assistant", "content": "Non"})
template.append({"role": "user", "content": "A: \""+"La police de Gilroy et les agents du FBI ont décrit Gehring comme coopératif, mais ont déclaré samedi qu'il n'avait révélé aucune information sur ce qui était arrivé aux enfants ."+"\"; B: \""+"Bien que la police de Gilroy et les agents du FBI aient rapporté que Gehring était coopératif, il n'avait pas divulgué d'informations sur le lieu où se trouvaient les enfants ou sur ce qui leur était arrivé samedi ."+"\""})
template.append({"role": "assistant", "content": "Non"})
template.append({"role": "user", "content": "A: \""+"Dans lequel ''e'' représente la charge électrique de la particule et A est le vecteur du potentiel magnétique du champ électromagnétique ."+"\"; B: \""+"La charge électrique de la particule est désignée par ''e'', et le vecteur du potentiel magnétique du champ électromagnétique est désigné par 'A' ."+"\""})
template.append({"role": "assistant", "content": "Oui"})
template.append({"role": "user", "content": "A: \""+"La rivière Jidanul est un affluent de la rivière Jiul de Vest en Roumanie ."+"\"; B: \""+"La rivière Jidanul est un simple ruisseau insignifiant qui se jette dans la grande rivière Jiul de Vest en Roumanie ."+"\""})
template.append({"role": "assistant", "content": "Non"})
template.append({"role": "user", "content": "A: \""+reference+"\"; B: \""+hypothese+"\""})
yes = [v for v in template]
no = [v for v in template]
yes.append({"role": "assistant", "content": "Oui"})
no.append({"role": "assistant", "content": "Non"})
return yes,no
case "DIRECT_MAJ":
template = [
{"role": "user", "content": "You will receive two sentences A and B."
+" Do these two sentences mean the same thing?"
+" Answer with only one word \"Yes\" or \"No\"."},
{"role": "assistant", "content": "Please provide the sentences for me to evaluate."},
]
if use_fs:
template.append({"role": "user", "content": "A: \""+"Amrozi accused his brother , whom he called \" the witness \" , of deliberately distorting his evidence ."+"\"; B: \""+"Amrozi accused his brother , whom he disparagingly referred to as 'the liar witness', of intentionally twisting his testimony ."+"\""})
template.append({"role": "assistant", "content": "No"})
template.append({"role": "user", "content": "A: \""+"Pennmakkal is an Indian Malayalam film from 1966 , produced by J. Sasikumar and directed by KP Kottarakkara ."+"\"; B: \""+"The Indian Malayalam film 'Pennmakkal', released in 1966, was produced by J. Sasikumar and directed by KP Kottarakkara ."+"\""})
template.append({"role": "assistant", "content": "Yes"})
template.append({"role": "user", "content": "A: \""+"Sorkin , who faces charges of conspiracy to obstruct justice and lying to a grand jury , was to have been tried separately ."+"\"; B: \""+"Despite being accused of conspiring to obstruct justice and perjury , Sorkin was supposed to stand trial on his own ."+"\""})
template.append({"role": "assistant", "content": "No"})
template.append({"role": "user", "content": "A: \""+"Gilroy police and FBI agents described Gehring as cooperative , but said Saturday that he had revealed nothing about what had happened to the children ."+"\"; B: \""+"Although Gilroy police and FBI agents reported that Gehring was cooperative , he hadn't disclosed any information about the children's whereabouts or what had happened to them as of Saturday ."+"\""})
template.append({"role": "assistant", "content": "No"})
template.append({"role": "user", "content": "A: \""+"Whereas '' e `` the electric charge of the particle and A is the magnetic vector potential of the electromagnetic field ."+"\"; B: \""+"The electric charge of the particle is denoted by ''e'', and the magnetic vector potential of the electromagnetic field is denoted by 'A' ."+"\""})
template.append({"role": "assistant", "content": "Yes"})
template.append({"role": "user", "content": "A: \""+"The Jidanul River is a tributary of the Jiul de Vest River in Romania ."+"\"; B: \""+"The Jidanul River is a mere insignificant stream that flows into the grand Jiul de Vest River in Romania ."+"\""})
template.append({"role": "assistant", "content": "No"})
template.append({"role": "user", "content": "A: \""+reference+"\"; B: \""+hypothese+"\""})
yes = [v for v in template]
no = [v for v in template]
yes.append({"role": "assistant", "content": "Yes"})
no.append({"role": "assistant", "content": "No"})
return yes,no
case "INDIRECT":
template = [
{"role": "user", "content": "You will receive two sentences A and B."
+" Do these two sentences mean the same thing?"},
{"role": "assistant", "content": "Please provide the sentences for me to evaluate."},
{"role": "user", "content": "A: \""+reference+"\"; B: \""+hypothese+"\""}
]
encodeds = tokenizer.apply_chat_template(
template,
return_tensors="pt",
padding=False
).to(device)
explication = model.generate(
encodeds,
max_new_tokens=1000,
do_sample=False,
pad_token_id=tokenizer.eos_token_id
).to(device)
explication = tokenizer.batch_decode(explication)[0]
explication = explication.replace("</s>",'').split("[/INST]")[-1]
template.append({"role": "assistant", "content": explication})
template.append({"role": "user", "content": "Summarize your answer with only one word \"yes\" or \"no\"."})
yes = [v for v in template]
no = [v for v in template]
yes.append({"role": "assistant", "content": "Yes"})
no.append({"role": "assistant", "content": "No"})
return yes,no
case "MEANING":
template = [
{"role": "user", "content": "You will receive two sentences A and B."
+" Explain the meaning of each sentence."},
{"role": "assistant", "content": "Please provide the sentences for me to evaluate."},
{"role": "user", "content": "A: \""+reference+"\"; B: \""+hypothese+"\""}
]
encodeds = tokenizer.apply_chat_template(
template,
return_tensors="pt",
padding=False
).to(device)
explication = model.generate(
encodeds,
max_new_tokens=1000,
do_sample=False,
pad_token_id=tokenizer.eos_token_id
).to(device)
explication = tokenizer.batch_decode(explication)[0]
explication = explication.replace("</s>",'').split("[/INST]")[-1]
template.append({"role": "assistant", "content": explication})
template.append({"role": "user", "content": "Do these two sentences mean the same thing?"
+" Summarize your answer with only one word \"yes\" or \"no\"."})
yes = [v for v in template]
no = [v for v in template]
yes.append({"role": "assistant", "content": "Yes"})
no.append({"role": "assistant", "content": "No"})
return yes,no
|