# ニつの動作を含む重文型命令文を受理するためのサービス指向発話文解析の拡張

但田聖 徳久雅人 木村周平
鳥取大学 工学部
b19t2060u@edu.tottori-u.ac.jp
\{tokuhisa,kimura\}@tottori-u.ac.jp

## 概要

本稿では，2つの動作を一度に命令する発話文を受理してサービスの提供を行う手法について述べる。スマー トフォンや家電に音声認識を使ったサービス要求の命令が可能である. 1 つの動作を命令する発話文は受理可能である.しかし，2つの動作を命令するためには 2 回の発話が必要となる.

本稿では，車載器に用いられるサービス指向発話文解析器（従来手法）に対して，文分割，分割評価および命令合成を追加することで，2つの動作を含む命令文であっても適切にサービスの提供が実現できることを示す.

## 1 はじめに

近年，音声認識を用いた技術が普及している．スマー トフォンや家電に，音声認識を使ったサービス要求の命令が可能になっている.

本研究室では音声命令によって操作可能な車載器の開発を進めている [1].この車載器では，1つの動作のための命令文しか実行することができない. よって，この車載器に 2 つの動作を命令したい時は，1つずつ動作を命令しなければならず，時間と手間がかかってしまう.

そこで，本稿では車載器で 2 つの動作を含む重文型命令文が実行できるようにすることを目的とする.

## 2 先行研究

文分割についての先行研究，発話文解析についての先行研究，および本稿の位置づけについて述べる.

## 2.1 文分割についての先行研究

先行研究 [2] は, 複雑な文の可読性の向上や解析処理を目的とした研究である．WEBSPLIT という単純な文と複雑な文をぺアとするデータセットを提案し，文分割を可能にしたが，実際に複雑な文の解析に適用できるかの確認は行われなかった。

## 2.2 発話文解析についての先行研究

先行研究 [1] では, ユーザからのサービス要求型発話を受け取ると，発話文の意図するサービスとメソッドを発話文解析によって推定し，小型計算機上でサービス結果を出力する研究が行われた. 発話文解析の流れと先行研究の問題点について述べる.

## 2.2.1 発話文解析の流れ

発話文解析の流れを図 1 に示す.

図 1 発話文解析の流れ

発話文解析器がユーザから発話文を受け取ると，パー ジングが行われる． パージングではサービス別に用意された辞書を用いて各語句にタグ付けを行い，「サービス別タグ付き文」を出力する．次に，意図解析では，オリジナルコーパスの事例と「サービス別タグ付き文」の比較を行い，意図クラスを求める．オリジナルコーパスは，「発話文，サービス名，メソッド名・引数」という事例で構成され，サービス名とメソッド名・引数の組を意図クラスとする．比較の際，事例 $i$ とサービス別タグ付き文」との近さ $d_{1}$ を次式で求めて利用する.

$
d_{1}\left(U, T_{i}\right)=\frac{2\left|U \cap T_{i}\right|}{|U|+\left|T_{i}\right|+\beta}
$

ここで， $U$ はタグ付き文のタグの集合， $T_{i}$ は意図解析用事例 $i$ のタグの集合， $\beta$ は偏りを持たせるパラメータである.

近さの降順で意図クラスが得られ，解候補として複数が出力される.

次に，スロットフィリングでは，得られた解候補の引数に対して代入を行い，得られたスロット值（引数と代入語句の対）を解候補に加えて出力する.

最後に，選択では，解候補のタグの一致率およびスロットの代入率からスコア $d_{2}$ を次式で求めて利用する.

$
d_{2}\left(U, T_{i}, b, s\right)=\frac{2\left|U \cap T_{i}\right|+b}{|U|+\left|T_{i}\right|+s+\beta}
$

ここで，bはスロットフィリングにおいて代入されたスロット数であり，s はスロットフィリングにおいて代入されるべきスロット数である。なお， $U, T_{i}$ おび $\beta$ は式 (1)と同じである.

