とある新入社員の修論解説 〜音素認識〜

はじめまして。 2020 年度に新卒でレトリバにリサーチャー職で入社した古谷(@kk_fry_)です。

私は、大学院で聴覚障害者の発話訓練を支援するための音素認識について研究していました。

そこで今回は、新入社員の第 1 回目の記事として、大学院での研究について簡単に紹介したいと思います。

なお、簡潔に書くため、一部で厳密でない表現を使っている部分があります。ご了承ください。 ("構音障害"の意味で"発話障害"と書くなど)

ちなみに、私が卒業した大阪大学の大学院基礎工学研究科では、修士論文は外部に公表されないので、論文自体はネット上で閲覧することができません……

研究テーマ:聴覚障害者の発話訓練のための音素認識

研究テーマは、生まれつきもしくは乳幼児期に聴覚障害を発症した人の発話訓練を支援するというものでした。

聴覚が不自由だと、発話の訓練をするのも困難になります。手本の発話や自分の発話を聞いて修正することができないからです。

そこで、発話訓練の現場では、言語聴覚士と呼ばれる専門家が被訓練者の発話を聞き、より適切に発話するための指示を出します。

この言語聴覚士の担当部分をコンピュータソフトウェアによる音声処理で代替しようとするのが、私の研究テーマでした。

コンピュータソフトウェアによる代替には、以下のメリットがあります。

もちろん、言語聴覚士は発話訓練の作業だけではなく、学習進度の管理や精神面でのケア、実際の人間とのコミュニケーションの練習相手なども担当するため、すべての機能を代替するのは困難であり、そうすべきではありません。

あくまで補助的に用いるものとして、コンピュータソフトウェアの研究を行います。

研究の中身

それでは早速、前提知識の解説と、具体的な研究内容の紹介をしていきます。

発話訓練に使える音素認識

音素( 1 つの子音や母音)を発音した音声から音素の種類を識別するという、音素認識と呼ばれる技術があります。

音声認識は主に単語や文章を認識するのに対し、音素認識は 1 つの音素のみを認識します。

発話訓練の初期の段階では、音素の発音を練習しますが、この段階の訓練を音素認識技術を用いて支援する研究1 が存在します。 しかし、通常の音素認識技術をそのまま発話訓練に適用すると問題があります。 それは、発音が誤っていた場合に、どうすれば改善するのかが分かりにくいという問題です。

例えば、「さ」の子音である /s/ を発音したいのに「しゃ」の子音である /ʃ/ を発音してしまったとします。 このとき「認識結果が /ʃ/ である」という情報のみから「何が失敗の原因で、どうすれば /s/ に近づくのか」を知るのは専門知識が無いと困難です。

そこで、研究の目的を「発話訓練に使える音素認識を作る」と設定しました。

子音の発音の作り方

とりあえず、母音は置いておいて、子音について考えます。

子音とは、肺から押し出される空気が口や鼻から出るまでの間のどこかを狭めることで(あるいは狭めた状態から開放することで)作られる音です。(例外もあります)

一般的に、子音の発音は、以下の 3 つの要素をコントロールして行われることが知られています。

  • 有声性:発音時に声帯を振動させるかどうか
  • 調音点:どこを狭めるか
  • 調音方法:狭めの強さ・開放のしかたなど

例えば「さ」の子音 /s/ は、声帯を振動させずに、上の歯茎の裏と舌の間を、完全に閉じない程度に狭めて発音する子音です。 そのため /s/ は「無声歯茎摩擦音」と呼ばれます。

つまり、これらの 3 要素を認識できれば、子音を認識することができ、さらに目的の子音との相違点を、人間がコントロールできる範囲で明らかにすることができます。

/s/ を発音したいのに /ʃ/ を発音してしまう場合、誤っているのは調音点のみなので「舌の位置を変えましょう」といった助言を行うことが可能になります。

各特徴の評価方法

前述の 3 つの特徴を数値評価するために用意した特徴量について、簡単に説明します。

