ホームページ  >  記事  >  テクノロジー周辺機器  >  Node.js を使用して音声をテキストに変換する方法

Node.js を使用して音声をテキストに変換する方法

WBOY
WBOY転載
2023-04-11 19:30:271853ブラウズ

翻訳者|Li Rui

レビュアー|Sun Shujuan

この記事では、音声認識テクノロジーとその一般的なアプリケーションの概要を説明し、無料の音声テキスト変換 API を紹介します。 MP3 および WAV ファイル形式でオーディオを転写するために使用できます。このデモには、「Node.js コードの実行」サンプルを使用してこの API を呼び出すための段階的な手順が含まれています。

Node.js を使用して音声をテキストに変換する方法

音声認識テクノロジーの概要

音声認識テクノロジーは、現代のテクノロジー環境に比較的新しく追加されたものだとよく考えられていますが、それはほんの一部にすぎません。真実です。音声認識テクノロジーは、1950 年代初頭に少数の先駆的企業によって開発された、機能が限定された番号/テキスト認識システムから始まり、半世紀以上にわたって存在しています。音声認識テクノロジーには長い歴史があり、過去 10 年間にわたって消費者向けのスマート デバイスで広く使用されてきましたが、今日の市場では依然として、より抽象的なテクノロジーの 1 つです。これは、さまざまな音声認識技術がコンピューター サイエンス、計算言語学、数学/統計などの分野にまたがっており、正確な音声テキスト変換結果を得るには各分野からの大量の入力が必要になるためです。

(非常に) 高いレベルで言えば、音声認識テクノロジが最も基本的なタスクを実行するには、まず特定のオーディオ ファイルを前処理して品質を最適化する必要があります。次に、これはより小さなコンポーネント信号に分割され、並べ替えられます。これらの並べ替えられた信号は、数学的モデルが特定の音素 (単語を作成するために組み合わされる言語固有の音、「eeee」や「ahah」ノイズなど) と照合できるほど十分に小さくなければなりません。これは、そのフレーズや文との照合に役立ちます。言語を比較します。最終的に、音声認識サービスの目標はシンプルです。録音された音声で使用されている単語をできるだけ正確に推測し、その推測が許容可能なレベルの精度に達するまで言語データベースを継続的に改善および拡張することです。

この複雑で本質的に限られた情報推測システムにより、最も基本的な音声認識サービスさえも、音声​​品質と同様に言語や方言に依存することになります。言語、アクセント、語彙のバリエーション、および背景ノイズの存在はすべて、単一の音声テキスト変換モデルでは克服するのが難しい境界を作成します。さらに、この複雑さは、音声認識サービスが非常にリソースを大量に消費し、音声比較のために大規模かつ増大する参照データ セットに依存しており、これらのデータ セットを効果的に利用するにはかなりのコンピューティング能力を必要とするという基本的な事実を反映しています。これらの要因が重なると、新しい音声テキスト変換モデルのトレーニングが困難な作業になります。

音声認識のアプリケーション

音声認識は、大規模なテクノロジー市場、特にほぼ無限のクラウド コンピューティング データ ストレージにおけるいくつかのユビキタスなイノベーションによるところが大きいです。ソリューションの成長に伴い、音声認識は次のようなものになりました。効率的で便利な消費者向けサービスが、人々の日常生活で認知されるようになりました。人々は、携帯電話、固定電話、オフィス デバイスを使用して直接通信したり会話を行ったりして、必要な情報を自動的にクエリしたり、後で使用するために自分の考えを記録して整理したり、テキスト メッセージの読み上げを聞いたりすることができます。

現時点では、コンシューマ アプリケーションは音声認識テクノロジ アプリケーションの氷山の一角にすぎません。音声認識の相互に関連する多くのプロセスの進歩により、音声転写出力を拡張する機会が生まれ、音声からテキストへの変換のための商用アプリケーションの増加が促進されます。人々の周りにはそのような例がたくさんあります。現在、多くの仮想会議プラットフォームは音声認識サービスを使用してチームのプレゼンテーションを書き起こし (多くの場合はリアルタイムで)、結果のテキストは会議に欠席した可能性のある人のために便利に保存できます。チャットボットは音声認識を使用して人々が携帯電話で選択できるようにし、これらの会話から書き起こされた音声は、将来のより良い顧客サービス慣行を知らせるために、別のことに使用できます。人々が参加する講義、インタビュー、プレゼンテーション、その他の講演活動は、個人用デバイスを介して記録および文字起こしすることができるため、手動でメモを書き写す手間が省けます。たとえば、これらの文字起こしを自然言語処理 (NLP) モデルを通じて処理して、文字起こしされたテキストからこれまで見たことのない (または聞いたことのない) 洞察を見つけることができます。

