diff --git a/adapter_classifier.py b/adapter_classifier.py index d7ca592fafee501fc8829c932dd6a03732c923f8..a260108fd33a183b38166e0b4852f7a24628c47e 100644 --- a/adapter_classifier.py +++ b/adapter_classifier.py @@ -32,9 +32,9 @@ tokenizer = AutoTokenizer.from_pretrained(args.transformer_model) # we are saving the test results of specific epochs specific_results = open_specific_results('mappings/specific_results.txt') if '1-2-3' in adapter_name or 'layer1;layer2;layer3' in adapter_name: - specific_results = specific_results['A1_3'][4] + specific_results = list(specific_results['A1_3'][args.num_epochs]) else: - specific_results = specific_results['A1'][3] + specific_results = list(specific_results['A1'][args.num_epochs]) set_seed(42) @@ -65,7 +65,8 @@ dev_dict_df = {corpus : pd.DataFrame([[' '.join(x[-2]), x[-1]] test_dict_df = {corpus : pd.DataFrame([[' '.join(x[-2]), x[-1]] for x in sents], columns = file_header) - for corpus, sents in test_dict_sentences.items()} + for corpus, sents in test_dict_sentences.items() + if corpus in specific_results} #Make datasets from dataframes train_dataset = datasets.Dataset.from_pandas(train_df) @@ -138,17 +139,20 @@ if args.freeze_layers != '': print('Start training...') trainer.train() +# Dev results + print('\nDev results:') for corpus in encoded_dev_dataset: + print() _ = get_predictions_huggingface(trainer, corpus, encoded_dev_dataset[corpus]) - +# Save specific test results print('\nTest results:') for corpus in encoded_test_dataset: + print() test_results = get_predictions_huggingface(trainer, corpus, encoded_test_dataset[corpus]) - - if corpus in specific_results: - print_results_to_file(corpus, test_dict_sentences[corpus], test_results, - inv_mappings, substitutions_file) \ No newline at end of file + + print_results_to_file(corpus, test_dict_sentences[corpus], test_results, + inv_mappings, substitutions_file) \ No newline at end of file diff --git a/environment.yml b/environment.yml index 66ebd3081f94d2f40b527c90169c477fc639a11a..63019aea5ca4526947bc4b433ad7d1255d47d475 100644 --- a/environment.yml +++ b/environment.yml @@ -22,16 +22,17 @@ dependencies: - xz=5.4.2=h5eee18b_0 - zlib=1.2.13=h5eee18b_0 - pip: - - adapter-transformers==3.2.1 + - adapter-transformers==3.0.1 - aiohttp==3.8.4 - aiosignal==1.3.1 - async-timeout==4.0.2 - attrs==23.1.0 - certifi==2023.5.7 - charset-normalizer==3.1.0 + - click==8.1.3 - cmake==3.26.3 - - datasets==2.12.0 - - dill==0.3.6 + - datasets==2.4.0 + - dill==0.3.5.1 - filelock==3.12.0 - frozenlist==1.3.3 - fsspec==2023.5.0 @@ -43,7 +44,7 @@ dependencies: - markupsafe==2.1.2 - mpmath==1.3.0 - multidict==6.0.4 - - multiprocess==0.70.14 + - multiprocess==0.70.13 - networkx==3.1 - numpy==1.24.3 - nvidia-cublas-cu11==11.10.3.66 @@ -67,17 +68,18 @@ dependencies: - regex==2023.5.5 - requests==2.30.0 - responses==0.18.0 + - sacremoses==0.0.53 - scikit-learn==1.2.2 - scipy==1.10.1 - six==1.16.0 - sympy==1.12 - threadpoolctl==3.1.0 - - tokenizers==0.13.3 + - tokenizers==0.12.1 - torch==2.0.1 - torchaudio==2.0.2 - torchvision==0.15.2 - tqdm==4.65.0 - - transformers==4.29.0 + - transformers==4.18.0 - triton==2.0.0 - typing-extensions==4.5.0 - tzdata==2023.3 diff --git a/mappings/specific_results.txt b/mappings/specific_results.txt index ee09b02cf1df3ec1b28fb45768e76cbda009697f..42928119512d8297736732b0fdb8a8f4d82a8b64 100644 --- a/mappings/specific_results.txt +++ b/mappings/specific_results.txt @@ -1,27 +1,27 @@ -Model Epochs Corpus -A1 3 eng.pdtb.pdtb -A1 3 eng.rst.gum -A1 3 por.pdtb.crpc -A1 3 por.pdtb.tedm -A1 3 rus.rst.rrt -A1 3 spa.rst.sctb -A1 3 tha.pdtb.tdtb -A1 3 zho.dep.scidtb -A1_3 4 deu.rst.pcc -A1_3 4 eng.dep.scidtb +BEST EPOCH Corpus +B 3 deu.rst.pcc +B 2 eng.dep.covdtb +B 3 eng.dep.scidtb +B 3 eng.pdtb.pdtb +A1_3 4 eng.pdtb.tedm +A1_3 4 eng.rst.gum A1_3 4 eng.rst.rstdt A1_3 4 eng.sdrt.stac A1_3 4 eus.rst.ert -A1_3 4 fas.rst.prstc +B 1 fas.rst.prstc A1_3 4 fra.sdrt.annodis A1_3 4 ita.pdtb.luna A1_3 4 nld.rst.nldt +A1 3 por.pdtb.crpc +A1_3 4 por.pdtb.tedm A1_3 4 por.rst.cstn +A1_3 4 rus.rst.rrt A1_3 4 spa.rst.rststb -A1_3 4 tur.pdtb.tdb +B 5 spa.rst.sctb +B 5 tha.pdtb.tdtb +B 3 tur.pdtb.tdb A1_3 4 tur.pdtb.tedm -A1_3 4 zho.rst.gcdt -B 6 eng.dep.covdtb -B 2 eng.pdtb.tedm +A1 3 zho.dep.scidtb B 3 zho.pdtb.cdtb -B 3 zho.rst.sctb \ No newline at end of file +A1 3 zho.rst.gcdt +B 2 zho.rst.sctb \ No newline at end of file diff --git a/mappings/substitutions.txt b/mappings/substitutions.txt index 8afbd6b7a76c179a6cdbec35144eb717126ce345..8d133789117c1df7d86c4c48290061ea06ff3e51 100644 --- a/mappings/substitutions.txt +++ b/mappings/substitutions.txt @@ -1,91 +1,125 @@ ORIGINAL-LABEL ORIGINAL-CORPUS SUBSTITUTE -alternation fra.sdrt.annodis expansion.alternative -alternation eng.sdrt.stac expansion.alternative -alternative spa.rst.rststb expansion.alternative -alternative zho.pdtb.cdtb expansion.alternative -bg-general zho.dep.scidtb background -bg-general eng.dep.scidtb background -causation zho.pdtb.cdtb cause -conditional fra.sdrt.annodis condition -conditional eng.sdrt.stac condition -conditional zho.pdtb.cdtb condition -conjunction spa.rst.sctb expansion.conjunction -conjunction eus.rst.ert expansion.conjunction -conjunction deu.rst.pcc expansion.conjunction -conjunction zho.rst.sctb expansion.conjunction -conjunction nld.rst.nldt expansion.conjunction -conjunction spa.rst.rststb expansion.conjunction -correction eng.sdrt.stac expansion.correction -disjunction spa.rst.sctb expansion.disjunction -disjunction eus.rst.ert expansion.disjunction -disjunction deu.rst.pcc expansion.disjunction -disjunction zho.rst.sctb expansion.disjunction -disjunction nld.rst.nldt expansion.disjunction -disjunction spa.rst.rststb expansion.disjunction -evidence spa.rst.sctb explanation-evidence -evidence rus.rst.rrt explanation-evidence -evidence por.rst.cstn explanation-evidence -evidence eus.rst.ert explanation-evidence -evidence deu.rst.pcc explanation-evidence -evidence zho.rst.sctb explanation-evidence -evidence nld.rst.nldt explanation-evidence -evidence spa.rst.rststb explanation-evidence -exp-evidence zho.dep.scidtb explanation-evidence -exp-evidence eng.dep.scidtb explanation-evidence -goal fra.sdrt.annodis purpose-goal -joint-disjunction zho.rst.gcdt expansion.disjunction -justify spa.rst.sctb explanation-justify -justify por.rst.cstn explanation-justify -justify eus.rst.ert explanation-justify -justify zho.rst.sctb explanation-justify -justify nld.rst.nldt explanation-justify -justify spa.rst.rststb explanation-justify -list spa.rst.sctb joint-list -list por.rst.cstn joint-list -list eus.rst.ert joint-list -list deu.rst.pcc joint-list -list zho.rst.sctb joint-list -list nld.rst.nldt joint-list -list spa.rst.rststb joint-list -motivation spa.rst.sctb explanation-motivation -motivation rus.rst.rrt explanation-motivation -motivation por.rst.cstn explanation-motivation -motivation eus.rst.ert explanation-motivation -motivation zho.rst.sctb explanation-motivation -motivation nld.rst.nldt explanation-motivation -motivation spa.rst.rststb explanation-motivation -otherwise por.rst.cstn adversative -otherwise eus.rst.ert adversative -otherwise nld.rst.nldt adversative -repetition ita.pdtb.luna restatement-repetition -restatement spa.rst.sctb expansion.restatement -restatement rus.rst.rrt expansion.restatement -restatement por.rst.cstn expansion.restatement -restatement eus.rst.ert expansion.restatement -restatement deu.rst.pcc expansion.restatement -restatement zho.rst.sctb expansion.restatement -restatement nld.rst.nldt expansion.restatement -restatement spa.rst.rststb expansion.restatement -restatement eng.rst.gum expansion.restatement -sequence spa.rst.sctb joint-sequence -sequence rus.rst.rrt joint-sequence -sequence por.rst.cstn joint-sequence -sequence eus.rst.ert joint-sequence -sequence deu.rst.pcc joint-sequence -sequence zho.rst.sctb joint-sequence -sequence nld.rst.nldt joint-sequence -sequence spa.rst.rststb joint-sequence -temporal.synchrony ita.pdtb.luna temporal.synchronous -textual-organization eng.rst.rstdt organization -unconditional eus.rst.ert expansion.disjunction -unconditional nld.rst.nldt expansion.disjunction -unless eus.rst.ert contrast -unless nld.rst.nldt contrast -unless spa.rst.rststb contrast -cause-result eng.dep.covdtb cause-effect -qap por.pdtb.crpc question_answer_pair -expansion.level por.pdtb.crpc expansion.level-of-detail -qap.hypophora por.pdtb.crpc hypophora -findings eng.dep.covdtb result -textual-organization eng.dep.covdtb organization -expansion.genexpansion tha.pdtb.tdtb expansion \ No newline at end of file +Alternation eng.sdrt.stac expansion.alternative +Alternative zho.pdtb.cdtb expansion.alternative +Causation zho.pdtb.cdtb cause +CAUSE-RESULT eng.dep.covdtb cause-effect +Comparison.Concession eng.pdtb.pdtb comparison.concession +Comparison.Concession tur.pdtb.tdb comparison.concession +Comparison.Concession por.pdtb.tedm comparison.concession +Comparison.Concession eng.pdtb.tedm comparison.concession +Comparison.Concession tur.pdtb.tedm comparison.concession +Comparison.Concession+SpeechAct eng.pdtb.pdtb comparison.concession+speechact +Comparison.Concession+SpeechAct tur.pdtb.tdb comparison.concession+speechact +Comparison.Concession+SpeechAct por.pdtb.tedm comparison.concession+speechact +Comparison.Concession+SpeechAct tur.pdtb.tedm comparison.concession+speechact +Comparison.Contrast eng.pdtb.pdtb comparison.contrast +Comparison.Contrast tur.pdtb.tdb comparison.contrast +Comparison.Contrast por.pdtb.tedm comparison.contrast +Comparison.Contrast eng.pdtb.tedm comparison.contrast +Comparison.Contrast tur.pdtb.tedm comparison.contrast +Comparison.Degree tur.pdtb.tdb comparison.degree +Comparison.Similarity eng.pdtb.pdtb comparison.similarity +Comparison.Similarity tur.pdtb.tdb comparison.similarity +Comparison.Similarity por.pdtb.tedm comparison.similarity +Comparison.Similarity eng.pdtb.tedm comparison.similarity +Comparison.Similarity tur.pdtb.tedm comparison.similarity +Conditional eng.sdrt.stac condition +Conditional zho.pdtb.cdtb condition +Contingency.Cause eng.pdtb.pdtb contingency.cause +Contingency.Cause tur.pdtb.tdb contingency.cause +Contingency.Cause por.pdtb.tedm contingency.cause +Contingency.Cause eng.pdtb.tedm contingency.cause +Contingency.Cause tur.pdtb.tedm contingency.cause +Contingency.Cause+Belief eng.pdtb.pdtb contingency.cause+belief +Contingency.Cause+Belief tur.pdtb.tdb contingency.cause+belief +Contingency.Cause+Belief por.pdtb.tedm contingency.cause+belief +Contingency.Cause+Belief eng.pdtb.tedm contingency.cause+belief +Contingency.Cause+Belief tur.pdtb.tedm contingency.cause+belief +Contingency.Cause+SpeechAct eng.pdtb.pdtb contingency.cause+speechact +Contingency.Cause+SpeechAct tur.pdtb.tdb contingency.cause+speechact +Contingency.Cause+SpeechAct por.pdtb.tedm contingency.cause+speechact +Contingency.Cause+SpeechAct eng.pdtb.tedm contingency.cause+speechact +Contingency.Cause+SpeechAct tur.pdtb.tedm contingency.cause+speechact +Contingency.Condition eng.pdtb.pdtb contingency.condition +Contingency.Condition tur.pdtb.tdb contingency.condition +Contingency.Condition por.pdtb.tedm contingency.condition +Contingency.Condition eng.pdtb.tedm contingency.condition +Contingency.Condition tur.pdtb.tedm contingency.condition +Contingency.Condition+SpeechAct eng.pdtb.pdtb contingency.condition+speechact +Contingency.Condition+SpeechAct por.pdtb.tedm contingency.condition+speechact +Contingency.Condition+SpeechAct eng.pdtb.tedm contingency.condition+speechact +Contingency.Condition+SpeechAct tur.pdtb.tedm contingency.condition+speechact +Contingency.Negative-cause eng.pdtb.pdtb contingency.negative-cause +Contingency.Negative-condition eng.pdtb.pdtb contingency.negative-condition +Contingency.Negative-condition tur.pdtb.tdb contingency.negative-condition +Contingency.Negative-condition tur.pdtb.tedm contingency.negative-condition +Contingency.Purpose eng.pdtb.pdtb contingency.purpose +Contingency.Purpose tur.pdtb.tdb contingency.purpose +Contingency.Purpose por.pdtb.tedm contingency.purpose +Contingency.Purpose eng.pdtb.tedm contingency.purpose +Contingency.Purpose tur.pdtb.tedm contingency.purpose +Correction eng.sdrt.stac expansion.correction +Expansion tur.pdtb.tedm expansion +Expansion.Conjunction eng.pdtb.pdtb expansion.conjunction +Expansion.Conjunction tur.pdtb.tdb expansion.conjunction +Expansion.Conjunction por.pdtb.tedm expansion.conjunction +Expansion.Conjunction eng.pdtb.tedm expansion.conjunction +Expansion.Conjunction tur.pdtb.tedm expansion.conjunction +Expansion.Correction tur.pdtb.tdb expansion.correction +Expansion.Disjunction eng.pdtb.pdtb expansion.disjunction +Expansion.Disjunction tur.pdtb.tdb expansion.disjunction +Expansion.Disjunction por.pdtb.tedm expansion.disjunction +Expansion.Disjunction eng.pdtb.tedm expansion.disjunction +Expansion.Disjunction tur.pdtb.tedm expansion.disjunction +Expansion.Equivalence eng.pdtb.pdtb expansion.equivalence +Expansion.Equivalence tur.pdtb.tdb expansion.equivalence +Expansion.Equivalence por.pdtb.tedm expansion.equivalence +Expansion.Equivalence eng.pdtb.tedm expansion.equivalence +Expansion.Equivalence tur.pdtb.tedm expansion.equivalence +Expansion.Exception eng.pdtb.pdtb expansion.exception +Expansion.Exception tur.pdtb.tdb expansion.exception +Expansion.Exception eng.pdtb.tedm expansion.exception +Expansion.Exception tur.pdtb.tedm expansion.exception +Expansion.GenExpansion tha.pdtb.tdtb expansion +Expansion.Instantiation eng.pdtb.pdtb expansion.instantiation +Expansion.Instantiation tur.pdtb.tdb expansion.instantiation +Expansion.Instantiation por.pdtb.tedm expansion.instantiation +Expansion.Instantiation eng.pdtb.tedm expansion.instantiation +Expansion.Instantiation tur.pdtb.tedm expansion.instantiation +Expansion.Level por.pdtb.crpc expansion.level-of-detail +Expansion.Level-of-detail eng.pdtb.pdtb expansion.level-of-detail +Expansion.Level-of-detail tur.pdtb.tdb expansion.level-of-detail +Expansion.Level-of-detail por.pdtb.tedm expansion.level-of-detail +Expansion.Level-of-detail eng.pdtb.tedm expansion.level-of-detail +Expansion.Level-of-detail tur.pdtb.tedm expansion.level-of-detail +Expansion.Manner eng.pdtb.pdtb expansion.manner +Expansion.Manner tur.pdtb.tdb expansion.manner +Expansion.Manner por.pdtb.tedm expansion.manner +Expansion.Manner eng.pdtb.tedm expansion.manner +Expansion.Manner tur.pdtb.tedm expansion.manner +Expansion.Substitution eng.pdtb.pdtb expansion.substitution +Expansion.Substitution tur.pdtb.tdb expansion.substitution +Expansion.Substitution por.pdtb.tedm expansion.substitution +Expansion.Substitution eng.pdtb.tedm expansion.substitution +Expansion.Substitution tur.pdtb.tedm expansion.substitution +FINDINGS eng.dep.covdtb result +Hypophora eng.pdtb.pdtb hypophora +Hypophora tur.pdtb.tdb hypophora +Hypophora por.pdtb.tedm hypophora +Hypophora eng.pdtb.tedm hypophora +Hypophora tur.pdtb.tedm hypophora +QAP por.pdtb.crpc question_answer_pair +QAP.Hypophora por.pdtb.crpc hypophora +Repetition ita.pdtb.luna restatement-repetition +Temporal.Asynchronous eng.pdtb.pdtb temporal.asynchronous +Temporal.Asynchronous tur.pdtb.tdb temporal.asynchronous +Temporal.Asynchronous por.pdtb.tedm temporal.asynchronous +Temporal.Asynchronous eng.pdtb.tedm temporal.asynchronous +Temporal.Asynchronous tur.pdtb.tedm temporal.asynchronous +Temporal.Synchronous eng.pdtb.pdtb temporal.synchronous +Temporal.Synchronous tur.pdtb.tdb temporal.synchronous +Temporal.Synchronous por.pdtb.tedm temporal.synchronous +Temporal.Synchronous eng.pdtb.tedm temporal.synchronous +Temporal.Synchronous tur.pdtb.tedm temporal.synchronous +Temporal.Synchrony ita.pdtb.luna temporal.synchronous +TEXTUAL-ORGANIZATION eng.dep.covdtb organization \ No newline at end of file diff --git a/pytorch_classifier.py b/pytorch_classifier.py index 33fe2d8837658038bb43fb419fb3d25ab285488e..02310d86d0a170918529561954b91bd74ecab1f7 100644 --- a/pytorch_classifier.py +++ b/pytorch_classifier.py @@ -3,7 +3,7 @@ import torch import numpy as np -from transformers import AutoModel, AutoTokenizer, get_linear_schedule_with_warmup +from transformers import AutoModel, AutoTokenizer, get_linear_schedule_with_warmup, set_seed from torch import nn from torch.optim import AdamW from torch.utils.data import DataLoader @@ -24,6 +24,7 @@ dt_string = now.strftime("%d.%m.%y-%H:%M:%S") layers_to_freeze = args.freeze_layers.split(";") substitutions_file = 'mappings/substitutions.txt' specific_results = open_specific_results('mappings/specific_results.txt')['B'] +set_seed(42) # =============== # Dataset class diff --git a/requirements.txt b/requirements.txt index b24b999bbe0223dc88858691081d380f42c4b0b3..e03aac89c19c88e5496beee1eb6ce1f781c316b4 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,13 +1,14 @@ -adapter-transformers==3.2.1 +adapter-transformers==3.0.1 aiohttp==3.8.4 aiosignal==1.3.1 async-timeout==4.0.2 attrs==23.1.0 certifi==2023.5.7 charset-normalizer==3.1.0 +click==8.1.3 cmake==3.26.3 -datasets==2.12.0 -dill==0.3.6 +datasets==2.4.0 +dill==0.3.5.1 filelock==3.12.0 frozenlist==1.3.3 fsspec==2023.5.0 @@ -19,7 +20,7 @@ lit==16.0.3 MarkupSafe==2.1.2 mpmath==1.3.0 multidict==6.0.4 -multiprocess==0.70.14 +multiprocess==0.70.13 networkx==3.1 numpy==1.24.3 nvidia-cublas-cu11==11.10.3.66 @@ -43,20 +44,21 @@ PyYAML==6.0 regex==2023.5.5 requests==2.30.0 responses==0.18.0 +sacremoses==0.0.53 scikit-learn==1.2.2 scipy==1.10.1 six==1.16.0 sympy==1.12 threadpoolctl==3.1.0 -tokenizers==0.13.3 +tokenizers==0.12.1 torch==2.0.1 torchaudio==2.0.2 torchvision==0.15.2 tqdm==4.65.0 -transformers==4.29.0 +transformers==4.18.0 triton==2.0.0 typing_extensions==4.5.0 tzdata==2023.3 urllib3==2.0.2 xxhash==3.2.0 -yarl==1.9.2 +yarl==1.9.2 \ No newline at end of file diff --git a/train_classifiers.sh b/train_classifiers.sh index 7ba5e72a085db190487e7fe57fa167075e9652bb..324127d53a55d96661883c17b6069cdf79c72ae1 100644 --- a/train_classifiers.sh +++ b/train_classifiers.sh @@ -11,7 +11,7 @@ # To reproduce the results of MELODI team, do NOT change other params. # bare classifier -python pytorch_classifier.py --num_epochs 6 --data_path 'PATH_TO_REPO' +python pytorch_classifier.py --num_epochs 5 --data_path 'PATH_TO_REPO' # Train the adapters: python make_adapter.py --num_epochs 15 --data_path 'PATH_TO_REPO' --freeze_layers 'layer.1;layer.2;layer.3' diff --git a/utils.py b/utils.py index fd00ca9a2adf435aa0625b86ca1ff5be76c670eb..2e0635712fd1b91c88a0feff61cca2667f77eeb6 100644 --- a/utils.py +++ b/utils.py @@ -210,6 +210,19 @@ def print_results_to_file(corpus, test_sentences, test_results, the specifications of the Shared task. Returns: one file per corpus with predictions. ''' + output_folder = 'results' + header = '\t'.join(['doc', + 'unit1_toks', + 'unit2_toks', + 'unit1_txt', + 'unit2_txt', + 's1_toks', + 's2_toks', + 'unit1_sent', + 'unit2_sent', + 'dir', + 'orig_label', + 'predicted_label']) # create a dict of all the substitutions that were made revert_substitutions = {} @@ -222,8 +235,8 @@ def print_results_to_file(corpus, test_sentences, test_results, revert_substitutions[l[1]][l[2]] = l[0] # save the results in a separate folder, one file per corpus - if not os.path.exists('test_results_ST3'): - os.makedirs('test_results_ST3') + if not os.path.exists(output_folder): + os.makedirs(output_folder) results_to_write = [] @@ -236,11 +249,11 @@ def print_results_to_file(corpus, test_sentences, test_results, label = revert_substitutions[corpus][label] except: pass - temp = sent[:-2] + [label] - assert len(temp) == 12 + temp = sent[:11] + [label] results_to_write.append(temp) - with open('test_results_ST3/' + corpus + '.tsv', 'a+', encoding='utf-8') as f: + with open(output_folder + '/' + corpus + '.tsv', 'a+', encoding='utf-8') as f: + f.write(header + '\n') for line in results_to_write: f.write('\t'.join([str(x) for x in line])) f.write('\n') \ No newline at end of file