Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,5 @@ repos:
- id: trailing-whitespace
- id: check-added-large-files
args: ['--maxkb=2000']
exclude: 'tests/data'
- id: mixed-line-ending
1 change: 0 additions & 1 deletion docs/source/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,6 @@
"Corpus Phonetics Tutorial",
"https://eleanorchodroff.com/tutorial/intro.html",
),
"coqui": ("Coqui", "https://coqui.ai/"),
"conda_installation": (
"Conda installation",
"https://docs.conda.io/projects/conda/en/latest/user-guide/install/index.html",
Expand Down
1 change: 1 addition & 0 deletions environment.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ dependencies:
- pytest
- pip
- dataclassy
- pyyaml
- praatio
- pytest-order
- pip:
Expand Down
88 changes: 88 additions & 0 deletions extensions/gmm/gmm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2600,4 +2600,92 @@ void init_gmm(py::module &_m) {
py::arg("features"),
py::return_value_policy::take_ownership
);

m.def("gmm_interpolate_boundary_fast",
[](const AmDiagGmm &am_gmm,
const TransitionModel &trans_model,
const Matrix<BaseFloat> &features,
const int32 previous_transition_id,
const int32 following_transition_id){

py::gil_scoped_release release;
std::vector<BaseFloat> ratios;
BaseFloat previous_phone_log_likelihood, following_phone_log_likelihood;
int32 previous_pdf_id = trans_model.TransitionIdToPdfFast(previous_transition_id);
int32 following_pdf_id = trans_model.TransitionIdToPdfFast(following_transition_id);
BaseFloat min_ratio, max_ratio, ratio;
min_ratio = 100000.0;
max_ratio = -10000.0;
for (int32 i = 0; i < features.NumRows(); i++) {
SubVector<BaseFloat> feat_row(features, i);
previous_phone_log_likelihood = am_gmm.LogLikelihood(previous_pdf_id, feat_row);
following_phone_log_likelihood = am_gmm.LogLikelihood(following_pdf_id, feat_row);
ratio = previous_phone_log_likelihood - following_phone_log_likelihood;
ratios.push_back(ratio);
if (ratio > max_ratio)
max_ratio = ratio;
if (ratio < min_ratio)
min_ratio = ratio;

}
for (int32 j = 0; j < ratios.size(); j++) {
ratio = ratios[j];
if (-1 + (2*(ratio - min_ratio) / (max_ratio - min_ratio)) < 0.0)
return j;
}
return -1;
},
py::arg("am_gmm"),
py::arg("trans_model"),
py::arg("features"),
py::arg("previous_transition_id"),
py::arg("following_transition_id"),
py::return_value_policy::take_ownership
);

m.def("gmm_interpolate_boundary",
[](const AmDiagGmm &am_gmm,
const TransitionModel &trans_model,
const Matrix<BaseFloat> &features,
const int32 previous_transition_id,
const int32 following_transition_id){

py::gil_scoped_release release;
std::vector<BaseFloat> ratios, normalized_ratios;
BaseFloat previous_phone_log_likelihood, following_phone_log_likelihood;
int32 previous_pdf_id = trans_model.TransitionIdToPdfFast(previous_transition_id);
int32 following_pdf_id = trans_model.TransitionIdToPdfFast(following_transition_id);
BaseFloat min_ratio, max_ratio, ratio, normalized_ratio;
min_ratio = 100000.0;
max_ratio = -10000.0;
for (int32 i = 0; i < features.NumRows(); i++) {
SubVector<BaseFloat> feat_row(features, i);
previous_phone_log_likelihood = am_gmm.LogLikelihood(previous_pdf_id, feat_row);
following_phone_log_likelihood = am_gmm.LogLikelihood(following_pdf_id, feat_row);
ratio = previous_phone_log_likelihood - following_phone_log_likelihood;
ratios.push_back(ratio);
if (ratio > max_ratio)
max_ratio = ratio;
if (ratio < min_ratio)
min_ratio = ratio;

}
int32 boundary_index = -1;
for (int32 j = 0; j < ratios.size(); j++) {
ratio = ratios[j];
normalized_ratio = -1 + (2*(ratio - min_ratio) / (max_ratio - min_ratio));
if (normalized_ratio < 0.0)
boundary_index = j;
normalized_ratios.push_back(normalized_ratio);
}
py::gil_scoped_acquire acquire;
return py::make_tuple(boundary_index, normalized_ratios);
},
py::arg("am_gmm"),
py::arg("trans_model"),
py::arg("features"),
py::arg("previous_transition_id"),
py::arg("following_transition_id"),
py::return_value_policy::take_ownership
);
}
6 changes: 6 additions & 0 deletions extensions/matrix/matrix.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -806,6 +806,9 @@ void pybind_kaldi_vector(py::module& m) {
));

py::class_<SubVector<float>, VectorBase<float>>(m, "FloatSubVector")
.def(py::init<const MatrixBase<float> &, MatrixIndexT>(),
py::arg("matrix"),
py::arg("row"))
.def(py::init([](py::buffer b) {
py::buffer_info info = b.request();
if (info.format != py::format_descriptor<float>::format()) {
Expand Down Expand Up @@ -1242,6 +1245,9 @@ void pybind_kaldi_vector(py::module& m) {
));

py::class_<SubVector<double>, VectorBase<double>>(m, "DoubleSubVector")
.def(py::init<const MatrixBase<double> &, MatrixIndexT>(),
py::arg("matrix"),
py::arg("row"))
.def(py::init([](py::buffer b) {
py::buffer_info info = b.request();
if (info.format != py::format_descriptor<double>::format()) {
Expand Down
2 changes: 1 addition & 1 deletion extensions/util/util.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -710,7 +710,7 @@ void init_util(py::module &_m) {
py::arg("other"))
.def("__repr__",
[](const CtmInterval &a) {
return "<CtmInterval of labeled '" + a.label + "' from " + std::to_string(a.begin) + " to " + std::to_string(a.end) +">";
return "<CtmInterval of labeled '" + a.label +"("+ std::to_string(a.symbol) +")" + "' from " + std::to_string(a.begin) + " to " + std::to_string(a.end) +" confidence="+std::to_string(a.confidence)+">";
})
.def(py::pickle(
[](const CtmInterval &p) { // __getstate__
Expand Down
Loading
Loading