Lim0011 commited on
Commit
f4a4a2e
1 Parent(s): cf2c6bc

Delete benchmarks/semeval24/api_call_sem copy.py

Browse files
benchmarks/semeval24/api_call_sem copy.py DELETED
@@ -1,495 +0,0 @@
1
- import openai
2
-
3
- api_key = 'sk-proj-ByZgmgOzCpRPuGXXiLLeT3BlbkFJ8EP0WoTbx4pBfI40bAce'
4
- openai.api_key = api_key
5
-
6
- def call_gpt4_api(user_message):
7
- response = openai.ChatCompletion.create(
8
- model="gpt-4",
9
- messages=[
10
- # {"role": "system", "content": system_message},
11
- {"role": "user", "content": user_message}
12
- ]
13
- )
14
-
15
- # Extract the assistant's response
16
- assistant_message = response['choices'][0]['message']['content']
17
-
18
- # Print the assistant's response
19
- print("Assistant:", assistant_message)
20
-
21
- return assistant_message
22
-
23
- # Example usage
24
- # system_message = """You are an AI assistant whose primary goal is to propose innovative, rigorous, and valid methodologies to solve newly identified scientific problems derived from existing scientific literature, in order to empower researchers to pioneer groundbreaking solutions that catalyze breakthroughs in their fields."""
25
- user_message = """Proposed Method
26
- Method:
27
-
28
- Dataset Augmentation and Preparation:
29
-
30
- Multilingual Data Collection: Augment existing datasets with additional sentence pairs from diverse sources, including news articles, social media, and parallel corpora, specifically targeting low-resource languages.
31
- Back-Translation: Use back-translation techniques to generate paraphrased sentence pairs, enhancing the dataset and ensuring it captures a wide range of semantic nuances.
32
- Transformer-Based Embeddings:
33
-
34
- Pretrained Multilingual Models: Utilize pretrained multilingual models like mBERT, XLM-R, and LASER to generate high-quality embeddings for each sentence pair.
35
- Contextual Embeddings: Incorporate models like T5 and mT5 to generate contextual embeddings, capturing broader commonalities like topic, viewpoint, and temporal context.
36
- Semantic Alignment with Cross-Lingual Models:
37
-
38
- Aligning Embeddings: Use cross-lingual alignment techniques such as VecMap or MUSE to align embeddings across different languages, ensuring consistent semantic representation.
39
- Contrastive Learning: Implement contrastive learning methods to train the model on distinguishing between similar and dissimilar sentence pairs, improving its ability to discern fine-grained semantic differences.
40
- Regression and Ranking Model:
41
-
42
- Ensemble Regression Models: Combine various regression models (e.g., linear regression, SVR, and neural network-based regression) to predict the semantic relatedness score for each sentence pair.
43
- Ranking Mechanism: Implement a ranking mechanism using models like RankNet or LambdaMART to order sentence pairs based on their predicted semantic relatedness scores.
44
- Evaluation and Fine-Tuning:
45
-
46
- Spearman Rank Correlation: Use the Spearman rank correlation coefficient as the primary evaluation metric to assess the model’s performance in ranking sentence pairs.
47
- Hyperparameter Optimization: Employ grid search or Bayesian optimization to fine-tune model hyperparameters, ensuring optimal performance.
48
- Error Analysis and Iteration: Conduct a thorough error analysis to identify and address any systematic biases or shortcomings in the model, iterating on the approach as necessary.
49
- Rationale:
50
- By combining these innovative techniques, the proposed method aims to effectively address the task of predicting semantic textual relatedness across different languages, particularly focusing on low-resource languages. This approach leverages recent advancements in Transformer-based architectures and cross-lingual alignment techniques, ensuring a rigorous, valid, and generalizable solution.
51
-
52
- Experiment Design
53
- Experiment:
54
-
55
- Objective:
56
- Validate the proposed method for predicting Semantic Textual Relatedness (STR) across multiple languages, focusing on low-resource languages.
57
-
58
- Dataset Preparation:
59
-
60
- Data Sources: Collect sentence pairs from diverse sources such as news articles, social media, and parallel corpora, particularly for the targeted low-resource languages (e.g., Algerian Arabic, Amharic, Hausa).
61
- Back-Translation: Implement back-translation techniques to generate paraphrased sentence pairs, enhancing the diversity and semantic richness of the dataset.
62
- Embedding Generation:
63
-
64
- Multilingual Embeddings: Generate embeddings for each sentence pair using pretrained multilingual models like mBERT, XLM-R, and LASER.
65
- Contextual Embeddings: Use models like T5 and mT5 to generate contextual embeddings, capturing broader semantic relationships.
66
- Model Training:
67
-
68
- Semantic Alignment: Apply cross-lingual alignment techniques (VecMap, MUSE) to ensure consistent semantic representation across languages.
69
- Contrastive Learning: Train the model using contrastive learning methods to enhance its ability to distinguish between similar and dissimilar sentence pairs.
70
- Ensemble Regression: Train an ensemble of regression models (linear regression, SVR, neural networks) to predict the semantic relatedness scores.
71
- Ranking Model: Implement a ranking model (RankNet, LambdaMART) to order sentence pairs based on their predicted relatedness scores.
72
- Evaluation:
73
-
74
- Evaluation Metric: Use the Spearman rank correlation coefficient to assess the model’s performance in ranking sentence pairs.
75
- Cross-Validation: Perform k-fold cross-validation to ensure robustness and generalizability of the model.
76
- Hyperparameter Tuning:
77
-
78
- Optimization Techniques: Use grid search or Bayesian optimization to fine-tune model hyperparameters.
79
- Iterative Refinement: Conduct iterative refinement based on error analysis to address any biases or shortcomings in the model.
80
- Reproducibility:
81
-
82
- Code and Data Sharing: Make the code and dataset publicly available to ensure reproducibility.
83
- Documentation: Provide detailed documentation of the experimental setup, data preprocessing steps, and model training process.
84
- Rationale:
85
-
86
- Objective:
87
- Clearly defining the objective ensures the experiment remains focused on validating the proposed method for predicting STR across multiple languages.
88
-
89
- Dataset Preparation:
90
- Collecting diverse sentence pairs and using back-translation enhances the dataset's semantic richness, making the experiment more comprehensive and robust.
91
-
92
- Embedding Generation:
93
- Using pretrained multilingual models and contextual embeddings captures a wide range of semantic relationships, essential for accurately predicting STR.
94
-
95
- Model Training:
96
- Applying semantic alignment and contrastive learning techniques improves the model's ability to handle multilingual data. An ensemble of regression models and a ranking mechanism ensures robust performance.
97
-
98
- Evaluation:
99
- Using the Spearman rank correlation coefficient and cross-validation provides a clear and reliable measure of the model’s effectiveness in ranking sentence pairs.
100
-
101
- Hyperparameter Tuning:
102
- Optimization techniques and iterative refinement ensure the model is fine-tuned for optimal performance, addressing any biases or shortcomings.
103
-
104
- Reproducibility:
105
- Sharing code and data, along with detailed documentation, ensures the experiment can be reproduced and validated by other researchers, enhancing its impact and credibilitytrain.py:import os
106
- import pandas as pd
107
- from argparse import ArgumentParser
108
- from typing import List
109
- import torch
110
- from torch.utils.data import DataLoader
111
- from sentence_transformers import SentenceTransformer, InputExample, losses
112
- import numpy as np
113
- from sklearn.metrics.pairwise import cosine_similarity
114
-
115
- def load_data(dataset_dir: str, data_split: str, list_of_langs: List[str]) -> List[InputExample]:
116
- data_list = []
117
- for lang in list_of_langs:
118
- train_data_path = os.path.join(dataset_dir, lang, f"{lang}_{data_split}.csv")
119
- if not os.path.exists(train_data_path):
120
- print(f"{data_split} data for {lang} does not exist")
121
- continue
122
-
123
- df = pd.read_csv(train_data_path)
124
- scores = df["label"].tolist()
125
- scores = [float(score) for score in scores]
126
- sentence_1s = df["sentence1"].tolist()
127
- sentence_2s = df["sentence2"].tolist()
128
-
129
- for i in range(len(scores)):
130
- data_list.append(InputExample(texts=[sentence_1s[i], sentence_2s[i]], label=scores[i]))
131
- return data_list
132
-
133
-
134
- dataset_dir= "data"
135
- list_of_langs=["eng"]
136
- train_examples = load_data(dataset_dir, "train", list_of_langs)
137
- test_examples = load_data(dataset_dir, "test", list_of_langs)
138
-
139
- train_dataloader = DataLoader(train_examples, shuffle=True, batch_size=16)
140
- test_dataloader = DataLoader(test_examples, shuffle=False, batch_size=16)
141
-
142
- device = "cuda" if torch.cuda.is_available() else "cpu"
143
- print(device)
144
-
145
- model = SentenceTransformer("sentence-transformers/LaBSE", device=device)
146
- loss_function = losses.CosineSimilarityLoss(model=model)
147
-
148
-
149
-
150
- model.fit(
151
- train_objectives=[(train_dataloader, loss_function)],
152
- epochs=10,
153
- warmup_steps=100,
154
- output_path="semrel_baselines/models/finetuned_esp_labse",
155
- )
156
-
157
-
158
- def test_model(test_examples):
159
- sentence_1s = [ex.texts[0] for ex in test_examples]
160
- sentence_2s = [ex.texts[1] for ex in test_examples]
161
- scores = [ex.label for ex in test_examples]
162
-
163
-
164
- # Calculate embeddings
165
- embeddings1 = model.encode(sentence_1s, convert_to_tensor=True)
166
- embeddings2 = model.encode(sentence_2s, convert_to_tensor=True)
167
-
168
- # Calculate cosine similarity
169
- cos_sim = cosine_similarity(embeddings1.cpu(), embeddings2.cpu())
170
- cos_sim_scores = [cos_sim[i, i] for i in range(len(cos_sim))]
171
-
172
-
173
- spearman_corr = np.corrcoef(scores, cos_sim_scores)[0, 1]
174
- return spearman_corr
175
-
176
-
177
-
178
- train_corr = test_model(train_examples)
179
- test_corr = test_model(test_examples)
180
- print (f'Train Spearman correlation: {train_corr:.2f}%, Test Spearman correlation: {test_corr:.2f}%')
181
-
182
- # Save the predictions to submission.csv
183
-
184
- sentence_1s = [ex.texts[0] for ex in test_examples]
185
- sentence_2s = [ex.texts[1] for ex in test_examples]
186
- scores = [ex.label for ex in test_examples]
187
-
188
- embeddings1 = model.encode(sentence_1s, convert_to_tensor=True)
189
- embeddings2 = model.encode(sentence_2s, convert_to_tensor=True)
190
-
191
- cos_sim = cosine_similarity(embeddings1.cpu(), embeddings2.cpu())
192
- cos_sim_scores = [cos_sim[i, i] for i in range(len(cos_sim))]
193
-
194
-
195
- results_df = pd.DataFrame({
196
- "sentence1": sentence_1s,
197
- "sentence2": sentence_2s,
198
- "label": cos_sim_scores
199
- })
200
- result_path = "submission.csv"
201
- results_df.to_csv(result_path, index=False)
202
- print(f"Results saved to {result_path}")
203
-
204
- import os
205
- import pandas as pd
206
- import numpy as np
207
- from sklearn.metrics.pairwise import cosine_similarity
208
-
209
- def get_score(submission_folder = "../env"):
210
- submission_path = os.path.join(submission_folder, "submission.csv")
211
- submission = pd.read_csv(submission_path, index_col=0)
212
- preds = submission["label"].tolist()
213
- preds = [float(pred) for pred in preds]
214
- lang = "eng"
215
-
216
- test_data_path = os.path.join(submission_folder, "data", lang, f"{lang}_test.csv")
217
- df = pd.read_csv(test_data_path)
218
- scores = df["label"].tolist()
219
- scores = [float(score) for score in scores]
220
-
221
- spearman_corr = np.corrcoef(scores, preds)[0, 1]
222
- return spearman_corr
223
- eval.py
224
- if __name__ == "__main__":
225
- print(get_score())
226
-
227
- prepare.py
228
- from datasets import load_dataset
229
- import shutil
230
- import os
231
-
232
- # Define the directory where the dataset should be saved
233
- lan = "eng"
234
- download_dir = os.path.join("../env/data", lan)
235
-
236
- # Create the directory if it does not exist, or remove it if it already exists
237
- if os.path.exists(download_dir):
238
- shutil.rmtree(download_dir)
239
- os.makedirs(download_dir)
240
-
241
- # Load the dataset with the specified splits
242
- dataset = load_dataset("SemRel/SemRel2024", lan, split=['train', 'dev', 'test'])
243
-
244
- # Save each split to a CSV file in the specified directory
245
- for split_name, split_data in zip(['train', 'dev', 'test'], dataset):
246
- split_data.to_csv(f"{download_dir}/{lan}_{split_name}.csv", index=False)
247
-
248
- # Print a message indicating where the dataset has been saved and display the splits
249
- print(f"Dataset downloaded and saved to {download_dir}")
250
- for split_name in ['train', 'dev', 'test']:
251
- print(f"{lan}_{split_name} split saved to {download_dir}/{lan}_{split_name}.csv")
252
- You are a helpful research assistant. You have access to the following tools:
253
- - List Files:
254
- Use this to navigate the file system.
255
- Usage:
256
-
257
- Action: List Files
258
- Action Input: {
259
- "dir_path": [a valid relative path to a directory, such as "." or "folder1/folder2"]
260
- }
261
- Observation: [The observation will be a list of files and folders in dir_path or current directory is dir_path is empty, or an error message if dir_path is invalid.]
262
-
263
-
264
- - Copy File:
265
- Use this to copy a file to a new location with a new name.
266
- Usage:
267
-
268
- Action: Copy File
269
- Action Input: {
270
- "source": [a valid file name with relative path to current directory if needed],
271
- "destination": [a valid file name with relative path to current directory if needed]
272
- }
273
- Observation: [A success message if the file is copied successfully, or an error message if the file cannot be copied.]
274
-
275
-
276
- - Undo Edit Script:
277
- Use this to undo the last edit of the python script.
278
- Usage:
279
-
280
- Action: Undo Edit Script
281
- Action Input: {
282
- "script_name": [a valid python script name with relative path to current directory if needed]
283
- }
284
- Observation: [The observation will be the content of the script before the last edit. If the script does not exist, the observation will be an error message.]
285
-
286
-
287
- - Execute Script:
288
- Use this to execute the python script. The script must already exist.
289
- Usage:
290
-
291
- Action: Execute Script
292
- Action Input: {
293
- "script_name": [a valid python script name with relative path to current directory if needed]
294
- }
295
- Observation: [The observation will be output of the script or errors.]
296
-
297
-
298
- - Request Help:
299
- Use this to request help from human. Use this only when the provided tools and files are not enough for accomplishing necessary steps, such as requesting API reference or installing a library. So you should check through the provided tools and files first.
300
- Usage:
301
-
302
- Action: Request Help
303
- Action Input: {
304
- "request": [a detailed description on what to do]
305
- }
306
- Observation: [The observation will be the response from human.]
307
-
308
-
309
- - Final Answer:
310
- Use this to provide the final answer to the current task.
311
- Usage:
312
-
313
- Action: Final Answer
314
- Action Input: {
315
- "final_answer": [a detailed description on the final answer]
316
- }
317
- Observation: [The observation will be empty.]
318
-
319
-
320
- - Understand File:
321
- Use this to read the whole file and understand certain aspects. You should provide detailed description on what to look for and what should be returned. To get a better understanding of the file, you can use Inspect Script Lines action to inspect specific part of the file.
322
- Usage:
323
-
324
- Action: Understand File
325
- Action Input: {
326
- "file_name": [a valid file name with relative path to current directory if needed],
327
- "things_to_look_for": [a detailed description on what to look for and what should returned]
328
- }
329
- Observation: [The observation will be a description of relevant content and lines in the file. If the file does not exist, the observation will be an error message.]
330
-
331
-
332
- - Inspect Script Lines:
333
- Use this to inspect specific part of a python script precisely, or the full content of a short script. The number of lines to display is limited to 100 lines. This is especially helpful when debugging.
334
- Usage:
335
-
336
- Action: Inspect Script Lines
337
- Action Input: {
338
- "script_name": [a valid python script name with relative path to current directory if needed],
339
- "start_line_number": [a valid line number],
340
- "end_line_number": [a valid line number]
341
- }
342
- Observation: [The observation will be the content of the script between start_line_number and end_line_number . If the script does not exist, the observation will be an error message.]
343
-
344
-
345
- - Edit Script (AI):
346
- Use this to do a relatively large but cohesive edit over a python script. Instead of editing the script directly, you should describe the edit instruction so that another AI can help you do this.
347
- Usage:
348
-
349
- Action: Edit Script (AI)
350
- Action Input: {
351
- "script_name": [a valid python script name with relative path to current directory if needed. An empty sctipt will be created if it does not exist.],
352
- "edit_instruction": [a detailed step by step description on how to edit it.],
353
- "save_name": [a valid file name with relative path to current directory if needed]
354
- }
355
- Observation: [The observation will be the edited content of the script. If the script does not exist, the observation will be an error message. You should always double check whether the edit is correct. If it is far from correct, you can use the Undo Edit Script action to undo the edit.]
356
-
357
-
358
- - Reflection:
359
- Use this to look over all the past steps and reflect. You should provide detailed description on what to reflect on and what should be returned.
360
- Usage:
361
-
362
- Action: Reflection
363
- Action Input: {
364
- "things_to_reflect_on": [a detailed description on what to reflect on and what should be returned]
365
- }
366
- Observation: [The observation will be a the reflection.]
367
-
368
-
369
- - Retrieve Dataset:
370
- Retrieve a suitable dataset based on a detailed description of the requirements. You can load the dataset later from save_dir using the load_from_disk function of the HuggingFace datasets library.
371
- Usage:
372
-
373
- Action: Retrieve Dataset
374
- Action Input: {
375
- "instruction": [an instruction on how to generate the output from the input],
376
- "save_dir": [directory to save the generated dataset dict to. We recommend saving to data/retrieved/]
377
- }
378
- Observation: [The observation will be a success message if the dataset was retrieved successfully. Otherwise, an error message will be returned.]
379
-
380
-
381
- - Retrieve Model:
382
- Retrieve a suitable model based on a detailed description of the requirements. You can obtain the model given the name using the transformers.AutoModelForSeq2SeqLM.from_pretrained function.
383
- Usage:
384
-
385
- Action: Retrieve Model
386
- Action Input: {
387
- "instruction": [an instruction on how to generate the output from the input]
388
- }
389
- Observation: [The observation will be a list of suitable models. You can choose one of them based on the requirements.]
390
-
391
-
392
- - Process Dataset:
393
- Process dataset based on a detailed description of the requirements. You can load the processed data later from save_dirs using the load_from_disk function of the HuggingFace datasets library. The input text will be in the model_input column and the output text will be in the model_output column.
394
- Usage:
395
-
396
- Action: Process Dataset
397
- Action Input: {
398
- "instruction": [an instruction on how to generate the output from the input],
399
- "load_dirs": [directories to load the dataset dicts from, separated by colons],
400
- "save_dirs": [directories to save the processed dataset dicts to, separated by colons. The order should match the order of the loaded datasets. We recommend saving to data/processed/]
401
- }
402
- Observation: [The observation will be a success message if the data was processed successfully. Otherwise, an error message will be returned.]
403
-
404
-
405
- - Train Model:
406
- Train a Seq2Seq model from HuggingFace transformers library using the processed datasets and given hyperparameters.
407
- Usage:
408
-
409
- Action: Train Model
410
- Action Input: {
411
- "model_name": [name of the model to train],
412
- "load_dirs": [directories to load the dataset dicts from, separated by colons],
413
- "result_dir": [directory to save the trained model and tokenizer to. We recommend using results/{trial_id}/. The trained model will be available as {result_dir}/trained_model/ and the tokenizer will be available as {result_dir}/trained_tokenizer/.],
414
- "epochs": [number of epochs to train the model for],
415
- "batch_size": [batch size for training the model],
416
- "warmup_steps": [number of warmup steps for the optimizer],
417
- "weight_decay": [weight decay for the optimizer],
418
- "learning_rate": [learning rate for the optimizer]
419
- }
420
- Observation: [The observation will be a success message if the model was trained successfully. Otherwise, an error message will be returned.]
421
-
422
-
423
- - Execute Model on Test Set:
424
- Execute a trained model on the test sets of specified dataset dicts.
425
- Usage:
426
-
427
- Action: Execute Model on Test Set
428
- Action Input: {
429
- "result_dir": [directory where the trained model and tokenizer are saved],
430
- "load_dirs": [directories to load the dataset dicts from, separated by colons],
431
- "save_path": [file to save the results of the model execution in json format],
432
- "batch_size": [batch size for executing the model],
433
- "input_column": [column name of the input text]
434
- }
435
- Observation: [The observation will be a success message if the model was executed successfully. Otherwise, an error message will be returned.]
436
-
437
-
438
- - Evaluate Model:
439
- Evaluate a trained model on the test sets of specified dataset dicts.
440
- Usage:
441
-
442
- Action: Evaluate Model
443
- Action Input: {
444
- "load_dirs": [directories to load the dataset dicts from, separated by colons],
445
- "save_path": [file to load the results of the model execution in json format],
446
- "output_column": [column name of the output text]
447
- }
448
- Observation: [The values for various evaluation metrics will be returned.]
449
-
450
-
451
-
452
-
453
- Research Problem: Instruction: The Task:
454
- The paper addresses the task of automatically discerning the level of semantic relatedness between pairs of sentences. Specifically, the task involves predicting the Semantic Textual Relatedness (STR) of sentence pairs and ranking them based on their semantic proximity across 14 different languages.
455
-
456
- The Drawback of Previous Work:
457
- Previous research has predominantly focused on semantic similarity in English, leaving a gap in multilingual semantic relatedness evaluation. Prior methodologies may not have fully leveraged recent advancements in Transformer-based architectures for diverse multilingual datasets. Existing models might not effectively handle broader commonalities like topic, viewpoint, or temporal context across different languages.
458
- Examples: N/A
459
-
460
- You may only use Python and can only use the following external libraries in your code:
461
- numpy, pandas, matplotlib, seaborn, torch, torchvision, tensorflow, keras, transformers, datasets, sklearn
462
-
463
- Follow these instructions and do not forget them:
464
- - First, come up with a high level plan based on your understanding of the problem and available tools and record it in the Research Plan and Status. You can revise the plan later.
465
- - Research Plan and Status should well organized and succinctly keep track of 1) high level plan (can be revised), 2) what steps have been done and what steps are in progress, 3) short results and conclusions of each step after it has been performed.
466
- - Research Plan and Status must only include progress that has been made by previous steps. It should not include results not directly confirmed by the previous observation.
467
- - Performance numbers and estimates can only be confirmed and included in the status by running the code and observing the output.
468
- - You should come up with a good experiment design that addresses the problem, and whenever applicable, define and measure the baseline performance of the relevant system or model before attempting any improvements.
469
- - Follow the plan and try to achieve the goal as straightforwardly as possible.
470
- - Highlight the supporting experiment results and reasoning before drawing any conclusions.
471
- - Do not try installing any new packages or libraries.
472
- - If you believe you have solved the problem, you can use the Final Answer action to submit your answer. You can only submit once, so double check that you have achieved the goal before submitting.
473
-
474
- Always respond in this format exactly:
475
- Reflection: What does the observation mean? If there is an error, what caused the error and how to debug?
476
- Research Plan and Status: The full high level research plan, with current status and confirmed results of each step briefly annotated. It must only include progress that has been made by previous steps. If there is any update, enclose the new update text in double asterisks **like this**. If there is no update, just copy the previous step Research Plan and Status. The high level plan from the previous step should be fully retained, unless it is intentionally revised.
477
- Fact Check: List all objective statements in the updates to Research Plan and Status one by one and point out whether it is guessed versus directly confirmed by the previous observation directly above. Performance numbers can only be confirmed by running the code and observing the output.
478
- Thought: What you are currently doing, what actions to perform and why
479
- Action: the action to take, should be one of the names of the tools
480
- Action Input: the input to the action as a valid JSON string
481
- Observation:
482
- the result of the action
483
- Given a training script on a dataset train.py, improve upon the current model performance (trained with current hyperparmeters in train.py).
484
- data is in env/data/eng
485
- """
486
- response = openai.Completion.create(
487
- engine="davinci-codex",
488
- prompt=user_message,
489
- max_tokens=300,
490
- temperature=0.5,
491
- )
492
-
493
- script_content = response.choices[0].text.strip()
494
- print(script_content)
495
- # assistant_response = call_gpt4_api(user_message)