お使いのブラウザは最新版ではありません。最新のブラウザでご覧ください。

CNET Japan ブログ

人工知能Watsonにテープ起こしさせてみた

2016/12/19 00:00
  • このエントリーをはてなブックマークに追加

この記事は、IBM Bluemix に関するブログを、12月1日からリレー投稿していく teratail Bluemix Advent Calendar の14日目の記事です。

UXデザイナーの羽山 祥樹(@storywriter)です。最近、ライターとしての仕事も増えてきました。

どちらの仕事でも共通するのが「インタビューのテープ起こし」です。

UXデザインでは、調査でユーザーインタビューした結果を、録音から文字に書き起こして、分析します。

ライターとしては、取材したインタビューを、文字に起こして、原稿にします。

この「テープ起こし」、けっこうな手間がかかります。インタビューした時間が2時間だとすると、書き起こしに10時間かかる、なんてこともザラです。

テープ起こしの専門会社にお願いすることもできますが、1〜2万円ほどの費用がかかります。報酬が潤沢な案件ならよいですが、そうでないと、ちょっとした出費です。(その代わり、品質は良いですよ)

なんとか、テープ起こしを楽にする方法はないものか・・・?

「そうだ、Watson にテープ起こしさせよう!」

ということで、IBM Bluemix で使える人工知能 Watson を使って、インタビューのテープ起こしをしてみました。

以下、じっさいのインタビュー音声データと、そこから生成されたテキスト。実証実験の結果を、すべて公開します。

(ここからは、技術的な話も多くなるので、結論を先に言うと・・・そのまま使える精度にはならないものの、下書きとして使うぶんには、かなり良い感じです。Watson のテキストを見ながら、人がテープ起こしをすると、作業がびっくりするほど楽になりました!)

ステップ1: Bluemix に登録して、音声テキスト化API を使えるようにする

最初のステップは、Bluemix に登録しましょう。Bluemix は IBM のクラウドサービスです。Watson をはじめ、さまざまなサービスが提供されています。

Bluemix は、30日間は無料でトライアルすることができます。

登録はかんたんですが、迷いそうなところは、途中で「地域」を選択する箇所です。Watson の中心的な研究所はアメリカにあるので、僕は「米国南部」を選びました。「組織名」と「スペース名」は、おすすめの名称が出るので、そこから選べばよいです。

登録したら、画面右上の「カタログ」から進みます。Bluemix で使えるいろいろな機能が表示されるので、そこから「Speech To Text」を選びます。

この「Speech To Text」が、Watson の「音声をテキストにする」APIです。

次に進むと、「サービス名」「資格情報名」の入力欄がありますが、これも初期値のままでいいでしょう。

入力が完了したら、「Speech To Text」のトップページがでてきます。

さっそく、自分の「Speech To Text」にアクセスするためのIDとパスワードを確認しましょう。「サービス資格情報」を開いて、「資格情報を表示」をクリックすると、APIのURL、アクセスするためのID、パスワードが掲載された JSON が表示されます。手元にメモしておきましょう。あとで使います。

これで、Bluemix の環境は整いました。

ステップ 2: cURLを用意する

Watson の開発では、API の動作検証や、トレーニングデータのアップロードなどに、cURL をよく使います。cURL は、コマンドラインで使える URL送受信ツールです。

今回も、音声ファイルを Watson Speech To Text API に送信するのに cURL を使います。

cURL は、Mac であれば、最初から入っています。Windows の場合は、自分でインストールする必要があります。(Windows でのインストール方法は、この記事では割愛します。「curl インストール windows」などで Google 検索すると、手順が紹介されています)

cURLが準備できれば、Watson Speech To Text API を使う用意ができました。

ステップ 3: Watson Speech To Text API を使ってみる

Watson Speech To Text API のチュートリアルを参考に、テスト音声ファイル(audio-file.flac)をダウンロードします。.flac というのは、ロスレスタイプの音声データの拡張子です。ダウンロードしたら、任意のフォルダに置きます。

そして、ターミナル(Windows なら DOSプロンプト)を立ち上げます。

次のコマンドを入力します。

改行は削除して、一行で入力してください。<username>:<password> は、ステップ1で入手した「Speech To Text」にアクセスするためのIDとパスワードに置き換えます。<path> は audio-file.flac を配置したフォルダまでのパスに差し替えます。