スコアの降順で意図クラスおよび引数の具体值が得られ, 最高スコアの命令 (サービス名・メソッド名・スロッ卜値）が選ばれる。命令はサービスの実行部に送られて， ユーザにサービスの提供が行われる．以上の流れで発話文解析を行う。
以下に発話文解析の例を示す.

発話文：鳥取の地図を表示してください

意図クラス：serviceMap.comShow(loc)

解候補のスロット値 : $\mathrm{loc}=$ 鳥取

命令：serviceMap.comShow(loc=鳥取)

## 2.2.2 先行研究の問題点

2 つ動作を含む重文型命令文を先行研究の手法に入力すると， 1 事例につき 1 意図クラスしかオリジナルコーパスに登録されてないため，1つの命令しか実行されない． 2 つの動作を含む命令を実行させるには，オリジナルコーパスの発話文を組み合わせて命令文を作り， その 1 つの命令文につき動作を 2 つ登録するというアイデアが考えられる。しかし，オリジナルコーパスに登録されている発話文は約 3 千文であり，その組み合わせは最大で約 9 百万文となる。これではコストが大きすぎる.

## 2.3 本稿の位置づけ

本稿では，コストを抑えるために，コーパスへの文の追加ではなく, 車載器の発話文解析器の拡張という手段をとる。すなわち，文分割を発話文解析の前に行うことで，2つの動作を含む文を 1 つの動作を含む 2 つの文とし，得られる命令を適切に実行することを試みる。ただし，本稿では，2つの動作を含む表現を重文型命令文に限定する。

## 3 提案手法

提案手法は，従来手法 (2.2 節) に対し，「文分割」，「分割評価」および「命令合成」を追加した拡張手法である （図 2)。拡張のねらいは次のとおりである.
- 文分割 $: 1$ 文 1 命令となるように文を分割
- 分割評価：分割/非分割のどちらが意味を波み取ったかを評価
- 命令合成：単機能な複数命令か，高機能な単一命令かの選択

図 2 拡張された発話文解析器

以下に提案手法における処理の要点を例示する。

重文型命令文に対する文分割の結果を示す.

重文型命令文：地図を表示して音楽をかけてください

分割後の文 $1:$ 地図を表示してください

分割後の文 2 : 音楽をかけてください

分割評価では，重文型命令文を従来手法で解析した結果，および分割後の文 1 ，文 2 をそれぞれ解析した結果という 3 つの結果を扱う。地図サービスと仮定すると「音楽」の意味が汲み取られず，音楽サービスを仮定すると「地図」の意味が汲み取られない。一方で分割後ではそれぞれで意味が汲み取られるため，分割が適切と判定される.

命令合成については，別の例文で説明する．たとえば，「初音ミクをかけてから鏡音リンをかけてください」という場合，命令合成には 2 つの命令が入力され，代替命令が出力される.

命令 1 : serviceMusic.comSearch $(\mathrm{obj}=$ 初音ミク)

命令 2 : serviceMusic.comSearch(obj=鏡音リン)

代替命令：serviceMusic.compPlayList(obj1=初音

ミク，obj2=鏡音リン)

検索再生の命令 2 つよりも，プレイリストの命令 1 つの方が容易にサービスの実行が行える.

本節では，文分割，分割評価および命令合成について詳しく述べる。

## 3.1 文分割

文分割は，発話文に特定のワードが含まれている時，特定のワードの前後で単文に分割する．特定のワードの決定方法，特定のワードの判別方法および文末処理について示す.

## 3.1.1 特定のワードの決定方法

鳥バンクという日本語と英語の意味類型パターン辞書がある [3].この中では，節間キーワードという主節と従属節をつなぐワードが定義されている．節間キーワードの出現頻度上位 30 件の内，重文型命令文に含まれると想定されるものを特定のワードとして選出する.

節間キーワードの出現頻度上位 30 件は表 1 の通りとなった.

表 1 中の，「て」，「てから」，「たら」，「ながら」の 4 つの節間キーワードを特定のワードとして選出した。

## 3.1 .2 特定のワードの判別方法

