Skip to content

Commit 4183517

Browse files
authored
server : add no-speech threshold parameter and functionality (#2654)
1 parent f466816 commit 4183517

File tree

3 files changed

+15
-3
lines changed

3 files changed

+15
-3
lines changed

examples/server/server.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ struct whisper_params {
6161
float logprob_thold = -1.00f;
6262
float temperature = 0.00f;
6363
float temperature_inc = 0.20f;
64+
float no_speech_thold = 0.6f;
6465

6566
bool debug_mode = false;
6667
bool translate = false;
@@ -137,6 +138,7 @@ void whisper_print_usage(int /*argc*/, char ** argv, const whisper_params & para
137138
fprintf(stderr, " --inference-path PATH, [%-7s] Inference path for all requests\n", sparams.inference_path.c_str());
138139
fprintf(stderr, " --convert, [%-7s] Convert audio to WAV, requires ffmpeg on the server", sparams.ffmpeg_converter ? "true" : "false");
139140
fprintf(stderr, " -sns, --suppress-nst [%-7s] suppress non-speech tokens\n", params.suppress_nst ? "true" : "false");
141+
fprintf(stderr, " -nth N, --no-speech-thold N [%-7.2f] no speech threshold\n", params.no_speech_thold);
140142
fprintf(stderr, "\n");
141143
}
142144

@@ -182,6 +184,8 @@ bool whisper_params_parse(int argc, char ** argv, whisper_params & params, serve
182184
else if (arg == "-ng" || arg == "--no-gpu") { params.use_gpu = false; }
183185
else if (arg == "-fa" || arg == "--flash-attn") { params.flash_attn = true; }
184186
else if (arg == "-sns" || arg == "--suppress-nst") { params.suppress_nst = true; }
187+
else if (arg == "-nth" || arg == "--no-speech-thold") { params.no_speech_thold = std::stof(argv[++i]); }
188+
185189
// server params
186190
else if ( arg == "--port") { sparams.port = std::stoi(argv[++i]); }
187191
else if ( arg == "--host") { sparams.hostname = argv[++i]; }
@@ -790,6 +794,7 @@ int main(int argc, char ** argv) {
790794
wparams.beam_search.beam_size = params.beam_size;
791795

792796
wparams.temperature = params.temperature;
797+
wparams.no_speech_thold = params.no_speech_thold;
793798
wparams.temperature_inc = params.temperature_inc;
794799
wparams.entropy_thold = params.entropy_thold;
795800
wparams.logprob_thold = params.logprob_thold;
@@ -942,7 +947,7 @@ int main(int argc, char ** argv) {
942947

943948
// TODO compression_ratio and no_speech_prob are not implemented yet
944949
// segment["compression_ratio"] = 0;
945-
// segment["no_speech_prob"] = 0;
950+
segment["no_speech_prob"] = whisper_full_get_segment_no_speech_prob(ctx, i);
946951

947952
jres["segments"].push_back(segment);
948953
}

include/whisper.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -665,6 +665,8 @@ extern "C" {
665665

666666
WHISPER_API void whisper_log_set(ggml_log_callback log_callback, void * user_data);
667667

668+
// Get the no_speech probability for the specified segment
669+
WHISPER_API float whisper_full_get_segment_no_speech_prob (struct whisper_context * ctx, int i_segment);
668670
#ifdef __cplusplus
669671
}
670672
#endif

src/whisper.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -428,6 +428,7 @@ struct whisper_segment {
428428
int64_t t1;
429429

430430
std::string text;
431+
float no_speech_prob;
431432

432433
std::vector<whisper_token_data> tokens;
433434

@@ -6147,7 +6148,7 @@ int whisper_full_with_state(
61476148

61486149
//printf("tt0 = %d, tt1 = %d, text = %s, token = %s, token_id = %d, tid = %d\n", tt0, tt1, text.c_str(), ctx->vocab.id_to_token[tokens_cur[i].id].c_str(), tokens_cur[i].id, tokens_cur[i].tid);
61496150

6150-
result_all.push_back({ tt0, tt1, text, {}, speaker_turn_next });
6151+
result_all.push_back({ tt0, tt1, text, state->no_speech_prob, {}, speaker_turn_next });
61516152
for (int j = i0; j <= i; j++) {
61526153
result_all.back().tokens.push_back(tokens_cur[j]);
61536154
}
@@ -6192,7 +6193,7 @@ int whisper_full_with_state(
61926193
}
61936194
}
61946195

6195-
result_all.push_back({ tt0, tt1, text, {} , speaker_turn_next });
6196+
result_all.push_back({ tt0, tt1, text, state->no_speech_prob, {}, speaker_turn_next });
61966197
for (int j = i0; j < (int) tokens_cur.size(); j++) {
61976198
result_all.back().tokens.push_back(tokens_cur[j]);
61986199
}
@@ -6459,6 +6460,10 @@ float whisper_full_get_token_p(struct whisper_context * ctx, int i_segment, int
64596460
return ctx->state->result_all[i_segment].tokens[i_token].p;
64606461
}
64616462

6463+
float whisper_full_get_segment_no_speech_prob(struct whisper_context * ctx, int i_segment) {
6464+
return ctx->state->result_all[i_segment].no_speech_prob;
6465+
}
6466+
64626467
// =================================================================================================
64636468

64646469
//

0 commit comments

Comments
 (0)