【続】Watson Speech to Text を使ってPepper同士は会話できるのか? 〜フリースタイルラップバトルへの挑戦

  • 14
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

※本記事はこちらの記事の続編記事です。

はじめに

みなさんは、「MCバトル」「フリースタイルバトル」などと呼ばれる、ラップバトルはご覧になった事はあるでしょうか?MC、つまりラッパー同士が即興で歌詞を作成し、そのスキルを競うものです。ただ即興で作るだけでなく、きちんと韻を踏みつつ、相手の言われた事にもきちんと返す内容でなければなりません。
個人的な話になりますが、筆者は日本語HIPHOPアーティストのファンであったり、最近ではTVやYouTube等で様々なMCの方々によるフリースタイルバトルを見ており、いつも見る度にMCの方々のスキルに圧倒されています。
今回、そんなMCの方々へのリスペクトも込めつつ、先行記事である"Watson Speech to Text を使ってPepper同士は会話できるのか? 〜シンプルな伝言からラップバトルへの挑戦まで " にて解説した内容をベースとし、ロボット達にフリースタイルバトルをさせる試みを行い、プロトタイプを作成しました。本記事では、そのプロトタイプの技術構成について簡単に紹介します。

できたもの

Pepper達のバトルスキル自体はまだまだいまいちですが、ただラップし合うだけでなく、相手の言った事を拾って何かしら返している事が分かります。
https://youtu.be/0jHLu5-dFU8

Choregrapheプロジェクトは以下に置きました。
https://github.com/yukanm/pepperRapProto

技術構成

基本的な構成は先行記事と同様ですが、音声認識をしてテキストを受け取り、加工する所で少し工夫をしました。

・WatsonのSpeech to Textからレスポンスが返ってくるまでの前半部分は、事前に作っておいたリリックを読むだけ(ChoregrapheのDialogボックスを使用)
・特定のキーワードを認識したら、アンサーとなるリリックを置換・成形して、後半のリリックとする(ChoregrapheのPythonボックスにて実装)

リリック生成の手法

そのままPepperに発話させるだけでは、ただの棒読みに近いので、言葉によってスピードを調節する事で、フロウを作り出します。韻を踏む単語のスピードは80%に、言葉数の多い所は150%などかなり早口になるように調整しています。
※ 一部誤字・変換ミスと思われる表記がありますが、Pepperの発話調整のためにわざと違う漢字をあてています。

1号の最初のリリック
u:(e:onStart) \vct=135\ \rspd=110\ ペッパあぁが繰り出す\pau=0\このやばい\rspd=70\ライむ。
\rspd=110\これいまだにプろと\rspd=70\タイプ。
\rspd=170\しかし\pau=0\もはや\rspd=110\ある意味\rspd=140\勘\rspd=70\製品?
\rspd=110\見た事のない\rspd=130\バトルを\rspd=120\ここに\rspd=70\解禁。。
\rspd=110\接客\rspd=150\ローボッ\pau=100\\rspd=110\受付\rspd=165\ローボッ
\rspd=110\そんなん\rspd=180\だけじゃない\rspd=110\ロボが\rspd=80\登場?
\rspd=140\さあ、\pau=500\君にも\rspd=80\出切るかナッ、\rspd=170\それトも\rspd=150\ただの\pau=0\きゅーあーる、\pau=0\コード、\pau=0\\rspd=80\リーだあ!!!

Pythonボックスの中で「特定の単語」と「返すリリック」のdictionaryを作成します。
以下がその一部分です。

特定の単語とアンサーの組み合わせ(抜粋)
(....)
"ワトソン": "ていうか俺も\\rspd=130\\ブルーミックスに\\rspd=80\\接続中。\\rspd=110\\ Watsonで聴きとった言葉で、リリック\\rspd=80\\想像中\\rspd=150\\",
"スピーチ": "聞こえるぜ、お前の\\rspd=80\\スピーチが\\rspd=150\\。だが、まだスキル\\rspd=80\\足りないな\\rspd=150\\",
(....)

認識結果を取得し、単語を見つけたら、定義したアンサー用リリックで置き換えます。置換する方法の詳細については公開したChoregrapheプロジェクトの中のPythonコードを参照して下さい。

拡張案の一例

本記事では、プロトタイプとして、特定の単語のみに対して実装しましたが、以下のライブラリのような韻生成ツールと組み合わせて、あらゆる単語に対して自動的にリリック生成することができるように検討中です。
【参考】suzuki86さんによる記事: 文章中から韻を踏んでいるフレーズの組み合わせを検出する gem を作りました

おわりに

本記事は「音声認識技術」にてロボット同士を会話させる表現の延長としてプロトタイプしてみました。筆者は、人間のMCをロボットで置き換えようなんて思いは全くなく、あくまでも「ロボット同士が音声認識技術によってコミュニケーションする」というコンセプトに基づいた表現の一つとして捉えて頂ければ幸いです。

撮影について

先行記事と本記事ともに、デモの撮影には、Pepperアトリエ秋葉原 を利用させて頂きました。ありがとうございました。
IMG_20161001_195412.jpg
バトル前のPepperたちががにらみ合っている様子。