nkululeko 0.85.2__tar.gz → 0.86.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (168) hide show
  1. {nkululeko-0.85.2 → nkululeko-0.86.1}/CHANGELOG.md +11 -0
  2. {nkululeko-0.85.2/nkululeko.egg-info → nkululeko-0.86.1}/PKG-INFO +13 -1
  3. {nkululeko-0.85.2 → nkululeko-0.86.1}/README.md +1 -0
  4. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/constants.py +1 -1
  5. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/experiment.py +33 -42
  6. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/feat_extract/feats_opensmile.py +25 -25
  7. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/feat_extract/featureset.py +4 -4
  8. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/models/model_tuned.py +157 -88
  9. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/resample.py +32 -6
  10. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/utils/util.py +6 -0
  11. {nkululeko-0.85.2 → nkululeko-0.86.1/nkululeko.egg-info}/PKG-INFO +13 -1
  12. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko.egg-info/SOURCES.txt +0 -1
  13. nkululeko-0.85.2/nkululeko/models/finetune_model.py +0 -190
  14. {nkululeko-0.85.2 → nkululeko-0.86.1}/LICENSE +0 -0
  15. {nkululeko-0.85.2 → nkululeko-0.86.1}/data/aesdd/process_database.py +0 -0
  16. {nkululeko-0.85.2 → nkululeko-0.86.1}/data/androids/process_database.py +0 -0
  17. {nkululeko-0.85.2 → nkululeko-0.86.1}/data/androids_orig/process_database.py +0 -0
  18. {nkululeko-0.85.2 → nkululeko-0.86.1}/data/androids_test/process_database.py +0 -0
  19. {nkululeko-0.85.2 → nkululeko-0.86.1}/data/ased/process_database.py +0 -0
  20. {nkululeko-0.85.2 → nkululeko-0.86.1}/data/asvp-esd/process_database.py +0 -0
  21. {nkululeko-0.85.2 → nkululeko-0.86.1}/data/baved/process_database.py +0 -0
  22. {nkululeko-0.85.2 → nkululeko-0.86.1}/data/cafe/process_database.py +0 -0
  23. {nkululeko-0.85.2 → nkululeko-0.86.1}/data/clac/process_database.py +0 -0
  24. {nkululeko-0.85.2 → nkululeko-0.86.1}/data/cmu-mosei/process_database.py +0 -0
  25. {nkululeko-0.85.2 → nkululeko-0.86.1}/data/demos/process_database.py +0 -0
  26. {nkululeko-0.85.2 → nkululeko-0.86.1}/data/ekorpus/process_database.py +0 -0
  27. {nkululeko-0.85.2 → nkululeko-0.86.1}/data/emns/process_database.py +0 -0
  28. {nkululeko-0.85.2 → nkululeko-0.86.1}/data/emofilm/convert_to_16k.py +0 -0
  29. {nkululeko-0.85.2 → nkululeko-0.86.1}/data/emofilm/process_database.py +0 -0
  30. {nkululeko-0.85.2 → nkululeko-0.86.1}/data/emorynlp/process_database.py +0 -0
  31. {nkululeko-0.85.2 → nkululeko-0.86.1}/data/emov-db/process_database.py +0 -0
  32. {nkululeko-0.85.2 → nkululeko-0.86.1}/data/emovo/process_database.py +0 -0
  33. {nkululeko-0.85.2 → nkululeko-0.86.1}/data/emozionalmente/create.py +0 -0
  34. {nkululeko-0.85.2 → nkululeko-0.86.1}/data/enterface/process_database.py +0 -0
  35. {nkululeko-0.85.2 → nkululeko-0.86.1}/data/esd/process_database.py +0 -0
  36. {nkululeko-0.85.2 → nkululeko-0.86.1}/data/gerparas/process_database.py +0 -0
  37. {nkululeko-0.85.2 → nkululeko-0.86.1}/data/iemocap/process_database.py +0 -0
  38. {nkululeko-0.85.2 → nkululeko-0.86.1}/data/jl/process_database.py +0 -0
  39. {nkululeko-0.85.2 → nkululeko-0.86.1}/data/jtes/process_database.py +0 -0
  40. {nkululeko-0.85.2 → nkululeko-0.86.1}/data/meld/process_database.py +0 -0
  41. {nkululeko-0.85.2 → nkululeko-0.86.1}/data/mesd/process_database.py +0 -0
  42. {nkululeko-0.85.2 → nkululeko-0.86.1}/data/mess/process_database.py +0 -0
  43. {nkululeko-0.85.2 → nkululeko-0.86.1}/data/mlendsnd/process_database.py +0 -0
  44. {nkululeko-0.85.2 → nkululeko-0.86.1}/data/msp-improv/process_database2.py +0 -0
  45. {nkululeko-0.85.2 → nkululeko-0.86.1}/data/msp-podcast/process_database.py +0 -0
  46. {nkululeko-0.85.2 → nkululeko-0.86.1}/data/oreau2/process_database.py +0 -0
  47. {nkululeko-0.85.2 → nkululeko-0.86.1}/data/portuguese/process_database.py +0 -0
  48. {nkululeko-0.85.2 → nkululeko-0.86.1}/data/ravdess/process_database.py +0 -0
  49. {nkululeko-0.85.2 → nkululeko-0.86.1}/data/ravdess/process_database_speaker.py +0 -0
  50. {nkululeko-0.85.2 → nkululeko-0.86.1}/data/savee/process_database.py +0 -0
  51. {nkululeko-0.85.2 → nkululeko-0.86.1}/data/shemo/process_database.py +0 -0
  52. {nkululeko-0.85.2 → nkululeko-0.86.1}/data/subesco/process_database.py +0 -0
  53. {nkululeko-0.85.2 → nkululeko-0.86.1}/data/tess/process_database.py +0 -0
  54. {nkululeko-0.85.2 → nkululeko-0.86.1}/data/thorsten-emotional/process_database.py +0 -0
  55. {nkululeko-0.85.2 → nkululeko-0.86.1}/data/urdu/process_database.py +0 -0
  56. {nkululeko-0.85.2 → nkululeko-0.86.1}/data/vivae/process_database.py +0 -0
  57. {nkululeko-0.85.2 → nkululeko-0.86.1}/docs/source/conf.py +0 -0
  58. {nkululeko-0.85.2 → nkululeko-0.86.1}/meta/demos/demo_best_model.py +0 -0
  59. {nkululeko-0.85.2 → nkululeko-0.86.1}/meta/demos/my_experiment.py +0 -0
  60. {nkululeko-0.85.2 → nkululeko-0.86.1}/meta/demos/my_experiment_local.py +0 -0
  61. {nkululeko-0.85.2 → nkululeko-0.86.1}/meta/demos/plot_faster_anim.py +0 -0
  62. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/__init__.py +0 -0
  63. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/aug_train.py +0 -0
  64. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/augment.py +0 -0
  65. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/augmenting/__init__.py +0 -0
  66. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/augmenting/augmenter.py +0 -0
  67. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/augmenting/randomsplicer.py +0 -0
  68. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/augmenting/randomsplicing.py +0 -0
  69. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/augmenting/resampler.py +0 -0
  70. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/autopredict/__init__.py +0 -0
  71. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/autopredict/ap_age.py +0 -0
  72. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/autopredict/ap_arousal.py +0 -0
  73. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/autopredict/ap_dominance.py +0 -0
  74. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/autopredict/ap_gender.py +0 -0
  75. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/autopredict/ap_mos.py +0 -0
  76. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/autopredict/ap_pesq.py +0 -0
  77. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/autopredict/ap_sdr.py +0 -0
  78. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/autopredict/ap_snr.py +0 -0
  79. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/autopredict/ap_stoi.py +0 -0
  80. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/autopredict/ap_valence.py +0 -0
  81. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/autopredict/estimate_snr.py +0 -0
  82. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/cacheddataset.py +0 -0
  83. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/data/__init__.py +0 -0
  84. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/data/dataset.py +0 -0
  85. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/data/dataset_csv.py +0 -0
  86. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/demo.py +0 -0
  87. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/demo_feats.py +0 -0
  88. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/demo_predictor.py +0 -0
  89. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/explore.py +0 -0
  90. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/export.py +0 -0
  91. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/feat_extract/__init__.py +0 -0
  92. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/feat_extract/feats_agender.py +0 -0
  93. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/feat_extract/feats_agender_agender.py +0 -0
  94. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/feat_extract/feats_analyser.py +0 -0
  95. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/feat_extract/feats_auddim.py +0 -0
  96. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/feat_extract/feats_audmodel.py +0 -0
  97. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/feat_extract/feats_clap.py +0 -0
  98. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/feat_extract/feats_hubert.py +0 -0
  99. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/feat_extract/feats_import.py +0 -0
  100. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/feat_extract/feats_mld.py +0 -0
  101. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/feat_extract/feats_mos.py +0 -0
  102. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/feat_extract/feats_oxbow.py +0 -0
  103. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/feat_extract/feats_praat.py +0 -0
  104. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/feat_extract/feats_snr.py +0 -0
  105. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/feat_extract/feats_spectra.py +0 -0
  106. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/feat_extract/feats_spkrec.py +0 -0
  107. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/feat_extract/feats_squim.py +0 -0
  108. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/feat_extract/feats_trill.py +0 -0
  109. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/feat_extract/feats_wav2vec2.py +0 -0
  110. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/feat_extract/feats_wavlm.py +0 -0
  111. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/feat_extract/feats_whisper.py +0 -0
  112. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/feat_extract/feinberg_praat.py +0 -0
  113. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/feature_extractor.py +0 -0
  114. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/file_checker.py +0 -0
  115. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/filter_data.py +0 -0
  116. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/glob_conf.py +0 -0
  117. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/losses/__init__.py +0 -0
  118. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/losses/loss_ccc.py +0 -0
  119. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/losses/loss_softf1loss.py +0 -0
  120. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/modelrunner.py +0 -0
  121. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/models/__init__.py +0 -0
  122. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/models/model.py +0 -0
  123. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/models/model_bayes.py +0 -0
  124. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/models/model_cnn.py +0 -0
  125. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/models/model_gmm.py +0 -0
  126. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/models/model_knn.py +0 -0
  127. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/models/model_knn_reg.py +0 -0
  128. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/models/model_lin_reg.py +0 -0
  129. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/models/model_mlp.py +0 -0
  130. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/models/model_mlp_regression.py +0 -0
  131. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/models/model_svm.py +0 -0
  132. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/models/model_svr.py +0 -0
  133. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/models/model_tree.py +0 -0
  134. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/models/model_tree_reg.py +0 -0
  135. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/models/model_xgb.py +0 -0
  136. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/models/model_xgr.py +0 -0
  137. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/multidb.py +0 -0
  138. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/nkuluflag.py +0 -0
  139. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/nkululeko.py +0 -0
  140. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/plots.py +0 -0
  141. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/predict.py +0 -0
  142. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/reporting/__init__.py +0 -0
  143. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/reporting/defines.py +0 -0
  144. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/reporting/latex_writer.py +0 -0
  145. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/reporting/report.py +0 -0
  146. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/reporting/report_item.py +0 -0
  147. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/reporting/reporter.py +0 -0
  148. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/reporting/result.py +0 -0
  149. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/runmanager.py +0 -0
  150. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/scaler.py +0 -0
  151. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/segment.py +0 -0
  152. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/segmenting/__init__.py +0 -0
  153. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/segmenting/seg_inaspeechsegmenter.py +0 -0
  154. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/segmenting/seg_silero.py +0 -0
  155. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/syllable_nuclei.py +0 -0
  156. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/test.py +0 -0
  157. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/test_predictor.py +0 -0
  158. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/test_pretrain.py +0 -0
  159. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/utils/__init__.py +0 -0
  160. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/utils/files.py +0 -0
  161. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko/utils/stats.py +0 -0
  162. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko.egg-info/dependency_links.txt +0 -0
  163. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko.egg-info/requires.txt +0 -0
  164. {nkululeko-0.85.2 → nkululeko-0.86.1}/nkululeko.egg-info/top_level.txt +0 -0
  165. {nkululeko-0.85.2 → nkululeko-0.86.1}/pyproject.toml +0 -0
  166. {nkululeko-0.85.2 → nkululeko-0.86.1}/setup.cfg +0 -0
  167. {nkululeko-0.85.2 → nkululeko-0.86.1}/setup.py +0 -0
  168. {nkululeko-0.85.2 → nkululeko-0.86.1}/venv/bin/activate_this.py +0 -0
