From eb65543781a644223a049c6930b292ad46358ab6 Mon Sep 17 00:00:00 2001 From: yemaozi88 <428968@gmail.com> Date: Sun, 25 Mar 2018 21:56:08 +0200 Subject: [PATCH] cleaned up the INTERSPEECH related codes. --- .vs/accent_classification/v15/.suo | Bin 0 -> 33280 bytes ...ification.sln => accent_classification.sln | 4 +- .../data_manipulation.cpython-36.pyc | Bin 0 -> 1328 bytes .../__pycache__/evaluation.cpython-36.pyc | Bin 0 -> 1318 bytes .../speaker_based_functions.cpython-36.pyc | Bin 0 -> 9022 bytes .../accent_classification.pyproj | 8 +- .../audio2db.py | 9 +- .../classifier.py | 0 .../config.ini | 0 .../data_io.py | 0 .../data_manipulation.py | 0 .../evaluation.py | 0 .../manipulate_db.py | 0 .../output_confusion_matrix.py | 0 .../sentence_based.py | 0 accent_classification/speaker_based.py | 267 ++++++++++++++ .../speaker_based_functions.py | 32 +- .../test_code.py | 0 .../word_based.py | 0 dialect_identification/speaker_based.py | 326 ------------------ output/confusion_matrix_2regions.npy | Bin 0 -> 112 bytes output/confusion_matrix_2regions.png | Bin 0 -> 17894 bytes .../confusion_matrix_2regions_normalized.png | Bin 0 -> 21125 bytes output/confusion_matrix_3regions.npy | Bin 0 -> 152 bytes output/confusion_matrix_3regions.png | Bin 0 -> 22069 bytes .../confusion_matrix_3regions_normalized.png | Bin 0 -> 33557 bytes output/pidlist_2regions_test.npy | Bin 0 -> 16880 bytes output/pidlist_2regions_train.npy | Bin 0 -> 66080 bytes output/pidlist_3regions_eval.npy | Bin 0 -> 10280 bytes output/pidlist_3regions_test.npy | Bin 0 -> 25280 bytes output/pidlist_3regions_train.npy | Bin 0 -> 88880 bytes output/pred_per_pid_2regions.npy | Bin 0 -> 21248 bytes output/pred_per_pid_3regions.npy | Bin 0 -> 37880 bytes 33 files changed, 275 insertions(+), 371 deletions(-) create mode 100644 .vs/accent_classification/v15/.suo rename dialect_identification.sln => accent_classification.sln (92%) create mode 100644 accent_classification/__pycache__/data_manipulation.cpython-36.pyc create mode 100644 accent_classification/__pycache__/evaluation.cpython-36.pyc create mode 100644 accent_classification/__pycache__/speaker_based_functions.cpython-36.pyc rename dialect_identification/dialect_identification.pyproj => accent_classification/accent_classification.pyproj (92%) rename {dialect_identification => accent_classification}/audio2db.py (89%) rename {dialect_identification => accent_classification}/classifier.py (100%) rename {dialect_identification => accent_classification}/config.ini (100%) rename {dialect_identification => accent_classification}/data_io.py (100%) rename {dialect_identification => accent_classification}/data_manipulation.py (100%) rename {dialect_identification => accent_classification}/evaluation.py (100%) rename {dialect_identification => accent_classification}/manipulate_db.py (100%) rename {dialect_identification => accent_classification}/output_confusion_matrix.py (100%) rename {dialect_identification => accent_classification}/sentence_based.py (100%) create mode 100644 accent_classification/speaker_based.py rename {dialect_identification => accent_classification}/speaker_based_functions.py (90%) rename {dialect_identification => accent_classification}/test_code.py (100%) rename {dialect_identification => accent_classification}/word_based.py (100%) delete mode 100644 dialect_identification/speaker_based.py create mode 100644 output/confusion_matrix_2regions.npy create mode 100644 output/confusion_matrix_2regions.png create mode 100644 output/confusion_matrix_2regions_normalized.png create mode 100644 output/confusion_matrix_3regions.npy create mode 100644 output/confusion_matrix_3regions.png create mode 100644 output/confusion_matrix_3regions_normalized.png create mode 100644 output/pidlist_2regions_test.npy create mode 100644 output/pidlist_2regions_train.npy create mode 100644 output/pidlist_3regions_eval.npy create mode 100644 output/pidlist_3regions_test.npy create mode 100644 output/pidlist_3regions_train.npy create mode 100644 output/pred_per_pid_2regions.npy create mode 100644 output/pred_per_pid_3regions.npy diff --git a/.vs/accent_classification/v15/.suo b/.vs/accent_classification/v15/.suo new file mode 100644 index 0000000000000000000000000000000000000000..ffd4fc54e507f38eb48d93e95c01ba080e7c9c00 GIT binary patch literal 33280 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 literal 0 HcmV?d00001 diff --git a/accent_classification/__pycache__/evaluation.cpython-36.pyc b/accent_classification/__pycache__/evaluation.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..00f80fbf7b128f580306b48ecd1ea9c146eefbee GIT binary patch literal 1318 zcmZ`(JCEEp5GJV?SNpiNVPrQ>lOoMF2L$O1Be7w_P2xiUBS;`@pfDnJ)}CG_sl#qS zRcoiaAL3u&|B#=+HkG^7sWRj`&NZRHd1=HMelw%5=JV9tyvrU$2>pp}Eduf**y?*A z9C2Ku40}$p!1FL8z)2l7aTa6e6VypVGwS6KMC+Tn(?P4bpG=^hjBAtMR?k1cVyn>WJLnh#4jgADqk4*?qyhe_$P#Hj~ z;l(9{f%Vrn?=i3s8hW%zEopljF)7)>2DNBy*a+6zNEKCo0H&E%Hc+CmMD-SH8|Hmq zZW0@ErdgJ{TUK1Og|L`e+*<5BL3#NW$xk5G-!Gm#*#4k|RNKc_)mC+bEW}odzEfLP z6r$C6Q8T5gvMQJcxc*xO6p1F40K$zZ)XXX`8FQuC$V_)HZ6W zLUv$J*tL-C()DIsvtLE6HZ$pZQpV0N9@^^FAfV(gSr6&q~Yl=YtgG~-69~*<sjFHr*`E6pb0um~xW4zb$j&~#74Xw2ln46+vTI`>=hh|M bgh_uB`Vh_=YVozJx>^8nSwf!f2`T*tzPw+& literal 0 HcmV?d00001 diff --git a/accent_classification/__pycache__/speaker_based_functions.cpython-36.pyc b/accent_classification/__pycache__/speaker_based_functions.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b438b55b8d163bc68e9e9c604a783cbb0fccc252 GIT binary patch literal 9022 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 literal 0 HcmV?d00001 diff --git a/dialect_identification/dialect_identification.pyproj b/accent_classification/accent_classification.pyproj similarity index 92% rename from dialect_identification/dialect_identification.pyproj rename to accent_classification/accent_classification.pyproj index ae47cc7..9905a37 100644 --- a/dialect_identification/dialect_identification.pyproj +++ b/accent_classification/accent_classification.pyproj @@ -5,7 +5,7 @@ fe1b1358-adbe-4446-affd-a0802d13d15b {a41c8ea1-112a-4a2d-9f91-29557995525f};{888888a0-9f3d-457c-b088-3a5042f75d52} . - output_confusion_matrix.py + speaker_based.py . @@ -22,6 +22,8 @@ false + + Code @@ -29,9 +31,6 @@ Code - - Code - Code @@ -53,7 +52,6 @@ Code - diff --git a/dialect_identification/audio2db.py b/accent_classification/audio2db.py similarity index 89% rename from dialect_identification/audio2db.py rename to accent_classification/audio2db.py index 6b73f90..3375fb8 100644 --- a/dialect_identification/audio2db.py +++ b/accent_classification/audio2db.py @@ -1,6 +1,5 @@ import os import sys -import configparser import numpy as np import pypyodbc @@ -20,16 +19,10 @@ sys.path.append(forced_alignment_module) from forced_alignment import forced_alignment -## check if forced-alignment work in each sentence +## delete all automatically generated pronunciations #from forced_alignment import pronunciations #pronunciations.delete_all_g2p_entries() -#wav_file = wav_dir + '\\10\\' + regionLabels[0] + '\\9935-1464218044-1951631.wav' -#script_file = script_dir + '\\script10.txt' -#with open(script_file, 'r') as fin: -# script = fin.readline() -#fa = forced_alignment(wav_file, script) - ## make database connection param = r"Driver={Microsoft Access Driver (*.mdb, *.accdb)};dbq=" + fileMDB + ";" diff --git a/dialect_identification/classifier.py b/accent_classification/classifier.py similarity index 100% rename from dialect_identification/classifier.py rename to accent_classification/classifier.py diff --git a/dialect_identification/config.ini b/accent_classification/config.ini similarity index 100% rename from dialect_identification/config.ini rename to accent_classification/config.ini diff --git a/dialect_identification/data_io.py b/accent_classification/data_io.py similarity index 100% rename from dialect_identification/data_io.py rename to accent_classification/data_io.py diff --git a/dialect_identification/data_manipulation.py b/accent_classification/data_manipulation.py similarity index 100% rename from dialect_identification/data_manipulation.py rename to accent_classification/data_manipulation.py diff --git a/dialect_identification/evaluation.py b/accent_classification/evaluation.py similarity index 100% rename from dialect_identification/evaluation.py rename to accent_classification/evaluation.py diff --git a/dialect_identification/manipulate_db.py b/accent_classification/manipulate_db.py similarity index 100% rename from dialect_identification/manipulate_db.py rename to accent_classification/manipulate_db.py diff --git a/dialect_identification/output_confusion_matrix.py b/accent_classification/output_confusion_matrix.py similarity index 100% rename from dialect_identification/output_confusion_matrix.py rename to accent_classification/output_confusion_matrix.py diff --git a/dialect_identification/sentence_based.py b/accent_classification/sentence_based.py similarity index 100% rename from dialect_identification/sentence_based.py rename to accent_classification/sentence_based.py diff --git a/accent_classification/speaker_based.py b/accent_classification/speaker_based.py new file mode 100644 index 0000000..3679eb5 --- /dev/null +++ b/accent_classification/speaker_based.py @@ -0,0 +1,267 @@ +import os +import sys +import configparser + +import pypyodbc +import numpy as np +from collections import Counter +import matplotlib.pyplot as plt + +from sklearn.model_selection import train_test_split +from sklearn.model_selection import cross_val_score +from sklearn import preprocessing +from sklearn.metrics import confusion_matrix +from sklearn.metrics import accuracy_score + +repo_dir = 'C:\\Users\\Aki\\source\\repos\\accent_classification' +curr_dir = repo_dir + '\\accent_classification' +sys.path.append(os.path.join(os.path.dirname(sys.path[0]), curr_dir)) +import data_manipulation as mani +import evaluation as eval +import speaker_based_functions as sb_func + + +## ======================= user define ======================= +sentence_num_max = 10 +config_file = curr_dir + '\\config.ini' +output_dir = repo_dir + '\\output' + +# make train/test set: 1, load: 0 +make_train_test_set = 0 + +# specify which experiment to be performed. +# - 3: groninven vs oost_overijssel vs limburg +# - 2: groningen vs limburg +experiment_type = 2 + +region_labels3 = ['Groningen_and_Drenthe', 'Oost_Overijsel-Gelderland', 'Limburg'] +region_labels2 = ['Groningen_and_Drenthe', 'Limburg'] + + +## ======================= data preparation ======================= + +## load variables from the ini file +config = configparser.ConfigParser() +config.sections() +config.read(config_file) +MDB_file = config['sentence_based']['fileMDB'] + + +## connect to the database +pypyodbc.lowercase = False +param = r"Driver={Microsoft Access Driver (*.mdb, *.accdb)};dbq=" + MDB_file + ";" +conn = pypyodbc.connect(param) +cursor = conn.cursor() + + +## get data from Access database +# data format +# 0: filename +# 1: pid +# 2: region +# 3: ID (unique word_id) +# 4: sentence_id +# 5: word_id +# 6: word +# 7: pronunciation +SQL_string = """\ +{CALL dataset_with_cities} +""" +cursor.execute(SQL_string) + +rows = cursor.fetchall() +data = np.array(rows) +del SQL_string, rows + + +## get the list of pronunciation variant (pronvarList) from Access database +# pronvarList format +# 0: ID (unique word_id) +# 1: word +# 2: pronvar +SQL_string = """\ +{CALL pronunciation_variant} +""" +cursor.execute(SQL_string) +rows = cursor.fetchall() +pronvarList = np.array(rows) +del SQL_string, rows + +conn.close() + + +## make list of LabelBinarizer object per word for X (=pronunciation variant). +LB_list = [] +unique_wordID_list = data[:, 3].astype(int) +unique_wordID_max = max(unique_wordID_list) +for unique_wordID in range(1, unique_wordID_max+1): + pronvar = data[unique_wordID_list == unique_wordID, 7] + LB = preprocessing.LabelBinarizer() + LB.fit(np.unique(pronvar)) + LB_list.append(LB) + + +## make LabelEncorder/LabelBinilizer objects for y (=region). +LE_y3 = preprocessing.LabelEncoder() +LE_y3.fit(region_labels3) +LE_y2 = preprocessing.LabelEncoder() +LE_y2.fit(region_labels2) + +LB_y3 = preprocessing.LabelBinarizer() +LB_y3.fit(region_labels3) +LB_y2 = preprocessing.LabelBinarizer() +LB_y2.fit(region_labels2) + +del unique_wordID, unique_wordID_max, pronvar, LB + + + +## ======================= make train/eval/test set or load ======================= + +## find the smallest group to balance the number of samples per group. +pidlist3 = np.unique(data[:, (1, 2)], axis=0) +pidlist3_counter = Counter(pidlist3[:, 1]) +sample_num_max = min(pidlist3_counter.values()) +del pidlist3_counter + + +## make train/eval/test set or load them. + +if make_train_test_set==1: + pidlist3_train = [] + pidlist3_eval = [] + pidlist3_test = [] + for region_num in range(0, len(region_labels3)): + region_name = region_labels3[region_num] + + pidlist3_per_region_ = pidlist3[pidlist3[:, 1]==region_labels3[region_num], :] + pidlist3_per_region, idx = mani.extractRandomSample( + pidlist3_per_region_, sample_num_max) + + # split dataset into train, eval and test. + [pidlist3_per_region_train, pidlist3_per_region_test] = train_test_split( + pidlist3_per_region, test_size = 0.2, random_state = 0) + [pidlist3_per_region_train, pidlist3_per_region_eval] = train_test_split( + pidlist3_per_region_train, test_size = 0.1, random_state = 0) + + # append numpy arrays. + if region_num == 0: + pidlist3_train = pidlist3_per_region_train + pidlist3_eval = pidlist3_per_region_eval + pidlist3_test = pidlist3_per_region_test + else: + pidlist3_train = np.r_[pidlist3_train, pidlist3_per_region_train] + pidlist3_eval = np.r_[pidlist3_eval, pidlist3_per_region_eval] + pidlist3_test = np.r_[pidlist3_test, pidlist3_per_region_test] + del region_num, region_name + del pidlist3_per_region_, pidlist3_per_region, idx + del pidlist3_per_region_train, pidlist3_per_region_eval, pidlist3_per_region_test + np.save(output_dir + "\\pidlist3_train.npy", pidlist3_train) + np.save(output_dir + "\\pidlist3_eval.npy", pidlist3_eval) + np.save(output_dir + "\\pidlist3_test.npy", pidlist3_test) + + + if experiment_type == 2: + pidlist2_train_ = np.r_[pidlist3_train, pidlist3_eval] + + pidlist2_train = sb_func.groningen_vs_limburg(pidlist2_train_) + pidlist2_test = sb_func.groningen_vs_limburg(pidlist3_test) + np.save(output_dir + "\\pidlist2_train", pidlist2_train) + np.save(output_dir + "\\pidlist2_test", pidlist2_test) + + del pidlist2_train_ +else: + pidlist3_train = np.load(output_dir + "\\pidlist3_train.npy") + pidlist3_eval = np.load(output_dir + "\\pidlist3_eval.npy") + pidlist3_test = np.load(output_dir + "\\pidlist3_test.npy") + + if experiment_type == 2: + pidlist2_train = np.load(output_dir + "\\pidlist2_train.npy") + pidlist2_test = np.load(output_dir + "\\pidlist2_test.npy") + + +## extract corresponding data using pid + +data3_train = sb_func.extractPid(pidlist3_train, data) +data3_eval = sb_func.extractPid(pidlist3_eval, data) +data3_test = sb_func.extractPid(pidlist3_test, data) + +if experiment_type == 2: + data2 = np.array(data) + data2_train = sb_func.extractPid(pidlist2_train, data2) + data2_test = sb_func.extractPid(pidlist2_test, data2) + + +## ======================= experiments ======================= + +## specify the dataset + +# train vs eval +#trainData = data3_train +#testData = data3_eval +#testPID = pidlist3_eval +#LB = LB_y3 +#LE = LE_y3 +#region_labels = region_labels3 + +# train+eval vs test +if experiment_type == 3: + trainData = np.r_[data3_train, data3_eval] + testData = data3_test + testPID = pidlist3_test + LB = LB_y3 + LE = LE_y3 + region_labels = region_labels3 + +elif experiment_type == 2: + trainData = data2_train + testData = data2_test + testPID = pidlist2_test + LB = LB_y2 + LE = LE_y2 + region_labels = region_labels2 + +## check the number of utterance +#data_all = np.r_[trainData, testData] +#filenames = np.c_[data_all[:, 0], data_all[:, 2]] +#filenames_unique = np.unique(filenames, axis=0) +#Counter(filenames_unique[:, 1]) + + +## output filenames +fileComparison = output_dir + "\\algorithm_comparison.csv" +filePerformance = output_dir + "\\sentence-level.csv" +fileConfusionMatrix = output_dir + "\\confusion_matrix.csv" + + +## compare classification algorithms for the sentence-classifiers. +#sb_func.compare_sentence_level_classifiers(trainData, LB_list, LE, fileComparison) + + +## train sentence-level classifiers. +model_list, score_list, confusion_matrix_list = sb_func.train_sentence_level_classifiers( + trainData, LB_list, LE, filePerformance) + + +## prediction over evaluation data per each sentence-level classifier. +pred_per_sentence = sb_func.prediction_per_sentence(testData, model_list, LB_list, LE) + + +## combine sentence-level classifiers +pred_per_pid_majority = sb_func.prediction_per_pid_majority(testPID, pred_per_sentence) + + +## confusion matrix +confusionMatrix_majority = confusion_matrix( + pred_per_pid_majority[:, 1], pred_per_pid_majority[:, 2], labels=region_labels) + + +## output +accuracy = accuracy_score(pred_per_pid_majority[:, 1], pred_per_pid_majority[:, 2], normalize=True, sample_weight=None) +print('accuracy: {}%'.format(accuracy * 100)) + +cm = confusionMatrix_majority +print(cm) + +np.save(output_dir + "\\pred_per_pid2.npy", pred_per_pid_majority) +np.save(output_dir + "\\confusion_matrix2.npy", cm) \ No newline at end of file diff --git a/dialect_identification/speaker_based_functions.py b/accent_classification/speaker_based_functions.py similarity index 90% rename from dialect_identification/speaker_based_functions.py rename to accent_classification/speaker_based_functions.py index 1421376..69293e7 100644 --- a/dialect_identification/speaker_based_functions.py +++ b/accent_classification/speaker_based_functions.py @@ -14,7 +14,7 @@ from sklearn.discriminant_analysis import QuadraticDiscriminantAnalysis from sklearn.model_selection import cross_val_score from sklearn.metrics import confusion_matrix -import dataManipulation as mani +import data_manipulation as mani import evaluation as eval @@ -338,34 +338,6 @@ def prediction_per_pid_weighted(pidlist_eval, prediction, weight, LB_y, LE_y): return np.array(prediction_per_pid) -def saxon_vs_limburg(pidlist3): - """convert a pidlist for 3 regions into that for 2 regions. - - Notes: - 3 regions include ['Groningen_and_Drenthe', 'Limburg', 'Oost_Overijsel-Gelderland'] - 2 regions include ['Limburg', 'Low_Saxon'] - where Low_Saxon = 'Groningen_and_Drenthe' + 'Oost_Overijsel-Gelderland' - samples are randomly chosen so that each class has the same amount of data. - - """ - - regionLabels = ['Groningen_and_Drenthe', 'Limburg', 'Oost_Overijsel-Gelderland'] - regionLabels2 = ['Low_Saxon', 'Limburg'] - - index_saxon = np.any([pidlist3[:, 1] == regionLabels[0], pidlist3[:, 1] == regionLabels[2]], axis=0) - pidlist_saxon_ = pidlist3[index_saxon, :] - pidlist_limburg = pidlist3[pidlist3[:, 1] == regionLabels[1], :] - - # extract the same amout of samples as Limburg. - pidlistCounter3 = Counter(pidlist3[:, 1]) - pidlist_saxon, idx = mani.extractRandomSample(pidlist_saxon_, pidlistCounter3['Limburg']) - pidlist_saxon[:, 1] = regionLabels2[0] - - pidlist2 = np.r_[pidlist_limburg, pidlist_saxon] - #pidlistCounter2 = Counter(pidlist2[:, 1]) - return pidlist2 - - def groningen_vs_limburg(pidlist3): """convert a pidlist for 3 regions into that for 2 regions. @@ -374,7 +346,7 @@ def groningen_vs_limburg(pidlist3): 2 regions include ['Groningen_and_Drenthe', 'Limburg'] """ - regionLabels = ['Groningen_and_Drenthe', 'Limburg', 'Oost_Overijsel-Gelderland'] + regionLabels = ['Groningen_and_Drenthe', 'Oost_Overijsel-Gelderland', 'Limburg'] pidlist_groningen = pidlist3[pidlist3[:, 1] == regionLabels[0], :] pidlist_limburg = pidlist3[pidlist3[:, 1] == regionLabels[1], :] diff --git a/dialect_identification/test_code.py b/accent_classification/test_code.py similarity index 100% rename from dialect_identification/test_code.py rename to accent_classification/test_code.py diff --git a/dialect_identification/word_based.py b/accent_classification/word_based.py similarity index 100% rename from dialect_identification/word_based.py rename to accent_classification/word_based.py diff --git a/dialect_identification/speaker_based.py b/dialect_identification/speaker_based.py deleted file mode 100644 index c7d1536..0000000 --- a/dialect_identification/speaker_based.py +++ /dev/null @@ -1,326 +0,0 @@ -import os -import sys -import configparser - -import pypyodbc -import numpy as np -from collections import Counter -import matplotlib.pyplot as plt - -from sklearn.model_selection import train_test_split -from sklearn.model_selection import cross_val_score -from sklearn import preprocessing -from sklearn.metrics import confusion_matrix -from sklearn.metrics import accuracy_score - -currDir = 'C:\\Users\\Aki\\source\\repos\\rug_VS\\dialect_identification\\dialect_identification' -sys.path.append(os.path.join(os.path.dirname(sys.path[0]), currDir)) -import dataManipulation as mani -import evaluation as eval -import speaker_based_functions as sb_func - - -##################### -## USER DEFINE ## -##################### -sentenceNumMax = 10 -configFile = currDir + '\\config.ini' -dirOut = currDir + '\\result' - -# make train/test set: 1, load: 0 -makeTrainTestSet = 0 -# convert 3 regions to 2 regions: 1, load: 0 -conv3to2region = 0 - -# 3 regions: 0 -# saxon vs limburg: 1 -# groningen vs limburg: 2 -experiment_type = 2 - -regionLabels = ['Groningen_and_Drenthe', 'Limburg', 'Oost_Overijsel-Gelderland'] - -# a bit useless error handling. -#assert (experiment_type in (0, 1, 2)), "experiment type should be 0, 1 or 2." -if experiment_type == 1: - regionLabels2 = ['Low_Saxon', 'Limburg'] -regionLabels2 = ['Groningen_and_Drenthe', 'Limburg'] - - -########################## -## DATA PREPARATION ## -########################## - -## load init file -config = configparser.ConfigParser() -config.sections() -config.read(configFile) -dirFeature = config['sentence_based']['dirFeature'] -fileMDB = config['sentence_based']['fileMDB'] - - -## database connection -pypyodbc.lowercase = False -param = r"Driver={Microsoft Access Driver (*.mdb, *.accdb)};dbq=" + fileMDB + ";" -conn = pypyodbc.connect(param) -cursor = conn.cursor() - - -## get data from Access database -# data format -# 0: filename -# 1: pid -# 2: region -# 3: ID (unique word_id) -# 4: sentence_id -# 5: word_id -# 6: word -# 7: pronunciation -SQL_string = """\ -{CALL dataset_with_cities} -""" -cursor.execute(SQL_string) - -rows = cursor.fetchall() -data = np.array(rows) -#dataNumMax = data.shape[0] -#uniqueWordIDmax = max(data[:, 3].astype(int)) -del SQL_string, rows - - -## make list of LabelBinarizer object per word. -# for X -# get pronvarList from Access database -# pronvarList format -# 0: ID (unique word_id) -# 1: word -# 2: pronvar -SQL_string = """\ -{CALL pronunciation_variant} -""" -cursor.execute(SQL_string) -rows = cursor.fetchall() -pronvarList = np.array(rows) -del SQL_string, rows - - -LBlist = [] -#uniqueWordIDlist = pronvarList[:, 0].astype(int) -uniqueWordIDlist = data[:, 3].astype(int) -uniqueWordIDmax = max(uniqueWordIDlist) -for uniqueWordID in range(1, uniqueWordIDmax+1): - pronvar = data[uniqueWordIDlist == uniqueWordID, 7] - #pronvar = pronvarList[pronvarList[:, 0] == uniqueWordID, 2] - LB = preprocessing.LabelBinarizer() - LB.fit(np.unique(pronvar)) - LBlist.append(LB) - -# for y (=region) -LE_y = preprocessing.LabelEncoder() -LE_y.fit(regionLabels) -LE_y2 = preprocessing.LabelEncoder() -LE_y2.fit(regionLabels2) - -LB_y = preprocessing.LabelBinarizer() -LB_y.fit(regionLabels) -LB_y2 = preprocessing.LabelBinarizer() -LB_y2.fit(regionLabels2) - -del uniqueWordID, uniqueWordIDmax, pronvar, LB - - -################# -## ITERATION ## -################# -#CM_majority = np.zeros((1, 9)).astype(int) -#CM_weighted = np.zeros((1, 9)).astype(int) -#for iter in range(0, 1): -# print(iter) - -## make balanced dataset -pidlist = np.unique(data[:, (1, 2)], axis=0) - -# count number of samples -pidlistCounter = Counter(pidlist[:, 1]) -sampleNumMax = min(pidlistCounter.values()) -del pidlistCounter - - -## make train/eval/test set or load -if makeTrainTestSet==1: - pidlist_train = [] - pidlist_eval = [] - pidlist_test = [] - for regionNum in range(0, len(regionLabels)): - regionName = regionLabels[regionNum] - - pidlist_per_region_ = pidlist[pidlist[:, 1]==regionLabels[regionNum], :] - pidlist_per_region, idx = mani.extractRandomSample( - pidlist_per_region_, sampleNumMax) - - # split dataset into train, eval and test. - [pidlist_per_region_train, pidlist_per_region_test] = train_test_split( - pidlist_per_region, test_size = 0.2, random_state = 0) - [pidlist_per_region_train, pidlist_per_region_eval] = train_test_split( - pidlist_per_region_train, test_size = 0.1, random_state = 0) - - # append numpy arrays - if regionNum == 0: - pidlist_train = pidlist_per_region_train - pidlist_eval = pidlist_per_region_eval - pidlist_test = pidlist_per_region_test - else: - pidlist_train = np.r_[pidlist_train, pidlist_per_region_train] - pidlist_eval = np.r_[pidlist_eval, pidlist_per_region_eval] - pidlist_test = np.r_[pidlist_test, pidlist_per_region_test] - del regionNum, regionName - del pidlist_per_region_, pidlist_per_region, idx - del pidlist_per_region_train, pidlist_per_region_eval, pidlist_per_region_test - np.save(dirOut + "\\pidlist_train.npy", pidlist_train) - np.save(dirOut + "\\pidlist_eval.npy", pidlist_eval) - np.save(dirOut + "\\pidlist_test.npy", pidlist_test) -else: - pidlist_train = np.load(dirOut + "\\pidlist_train.npy") - pidlist_eval = np.load(dirOut + "\\pidlist_eval.npy") - pidlist_test = np.load(dirOut + "\\pidlist_test.npy") - - -## make dataset for 2 regions or load -if conv3to2region==1: - pidlist2_train_ = np.r_[pidlist_train, pidlist_eval] - - if experiment_type == 1: - pidlist2_train = sb_func.saxon_vs_limburg(pidlist2_train_) - pidlist2_test = sb_func.saxon_vs_limburg(pidlist_test) - np.save(dirOut + "\\pidlist2_saxon_vs_limburg_train", pidlist2_train) - np.save(dirOut + "\\pidlist2_saxon_vs_limburg_test", pidlist2_test) - - elif experiment_type == 2: - pidlist2_train = sb_func.groningen_vs_limburg(pidlist2_train_) - pidlist2_test = sb_func.groningen_vs_limburg(pidlist_test) - np.save(dirOut + "\\pidlist2_groningen_vs_limburg_train", pidlist2_train) - np.save(dirOut + "\\pidlist2_groningen_vs_limburg_test", pidlist2_test) - - del pidlist2_train_ -else: - if experiment_type == 1: - pidlist2_train = np.load(dirOut + "\\pidlist2_saxon_vs_limburg_train.npy") - pidlist2_test = np.load(dirOut + "\\pidlist2_saxon_vs_limburg_test.npy") - - elif experiment_type == 2: - pidlist2_train = np.load(dirOut + "\\pidlist2_groningen_vs_limburg_train.npy") - pidlist2_test = np.load(dirOut + "\\pidlist2_groningen_vs_limburg_test.npy") - - -## train/test data -if experiment_type == 0: - # Groningen vs Overijsel vs Limburg - data_train = sb_func.extractPid(pidlist_train, data) - data_eval = sb_func.extractPid(pidlist_eval, data) - data_test = sb_func.extractPid(pidlist_test, data) - -elif experiment_type == 1 or experiment_type == 2: - data2 = np.array(data) - - if experiment_type == 1: - for row, row2 in zip(data, data2): - if row[2] == regionLabels[0] or row[2] == regionLabels[2]: - row2[2] = regionLabels2[0] - - data2_train = sb_func.extractPid(pidlist2_train, data2) - data2_test = sb_func.extractPid(pidlist2_test, data2) - - -##################################### -## EXPERIMENTS START FROM HERE ## -##################################### - -## actual training -# train vs eval -#trainData = data_train -#testData = data_eval -#testPID = pidlist_eval -#LB = LB_y -#LE = LE_y -#regionLabels = regionLabels3 - -# train+eval vs test -if experiment_type == 0: - trainData = np.r_[data_train, data_eval] - testData = data_test - testPID = pidlist_test - LB = LB_y - LE = LE_y -elif experiment_type == 1 or experiment_type == 2: -# 2 region: saxon vs limburg/ groningen vs limburg - trainData = data2_train - testData = data2_test - testPID = pidlist2_test - LB = LB_y2 - LE = LE_y2 - regionLabels = regionLabels2 - - -# check the number of utterance -allData = np.r_[trainData, testData] -filenames = np.c_[allData[:, 0], allData[:, 2]] -filenames_unique = np.unique(filenames, axis=0) -Counter(filenames_unique[:, 1]) - - -fileComparison = dirOut + "\\algorithm_comparison.csv" -filePerformance = dirOut + "\\sentence-level.csv" -fileConfusionMatrix = dirOut + "\\confusion_matrix.csv" - -## compare classification algorithms for the sentence-classifiers. -#sb_func.compare_sentence_level_classifiers(trainData, LBlist, LE, fileComparison) - -## train sentence-level classifiers. -modelList, scoreList, confusionMatrixList = sb_func.train_sentence_level_classifiers( - trainData, LBlist, LE, filePerformance) - -## prediction over evaluation data per each sentence-level classifier. -pred_per_sentence = sb_func.prediction_per_sentence(testData, modelList, LBlist, LE) - -## combine sentence-level classifiers -pred_per_pid_majority = sb_func.prediction_per_pid_majority(testPID, pred_per_sentence) - -## majority vote (weighted) -#weight = sb_func.calc_weight(confusionMatrixList) -#pred_per_pid_weighted = sb_func.prediction_per_pid_weighted(testPID, pred_per_sentence, weight, LB, LE) - -### confusion matrix -if experiment_type == 0: - confusionMatrix_majority = confusion_matrix( - pred_per_pid_majority[:, 1], pred_per_pid_majority[:, 2], labels=['Groningen_and_Drenthe', 'Oost_Overijsel-Gelderland', 'Limburg']) -else: - confusionMatrix_majority = confusion_matrix( - pred_per_pid_majority[:, 1], pred_per_pid_majority[:, 2], labels=['Groningen_and_Drenthe', 'Limburg']) - - #confusionMatrix_weighted = confusion_matrix( -# pred_per_pid_weighted[:, 1], pred_per_pid_weighted[:, 2], labels=regionLabels) - - -## output -accuracy = accuracy_score(pred_per_pid_majority[:, 1], pred_per_pid_majority[:, 2], normalize=True, sample_weight=None) -print('accuracy: {}%'.format(accuracy * 100)) - -cm = confusionMatrix_majority -print(cm) - -np.save(dirOut + "\\pred_per_pid.npy", pred_per_pid_majority) -np.save(dirOut + "\\confusion_matrix.npy", cm) - -#fout = open(fileConfusionMatrix, "w") -#fout.write('< confusion matrix for majority vote in evaluation set >\n') -#sb_func.outputConfusionMatrix33('fout', 'confusionMatrix_majority', regionLabels) -#fout.write('< confusion matrix for weighted vote in evaluation set >\n') -#sb_func.outputConfusionMatrix33('fout', 'confusionMatrix_weighted', regionLabels) -#fout.write('\n') -#fout.close() - - -##### iteration finish ##### -conn.close() -#np.savetxt(dirOut + '\\cm_majority.csv', CM_majority, delimiter=',') -#np.savetxt(dirOut + '\\cm_weighted.csv', CM_weighted, delimiter=',') - diff --git a/output/confusion_matrix_2regions.npy b/output/confusion_matrix_2regions.npy new file mode 100644 index 0000000000000000000000000000000000000000..e766cb84d31a64f4c50c4d7e77d45e72dc45f6de GIT binary patch literal 112 zcmbR27wQ`j$;jZwP_3SlTAW;@Zl$1ZlWC!@qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= iXCxM+0{I$7ItoUbItsN4aKNR+00A6OnhQ!RKxqJ7)fJWi literal 0 HcmV?d00001 diff --git a/output/confusion_matrix_2regions.png b/output/confusion_matrix_2regions.png new file mode 100644 index 0000000000000000000000000000000000000000..8a67f8d287a050f29c7a98cee9651dede18c23d8 GIT binary patch literal 17894 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 literal 0 HcmV?d00001 diff --git a/output/confusion_matrix_2regions_normalized.png b/output/confusion_matrix_2regions_normalized.png new file mode 100644 index 0000000000000000000000000000000000000000..02b762125abe4f17104e0a606b2f1347e475bc9e GIT binary patch literal 21125 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 literal 0 HcmV?d00001 diff --git a/output/confusion_matrix_3regions.npy b/output/confusion_matrix_3regions.npy new file mode 100644 index 0000000000000000000000000000000000000000..09e5359fe7275dc454fe60a81afce0dd20148f29 GIT binary patch literal 152 zcmbR27wQ`j$;jZwP_3SlTAW;@Zl$1ZlWC!@qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= tXCxM+0{I%oIts>`ItsN4aKI(V00DeZnj4K4hVpr!G$WMefYORk8UVdL6~X`j literal 0 HcmV?d00001 diff --git a/output/confusion_matrix_3regions.png b/output/confusion_matrix_3regions.png new file mode 100644 index 0000000000000000000000000000000000000000..8b2c7f04b28daf582712e845cdb00d1efb31c88e GIT binary patch literal 22069 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 literal 0 HcmV?d00001 diff --git a/output/pidlist_3regions_eval.npy b/output/pidlist_3regions_eval.npy new file mode 100644 index 0000000000000000000000000000000000000000..258b029b3c1f85acf9a341c6c6a6ef8d6dc75345 GIT binary patch literal 10280 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 O;)u8OUiY`F!SNq4?!&tP literal 0 HcmV?d00001 diff --git a/output/pred_per_pid_2regions.npy b/output/pred_per_pid_2regions.npy new file mode 100644 index 0000000000000000000000000000000000000000..a6256fa9b58545e4febcd3221d05649d74571ba2 GIT binary patch literal 21248 zcmd^^y>3%M5QR<4Q@AroF31lMB1#k*Kr|_+A_to!62#~_REVeGg_%$CNU7QRq_uXW z(OxIyXwIJbyXNnw%a5PGJegh0elOOW-PdVxK3}}OJU&`1=ZkOK>0w&kUu~!LhF@H) zzV9~i^WE+0=O#WsJ3C#@Po6L5f9898dNiBOPQqV=pN1cYx7zyvn8LT=_u+T@^Cr&C z{`o4-)&6-MC!gPi^LP1g9^(0S|JlHVEBxVIWk#F^CYr#kB2|~4*soX#Q7nD zVpjeLzYhNuK84?e|F6M4dpsw7zts+nd+s+Q^*XrX)HyYO7T#)x?gl2c4sSS<^A%>q zX<*Xh=x;dly~2z*4NUSK{_sxyTlpJt8kqDrc&GNQy!m@0P6LxV$GL;5cR3?Y1CyMG zbM||BeXAL98oLd>y>h;BZw7Y*6V0i0bmy!vBTfSo-RbjiugG`q&WO{!uVcoIIN#BHMDFlTkH-=-^3%Yi#^Fw{=d3UzP6HF}cvY=) zcSf8BCUY&dr{`6e5vPF(Z+04HTUFj0aT@Qi>@xWt2lom)6z*saXXboW%^TbeOf;vz z=N-gjvl($3m^t65_nzNnjCzMVxnA`iL(&);8JP5W`W^h4aTWWG5vQR$+|fMizE|$X zeZrkS&xu!bR zr-7OIPS2~@=`8M6&ci$R+6w-LMg}IjXU&h6^VB<<)9WfU5150g_tZS+TLph3KdpL) zFP`r;XxCx}cLS3er{?j|>OFT_-eoHGnt(Z&dPi$`Q}=j<8Tn~oqBT99lf17mBTfSo z&6#n%@3cmrhj;GuJ?n09C*PTIJ##m59^Ul0e1DI}W;5b6Fwq;{IQLLtMw|vF+^P8y za~{s<&72=`zGuCU#+~^_e@FYC|6j(acX}M$*>Ug+GvYKbAI~^?UWFNP8km{ydG^ZP z*y~dF-0OSgZs?wz>3P(Cg&A=gm~hTMH(IaD_c&(zXx~}EH+OpaU4X<+^XVKWw9 literal 0 HcmV?d00001 diff --git a/output/pred_per_pid_3regions.npy b/output/pred_per_pid_3regions.npy new file mode 100644 index 0000000000000000000000000000000000000000..4cef43746a910e034f9e618af8a90b1afe56caba GIT binary patch literal 37880 zcmeI5&2Ai35JrbBPcgdz$&rXden2cy*zmW>f>q?iLlP8XG!ASKPr(aQNBEP>!VN;V zj&xgHQmJQbI;2Ue}A8*OztW{g;*eclnw3_4@VA`?~xij2f_k7o57n zSjTtu$8#^PD`5(2zV=%stYOYQ`l*ti;cIUz?^W{mj;CD zQ6rlAtROwCu;yWey)5``D-P8_o{MKpruEZT*;0w?zvF| z9l;1)!HoTIbQtR}YQTy;5MKB@yhewy4xG(OxeAN*KE29Se2QN59U!!>$>o98I>2Qj+Mswo# z8S5}=;8P^bx}G%{>oEL^9)wZ$L-xYaVX!i0QTD#hc>(SQD??Xk3a>&}Tsy*GWz;}d z?1QlC=s(yS>o9bMr<3?Q%sOH%tk4yDg44`%yKz5Ygipa~=9$4@MgL`9pP7~6SDCHw zEBw79jC*d>fDdOJn9Zy!i&f?YJicSbGS*?#fD^usZ}FO59393w48MXC-p+ow%~!kK z(r5J1)aajh>o982gJ>$}9GHy`V;x3~=!%)W zYi>8zVbp*XT7uKeJ!s4fIS=MDib6I#jC*de!n0tt?SsoQ!Pl9s$eI1hICI9^(bT4^ zg0K+uADY6q@c0g1Yw@di6?-6@(AnrPSQ$0&C>Wuu4o$(`SckC>rvLExj+uQ;ta8T5 zIj4h{p(~>Xx{7Db+=B)y{0dFs?H!t`U#s|)!77@{ywJhRScg#qR`4Nnj;@zO!&rw= z1CPS9$jz^oC6Y4^XXlPNl?dK(6#*M;PlcYM?1*hS|?J z1}iw_OgOWyjPu~_v(3z`3|(a(%=4>R{mRf4Gbo(MZDv?j3ascuu3HcOJ1g|WoVCqY z%dBqu)y8U>74rhU2eX+!cQ*DxJRMfdq+~}J>o98E?m;}hBaC$zHPU~%ZmjMm5MAY5 zc=u2K|L++0+^7*ocs$K@wfTts{(e z7=D$rGd|VzOvYek)Id}89-P<%X2K&Had)T7&YL8p2+R&ysQ%DgiTlf?cbI~OZa=&Y{i{2 z`opNfoIwBO3b)Z=tiw1DMpIlnIKkauWz=A1$Y+FHJHl9pQ3F<)tvY6Q*cu@1wp!U|30Oo$dnhQZ2u&cMvh%+NJA7_5vMXeqNOtUAJ2hoLK2F^_UZUmanv zGW-fg=n3D#-#cP0tmr>jbZ8?1~PdB#T% zZqKily9!;QC!RHQ?S;lYH}*kT(RcB!4s98%EWct_fES!*^(&JV{g>zN^>Sz!x-x2@ vDg2!t+-A{biQwz(fm~-k;~2Vv6MCZm;MEbvI*c0l6uj6E$&N7AVbu5wbxs>d literal 0 HcmV?d00001