Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Lab 2 | Βήμα 10] #43

Closed
PansoK opened this issue Dec 9, 2020 · 8 comments
Closed

[Lab 2 | Βήμα 10] #43

PansoK opened this issue Dec 9, 2020 · 8 comments

Comments

@PansoK
Copy link

PansoK commented Dec 9, 2020

Καλησπέρα,
χρησιμοποιούμε την συνάρτηση GeneralMixtureModel.from_samples() για να δημιουργήσουμε τις γκαουσιανές που θα μοντελοποιούν τα δεδομένα μας για κάθε αριθμό. Ως Χ παίρνουμε τον πίνακα όπου σε κάθε γραμμή βρίσκονται τα 39 χαρακτηριστκά ενός ηχητικού παραθύρου του αντίστοιχου αριθμού. Εμφανίζεται το παρακάτω σφάλμα:
Screenshot from 2020-12-08 19-45-34
Βρήκαμε τα παρακάτω issues:

@georgepar
Copy link
Contributor

Link από σχετικό issue.

numpy/numpy#7225 (comment)

Αυτό έχει να κάνει με αλλαγές που έχουν γίνει στο numpy μετα την έκδοση 1.7 (έχουν καιρό να ενημερώσουν οι authors το pomegranate).

Όπως βλέπεις αγνοεί το exception, οπότε τρέξτο ως έχει και τα νούμερα στο τέλος θα πρέπει να είναι καλά αν έχουν γίνει σωστά όλα τα υπόλοιπα.

Αυτό ισχύει αν το τρέξεις με python script. Σε ipynb δυστυχώς δεν έχω workaround

@BlackPianoCat
Copy link

Λοιπόν την έγραψα και χθες την απορία αλλά την έσβησα για να την γράψω λίγο πιο ωραία. Οπότε έχω δύο απορίες εγώ πάνω σε αυτό:

  • Όταν φτιάχνω ξεχωριστό environment στην Anaconda για να κάνω install τα πακέτα που μας γράψατε στο Recommended package versions for pomegranate #44 με την συγκεκριμένη έκδοση της python που μας γράψατε Python 3.7 (δεν βρήκα Python 3.7.3), μου βγάζει και πάλι error όταν κάνω import τις βιβλιοθήκες. Μου βγάζει κάποιο πρόβλημα στην βιβλιοθήκη numba, στην librosa μέσα που κάπου την χρησιμοποιεί. Μου φαίνεται αρκετά προβληματικό το γεγονός ότι πετυχαίνουμε καλά scores μόνο με συγκεκριμένες βιβλιοθήκες.
  • Η δεύτερη μου απορία είναι ποιά θα πρέπει να είναι η διάσταση των distributions που θα βάλουμε σαν όρισμα της HiddenMarkovModel.from_matrix(). Όπως το σκέφτομαι εγώ: πρέπει για κάθε ψηφίο να κάνω μια διαδικασία ένωσης κάποιο concentrate, στην συνέχεια βάζω τις λίστες που προέκυψαν από το concentrate στην GeneralMixtureModel.from_samples ενώνω σε κάποιο np.array τα outputs. Διαφορετικά παίρνω ένα τυχαίο δείγμα για κάθε ψηφίο και μετά ενώνω τα τα distributions του κάθε ψηφίου πο προέκυψαν από την GeneralMixtureModel.from_samples (προς το παρόν έχω κάνει αυτό). Και στην συνέχεια το βάζω αυτό στην HiddenMarkovModel.from_matrix() αφού έχω ορίσει και κάποιο transition matrix, και αρχικές καταστάσεις για την μαρκοβιανή αλυσίδα. Το θέμα είναι ότι καταρχάς δεν είμαι σίγουρος αν θα πρέπει να ακολουθήσω αυτήν την διαδικασία, και κατά δεύτερον εάν πρέπει να κάνω κάτι με την μεταβαλόμενη από την μια εκ των δύο διαστάσεων του πίνακα X_train ώστε στο τέλος να πάρω αυστηρά κάποιον πίνακα για στο distributions.

