| #include "lm/ngram_model.h" |
| #include <pocketsphinx/logmath.h> |
| #include "util/strfuncs.h" |
|
|
| #include "test_macros.h" |
|
|
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <string.h> |
| #include <math.h> |
|
|
| int |
| main(int argc, char *argv[]) |
| { |
| logmath_t *lmath; |
| ngram_model_t *lms[3]; |
| ngram_model_t *lmset; |
| const char *names[] = { "100", "102" }; |
| const char *words[] = { |
| "<UNK>", |
| "ROBOMAN", |
| "libio", |
| "sphinxtrain", |
| "bigbird", |
| "quuxfuzz" |
| }; |
| const int32 n_words = sizeof(words) / sizeof(words[0]); |
| float32 weights[] = { 0.6, 0.4 }; |
|
|
| (void)argc; |
| (void)argv; |
| lmath = logmath_init(1.0001, 0, 0); |
|
|
| lms[0] = ngram_model_read(NULL, LMDIR "/100.lm.dmp", NGRAM_BIN, lmath); |
| lms[1] = ngram_model_read(NULL, LMDIR "/102.lm.dmp", NGRAM_BIN, lmath); |
|
|
| lmset = ngram_model_set_init(NULL, lms, (char **)names, NULL, 2); |
| TEST_ASSERT(lmset); |
| TEST_EQUAL(ngram_model_set_select(lmset, "102"), lms[1]); |
| TEST_EQUAL(ngram_model_set_select(lmset, "100"), lms[0]); |
| TEST_EQUAL(ngram_score(lmset, "sphinxtrain", NULL), |
| logmath_log10_to_log(lmath, -2.7884)); |
| TEST_EQUAL(ngram_score(lmset, "huggins", "david", NULL), |
| logmath_log10_to_log(lmath, -0.0361)); |
| TEST_EQUAL_LOG(ngram_score(lmset, "daines", "huggins", "david", NULL), |
| logmath_log10_to_log(lmath, -0.4105)); |
|
|
| TEST_EQUAL(ngram_model_set_select(lmset, "102"), lms[1]); |
| TEST_EQUAL(ngram_score(lmset, "sphinxtrain", NULL), |
| logmath_log10_to_log(lmath, -2.8192)); |
| TEST_EQUAL(ngram_score(lmset, "huggins", "david", NULL), |
| logmath_log10_to_log(lmath, -0.1597)); |
| TEST_EQUAL_LOG(ngram_score(lmset, "daines", "huggins", "david", NULL), |
| logmath_log10_to_log(lmath, -0.0512)); |
|
|
| |
| TEST_ASSERT(ngram_model_set_interp(lmset, NULL, NULL)); |
| TEST_EQUAL_LOG(ngram_score(lmset, "sphinxtrain", NULL), |
| logmath_log(lmath, |
| 0.5 * pow(10, -2.7884) |
| + 0.5 * pow(10, -2.8192))); |
|
|
| |
| TEST_ASSERT(ngram_model_set_interp(lmset, names, weights)); |
| TEST_EQUAL_LOG(ngram_score(lmset, "sphinxtrain", NULL), |
| logmath_log(lmath, |
| 0.6 * pow(10, -2.7884) |
| + 0.4 * pow(10, -2.8192))); |
|
|
| |
| TEST_EQUAL(ngram_model_set_select(lmset, "102"), lms[1]); |
| TEST_EQUAL(ngram_score(lmset, "sphinxtrain", NULL), |
| logmath_log10_to_log(lmath, -2.8192)); |
| TEST_EQUAL(ngram_score(lmset, "huggins", "david", NULL), |
| logmath_log10_to_log(lmath, -0.1597)); |
| TEST_EQUAL_LOG(ngram_score(lmset, "daines", "huggins", "david", NULL), |
| logmath_log10_to_log(lmath, -0.0512)); |
|
|
| |
| TEST_ASSERT(ngram_model_set_interp(lmset, NULL, NULL)); |
| TEST_EQUAL_LOG(ngram_score(lmset, "sphinxtrain", NULL), |
| logmath_log(lmath, |
| 0.6 * pow(10, -2.7884) |
| + 0.4 * pow(10, -2.8192))); |
|
|
| |
| lms[2] = ngram_model_read(NULL, LMDIR "/turtle.lm", NGRAM_ARPA, lmath); |
| TEST_ASSERT(ngram_model_set_add(lmset, lms[2], "turtle", 1.0, FALSE)); |
| TEST_EQUAL_LOG(ngram_score(lmset, "sphinxtrain", NULL), |
| logmath_log(lmath, |
| 0.6 * (2.0 / 3.0) * pow(10, -2.7884) |
| + 0.4 * (2.0 / 3.0) * pow(10, -2.8192))); |
| ngram_model_free(lmset); |
|
|
| |
| |
| lms[0] = ngram_model_read(NULL, LMDIR "/100.lm.dmp", NGRAM_BIN, lmath); |
| lms[1] = ngram_model_read(NULL, LMDIR "/102.lm.dmp", NGRAM_BIN, lmath); |
| lms[2] = ngram_model_read(NULL, LMDIR "/turtle.lm", NGRAM_ARPA, lmath); |
| lmset = ngram_model_set_init(NULL, lms, (char **)names, NULL, 1); |
| { |
| int32 wid; |
| wid = ngram_wid(lmset, "sphinxtrain"); |
| TEST_ASSERT(ngram_model_set_add(lmset, lms[1], "102", 1.0, TRUE)); |
| |
| TEST_EQUAL(wid, ngram_wid(lmset, "sphinxtrain")); |
| |
| |
| TEST_ASSERT(ngram_model_set_add(lmset, lms[2], "turtle", 1.0, TRUE)); |
| TEST_EQUAL(wid, ngram_wid(lmset, "sphinxtrain")); |
| TEST_EQUAL(ngram_unknown_wid(lmset), ngram_wid(lmset, "FORWARD")); |
| |
| TEST_EQUAL(lms[1], ngram_model_set_remove(lmset, "102", TRUE)); |
| ngram_model_free(lms[1]); |
| TEST_EQUAL(wid, ngram_wid(lmset, "sphinxtrain")); |
| |
| TEST_EQUAL(lms[2], ngram_model_set_remove(lmset, "turtle", TRUE)); |
| TEST_ASSERT(ngram_model_set_add(lmset, lms[2], "turtle", 1.0, FALSE)); |
| printf("FORWARD = %d\n", ngram_wid(lmset, "FORWARD")); |
| } |
|
|
| ngram_model_free(lmset); |
|
|
| |
| lmset = ngram_model_set_read(NULL, LMDIR "/100.lmctl", lmath); |
| TEST_ASSERT(lmset); |
| |
| { |
| ngram_model_set_iter_t *itor; |
| char const *lmname; |
|
|
| itor = ngram_model_set_iter(lmset); |
| TEST_ASSERT(itor); |
| ngram_model_set_iter_model(itor, &lmname); |
| printf("1: %s\n", lmname); |
| itor = ngram_model_set_iter_next(itor); |
| ngram_model_set_iter_model(itor, &lmname); |
| printf("2: %s\n", lmname); |
| itor = ngram_model_set_iter_next(itor); |
| ngram_model_set_iter_model(itor, &lmname); |
| printf("3: %s\n", lmname); |
| itor = ngram_model_set_iter_next(itor); |
| TEST_EQUAL(itor, NULL); |
| } |
|
|
| TEST_EQUAL(ngram_score(lmset, "sphinxtrain", NULL), |
| logmath_log10_to_log(lmath, -2.7884)); |
|
|
| TEST_ASSERT(ngram_model_set_interp(lmset, NULL, NULL)); |
| TEST_EQUAL_LOG(ngram_score(lmset, "sphinxtrain", NULL), |
| logmath_log(lmath, |
| (1.0 / 3.0) * pow(10, -2.7884) |
| + (1.0 / 3.0) * pow(10, -2.8192))); |
|
|
| ngram_model_set_select(lmset, "102"); |
| TEST_EQUAL(ngram_score(lmset, "sphinxtrain", NULL), |
| logmath_log10_to_log(lmath, -2.8192)); |
| TEST_EQUAL(ngram_score(lmset, "huggins", "david", NULL), |
| logmath_log10_to_log(lmath, -0.1597)); |
| TEST_EQUAL_LOG(ngram_score(lmset, "daines", "huggins", "david", NULL), |
| logmath_log10_to_log(lmath, -0.0512)); |
|
|
| ngram_model_set_select(lmset, "100"); |
| TEST_EQUAL(ngram_score(lmset, "sphinxtrain", NULL), |
| logmath_log10_to_log(lmath, -2.7884)); |
| TEST_EQUAL(ngram_score(lmset, "huggins", "david", NULL), |
| logmath_log10_to_log(lmath, -0.0361)); |
| TEST_EQUAL_LOG(ngram_score(lmset, "daines", "huggins", "david", NULL), |
| logmath_log10_to_log(lmath, -0.4105)); |
|
|
| |
| ngram_model_set_select(lmset, "100"); |
| TEST_EQUAL_LOG(ngram_score(lmset, "scylla:scylla", NULL), |
| logmath_log10_to_log(lmath, -2.7884) + logmath_log(lmath, 0.4)); |
| TEST_EQUAL_LOG(ngram_score(lmset, "scooby:scylla", NULL), |
| logmath_log10_to_log(lmath, -2.7884) + logmath_log(lmath, 0.1)); |
| TEST_EQUAL_LOG(ngram_score(lmset, "apparently", "karybdis:scylla", NULL), |
| logmath_log10_to_log(lmath, -0.5172)); |
|
|
| |
| ngram_model_set_select(lmset, "turtle"); |
| TEST_EQUAL(ngram_wid(lmset, "ROBOMAN"), |
| ngram_wid(lmset, ngram_word(lmset, ngram_wid(lmset, "ROBOMAN")))); |
| TEST_EQUAL(ngram_wid(lmset, "bigbird"), |
| ngram_wid(lmset, ngram_word(lmset, ngram_wid(lmset, "bigbird")))); |
| TEST_EQUAL(ngram_wid(lmset, "quuxfuzz"), ngram_unknown_wid(lmset)); |
| TEST_EQUAL(ngram_score(lmset, "quuxfuzz", NULL), ngram_zero(lmset)); |
| ngram_model_set_map_words(lmset, words, n_words); |
| TEST_EQUAL(ngram_wid(lmset, "ROBOMAN"), |
| ngram_wid(lmset, ngram_word(lmset, ngram_wid(lmset, "ROBOMAN")))); |
| TEST_EQUAL(ngram_wid(lmset, "bigbird"), |
| ngram_wid(lmset, ngram_word(lmset, ngram_wid(lmset, "bigbird")))); |
| TEST_EQUAL(ngram_wid(lmset, "quuxfuzz"), 5); |
| TEST_EQUAL(ngram_score(lmset, "quuxfuzz", NULL), ngram_zero(lmset)); |
|
|
| ngram_model_free(lmset); |
| logmath_free(lmath); |
| return 0; |
| } |
|
|