@@ -308,14 +308,11 @@ bool DictionaryPredictor::PredictForRequest(const ConversionRequest &request,
308
308
RewriteResultsForPrediction (request, *segments, &results);
309
309
310
310
// Explicitly populate the typing corrected results.
311
- const TypingCorrectionMixingParams typing_correction_mixing_params =
312
- MaybePopulateTypingCorrectedResults (request, *segments, &results);
311
+ MaybePopulateTypingCorrectedResults (request, *segments, &results);
313
312
314
313
MaybeRescoreResults (request, *segments, absl::MakeSpan (results));
315
314
316
- return AddPredictionToCandidates (request, segments,
317
- typing_correction_mixing_params,
318
- absl::MakeSpan (results));
315
+ return AddPredictionToCandidates (request, segments, absl::MakeSpan (results));
319
316
}
320
317
321
318
void DictionaryPredictor::RewriteResultsForPrediction (
@@ -343,42 +340,30 @@ void DictionaryPredictor::RewriteResultsForPrediction(
343
340
}
344
341
}
345
342
346
- TypingCorrectionMixingParams
347
- DictionaryPredictor::MaybePopulateTypingCorrectedResults (
343
+ void DictionaryPredictor::MaybePopulateTypingCorrectedResults (
348
344
const ConversionRequest &request, const Segments &segments,
349
345
std::vector<Result> *results) const {
350
- if (!IsTypingCorrectionEnabled (request)) {
351
- return {};
352
- }
353
-
354
- if (results->empty ()) {
355
- return {};
346
+ if (!IsTypingCorrectionEnabled (request) || results->empty ()) {
347
+ return ;
356
348
}
357
349
358
350
const size_t key_len = Util::CharsLen (segments.conversion_segment (0 ).key ());
359
351
constexpr int kMinTypingCorrectionKeyLen = 3 ;
360
352
if (key_len < kMinTypingCorrectionKeyLen ) {
361
- return {} ;
353
+ return ;
362
354
}
363
355
364
356
std::vector<Result> typing_corrected_results =
365
357
aggregator_->AggregateTypingCorrectedResults (request, segments);
366
358
RewriteResultsForPrediction (request, segments, &typing_corrected_results);
367
359
368
- const TypingCorrectionMixingParams typing_correction_mixing_params =
369
- GetTypingCorrectionMixingParams (request, segments, *results,
370
- typing_corrected_results);
371
-
372
360
for (auto &result : typing_corrected_results) {
373
361
results->emplace_back (std::move (result));
374
362
}
375
-
376
- return typing_correction_mixing_params;
377
363
}
378
364
379
365
bool DictionaryPredictor::AddPredictionToCandidates (
380
366
const ConversionRequest &request, Segments *segments,
381
- const TypingCorrectionMixingParams &typing_correction_mixing_params,
382
367
absl::Span<Result> results) const {
383
368
DCHECK (segments);
384
369
@@ -462,14 +447,8 @@ bool DictionaryPredictor::AddPredictionToCandidates(
462
447
final_results_ptrs.emplace_back (&result);
463
448
}
464
449
465
- const auto ¶ms = request.request ().decoder_experiment_params ();
466
- if (params.typing_correction_result_reranker_mode () > 0 ) {
467
- MaybeRerankAggressiveTypingCorrection (request, *segments,
468
- &final_results_ptrs);
469
- } else {
470
- MaybeSuppressAggressiveTypingCorrection (
471
- request, typing_correction_mixing_params, &final_results_ptrs);
472
- }
450
+ MaybeRerankAggressiveTypingCorrection (request, *segments,
451
+ &final_results_ptrs);
473
452
474
453
// Fill segments from final_results_ptrs.
475
454
for (const Result *result : final_results_ptrs) {
@@ -491,72 +470,15 @@ bool DictionaryPredictor::AddPredictionToCandidates(
491
470
void DictionaryPredictor::MaybeRerankAggressiveTypingCorrection (
492
471
const ConversionRequest &request, const Segments &segments,
493
472
std::vector<absl::Nonnull<const Result *>> *results) const {
494
- const auto ¶ms = request. request (). decoder_experiment_params ();
495
- if (params. typing_correction_result_reranker_mode () == 0 ) return ;
496
-
473
+ if (! IsTypingCorrectionEnabled (request) || results-> empty ()) {
474
+ return ;
475
+ }
497
476
const engine::SupplementalModelInterface *supplemental_model =
498
477
modules_.GetSupplementalModel ();
499
478
if (supplemental_model == nullptr ) return ;
500
-
501
479
supplemental_model->RerankTypingCorrection (request, segments, results);
502
480
}
503
481
504
- // static
505
- void DictionaryPredictor::MaybeSuppressAggressiveTypingCorrection (
506
- const ConversionRequest &request,
507
- const TypingCorrectionMixingParams &typing_correction_mixing_params,
508
- std::vector<absl::Nonnull<const Result *>> *results) {
509
- if (results->empty ()) return ;
510
-
511
- // Top is already literal.
512
- const auto &top_result = results->front ();
513
-
514
- auto is_typing_correction = [&](const Result &result) {
515
- return (
516
- result.types & PredictionType::TYPING_CORRECTION ||
517
- (result.candidate_attributes & Segment::Candidate::TYPING_CORRECTION));
518
- };
519
-
520
- if (!is_typing_correction (*top_result)) {
521
- return ;
522
- }
523
-
524
- const bool force_literal_on_top =
525
- typing_correction_mixing_params.literal_on_top ;
526
- const bool literal_at_least_second =
527
- typing_correction_mixing_params.literal_at_least_second ;
528
-
529
- if (!force_literal_on_top && !literal_at_least_second) {
530
- return ;
531
- }
532
-
533
- auto promote_result = [&results](int old_idx, int new_idx) {
534
- const Result *result = (*results)[old_idx];
535
- for (int i = old_idx; i >= new_idx + 1 ; --i)
536
- (*results)[i] = (*results)[i - 1 ];
537
- (*results)[new_idx] = result;
538
- };
539
-
540
- const int max_size = std::min<int >(10 , results->size ());
541
- for (int i = 1 ; i < max_size; ++i) {
542
- const Result *result = (*results)[i];
543
- // Finds the first non-typing-corrected candidate.
544
- if (is_typing_correction (*result)) {
545
- continue ;
546
- }
547
- // Replace the literal with top when the cost is close enough or
548
- // force_literal_on_top is true.
549
- if (force_literal_on_top) {
550
- promote_result (i, 0 );
551
- } else if (literal_at_least_second && i >= 2 ) {
552
- // Moves the literal to the second position even when
553
- // literal-on-top condition doesn't match.
554
- promote_result (i, 1 );
555
- }
556
- break ;
557
- }
558
- }
559
-
560
482
// static
561
483
void DictionaryPredictor::MaybeApplyPostCorrection (
562
484
const ConversionRequest &request, const engine::Modules &modules,
@@ -1423,29 +1345,6 @@ std::shared_ptr<Result> DictionaryPredictor::MaybeGetPreviousTopResult(
1423
1345
return nullptr ;
1424
1346
}
1425
1347
1426
- // Computes the typing correction mixing params.
1427
- // from the `literal_result` and `typing_corrected_results`
1428
- TypingCorrectionMixingParams
1429
- DictionaryPredictor::GetTypingCorrectionMixingParams (
1430
- const ConversionRequest &request, const Segments &segments,
1431
- absl::Span<const Result> literal_results,
1432
- absl::Span<const Result> typing_corrected_results) const {
1433
- TypingCorrectionMixingParams typing_correction_mixing_params;
1434
-
1435
- const engine::SupplementalModelInterface *supplemental_model =
1436
- modules_.GetSupplementalModel ();
1437
-
1438
- if (supplemental_model) {
1439
- typing_correction_mixing_params.literal_on_top =
1440
- supplemental_model->ShouldRevertTypingCorrection (
1441
- request, segments, literal_results, typing_corrected_results);
1442
- }
1443
-
1444
- typing_correction_mixing_params.literal_at_least_second = true ;
1445
-
1446
- return typing_correction_mixing_params;
1447
- }
1448
-
1449
1348
} // namespace mozc::prediction
1450
1349
1451
1350
#undef MOZC_WORD_LOG_MESSAGE
0 commit comments