curl -X POST -u <username>:<password>
--header "Content-Type: audio/flac"
--header "Transfer-Encoding: chunked"
--data-binary @<path>audio-file.flac
"https://stream.watsonplatform.net/speech-to-text/api/v1/recognize?continuous=true"

すると、次のようなデータが返ってきます。

{
   "results": [
      {
         "alternatives": [
            {
               "confidence": 0.891,
               "transcript": "several tornadoes touch down as a line of severe thunderstorms swept through Colorado on Sunday "
            }
         ],
         "final": true
      }
   ],
   "result_index": 0
}

すてき! audio-file.flac の音声が、Watson によって認識され、テキスト化された内容が JSON 形式で返ってきました。transcript の中身が、そのテキストです。

Watson Speech To Text API を使うと、このように、かんたんな手続きで、音声をテキスト化することができます。

日本語を認識させる場合は、URLに、次のように「/models/ja-JP_BroadbandModel/」を追加します。

"https://stream.watsonplatform.net/speech-to-text/api/v1/models/ja-JP_BroadbandModel/recognize?continuous=true"

ためしに、日本語の音声ファイルを送信してみましょう。テストファイルを GitHub にアップロードしておきました。僕の声で「ただいまワトソンのテスト中。ただいまワトソンのテスト中。本日は晴天なり。本日は晴天なり」と吹き込んであります。

audio-file-ja.flac 日本語テストファイル(羽山の音声)

curl -X POST -u <username>:<password>
--header "Content-Type: audio/flac"
--header "Transfer-Encoding: chunked"
--data-binary @<path>audio-file-ja.flac
"https://stream.watsonplatform.net/speech-to-text/api/v1/models/ja-JP_BroadbandModel/recognize?continuous=true"

次のようなデータが返ってきました。

{
   "results": [
      {
         "alternatives": [
            {
               "confidence": 0.73,
               "transcript": "ただいま ワトソン の テスト 中 長芋 と その テスト 中 の 日 は 晴天 なり の 日 は 晴天 なり "
            }
         ],
         "final": true
      }
   ],
   "result_index": 0
}

あらら・・・僕の滑舌が悪いところが、「長芋」と誤認識されてしまっています。試してみるとわかりますが、 Watson の音声認識は、まだまだ発展途上です。

ステップ 4: Watson にテープ起こしをさせてみる

それでは、いよいよ、じっさいにテープ起こしをしてみましょう。

Watson Speech To Text API には、1回に送信できるファイル容量に制限があり、.flac ファイルの場合は、上限が 100MB となっています。(インプットデータの詳細は Transcribing audio: Input features and parameters に掲載されています)

僕の手元の ICレコーダーは、.mp3 で保存するタイプなのですが、.mp3 を .flac へ変換すると、およそ5倍のファイルサイズになります。100MB だと、録音時間にして、だいたい20分くらいが限度になります。インタビューの録音に使うには、やや足りないですね。

それ以上に長い録音の場合は、Watson の制限に収まるように、ファイルを分割する必要があります。僕は AudioSlicer というフリーソフトを使って、あらかじめ .mp3 を適当な大きさに分割しています。

続いて、.mp3 を .flac へ変換しなければなりません。Watson Speech To Text API で受け付けてくれるデータ形式はいくつかありますが、残念ながら .mp3 は未対応です。僕は X Lossless Decoder というフリーソフトで変換しています。

これで、準備は完了です。

この記事のために、テスト音声データとして、じっさいに、5分ほどの短いインタビューを用意しました。ご協力いただいたのは、絵画講師のはやしすみこさん。はやしさんは、個人指導にこだわった絵画教室をされています。インタビューは静かな室内で行いました。

interview-ja.flac インタビューファイル 3分50秒(はやしすみこさんインタビュー)

これを、cURL で Watson に送ります。前回と異なるのは、cURL の -o オプションをつけて、レスポンスをファイルに保存するようにしました。

curl -v -X POST -u <username>:<password>
--header "Content-Type: audio/flac"
--header "Transfer-Encoding: chunked"
--data-binary @<path>interview-ja.flac
"https://stream.watsonplatform.net/speech-to-text/api/v1/models/ja-JP_BroadbandModel/recognize?continuous=true"
-o "interview-ja.json"

変換には、数分間がかかります。気長に待ちましょう。

