T
THINK Watson

Watsonにテープ起こしさせてみた

post_thumb

この記事はCNET Japan ブログの羽山祥樹さんのエントリー「人工知能Watsonにテープ起こしさせてみた」を、許諾を得て転載しています。

元記事はこちら
—-

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とパスワードに置き換えます。 は 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 です。ぜひフォローお願いします。
* * *

 

この記事はCNET Japan ブログの羽山祥樹さんのエントリーを、許諾を得て転載しています。

元記事はこちら

 

IBM Alert Notification
スタッフがすべての重大な IT アラートの通知を受け取ることができます
無料評価版はこちら