文分割の判断には，特定のワードの品詞，字面およびその前後の単語の品詞で定義される条件を用いる (表 2 ).

発話文を MeCab で形態素解析し，得られた解析結果と表 2 を比較して文を分割するか判断する。

## 3.1.3 文末処理

文を分割した際，分割後の 1 文目の文末が不完全になる.その対応として，分割前の文末表現を，分割後の 1 文目の文末に追加するという文末処理を行う．以下に，文末表現が「てください」の時の処理の例を示す.

処理前の分割後の文 1 : 音楽をかけ

処理後の分割後の文 $2:$ 音楽をかけてください対象となる文末表現は以下のとおりである。

・〜てください|〜でください

・〜ます

・〜です

ここで，「ます/です」による命令文は，ユーザの行動を車載器に受理させる際に使われる。たとえば，「今から鳥取駅に行きます」や「10 時に出発です」のように予定を登録する発話に用いられる。

## 3.2 分割評価

車載器のオリジナルコーパス (先行研究のコーパス) には既に重文型命令文が登録されている。たとえば，「シャッフルして音楽をかけてください」という文がある.これは音楽の再生モードを変更するという，1 動作を命令する重文型命令文である．発話文に対して毎回分割を行うと，過剩な分割となる恐れがある。この問題を分割評価によって防ぐ.

非分割文と分割文のスコアを比較する．非分割文のスコアは $d_{2}$ を用いて求める. 分割文のスコア $d_{3}$ は，分割文の文 1 と文 2 のスコアを転用した值であり，次式を用いて求める.

$
\begin{aligned}
& d_{3}\left(U_{1}, U_{2}, T_{1}, T_{2}, b_{1}, b_{2}, s_{1}, s_{2}\right)= \\
& \quad \frac{2\left(\left|U_{1} \cap T_{1}\right|-t\right)+2\left|U_{2} \cap T_{2}\right|+b_{1}+b_{2}}{\left|U_{1}\right|-t+\left|U_{2}\right|+\left|T_{1}\right|-t+\left|T_{2}\right|+s_{1}+s_{2}+\beta}
\end{aligned}
$

ここで, $U_{1}, T_{1}, b_{1}, s_{1}$ および $U_{2}, T_{2}, b_{2}, s_{2}$ は式 $(2)$ と同様であり，それぞれ分割後の文 1 および文 2 の值である. $\beta$ も同様である. $t$ は文末処理によって追加された文末表現に対するタグ数である.

もし， $d_{2} \geqq d_{3}$ ならば非分割を採用し，そうでなければ分割を採用する.

## 3.3 命令合成

命令合成の対象となる 2 つの命令の例を以下に示す.命令 1 : serviceMusic.comSearch( $\mathrm{obj}=$ 初音ミク)

命令 $2:$ serviceMusic.comSearch $(\mathrm{obj}=$ 鏡音リン) この 2 つの命令を連続で実行すると 1 曲目の再生が中断され，2 曲目のみが再生されてしまう。

命令合成では，2つの命令が以下の条件を満たすとき，代替命令を出力する．代替命令は 2 つの命令の動作を含む高機能な単一命令である.
- 1 つ目の命令が並列処理を行う，かつ

・ 2 つの命令間でリソースの競合がおこる

知識ベースとの照合によって，2つの命令が条件を満たすか判断する。条件を満たす 2 つの命令と代替命令を知識べースにまとめた（表 3)，代替命令を用意できない場合はエラーとする. エラー時は 1 つ目の命令のみを出力するという運用にする.

## 4 実験

追加した処理部の動作の妥当性を確認する. 評価項目を，命令文の害行誤り率および命令実行の応答時間とする.

## 4.1 実験準備

実験で用いるテストセットとして，テストセット 1～ 4 を用意した．テストセット $1 \sim 3$ をそれぞれ表 $4 \sim 6$ に示す.

テストセット 1 は，実際に車載器を利用した際に得られた発話ログ 1,441 件の中から，組み合わせると重文型命令文となる，連続している 2 つの発話を抜粋したものである (表 4).