有声性の評価は、VAD(音声区間検出)などにも用いられる2 Harmonic Product Spectrum (HPS)3 と呼ばれる特徴量を利用します。 これは、ノイズ的ではない、はっきりした高さの感じ(ピッチ感)を持つ音声で高い値を取る指標です。 声帯振動による音声が倍音構造を持つことを利用します。

調音点の評価は、狭めの位置による共鳴周波数の変化を考慮して、対数振幅スペクトルの形状を用いて行います。

例えば /s/ だと高い音の成分が強くなり /ʃ/ だと低い音の成分が強くなります。 この違いを、振幅スペクトルの山型のピーク前後での傾きを用いて判定します。

調音方法は、統一的な方法で検出することが難しいので、それぞれの方法の特徴に合致するかどうかを確認します。

摩擦音であれば、高い音の成分が全体的に強くなり、破裂音であれば、急激に音量が増加します。 側面音や鼻音の識別は困難なので手を付けていません……

以上の特徴量を組み合わせて、音素の認識と修正の助言の作成を行いました。

ソフトウェアの試作

上記の特徴量が実際に発話訓練に利用できるかを確認するため、発話訓練ソフトウェアを試作しました。

下図は、/s/ の訓練をするソフトウェアを実行し、正しく発話している状態を表しています。 中央の青いバーが完全に埋まっているのが、発音の正しさを表しています。

f:id:furuya1223:20200421115539p:plain
試作品の発話訓練ソフトウェア(発音の成功例)

「感度調節」でゲージの反応しやすさを調節できるようにしてあります。これは言語聴覚士が最初に個人に合わせて調節する意図で設置しています。

「音量調節」は周囲の雑音の大きさに応じて調節します。雑音が大きいと発話していなくてもゲージが反応してしまうため設置しています。

また、誤って「ざ」の子音 /z/ を発音してしまった場合、下図のように中央のバーが青くなりません。

また、有声性についての誤りであるため、画面下に声帯振動を抑えるよう助言が表示されます。

f:id:furuya1223:20200421115625p:plain
試作品の発話訓練ソフトウェア(発音の失敗例)

Web アプリとして実装しており、音声処理については Web Audio API を利用しました。

また、試作品ソフトウェアについて、健聴者による被験者実験とアンケート調査を行い、評価を得ました。

4 段階評価( 1 が最も悪い、 4 が最も良い)でアンケートをとり、以下の結果を得ました。

  • /s/ の発音でゲージが適切に上がったか:平均 3.7
  • /s/ 以外の発音でゲージが上がらなかったか:平均3.0
  • /s/ 以外の発音をしたときに表示される修正ガイドは適切だったか:平均 3.7

/s/ の訓練に関しては概ね良好な結果が得られました。

/z/ についても同様にアンケートをとりましたが、こちらは /z/ 以外の発音でゲージが上がってしまったケースが多いようで、 2 番目の質問の結果が平均 2.6 となりました。

/z/ の音は有声音であるために /s/ よりも高音域が強くなりにくいため、検出閾値の設定が困難になったのだろうと考えています。

まとめ

発話訓練に利用できるように、発音の作り方に基づいた音素認識を行うための特徴量設計を行いました。

対応できていない子音や母音がまだまだたくさんあり、精度も完璧ではありませんが、とりあえず一部の摩擦音についてソフトウェアの試作まで行うことができました。

また、試作品ソフトウェアを用いた被験者実験によって、設計した特徴量が発話訓練に利用できることを確認しました。

おわりに

研究内容よりも前提知識の解説の方が長くなってしまいましたが、私の大学院での研究を紹介しました。

理論系の研究室にいながらかなり応用的なテーマを扱いましたが、もともと音声認識に興味があったので、近いテーマを扱うことができて良かったです。

Retrieva TECH BLOG の読者の方々は自然言語処理に興味がある方が多いかもしれませんが、自然言語の「音」に注目する技術を通して音声処理にも興味を持っていただけると嬉しい限りです4。 私もレトリバで自然言語処理について勉強しつつ、音声認識等の研究開発において、研究で得た知見を活かしていけたら良いなと思っています。