51 #include "lm3g_model.h"
75 float32 lw, float32 wip, float32 uw)
77 int32 log_wip, log_uw, log_uniform_weight;
85 for (i = 0; i < base->
n_counts[0]; ++i) {
86 int32 prob1, bo_wt, n_used;
89 bo_wt = (int32)(lm3g->unigrams[i].
bo_wt1.l / base->
lw);
94 lm3g->unigrams[i].
bo_wt1.l = (int32)(bo_wt * lw);
95 if (strcmp(base->
word_str[i],
"<s>") == 0) {
97 lm3g->unigrams[i].
prob1.l = (int32)(prob1 * lw) + log_wip;
104 lm3g->unigrams[i].
prob1.l = (int32)(prob1 * lw) + log_wip;
108 for (i = 0; i < lm3g->
n_prob2; ++i) {
112 lm3g->
prob2[i].l = (int32)(prob2 * lw) + log_wip;
116 for (i = 0; i < lm3g->
n_bo_wt2; ++i) {
119 for (i = 0; i < lm3g->
n_prob3; i++) {
123 lm3g->
prob3[i].l = (int32)(prob3 * lw) + log_wip;
141 assert(!NGRAM_IS_CLASSWID(wid));
146 memset(lm3g->unigrams + base->
n_counts[0], 0,
161 lm3g->unigrams[wid].
prob1.l = score;
164 lm3g->unigrams[wid].
bo_wt1.l = 0;
165 lm3g->unigrams[wid].
bigrams = 0;
184 l->list[0].
val.l = INT_MIN;
185 l->list[0].
lower = 0;
203 for (i = 0; i < l->
free; i++)
204 vals[i] = l->list[i].
val;
214 if (*val == l->list[i].
val.l)
216 if (*val < l->list[i].val.l) {
217 if (l->list[i].
lower == 0) {
218 if (l->
free >= MAX_SORTED_ENTRIES) {
220 E_WARN(
"sorted list overflow (%d => %d)\n",
221 *val, l->list[i].
val.l);
227 i = l->list[i].
lower;
228 l->list[i].
val.l = *val;
232 i = l->list[i].
lower;
235 if (l->list[i].
higher == 0) {
236 if (l->
free >= MAX_SORTED_ENTRIES) {
238 E_WARN(
"sorted list overflow (%d => %d)\n",
239 *val, l->list[i].
val);
246 l->list[i].
val.l = *val;