(ここで、たまに困ったことが・・・。同じデータ、同じコマンドなのに、成功するときと、「curl: (56) SSLRead() return error -9806」というエラーになってしまうことがあるのです。最初の audio-file.flac のような、短いデータではこの現象は起こりません。いろいろ調べてみたのですが、けっきょく未解決です。うまくいかないときは、何度かリトライしてみてください)

成功すると次のようなデータが返ってきます。

{
"results": [
{
   "alternatives": [
      {
         "confidence": 0.574,
         "transcript": "ええ 話 純子 さん よろしく お願いします よろしく お願い します "
      }
   ],
   "final": true
},
{
   "alternatives": [
      {
         "confidence": 0.873,
         "transcript": "D_エ 排水口 さん は マンツーマン の 絵画 教室 されて いらっしゃる 競争 こだわり に ついて お伺い したい と 思います はい "
      }
   ],
   "final": true
},

(中略:全データは GitHub にアップしてあります)

この JSON から、テキスト部分だけを抽出したのが、以下です。

ええ 話 純子 さん よろしく お願いします よろしく お願い します
D_エ 排水口 さん は マンツーマン の 絵画 教室 されて いらっしゃる 競争 こだわり に ついて お伺い したい と 思います はい
D_エー それでは ですね 早速 なんです けれども
科学 教室 同行 人 が たくさん 集まって て イメージ ん です が 何故 林 さん は 一対一 に こだわった 絵画 教室 を されて いる の ですか 

(中略:全データは GitHub にアップしてあります)

なんとなく、会話の雰囲気はわかりますね。ただ、残念ながら、このままテープ起こしの原稿として使うには、認識の精度が低いようです。また、単語が半角スペースで区切られているので、その意味でも、ちょっと原稿としては使いづらいです。

ただ、これだけのテキストが自動生成されていれば、人手でテープ起こしをするガイドにはなりそうです。その作業はずいぶん楽になりそうです。

ちなみに、Watson は、明らかに相槌と思われる「エー」というような箇所には「D_」というプレフィックスをつけてくれます。

Watson のテキストをもとに、じっさいに書き起こしてみました。

はやしすみこさん、よろしくお願いします。

よろしくお願いします。

はやしすみこさんはマンツーマンの絵画教室をされていらっしゃるということで、そのこだわりについてお伺いしたいと思います。

はい。

それではですね、早速なんですけれども、絵画教室というと、人がたくさん集まって、というイメージがあるんですが、なぜ、はやしさんは、一対一にこだわった絵画教室をされているのですか。

(中略:全データは GitHub にアップしてあります)

びっくりするほど、テープ起こしが楽でした! ガイドになるテキストが自動生成されているだけで、これほど違うとは。驚きました。

思うほどに手直しする必要がなく、データ原稿(じっさいに原稿を書く手前の、素材になる原稿)に加工する材料のレベルとしては、充分と感じました。

結論: Watson Speech To Text API のテープ起こしは、思った以上に使える

結論としては、そのまま原稿として使える精度にはならないものの、下書きとして使うぶんには、かなり良い感じです。Watson のテキストを見ながら、人がテープ起こしをすると、作業がびっくりするほど楽になります。

「Speech To Text」の価格は、毎月最初の1000分間の利用は無料、その後は1分につき0.02$、日本円にして約2円です。つまり、120分のテープ起こしの自動生成が、240円でできてしまうことになります。専門会社に依頼するのに比べ、1/60くらいの費用で済んでしまいます。

しかも、それほど複雑なプログラムを書く必要はありません。音声データを cURL で Watson に投げるだけです。

Watson Speech To Text API。なかなか衝撃的なサービスです。

UXデザイナーやライターのテープ起こしにも、人工知能が活用できそうです。

(備考:この記事では、イメージしやすいよう「人工知能」と書きましたが、IBM自身は Watson を「人工知能」とは呼んでいません。彼らは Watson を「コグニティブ・コンピューティング」、日本語に訳すなら「認知的なコンピューター」と呼んでいます)

* * *

羽山 祥樹のtwitterアカウントは @storywriter です。ぜひフォローお願いします。

* * *

この記事は、IBM Bluemix に関するブログを、12月1日からリレー投稿していく teratail Bluemix Advent Calendar の14日目の記事です。15日目は@h-takeoさんです。

※このエントリは CNET Japan ブロガーにより投稿されたものです。朝日インタラクティブ および CNET Japan 編集部の見解・意向を示すものではありません。
運営事務局に問題を報告

最新ブログエントリー

個人情報保護方針
利用規約
訂正
広告について
運営会社