便利なコンテンツ モデレーションと SEO 機能が、今回はエンタープライズ データ ストレージ環境で使用される、スケーラブルな音声テキスト変換分析サービスからも利用できることは言及する価値があります。ほとんどのクライアントがアップロードしたコンテンツの信頼性が低いことを考慮すると、Web サイトにアップロードされた音声ファイルを自動的に文字起こしすることで、親音声ファイルの言語を簡単に調整して、すべてのリスナーにとって安全であることを確認できます (例: 非常に物議を醸す言葉、ヘイトスピーチ、個人またはグループに対するあらゆる形態の嫌がらせ)。これにより、コンテンツレビュー担当者の作業負荷が大幅に軽減され、効率が向上します。これらの同じ文字起こしファイルを使用して有用なキーワードを生成することもできるため、大規模なデータベースからの音声ファイルの検索や取得が容易になります。

デモ: CloudMersive Speech to Text API

音声認識をサービスとして活用する 1 つの方法は、Cloudmersive Speech to Text API を組み込むことです。 API は現在 MP3 または WAV 形式をサポートしており、深層学習人工知能モデルを使用して高精度の音声転写を提供します。その API パラメーターは非常にシンプルで、音声ファイルと Cloudmersive API キーのみが必要です (API キーは、Web サイトで無料アカウントにサインアップすることで取得でき、月あたり最大 800 件の API 呼び出しが生成されます)。以下は、補完的な Node.js コード スニペットを使用して API 呼び出しを構築する方法を示しています。

最初のステップは、Node.js SDK をインストールすることです。これは、次のコマンドを実行することで実行できます:

<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">npm</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">install</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">cloudmersive</span><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">-</span><span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">speech</span><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">-</span><span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">api</span><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">-</span><span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">client</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">--</span><span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">save</span>

あるいは、次のスニペットをパッケージに追加することもできます。

<span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">"dependencies"</span>: {<br><span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">"cloudmersive-speech-client"</span>: <span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">"^1.1.5"</span><br>}

インストールが完了したら、次のコード ブロックを使用して API 呼び出しを構築できます。この時点で、次のパラメータが準備されていることを確認する必要があります:

(1) MP3 または WAV オーディオ ファイル。

(2)CloudMersive API キー。

<span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">var</span> <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">CloudmersiveSpeechApiClient</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">require</span>(<span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">'cloudmersive-speech-api-client'</span>);<br><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">var</span> <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">defaultClient</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">CloudmersiveSpeechApiClient</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">ApiClient</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">instance</span>;<br><span style="color: rgb(106, 115, 125); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">// Configure API key authorization: Apikey</span><br><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">var</span> <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">Apikey</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">defaultClient</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">authentications</span>[<span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">'Apikey'</span>];<br><span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">Apikey</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">apiKey</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">'YOUR API KEY'</span>;<br><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">var</span> <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">apiInstance</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">new</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">CloudmersiveSpeechApiClient</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">RecognizeApi</span>();<br><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">var</span> <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">speechFile</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">Buffer</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">from</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">fs</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">readFileSync</span>(<span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">"C:\temp\inputfile"</span>).<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">buffer</span>); <span style="color: rgb(106, 115, 125); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">// File | Speech file to perform the operation on.Common file formats such as WAV, MP3 are supported.</span><br><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">var</span> <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">callback</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">function</span>(<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">error</span>, <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">data</span>, <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">response</span>) {<br><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">if</span> (<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">error</span>) {<br><span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">console</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">error</span>(<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">error</span>);<br>} <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">else</span> {<br><span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">console</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">log</span>(<span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">'API called successfully. Returned data: '</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">+</span> <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">data</span>);<br>}<br>};<br><span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">apiInstance</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">recognizeFile</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">speechFile</span>, <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">callback</span>);

これで、コード スニペットを追加することなく API の構築が完了しました。 API 呼び出しが成功すると、API 転写結果を含む Textresult 文字列が返されます。入力ファイルの音声品質は、正確な文字起こしを作成する API の機能に大きな影響を与えることに留意することが重要です。そのため、この操作を実装する前に、可能な限り音声品質を前処理して最適化することをお勧めします。

元のタイトル: How to Leverage Speech-to-Text With Node.js 、著者: Brianオニール

以上がNode.js を使用して音声をテキストに変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は51cto.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。