Το error που μου πετάει:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-7-d0f996b2318f> in <module>
     17 
     18 # Define the GMM-HMM
---> 19 model = HiddenMarkovModel.from_matrix(trans_mat, np.array(GMMs), starts, ends, state_names=['s{}'.format(i) for i in range(n_states)])
     20 
     21 # Fit the model

~/anaconda3/lib/python3.8/site-packages/pomegranate/hmm.pyx in pomegranate.hmm.HiddenMarkovModel.from_matrix()

~/anaconda3/lib/python3.8/site-packages/pomegranate/hmm.pyx in pomegranate.hmm.HiddenMarkovModel.bake()

AttributeError: 'numpy.ndarray' object has no attribute 'd'

@georgepar
Copy link
Contributor

  1. Θα έπρεπε να δουλεύει με 0.7.1, αλλά δοκίμασε και librosa 0.6.2. Αυτό το θέμα οφείλεται στο ότι οι βιβλιοθήκη pomegranate δεν είναι actively maintaned. Παρόλα αυτά είναι η λιγότερο προβληματική για hmms που έχουμε βρει σε python. Οι καλές επιλογές είναι Kaldi / HTK, που είναι σε C/C++ και θα έκανε την άσκηση αρκετά πιο δύσκολη.

  2. Σαν distributions δεν περνάς numpy arrays. Περνάς μια λίστα από pomegranate.gmm.GeneralMixtureModel (για κάθε state).

@BlackPianoCat
Copy link

Η λογική που το σκέφτομαι όμως είναι σωστή; Ότι πρέπει να ενώσω τα δεδομένα για κάθε ψηφίο, για κάθε μία από τις κατηγορίες να βρω τα GMMs και μετά όλα αυτά να τα βάλω σε μια λίστα;

@georgepar
Copy link
Contributor

Ναι η λογική είναι σωστή.

@ChristosSgouropoulos
Copy link

ChristosSgouropoulos commented Dec 12, 2020

Μπορείτε σας παρακαλώ να μας εξηγήσετε ποια θα είναι η μορφή του Χ που θα μπει στην εντολή:
GeneralMixtureModel.from_samples()

H συνάρτηση parser η οποία μας έχετε δώσει επιστρέφει μια λίστα.
Κάθε στοιχείο της λίστας είναι ένας πίνακας με σειρές ίσες με τον αριθμό των frames της εκάστοτε ηχογράφησης και στήλες 6 , όσες δηλαδή και τα mfcc features που έχετε βάλει στον κώδικα.
Ομαδοποιούμε τα δεδομένα ανά ψηφίο όπως ζητάτε στην αρχή του ερωτήματος 10. Άρα πχ έστω ότι στη Χ0 λίστα έχω όλους τους πίνακες Χ που αντιστοιχούν στις εκφωνήσεις 0.
Τώρα σκοπός είναι να χρησιμοποιήσουμε την παραπάνω συνάρτηση η οποία πρακτικά κάνει το εξής:
Θεωρεί ότι τα δεδομένα προέρχονται από μίξη n_mixtures = 2 πολυδιάστατων κατανομών. Κάνει EM και βρίσκει τις παραμέτρους των κατανομών.
Εν προκειμένω θεωρούμε ότι τα δεδομένα μας έρχονται από την μίξη δύο εξαδιάστατων κανονικών.
Αλλά τα δεδομένα μας έχουν και τη διάσταση των frames. Πως θα το χειριστούμε αυτό ?

Αν κάνω κάπου λάθος ή δεν έχω καταλάβει κάτι διορθώστε με

@ChristosSgouropoulos
Copy link

Θέλετε για παράδειγμα να ακυρώσουμε την διάσταση των frames παίρνωντας μέσες τιμές και διασπορές όπως στα ερωτήματα της προπαρασκευής?

@georgepar
Copy link
Contributor

Τα GMMs δεν έχουν αίσθηση της ακολουθίας, οπότε θέλουμε να δώσετε flat όλα τα frames από όλες τις σχετικές εκφωνήσεις
δηλαδή (sum(n_frames(i)) for i in utterances , n_features)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants