Skip to content

Commit

Permalink
Merge pull request #193 from shiguredo/feature/add-confidence-filter
Browse files Browse the repository at this point in the history
クライアントに返す結果の評価に Confidence, StartTime, EndTime を使用できる仕組みを追加する
  • Loading branch information
Hexa authored Dec 17, 2024
2 parents 806a6bb + 32954d2 commit f70b28f
Show file tree
Hide file tree
Showing 4 changed files with 73 additions and 3 deletions.
9 changes: 9 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,15 @@

## develop

- [ADD] 採用する結果の信頼スコアの最小値を指定する minimum_confidence_score を追加する
- Amazon Transcribe のみ有効
- デフォルト値: 0(信頼スコアを無視する)
- @Hexa
- [ADD] 採用する結果の最小発話期間(秒)を指定する minimum_transcribed_time を追加する
- Amazon Transcribe のみ有効
- デフォルト値: 0(最小発話期間を無視する)
- @Hexa

### misc

- [CHANGE] GitHub Actions の ubuntu-latest を ubuntu-24.04 に変更する
Expand Down
58 changes: 55 additions & 3 deletions amazon_transcribe_handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -152,11 +152,13 @@ func (h *AmazonTranscribeHandler) Handle(ctx context.Context, opusCh chan opusCh
if at.Config.AwsResultID {
result.WithResultID(*res.ResultId)
}

for _, alt := range res.Alternatives {
var message string
if alt.Transcript != nil {
message = *alt.Transcript
message, ok := buildMessage(at.Config, *alt, *res.IsPartial)
if !ok {
continue
}

result.SetMessage(message)
if err := encoder.Encode(result); err != nil {
w.CloseWithError(err)
Expand Down Expand Up @@ -195,3 +197,53 @@ func (h *AmazonTranscribeHandler) Handle(ctx context.Context, opusCh chan opusCh

return r, nil
}

func buildMessage(config Config, alt transcribestreamingservice.Alternative, isPartial bool) (string, bool) {
minimumConfidenceScore := config.MinimumConfidenceScore
minimumTranscribedTime := config.MinimumTranscribedTime

var message string
if minimumConfidenceScore > 0 {
if isPartial {
// IsPartial: true の場合は Transcript をそのまま使用する
if alt.Transcript != nil {
message = *alt.Transcript
}
} else {
items := alt.Items

for _, item := range items {
if item.Confidence != nil {
if *item.Confidence < minimumConfidenceScore {
// 信頼スコアが低い場合は次へ
continue
}
}

if (item.StartTime != nil) && (item.EndTime != nil) {
if (*item.EndTime - *item.StartTime) > 0 {
if (*item.EndTime - *item.StartTime) < minimumTranscribedTime {
// 発話時間が短い場合は次へ
continue
}
}
}

message += *item.Content
}
}
} else {
// minimumConfidenceScore が設定されていない(0)場合は Transcript をそのまま使用する
if alt.Transcript != nil {
message = *alt.Transcript
}
}

// メッセージが空の場合は次へ
if message == "" {
return message, false
}

return message, true

}
3 changes: 3 additions & 0 deletions config.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,9 @@ type Config struct {
// aws の場合は IsPartial が false, gcp の場合は IsFinal が true の場合にのみ結果を返す指定
FinalResultOnly bool `ini:"final_result_only"`

MinimumConfidenceScore float64 `ini:"minimum_confidence_score"`
MinimumTranscribedTime float64 `ini:"minimum_transcribed_time"`

// Amazon Web Services
AwsCredentialFile string `ini:"aws_credential_file"`
AwsProfile string `ini:"aws_profile"`
Expand Down
6 changes: 6 additions & 0 deletions config_example.ini
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,12 @@ retry_interval_ms = 100
# aws の場合は IsPartial が false, gcp の場合は IsFinal が true の場合の最終的な結果のみを返す指定
final_result_only = true

# 採用する結果の信頼スコアの最小値です(aws 指定時のみ有効)
# minimum_confidence_score = 0.0

# 採用する結果の最小発話期間(秒)です(aws 指定時のみ有効)
# minimum_transcribed_time = 0.0

# [aws]
aws_region = ap-northeast-1
# Partial-result stabilization の有効化です
Expand Down

0 comments on commit f70b28f

Please sign in to comment.