「文字起こし」と「音声認識」の違い







音声アシスタントは現在すべてを行っています。 これらは電話、ヘッドフォン、スタンドアロンスピーカーに組み込まれ、テクニカルサポートに電話するときに私たちと通信しようとし、音声メニューの「1を押してオペレーターに連絡する」を置き換えます。 私たちの「テレフォニーのためのレゴ」Voximplantは長年にわたって音声認識のさまざまなオプションを提供してきましたが、カットの下でいくつかのJavaScript行を使用して主なオプションを表示します。



ストリーミング認識



発想は、音声がリアルタイムでGoogle Speech APIなどのサービスに送信され、「音声認識を試行」し、可能な限り認識された単語、フレーズ、文を返すというものです。 このサービスの主な難点は、音の流れが完全な単語またはフレーズであり、長い単語の始まりではないことを理解することです。 Voximplantでは、数行のコードでストリーミング認識を試すことができます。



require(Modules.ASR);
VoxEngine.addEventListener(AppEvents.CallAlerting, (e) => {
const call = e.call;
call.answer();
call.addEventListener(CallEvents.Connected, () => {
const asr = VoxEngine.createASR({lang: ASRLanguage.RUSSIAN_RU});
asr.addEventListener(ASREvents.Result, (e) => {
Logger.write(`result; confidence: ${e.confidence}; text: ${e.text}`);
});
call.sendMediaTo(asr);
});
});
view raw test.js hosted with ❤ by GitHub


「接続チェック1、2、3」とすばやく言うと、1つのイベントが発生します。



2017-11-25 10:57:20 result; confidence: 96; text: 123
view raw log.txt hosted with ❤ by GitHub


単語に従ってフレーズを「ミント」すると、結果はまったく異なります。



2017-11-25 10:59:35 result; confidence: 92; text:
2017-11-25 10:59:37 result; confidence: 49; text:
2017-11-25 10:59:39 result; confidence: 89; text:
2017-11-25 10:59:40 result; confidence: 46; text: 2
2017-11-25 10:59:42 result; confidence: 41; text: 3
view raw log.txt hosted with ❤ by GitHub


ご覧のように、自信は同じではなく、数字の一部が単語になり、テキストの一部になり、突然「クレイジー」が現れました。 実際には、人と機械の間の「通信」の各シナリオは徹底的にテストおよびデバッグされます。「予想される」単語の辞書がASRモジュールに送られ、認識される可能性が高まり、同義語検索、あいまい一致、一時停止の待機などの宿題がJSコードに追加されます「バックグラウンドノイズと発信者が受話器に大きな息を吸っているため、2分間、何も認識されなかった」と「クリージムがすぐに認識された」のバランスを維持します。



ストリーミング認識は、従来の音声メニューの代わりとしてうまく機能します。 複雑なサービスの場合は、「オペレーターとつなぐ」または「配信するもの」は「1つをクリックしてさらに9つのメニュー項目を聞く」よりはるかに便利です。



しかし、音声メニューのほかに、他の便利なものがあります。 たとえば、1か月間のオペレーターのすべての会話を認識するには、興味深い結論を分析して引​​き出します。 ビッグデータは驚異的に機能し、80%の認識品質でさえ、コンタクトセンターの最適なオペレーターを簡単に見つけたり、オペレーターに特定の質問に対する「典型的な」回答を促したりすることができます。 そのような使用では、認識の質が重要であり、その速度は重要ではありません。 このような認識は、伝統的にイングリッシュ主義で「転写」と呼ばれます-会話の終了後のゆったりと最高品質の認識。



JSONマークアップを使用した文字起こし



JSコードの同じ数行で行われますが、微妙な違いがあります。 会話は会話の終了後に行われるため、結果のJSONファイルにURLをすぐに送信するのは少し怖いです。会話の終了直後にリクエストを行うと、空のファイルを取得できます。 したがって、APIの動作は異なります。各JSセッションには識別子があり、そこからこのセッションのすべての「アーティファクト」のリストを取得できます。ログ、記録されたオーディオストリーム、認識されたオーディオストリームです。 識別子は、呼び出し中にバックエンドに送信できます。または、同じHTTP APIを使用して、時間、カスタムデータ、またはその他のパラメーターで必要な呼び出しを見つけることができます。 トランスクリプションの有効化は次のようになります。



require(Modules.ASR);
VoxEngine.addEventListener(AppEvents.Started, (e) => {
Logger.write(`JS session ID: ${e.sessionId}`);
});
VoxEngine.addEventListener(AppEvents.CallAlerting, (e) => {
const call = e.call;
call.answer();
call.addEventListener(CallEvents.Connected, () => {
call.record({transcribe: true, format: 'json', language: ASRLanguage.RUSSIAN_RU});
});
});
view raw scenario.js hosted with ❤ by GitHub


形式に注意してください-「json」に設定すると、出力はマークアップされたテキストになり、各単語(または幸運ではない場合-フレーズ)について、どの記録間隔でこれが言われたかが示されます。 ログ検索インターフェースの製造に便利で、その後に必要なフラグメントを再生できます。 同時に、言葉をどのように「コイニング」したとしても、転写は適切な結果をもたらします。



{"":[
{"start_time":2070000000,"end_time":3470000000,"word":""},
{"start_time":3470000000,"end_time":4670000000,"word":""},
{"start_time":4670000000,"end_time":7770000000,"word":"123"}
]}
view raw log.json hosted with ❤ by GitHub



All Articles