テストセット 2 は，テストセット 1 の 2 つの発話を 3 または 4 つの特定のワードで組み合わせて作った重文型命令文である．各テスト文中にある（）内の|で区切られている単語は，それぞれの単語だけを含む文に展開するという意味で，（）内に 4 つ単語を含む場合は，4つの重文型命令文が得られる (表 5 ).

テストセット 3 は，並列処理を行う命令文のぺアを組み合わせた重文型命令文である (表 6).

テストセット 4 は，従来の車載器のオリジナルコーパスである (表なし, 総文数 3,519 文).

## 4.2 誤り率についての実験

テストセット 2 および 3 を用いることで 2 つの動作を含む重文型命令文の実行確認を行う．テストセット 4 を用いることで，元々実行できていたオリジナルコーパスの命令文 (1 動作の文) が実行できること，すなわち，提

案手法に拡張前との互換性があることを確認する。車載器 1 4を用意し, それぞれの車載器で誤り率を求めた. 車載器 1 は従来の車載器, 車載器 2 は従来の車載器に文分割を追加した車載器, 車載器 3 は文分割・分割評価を追加した車載器, 車載器 4 は文分割・分割評価・命令合成を追加した車載器である. 誤り率は表 7 の通りになった.

テストセット 2 の誤り率は, 車載器 1 では 1.00 となり, 車載器 $2 \sim 4$ では 0.00 となった. 文分割を追加することで重文型命令文を実行できることが確認できた。

なり, 車載器 4 では 0.00 となった. 命令合成を追加することによって，並列動作を起こす重文型命令文を適切に実行できることが確認できた.

テストセット 4 の誤り率は, 車載器 2 では 0.39 となり, 車載器 $1 ， 3$ および 4 では 0.00 となった. 文分割を追加することで過剰分割がおきていることが確認できたが，分割評価を追加することで過剩分割が抑えられていることが確認できた.

過剩な分割が抑制された命令文を表 8 亿示す. 予定登録の命令や，元々登録されていた重文型命令が分割されずに車載器 4 で処理できた. なお，車載器 2 で実際に表
8 の文を実行すると求めていないサービスが実行された.

## 4.3 応答時間についての実験

2 つの動作を， 1 つずつ命令した時と，重文型命令によって一度に命令した時の応答時間を比較するために， テストセット 1 および 2 の平均応答時間を求めた. 結果は表 9 の通りになった.

テストセット 2 の平均応答時間は, テストセット 1 の平均応答時間に比べて約 4 秒の短縮が確認できた. 自動車内において操作にかかる時間が 4 秒短縮されることは有益であると考える。

## 5 おわりに

本稿では, 車載器上で 2 つの動作を含む重文型の命令に対して実行を可能にした. 手法としては，従来の車載器の発話文解析器に文分割・分割評価・命令合成の 3 つの処理を追加した. 文分割では, 重文型命令文を分割し,解析可能とした. 分割評価および命令合成では, 文分割に伴う実装上の問題に対応した．以上より文分割は複雑な文の解析に有用であることが分かった. さらに，既存の 1 動作のための解析器が流用できる点も利点である.

本稿では複雑な文を重文型の言い方に限定したが，複雑な文には重文型以外の言い回しも多くある. 今後は重文型の言い方以外の複雑な文にも文分割が有用であるか，研究を進めて確認していきたい。

## 謝辞

本研究は JSPS 科研費 JP19K12548 の助成を受けたものです.

## 参考文献

[1] 徳久雅人, 木村周平: 小型計算機におけるサービス指向発話文解析, 自然言語処理, 26(3), pp.545-578, 2019.

[2] Shashi Narayan, Claire Gardent, Shay B. Cohen, and Anastasia Shimorin: Split and Rephrase. Natural Language Processing(EMNLP), pp. 606-616, 2017.

[3] 池原悟, 阿部さつき, 徳久雅人, 村上仁一: 非線形な表現構造に着手した重文と複文の日英パターン化, 自然言語処理, 11(3), pp.69-95, 2004.