18

私はインテント経由で SpeechRecognizer を使用しています:

Intent i = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
i.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
        RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);

i.putExtra(RecognizerIntent.EXTRA_PROMPT,
        "straight talk please");

i.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 5);
i.putExtra(RecognizerIntent.EXTRA_LANGUAGE, 
            "en-US";

startActivityForResult(i, 0);

そして、次のように onActivityResults() で結果を取得します。

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == 0 && resultCode == RESULT_OK) {

        // List with the results from the Voice Recognition API
        ArrayList<String> results = data
                .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);

        // The confidence array
        float[] confidence = data.getFloatArrayExtra(
                RecognizerIntent.EXTRA_CONFIDENCE_SCORES);

        // The confidence results       
        for (int i = 0; i < confidence.length; i++) {
            Log.v("oAR", "confidence[" + i + "] = " + confidence[i]);
        }
    }

    super.onActivityResult(requestCode, resultCode, data);
}

ただし、float 配列は結果として常に 0.0 を返しますが、最初の要素は次のようになります。

confidence[0] = any value between 0 and 1
confidence[1] = 0.0
confidence[2] = 0.0
and so on

私は、すべての結果が 0 から 1 の間の信頼値を持つことを期待していますEXTRA_CONFIDENCE_SCORES。足りないものはありますか?

さらに はRecognizerIntent.EXTRA_CONFIDENCE_SCORESで使用されることになっていますAPI Level 14++。しかし、8を超えるどのAPIを使用しても、結果は同じままです。その時点でドキュメントは古くなっていますか?

4

3 に答える 3

3

ドキュメントの私の解釈によると:

RecognizerIntent.Extra_Results は文字列の順序付けられたarrayList を返します。それぞれの文字列は、発言内容に関する 1 つの提案であり、インデックス 0 の文字列が Recognizer が最も確信している提案です。

recognirIntent.Extra_Confidence_Scores は、これらの各提案に対応する float の配列を返します。

したがって、取得している結果が正しい場合 (そうでない場合、これはバグである可能性があります)、レコグナイザーには、信頼できる提案が 1 つだけあり、他のいくつかの提案は無視できるか、またはまったく信頼できません。

私は同様の結果を得ています。あなたのように、複数の提案が無視できないほどの自信を持っていた一連の結果はありませんでした。例: 0.7435、0.0、0.0、0.0、......

ただし、すべての結果の信頼性が無視できるような一連の結果が得られることがあります。例: 0.0、0.0、0.0、0.0、0.0、......

したがって、結果の最初の要素は常に、認識エンジンが最も信頼できるものになります。

于 2015-01-27T09:30:01.917 に答える
1

従来の音声認識アルゴリズムでは、信頼度を計算するために他の結果と比較した結果であるため、1-best の結果のみの信頼度を返すことができます。1 ベストだけでなく、N ベストの結果を返すこともできますが、それらの信頼度を計算するのははるかに困難です。

Google は従来のアプローチのみを実装し、n-best 信頼度でより詳細な結果を得るために API の場所を予約しているようです。

Google がすべてを適切に実装するのを待つ必要があります。

于 2015-12-09T17:09:39.650 に答える