@@ -1,6 +1,17 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
+ Version 0.86.1
5
+ --------------
6
+ * functionality to push to hub
7
+ * fixed bug that prevented wavlm finetuning
8
+
9
+ Version 0.86.0
10
+ --------------
11
+ * added regression to finetuning
12
+ * added other transformer models to finetuning
13
+ * added output the train/dev features sets actually used by the model
14
+
4
15
  Version 0.85.2
5
16
  --------------
6
17
  * added data, and automatic task label detection
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: nkululeko
3
- Version: 0.85.2
3
+ Version: 0.86.1
4
4
  Summary: Machine learning audio prediction experiments based on templates
5
5
  Home-page: https://github.com/felixbur/nkululeko
6
6
  Author: Felix Burkhardt
@@ -256,6 +256,7 @@ There's my [blog](http://blog.syntheticspeech.de/?s=nkululeko) with tutorials:
256
256
  * [Compare several databases](http://blog.syntheticspeech.de/2024/01/02/nkululeko-compare-several-databases/)
257
257
  * [Tweak the target variable for database comparison](http://blog.syntheticspeech.de/2024/03/13/nkululeko-how-to-tweak-the-target-variable-for-database-comparison/)
258
258
  * [How to run multiple experiments in one go](http://blog.syntheticspeech.de/2022/03/28/how-to-run-multiple-experiments-in-one-go-with-nkululeko/)
259
+ * [How to finetune a transformer-model](http://blog.syntheticspeech.de/2024/05/29/nkululeko-how-to-finetune-a-transformer-model/)
259
260
 
260
261
  ### <a name="helloworld">Hello World example</a>
261
262
  * NEW: [Here's a Google colab that runs this example out-of-the-box](https://colab.research.google.com/drive/1GYNBd5cdZQ1QC3Jm58qoeMaJg3UuPhjw?usp=sharing#scrollTo=4G_SjuF9xeQf), and here is the same [with Kaggle](https://www.kaggle.com/felixburk/nkululeko-hello-world-example)
@@ -333,6 +334,17 @@ F. Burkhardt, Johannes Wagner, Hagen Wierstorf, Florian Eyben and Björn Schulle
333
334
  Changelog
334
335
  =========
335
336
 
337
+ Version 0.86.1
338
+ --------------
339
+ * functionality to push to hub
340
+ * fixed bug that prevented wavlm finetuning
341
+
342
+ Version 0.86.0
343
+ --------------
344
+ * added regression to finetuning
345
+ * added other transformer models to finetuning
346
+ * added output the train/dev features sets actually used by the model
347
+
336
348
  Version 0.85.2
337
349
  --------------
338
350
  * added data, and automatic task label detection
@@ -212,6 +212,7 @@ There's my [blog](http://blog.syntheticspeech.de/?s=nkululeko) with tutorials:
212
212
  * [Compare several databases](http://blog.syntheticspeech.de/2024/01/02/nkululeko-compare-several-databases/)
213
213
  * [Tweak the target variable for database comparison](http://blog.syntheticspeech.de/2024/03/13/nkululeko-how-to-tweak-the-target-variable-for-database-comparison/)
214
214
  * [How to run multiple experiments in one go](http://blog.syntheticspeech.de/2022/03/28/how-to-run-multiple-experiments-in-one-go-with-nkululeko/)
215
+ * [How to finetune a transformer-model](http://blog.syntheticspeech.de/2024/05/29/nkululeko-how-to-finetune-a-transformer-model/)
215
216
 
216
217
  ### <a name="helloworld">Hello World example</a>
217
218
  * NEW: [Here's a Google colab that runs this example out-of-the-box](https://colab.research.google.com/drive/1GYNBd5cdZQ1QC3Jm58qoeMaJg3UuPhjw?usp=sharing#scrollTo=4G_SjuF9xeQf), and here is the same [with Kaggle](https://www.kaggle.com/felixburk/nkululeko-hello-world-example)
@@ -1,2 +1,2 @@
1
- VERSION="0.85.2"
1
+ VERSION="0.86.1"
2
2
  SAMPLING_RATE = 16000
@@ -30,15 +30,14 @@ from nkululeko.utils.util import Util
30
30
 
31
31
 
32
32
  class Experiment:
33
- """Main class specifying an experiment"""
33
+ """Main class specifying an experiment."""
34
34
 
35
35
  def __init__(self, config_obj):
36
- """
37
- Parameters
38
- ----------
39
- config_obj : a config parser object that sets the experiment parameters and being set as a global object.
40
- """
36
+ """Constructor.
41
37
 
38
+ Args:
39
+ - config_obj : a config parser object that sets the experiment parameters and being set as a global object.
40
+ """
42
41
  self.set_globals(config_obj)
43
42
  self.name = glob_conf.config["EXP"]["name"]
44
43
  self.root = os.path.join(glob_conf.config["EXP"]["root"], "")
@@ -73,8 +72,9 @@ class Experiment:
73
72
  if self.util.config_val("REPORT", "latex", False):
74
73
  self.report.export_latex()
75
74
 
76
- def get_name(self):
77
- return self.util.get_exp_name()
75
+ # moved to util
76
+ # def get_name(self):
77
+ # return self.util.get_exp_name()
78
78
 
79
79
  def set_globals(self, config_obj):
80
80
  """install a config object in the global space"""
@@ -109,15 +109,13 @@ class Experiment:
109
109
  # print keys/column
110
110
  dbs = ",".join(list(self.datasets.keys()))
111
111
  labels = self.util.config_val("DATA", "labels", False)
112
- auto_labels = list(
113
- next(iter(self.datasets.values())).df[self.target].unique()
114
- )
112
+ auto_labels = list(next(iter(self.datasets.values())).df[self.target].unique())
115
113
  if labels:
116
114
  self.labels = ast.literal_eval(labels)
117
115
  self.util.debug(f"Target labels (from config): {labels}")
118
116
  else:
119
117
  self.labels = auto_labels
120
- self.util.debug(f"Target labels (from database): {auto_labels}")
118
+ self.util.debug(f"Target labels (from database): {auto_labels}")
121
119
  glob_conf.set_labels(self.labels)
122
120
  self.util.debug(f"loaded databases {dbs}")
123
121
 
@@ -160,8 +158,7 @@ class Experiment:
160
158
  data.split()
161
159
  data.prepare_labels()
162
160
  self.df_test = pd.concat(
163
- [self.df_test, self.util.make_segmented_index(
164
- data.df_test)]
161
+ [self.df_test, self.util.make_segmented_index(data.df_test)]
165
162
  )
166
163
  self.df_test.is_labeled = data.is_labeled
167
164
  self.df_test.got_gender = self.got_gender
@@ -262,8 +259,7 @@ class Experiment:
262
259
  test_cats = self.df_test[self.target].unique()
263
260
  else:
264
261
  # if there is no target, copy a dummy label
265
- self.df_test = self._add_random_target(
266
- self.df_test).astype("str")
262
+ self.df_test = self._add_random_target(self.df_test).astype("str")
267
263
  train_cats = self.df_train[self.target].unique()
268
264
  # print(f"df_train: {pd.DataFrame(self.df_train[self.target])}")
269
265
  # print(f"train_cats with target {self.target}: {train_cats}")
@@ -271,8 +267,7 @@ class Experiment:
271
267
  if type(test_cats) == np.ndarray:
272
268
  self.util.debug(f"Categories test (nd.array): {test_cats}")
273
269
  else:
274
- self.util.debug(
275
- f"Categories test (list): {list(test_cats)}")
270
+ self.util.debug(f"Categories test (list): {list(test_cats)}")
276
271
  if type(train_cats) == np.ndarray:
277
272
  self.util.debug(f"Categories train (nd.array): {train_cats}")
278
273
  else:
@@ -295,8 +290,7 @@ class Experiment:
295
290
 
296
291
  target_factor = self.util.config_val("DATA", "target_divide_by", False)
297
292
  if target_factor:
298
- self.df_test[self.target] = self.df_test[self.target] / \
299
- float(target_factor)
293
+ self.df_test[self.target] = self.df_test[self.target] / float(target_factor)
300
294
  self.df_train[self.target] = self.df_train[self.target] / float(
301
295
  target_factor
302
296
  )
@@ -319,16 +313,14 @@ class Experiment:
319
313
  def plot_distribution(self, df_labels):
320
314
  """Plot the distribution of samples and speaker per target class and biological sex"""
321
315
  plot = Plots()
322
- sample_selection = self.util.config_val(
323
- "EXPL", "sample_selection", "all")
316
+ sample_selection = self.util.config_val("EXPL", "sample_selection", "all")
324
317
  plot.plot_distributions(df_labels)
325
318
  if self.got_speaker:
326
319
  plot.plot_distributions_speaker(df_labels)
327
320
 
328
321
  def extract_test_feats(self):
329
322
  self.feats_test = pd.DataFrame()
330
- feats_name = "_".join(ast.literal_eval(
331
- glob_conf.config["DATA"]["tests"]))
323
+ feats_name = "_".join(ast.literal_eval(glob_conf.config["DATA"]["tests"]))
332
324
  feats_types = self.util.config_val_list("FEATS", "type", ["os"])
333
325
  self.feature_extractor = FeatureExtractor(
334
326
  self.df_test, feats_types, feats_name, "test"
@@ -345,8 +337,7 @@ class Experiment:
345
337
 
346
338
  """
347
339
  df_train, df_test = self.df_train, self.df_test
348
- feats_name = "_".join(ast.literal_eval(
349
- glob_conf.config["DATA"]["databases"]))
340
+ feats_name = "_".join(ast.literal_eval(glob_conf.config["DATA"]["databases"]))
350
341
  self.feats_test, self.feats_train = pd.DataFrame(), pd.DataFrame()
351
342
  feats_types = self.util.config_val_list("FEATS", "type", [])
352
343
  # for some models no features are needed
@@ -380,20 +371,22 @@ class Experiment:
380
371
  f"test feats ({self.feats_test.shape[0]}) != test labels"
381
372
  f" ({self.df_test.shape[0]})"
382
373
  )
383
- self.df_test = self.df_test[self.df_test.index.isin(
384
- self.feats_test.index)]
385
- self.util.warn(f"mew test labels shape: {self.df_test.shape[0]}")
374
+ self.df_test = self.df_test[self.df_test.index.isin(self.feats_test.index)]
375
+ self.util.warn(f"new test labels shape: {self.df_test.shape[0]}")
386
376
 
387
377
  self._check_scale()
378
+ # store = self.util.get_path("store")
379
+ # store_format = self.util.config_val("FEATS", "store_format", "pkl")
380
+ # storage = f"{store}test_feats.{store_format}"
381
+ # self.util.write_store(self.feats_test, storage, store_format)
382
+ # storage = f"{store}train_feats.{store_format}"
383
+ # self.util.write_store(self.feats_train, storage, store_format)
388
384
 
389
385
  def augment(self):
390
- """
391
- Augment the selected samples
392
- """
386
+ """Augment the selected samples."""
393
387
  from nkululeko.augmenting.augmenter import Augmenter
394
388
 
395
- sample_selection = self.util.config_val(
396
- "AUGMENT", "sample_selection", "all")
389
+ sample_selection = self.util.config_val("AUGMENT", "sample_selection", "all")
397
390
  if sample_selection == "all":
398
391
  df = pd.concat([self.df_train, self.df_test])
399
392
  elif sample_selection == "train":
@@ -488,8 +481,7 @@ class Experiment:
488
481
  """
489
482
  from nkululeko.augmenting.randomsplicer import Randomsplicer
490
483
 
491
- sample_selection = self.util.config_val(
492
- "AUGMENT", "sample_selection", "all")
484
+ sample_selection = self.util.config_val("AUGMENT", "sample_selection", "all")
493
485
  if sample_selection == "all":
494
486
  df = pd.concat([self.df_train, self.df_test])
495
487
  elif sample_selection == "train":
@@ -510,8 +502,7 @@ class Experiment:
510
502
  plot_feats = eval(
511
503
  self.util.config_val("EXPL", "feature_distributions", "False")
512
504
  )
513
- sample_selection = self.util.config_val(
514
- "EXPL", "sample_selection", "all")
505
+ sample_selection = self.util.config_val("EXPL", "sample_selection", "all")
515
506
  # get the data labels
516
507
  if sample_selection == "all":
517
508
  df_labels = pd.concat([self.df_train, self.df_test])
@@ -574,8 +565,7 @@ class Experiment:
574
565
  for scat_target in scat_targets:
575
566
  if self.util.is_categorical(df_labels[scat_target]):
576
567
  for scatter in scatters:
577
- plots.scatter_plot(
578
- df_feats, df_labels, scat_target, scatter)
568
+ plots.scatter_plot(df_feats, df_labels, scat_target, scatter)
579
569
  else:
580
570
  self.util.debug(
581
571
  f"{self.name}: binning continuous variable to categories"
@@ -590,6 +580,8 @@ class Experiment:
590
580
  )
591
581
 
592
582
  def _check_scale(self):
583
+ self.util.save_to_store(self.feats_train, "feats_train")
584
+ self.util.save_to_store(self.feats_test, "feats_test")
593
585
  scale_feats = self.util.config_val("FEATS", "scale", False)
594
586
  # print the scale
595
587
  self.util.debug(f"scaler: {scale_feats}")
@@ -664,8 +656,7 @@ class Experiment:
664
656
  preds = best.preds
665
657
  speakers = self.df_test.speaker.values
666
658
  print(f"{len(truths)} {len(preds)} {len(speakers) }")
667
- df = pd.DataFrame(
668
- data={"truth": truths, "pred": preds, "speaker": speakers})
659
+ df = pd.DataFrame(data={"truth": truths, "pred": preds, "speaker": speakers})
669
660
  plot_name = "result_combined_per_speaker"
670
661
  self.util.debug(
671
662
  f"plotting speaker combination ({function}) confusion matrix to"
@@ -65,28 +65,28 @@ class Opensmileset(Featureset):
65
65
  feats = smile.process_signal(signal, sr)
66
66
  return feats.to_numpy()
67
67
 
68
- def filter(self):
69
- # use only the features that are indexed in the target dataframes
70
- self.df = self.df[self.df.index.isin(self.data_df.index)]
71
- try:
72
- # use only some features
73
- selected_features = ast.literal_eval(
74
- glob_conf.config["FEATS"]["os.features"]
75
- )
76
- self.util.debug(f"selecting features from opensmile: {selected_features}")
77
- sel_feats_df = pd.DataFrame()
78
- hit = False
79
- for feat in selected_features:
80
- try:
81
- sel_feats_df[feat] = self.df[feat]
82
- hit = True
83
- except KeyError:
84
- pass
85
- if hit:
86
- self.df = sel_feats_df
87
- self.util.debug(
88
- "new feats shape after selecting opensmile features:"
89
- f" {self.df.shape}"
90
- )
91
- except KeyError:
92
- pass
68
+ # def filter(self):
69
+ # # use only the features that are indexed in the target dataframes
70
+ # self.df = self.df[self.df.index.isin(self.data_df.index)]
71
+ # try:
72
+ # # use only some features
73
+ # selected_features = ast.literal_eval(
74
+ # glob_conf.config["FEATS"]["os.features"]
75
+ # )
76
+ # self.util.debug(f"selecting features from opensmile: {selected_features}")
77
+ # sel_feats_df = pd.DataFrame()
78
+ # hit = False
79
+ # for feat in selected_features:
80
+ # try:
81
+ # sel_feats_df[feat] = self.df[feat]
82
+ # hit = True
83
+ # except KeyError:
84
+ # pass
85
+ # if hit:
86
+ # self.df = sel_feats_df
87
+ # self.util.debug(
88
+ # "new feats shape after selecting opensmile features:"
89
+ # f" {self.df.shape}"
90
+ # )
91
+ # except KeyError:
92
+ # pass
@@ -15,7 +15,7 @@ class Featureset:
15
15
  self.name = name
16
16
  self.data_df = data_df
17
17
  self.util = Util("featureset")
18
- self.feats_types = feats_type
18
+ self.feats_type = feats_type
19
19
 
20
20
  def extract(self):
21
21
  pass
@@ -25,8 +25,7 @@ class Featureset:
25
25
  self.df = self.df[self.df.index.isin(self.data_df.index)]
26
26
  try:
27
27
  # use only some features
28
- selected_features = ast.literal_eval(
29
- glob_conf.config["FEATS"]["features"])
28
+ selected_features = ast.literal_eval(glob_conf.config["FEATS"]["features"])
30
29
  self.util.debug(f"selecting features: {selected_features}")
31
30
  sel_feats_df = pd.DataFrame()
32
31
  hit = False
@@ -35,11 +34,12 @@ class Featureset:
35
34
  sel_feats_df[feat] = self.df[feat]
36
35
  hit = True
37
36
  except KeyError:
37
+ self.util.warn(f"non existent feature in {self.feats_type}: {feat}")
38
38
  pass
39
39
  if hit:
40
40
  self.df = sel_feats_df
41
41
  self.util.debug(
42
- f"new feats shape after selecting features: {self.df.shape}"
42
+ f"new feats shape after selecting features for {self.feats_type}: {self.df.shape}"
43
43
  )
44
44
  except KeyError:
45
45
  pass