Upgrade to Pro — share decks privately, control downloads, hide ads and more …

傾聴対話ライブラリ実装 -おうむ返し-

sadahry
November 19, 2022

傾聴対話ライブラリ実装 -おうむ返し-

現在、「今日のできごと」について話ができる音声対話システムについて
社会人大学院で研究している。

そのうえで、研究の一環として、
音声対話を実装する際の「間」をつなぐ仕組みを作りたかった。

あと単純に、自然言語処理について深く知りたかった。

sadahry

November 19, 2022
Tweet

More Decks by sadahry

Other Decks in Programming

Transcript

  1. 実現するもの
 「おうむ返し」
 • 傾聴対話の基本的なテクニック 
 ◦ 厳密には「伝え返し / reflection」らしい 


    • 話し相手の言葉のみを利用して返答文を組み立てる 
 • 臨床心理学的には「何を返すべきか」も重要 
 ◦ 今回の実装では「何を返してもOK」とする 
 • 文章として成立することに重点を置く 
 利点
 • 会話の「間」をつなぐことができる 
 • 話を聞いてくれている感覚に寄与する(はず) 
 • 音声対話テストに便利そう 

  2. 実装の要件とユースケース
 要件
 • 話し手の言葉を使って返答文を生成する 
 • できる限り会話破綻がないように 
 ◦ 返答文生成をしないケースがあってもいい

    
 • 語調(e.g., 〜です、〜なのじゃ)を整形できる 
 • 高速に出力できる
 ◦ 対人の音声対話では返答速度は平均200ms [ S.C. Levinson 2015]
 ◦ 音声合成速度も鑑みると、速ければ速いほどいい 
 • 幅広い会話内容に適用できる 
 • 標準語をサポート(方言はサポートしない) 
 ユースケース
 • 「今日のできごと」タスクへの応用 

  3. 返答文生成の困難
 語尾に「んですね」を付与するだけのケースを考える。 
 
 ◦: 反応が思ったより良かった 
 -> 反応が思ったより良かったんですね
 


    ×: 東京オリンピック楽しみ
 -> 東京オリンピック楽しみんですね (品詞の考慮)
 
 ×: チョコレート二個あーいや三個食べた
 -> チョコレート二個あーいや三個食べたんですね (言い換え・フィラーの考慮)
 
 ×: ここでの開発作業の遅延が、並行して進んでいるタスクの半分以上に悪影響を与えてしまう
 -> ここでの開発作業の遅延が、並行して進んでいるタスクの半分以上に悪影響を与えてしまうんですね (長さの考慮)
 
 △: 私は頑張った
 -> 私は頑張ったんですね (立場の入れ替わり考慮)
  4. 係り受け
 type(1) 句の「係り受け」 type(2) 二文節間の「係り受け」 
 
 
 type(3) 単語間の「係り受け」

    
 
 
 
 
 ref. http://kanji.zinbun.kyoto-u.ac.jp/~yasuoka/publications/kakariuke.html 

  5. 係り受け
 係り受け解析器の比較(拡張性) 
 
 
 
 
 
 
 


    → 初手は「GiNZA」で実装
 KNP(JUMAN) type(2) Cabocha(MeCab) type(2) GiNZA(Sudachi) type(3) 辞書 ◎ (変更が容易) ◎ (変更が容易) ◎ (変更が容易) 形態素解析モデル △ (JUMAN++) × (MeCabのみ) △ (SudachiTra) 係り受けモデル × (変更できない) ◦ (変更が容易。ただ手 法は固定) ◎ (変更が容易) Token抽出(後述) × (変更が困難) × (変更が困難) ◎ (変更が容易) 文末調整(後述) ◎ (参考情報が豊富) × (変更が困難) × (変更が困難)
  6. GiNZAの係り受け解析(Universal Dependencies)
 • GiNZAとは、spaCyの日本語対応モデル(e.g., ja_ginza)とそのツール(ginza)を表す 
 • spaCyとは、Universal Dependencies(= type(3))に準拠したNLPライブラリ

    
 ◦ 全言語で統一された文法モデル 
 ◦ 単語を文節で区切るよりも詳細な分割が可能 
 ◦ どういった依存関係であるかが解析可能 
 ◦ UDに登録されたデータセットは専用ページから用例や統計情報を取得可能 
 ▪ ja_ginzaの学習データ(BCCWJ)には用例がない。GSDや中納言を参照
 
 
 
 
 
 
 ref. https://megagonlabs.github.io/ginza/ ※依存関係は「交差」しない
  7. Universal Dependencies: POS Tag(≒ 品詞)例
 
 
 
 
 


    
 
 
 
 ref. https://qiita.com/kei_0324/items/400f639b2f185b39a0cf 
 ADJ
 形容詞
 big, old, green, incomprehensible, first, second, third
 ADP
 設置詞
 in, to, during
 ADV
 副詞
 very, well, exactly
 AUX
 助動詞
 has(done), is(doing), will(do), was(done), got(done), should(do), must(do)
 NOUN
 名詞
 girl, cat, tree, air, beauty
 NUM
 数詞
 0, 1000, 3.14, one, two, seventy-seven, I, II, III, IV, V, MMXIV
 PART
 助詞
 's, not
 PRON
 代名詞
 I, you, he, it, they, myself, yourself, who, what, somebody, anything, everybody, nothing
 PROPN
 固有名詞
 Mary, John, London, NATO, HBO

  8. Universal Dependencies: Dependency Relations(≒ 係り受け)例
 obj: SVOのO
 
 
 


    
 
 
 
 
 ref. https://qiita.com/kei_0324/items/400f639b2f185b39a0cf 
 obl: “in 体言” や “to 体言” 
 advcl: 用言 + 用言
 nsubj: SVCのC
 nmod: 体言 of 体言 
 acl: 体言 of 用言
 compound: 体言 + 体言 

  9. GiNZAの構文解析(SudachiPy)
 SudachiPyで分かち書きされた単語へ依存関係を付与 
 形態素解析の結果(e.g., 助詞-格助詞, Inf=サ行変格)も活用可能
 
 
 
 


    
 
 
 $ ginza 銀座でランチをご一緒しましょう。 # text = 銀座でランチをご一緒しましょう。 1 銀座 銀座 PROPN 名詞-固有名詞-地名-一般 _ 6 obl _ SpaceAfter=No|BunsetuBILabel=B|BunsetuPositionType=SEM_HEAD|NP_B|Reading= ギンザ|NE=B-GPE|ENE=B-City 2 で で ADP 助詞-格助詞 _ 1 case _ SpaceAfter=No|BunsetuBILabel=I|BunsetuPositionType=SYN_HEAD|Reading= デ 3 ランチ ランチ NOUN 名詞-普通名詞-一般 _ 6 obj _ SpaceAfter=No|BunsetuBILabel=B|BunsetuPositionType=SEM_HEAD|NP_B|Reading= ランチ 4 を を ADP 助詞-格助詞 _ 3 case _ SpaceAfter=No|BunsetuBILabel=I|BunsetuPositionType=SYN_HEAD|Reading= ヲ 5 ご ご NOUN 接頭辞 _ 6 compound _ SpaceAfter=No|BunsetuBILabel=B|BunsetuPositionType=CONT|Reading= ゴ 6 一緒 一緒 VERB 名詞-普通名詞-サ変可能 _ 0 root _ SpaceAfter=No|BunsetuBILabel=I|BunsetuPositionType=ROOT|Reading= イッショ 7 し する AUX 動詞-非自立可能 _ 6 aux _ SpaceAfter=No|BunsetuBILabel=I|BunsetuPositionType=SYN_HEAD|Inf= サ行変格,連用形-一般|Reading= シ 8 ましょう ます AUX 助動詞 _ 6 aux _ SpaceAfter=No|BunsetuBILabel=I|BunsetuPositionType=SYN_HEAD|Inf= 助動詞-マス,意志推量形 |Reading= マショウ 9 。 。 PUNCT 補助記号-句点 _ 6 punct _ SpaceAfter=No|BunsetuBILabel=I|BunsetuPositionType=CONT|Reading= 。 ref. https://github.com/explosion/spaCy/blob/e6f91b6f276e90c32253d21ada29cc20108d1170/spacy/lang/ja/__init__.py#L101-L102
 : POS Tag ≠ 品詞

  10. Token抽出のPOINT
 POINT1.1: 「VERB, NOUN, ADJ, PROPN, NUM」以外がrootの文では文生成しない 
 GiNZAの学習データ(BCCWJ)にてrootとなる数が上位の品詞でのみ生成。 


    > root: -VERB (29585; 52% instances), -NOUN (19528; 34% instances), -ADJ (3807; 7% instances), -PROPN (1508; 3% instances), -NUM (953; 2% instances), ... 
 > https://universaldependencies.org/treebanks/ja_bccwj/ja_bccwj-dep-root.html 
 次点は PRON (344; 1% instances) = 代名詞 だが省略した(後述) 
 

  11. POINT1.3: 文末表現の調整が必要(後述) 
 
 
 
 
 
 
 Token抽出のPOINT


    語尾が不自然に いい日だったなんですね
 いい日だったんですね
 文末の単語を調整
  12. 口語として考慮すべき点::倒置
 倒置は、別の文として解析してくれる機能があるが、工夫しないと倒置表現のみ取得される 
 
 
 
 ただしPRON(=代名詞)でなければ大きく破綻することもない※ 
 
 


    
 短い文だと会話破綻するリスクが高い ※rootが体言なら文生成しない選択もあったが
  40%近くがキャンセルとなるため今回は許容
 ?
  13. 1.Token抽出::まとめ
 • 「直近の全依存関係」と「rootの単語」と「以降の単語すべて」を抽出 
 ◦ 「VERB, NOUN, ADJ, PROPN, NUM」以外がrootの文では文生成しない

    
 ◦ 出来る限り単語の連なりを分解しない 
 • 文末表現の調整が必要(後述) 
 • compound/nummodは直近でなくても連結する 
 • フィラーは対応不要
 • 言い換えと倒置の識別が課題 
 
 

  14. 品詞とdep + POS tagは一意にならないため、判断に誤差が生まれるリスクが高い 
 
 
 
 
 また、同じ品詞でも単語によって判断は異なる。

    
 
 
 
 → 細かな調整には、形態素解析の「品詞」と「単語」を利用するほうが「会話破綻がない」 
 文末調整::Universal Dependenciesの困難
 同一のdep + POS tagだが品詞も意味も異なる(「まで」はADPが適切とも言える) 
 ? ? ?
  15. POINT2.1: 特定の条件を満たす「最後の単語」以降を切断する 
 今回は、文末から特定の条件を基に単語をチェック 
 条件を満たす「最後の単語」以降を切断することに。(= 出来る限り単語の連なりを分解しない) 
 
 


    
 
 → 「端的で」「会話破綻のない」 文末表現に調整していく 
 文末調整::手法の設定
 INVALID
 1
 VALID
 条件チェックイメージ INVALID
 2
 INVALID
 3
 INVALID
 4

  16. 文末調整::キャンセル条件
 POINT2.2: 「文生成自体をCANCELする」条件も決める 
 特定の条件で単語を切断すると、文章の意味が変わってしまうリスクがある。 
 
 
 
 


    切断すると意味が変わる単語が見つかった場合、返答文の生成自体をCANCELに。 
 → エラー対処のため、CANCELとなったときの単語は保持できるように生成ロジックを構成する 
 INVALIDとすると、否定文が肯定文となってしまう 
 CANCELとなる

  17. 文末調整::疑問詞の困難
 彼は理解するんですね
 疑問詞の考慮が不足 
 文末を調整
 POINT2.3: 文中に「疑問詞」を含む場合はCANCEL 
 疑問詞を含む文章や疑問文の場合、会話破綻するリスクが高い 


    • 自問するケース
 ◦ e.g., どう(△: どうしようかな + なんですね) 
 ◦ e.g., なに(△: 何から始めりゃいい + なんですね) 
 • 質問されるケース
 ◦ e.g., これどう思う?(×: これどう思う + んですね) 
 • 抽出されたToken外に疑問詞があっても疑問文となるケース 
 ◦ e.g.,

  18. CANCELされる文の割合を『日常会話コーパス』から参照 
 疑問詞は全検索対象語2,419,171(記号・補助記号・空白を除く)の1.8% 
 CANCELとなる疑問詞の割合
 (『日常会話コーパス』に疑問詞の語彙素読みが含まれる用例から算出 ) 
 
 ・「ナニ」→

    29,706 
 ・「ナン」→ 1,634 
 ・「ナゼ」→ 141
 ・「ダレ」→ 1,370 
 ・「イツ」→ 1,381 
 ・「ドコ」→ 2,294
 ・「ドチラ」→ 822 
 ・「ドウ」→ 4,878 
 ・「ドノ」→ 297
 ・「ドレ」→ 554
 ・「ドンナ」→ 288 
 ・「イクラ」→ 359 
 ・「イクツ」→ 0
 文末調整::疑問詞の割合::参考
 
 ref. https://kotobank.jp/word/疑問詞-475924 → 公式な疑問詞一覧がほしい。。
 
 

  19. 終助詞「な」を含む文章だと全体の12.5%(なぜ「な」なのかは後述) 
 
 文末調整::疑問詞の割合::参考
 
 ref. https://kotobank.jp/word/疑問詞-475924 → 公式な疑問詞一覧がほしい。。
 


    
 CANCELとなる疑問詞の割合
 (『日常会話コーパス』の末尾2語以内に終助詞「な」が含まれる+10語以内に疑問詞の語彙素読みが含まれる用例から算出 ) 
 
 ・「ナニ」+「な」→ 747/10,613 = 終助詞「な」の 7.0% 
 ・「ナン」+「な」→ 36/10,613 = 終助詞「な」の 0.3% 
 ・「ナゼ」+「な」→ 8/10,613 = 終助詞「な」の 0.1% 
 ・「ダレ」+「な」→ 28/10,613 = 終助詞「な」の 0.3% 
 ・「イツ」+「な」→ 31/10,613 = 終助詞「な」の 0.3% 
 ・「ドコ」+「な」→ 104/10,613 = 終助詞「な」の 1.0% 
 ・「ドチラ」+「な」 → 44/10,613 = 終助詞「な」の 0.4% 
 ・「ドウ」+「な」→ 256/10,613 = 終助詞「な」の 2.4% 
 ・「ドノ」+「な」→ 8/10,613 = 終助詞「な」の 0.1% 
 ・「ドレ」+「な」→ 19/10,613 = 終助詞「な」の 0.2% 
 ・「ドンナ」+「な」 → 16/10,613 = 終助詞「な」の 0.2% 
 ・「イクラ」+「な」 → 17/10,613 = 終助詞「な」の 0.2% 
 ・「イクツ」+「な」 → 0/10,613 = 終助詞「な」の 0% 

  20. 最後の単語の判断基準
 ref. https://ja.wikipedia.org/wiki/助詞 https://ja.wikipedia.org/wiki/助動詞_(国文法)
 ref. https://kotobank.jp/dictionary/daijisen/513/
 
 
 POINT2.4:「切断しても意味が変わらない」品詞をINVALIDに 


    「端的な表現」とするため「切断しても意味が変わらない」品詞をINVALIDにする 
 
 
 
 → これらの品詞が語尾にくること自体稀なので、基本的には発生しえない 
 
 
 
 INVALIDとなる単語
 
 ・感動詞(e.g., ほら)
 ・連体詞(e.g., そんな〜)

  21. 最後の単語の判断基準
 POINT2.4: 意味を含む品詞は「/(なん|ん)ですね/を語尾にして会話破綻がない」ならVALIDに 
 今回は「「今日のできごと」の内容を確認する」ような語尾を指定 
 
 
 
 


    
 
 ref. https://ja.wikipedia.org/wiki/助詞 https://ja.wikipedia.org/wiki/助動詞_(国文法)
 ref. https://kotobank.jp/dictionary/daijisen/513/
 
 
 VAILDとなる品詞
 
 ・体言
  ・名詞(e.g., “研究” + なんですね) ・形状詞(e.g., “最高” + なんですね)
  ・代名詞※(e.g., 私 + なんですね)
 ・用言
  ・動詞(e.g., “遊ぶ” + んですね) ・形容詞(e.g., “楽しい” + んですね)
 ・接尾辞
  ・名詞的(e.g., 〜さん) ・動詞的(e.g., 〜ぶる) ・形容詞的(e.g., 〜っぽい) ・形状詞的(e.g., 〜だらけ)
 ・副詞※(e.g., “たぶん” + なんですね)
 ・接頭辞※(e.g., “超” + なんですね)
 
 ※Token抽出されないため、実処理では対象とならないケースがほとんど 

  22. 最後の単語の判断基準
 POINT2.4: 意味を持ち、語尾に紐づかない品詞はCANCEL 
 品詞全体で「意味を持ち、語尾に紐づかない品詞」は存在しない。 
 
 ただ助動詞/助詞は、個別にINVALID/VALID/CANCELを決める必要がある(後述) 
 (e.g.1,

    助動詞 INVALID ◦: 頑張り”ます”。 -> 頑張る。 ×: 頑張っ”た”。 -> 頑張る。) 
 (e.g.2, 助詞 INVALID ◦: 大丈夫”よ”。 -> 大丈夫。 ×: 大丈夫”か”。 -> 大丈夫。) 
 
 

  23. 最後の単語の判断基準::助動詞の条件
 助動詞は意味を持たない(=INVALID)ケースが少ない。 
 また、方言は分類対象外とする。 
 (形態素解析のデフォルト辞書に含まれない方言があり個別対応が必要(e.g., 「ひん」)) 
 
 


    
 
 
 ref. http://sudachi.s3-website-ap-northeast-1.amazonaws.com/sudachidict-raw/20221021/small_lex.zip
 
 INVALIDとなる単語
 
 ・助動詞
  ・断定「だ」
  ・丁寧「です」「ます」
  ・意志推量「う」「よう」※
 
 ※ 意志推量は助動詞ではなく活用形「意志推量形」として解析される 
   また、語尾が相手の会話内容を確認するものであるため成立する 
  (e.g., 頑張ろう(と私は思う) -> (あなたは)頑張るんですね) 

  24. 基本的に助動詞は活用形を持つため、/んですね/に紐づく(=VALID)ケースが多い 
 • 特殊な活用を持たない助動詞(e.g., 下一段活用)はすべてOK 
 • 特殊な活用を持つ助動詞でも、/んですね/に紐づく場合はOK 
 


    
 
 
 最後の単語の判断基準::助動詞の条件
 ref. http://sudachi.s3-website-ap-northeast-1.amazonaws.com/sudachidict-raw/
 ref. https://ja.wikipedia.org/wiki/助詞 https://ja.wikipedia.org/wiki/助動詞_(国文法)
 ref. https://kotobank.jp/dictionary/daijisen/513/
 
 VAILDとなる単語
 
 ・助動詞
  ・特殊な活用を持たない助動詞(e.g., 使役「せる」, 希望「たがる」)
  ・特殊な活用を持つ助動詞※
   ・過去・完了「た」 ・希望「たい」 ・否定「ない」
   ・推定「らしい」 ・受身「れる」「られる」
 
 ※sudachiのシステム辞書(version: 20221021)から抽出 

  25. 最後の単語の判断基準::助動詞の条件
 助動詞のうち1.3%ほど(方言を除く)が意味を持つが語尾に紐づかない(=CANCEL) 
 
 
 
 
 → 古文表現が多かった 


    
 ref. http://sudachi.s3-website-ap-northeast-1.amazonaws.com/sudachidict-raw/20221021/small_lex.zip
 ref. https://ja.wikipedia.org/wiki/助詞 https://ja.wikipedia.org/wiki/助動詞_(国文法)
 ref. https://kotobank.jp/dictionary/daijisen/513/
 
 CANCELとなる単語
 ( % は『日常会話コーパス』の末尾2語以内に含まれる用例数から判断 ) 
 
 ・助動詞
  ・否定「ず」「ぬ」「ん」→ 1,766/134,810 = 助動詞の 1.3%
  ・当然「べし」 → 18/134,810 = 助動詞の 0.0%
  ・打消意志「まい」 → 4/134,810 = 助動詞の 0.0%
  ・方言「きに」「じゃ」「すけ」「どす」「なんだ」「へん」「や」「やす」→ サポート外

  26. 助詞は細分化して、それぞれ検討 
 • 接続助詞: 「その単語までの意味が確定している」ものをINVALIDに 
 • 終助詞: 意味が変わらないケースが多い 


    • 準体助詞(e.g., 遊ぶ ”ん” だ): すべて切断しても意味は変わらない 
 
 最後の単語の判断基準::助詞の条件
 INVALIDとなる単語
 
 ・準体助詞: すべて
 ・並列助詞、間投助詞: なし※1
 ・接続助詞
  ・確定の順接「ので」「から」「て」「で」
  ・確定の逆接「けれど」「けど※2」「が」「ものの」「いえども」
 ・終助詞
  ・強調「い」「わ」「よん」「ぜ」 ・反語「ぞ」 ・納得「や」
  ・自分の考えを相手に伝える意「よ」「じゃん」 ・自分の判断に同意を求める意「ね」 ・言い放つ「さ」
  ・軽侮の対象「が」 ・言い直し「ってば」 ・当然「もん」 ・独言など「な※3」
 ref. http://sudachi.s3-website-ap-northeast-1.amazonaws.com/sudachidict-raw/20221021/small_lex.zip
 ref. https://ja.wikipedia.org/wiki/助詞 https://ja.wikipedia.org/wiki/助動詞_(国文法)
 ref. https://kotobank.jp/dictionary/daijisen/513/
 

  27. ※1 「けど」といった「ら抜き」言葉にも対応 
 ※2 並列助詞と間投助詞はGiNZA(Sudachi)では扱われないため、他の品詞として各々対応 
 ※3 助詞のCANCELパターンがとても多い(後述) 
 →

    リスクがあるが「今日のできごと」タスクで多いと考えられる独言など「な」を採用 
 
 
 
 → 禁止・命令の意味となる可能性があるが「今日のできごと」タスクでは発生しえないと判断 
 → 「な」以外の疑問詞を含む助動詞/助詞はすべて条件に紐づかずにCANCEL 
 最後の単語の判断基準::助詞の条件
 
 ref. https://ja.wikipedia.org/wiki/助詞 https://kotobank.jp/dictionary/daijisen/513/
 「な」が持つ意味
 
 > 動詞や助動詞の終止形について禁止の意味を表したり、任意の文末について独言、詠嘆、願望などの意を表したりする。地域に よっては「ね」と同じ意味でも使われる。また、動詞や補助動詞の連用形について命令の意味を表すものもあるが、こちらは補助動 詞「なさる」の命令形「なさい」の省略形が由来。

  28. 個別に特殊なケースがある 
 • 副助詞「って」:終助詞的に扱われる用例が多い(4,527件が発話単位末2語以内) 
 • 接続助詞「し」:終助詞的に扱われる用例が多い(3,362件が発話単位末2語以内) 
 (参考:用例の多い終助詞 1位「ね」:50,548件

    2位「よ」:32,202件 3位「か」:17,741件) 
 
 
 
 
 
 最後の単語の判断基準::助詞の条件
 INVALIDとなる単語
 
 ・副助詞「って」
 ・接続助詞「し」
 ref. http://sudachi.s3-website-ap-northeast-1.amazonaws.com/sudachidict-raw/20221021/small_lex.zip
 ref. https://ja.wikipedia.org/wiki/助詞 https://ja.wikipedia.org/wiki/助動詞_(国文法)
 ref. https://kotobank.jp/dictionary/daijisen/513/
 

  29. 単語の連なりとして体言的になる助詞はVALID 
 • 格助詞(e.g., 昨日”の” + なんですね) 
 • 副助詞(e.g.,

    今日”ぐらい” + なんですね) 
 
 
 最後の単語の判断基準::助詞の条件
 VALIDとなる単語
 
 ・格助詞: すべて
 ・係助詞: すべて
 ・副助詞: 「って」以外
 ・接続助詞: (発話タイミングに注意が必要(後述))
  ・仮定の順接「ば」「ても」「ところで」「たって」「ては」
  ・仮定の逆説「と」「ど」「とて」「とも」→終助詞に含める※4
  ・並列「なり」「たり」 ・動作の並行「ながら」「つつ」 ・するとすぐに「や※4」 ・「まま※4」
 ・終助詞
  ・不満「のに※4」 ・肯定「とも」
 • 係助詞(e.g., 今年”こそ” + なんですね) 
 • 接続助詞(e.g., したけれ”ば” + なんですね) 
 ref. http://sudachi.s3-website-ap-northeast-1.amazonaws.com/sudachidict-raw/20221021/small_lex.zip
 ref. https://ja.wikipedia.org/wiki/助詞 https://ja.wikipedia.org/wiki/助動詞_(国文法)
 ref. https://kotobank.jp/dictionary/daijisen/513/
 

  30. ※4 形態素解析と品詞が一致しないケースがある(e.g., 「のに」) 
 
 
 
 
 
 →

    それぞれテストを書いて検証(大変。。) 
 → 正しく対処するなら2語を見て判断が必要だが、パターンが多くハンドリングが難しい 
   用例としても634件(発話単位末3語以内に「の」+「に」で算出)のため対応せず 
 最後の単語の判断基準::助詞の条件
 $ ginza 遊んでたのに # text = 遊んでたのに 1 遊ん 遊ぶ VERB 動詞-一般 _ 0 root _ SpaceAfter=No|BunsetuBILabel=B|BunsetuPositionType=ROOT|Inf= 五段-バ行,連用形-撥音便|Reading= アソン 2 で でる AUX 助動詞 _ 1 aux _ SpaceAfter=No|BunsetuBILabel=I|BunsetuPositionType=SYN_HEAD|Inf= 下一段-ダ行,連用形-一般|Reading= デ 3 た た AUX 助動詞 _ 1 aux _ SpaceAfter=No|BunsetuBILabel=I|BunsetuPositionType=SYN_HEAD|Inf= 助動詞-タ,連体形-一般|Reading= タ 4 の の SCONJ 助詞-準体助詞 _ 1 mark _ SpaceAfter=No|BunsetuBILabel=I|BunsetuPositionType=SYN_HEAD|Reading= ノ 5 に に ADP 助詞-格助詞 _ 1 case _ SpaceAfter=No|BunsetuBILabel=I|BunsetuPositionType=SYN_HEAD|Reading= ニ
  31. POINT2.10: 条件に紐づかず、意味が変わらない助詞にも含まれない場合はCANCEL 
 終助詞は全終助詞文の21%ほどだがリスクが高いためCANCELに。接続助詞も方言をCANCEL 
 
 
 
 CANCELとなる単語
 (

    % は『日常会話コーパス』の末尾2語以内に含まれる用例数から判断 ) 
 
 ・終助詞
  ・様々な意味「か」→ 17,741/140,740 = 終助詞の 12.6%
  ・独言など「な」→ 10,613/140,740 = 終助詞の 7.5% → VALIDに変更
  ・疑問や質問、念押し「の」→12,836/140,740 = 終助詞の 9.1%
  ・疑問「かしら」→159/140,740 = 終助詞の 0.1%
  ・疑問「け」→14/140,740 = 終助詞の 0.0%
  ・強く否定「ものか」「もんか」→38/140,740 = 終助詞の 0.0% →「か」に含まれる
  ・方言「で」「ど」「ラ」「かし」「ぞい」「たい」「ちょ」「てん」「ねん」
     「のう」「のん」「ばい」「ばや」「べい」→ サポート外なので計上せず
 ・接続助詞
  ・方言「きに」「けん」「すけ」「さかい」「ばってん」 → サポート外なので計上せず
 最後の単語の判断基準::助詞の条件
 ref. http://sudachi.s3-website-ap-northeast-1.amazonaws.com/sudachidict-raw/20221021/small_lex.zip
 ref. https://ja.wikipedia.org/wiki/助詞 https://ja.wikipedia.org/wiki/助動詞_(国文法)
 ref. https://kotobank.jp/dictionary/daijisen/513/
 

  32. 2.文末調整::まとめ
 • 特定の条件を満たす「最後の単語」以降を切断する 
 • 「文生成自体をCANCELする」条件も決める 
 ◦ 文中に「疑問詞」を含む場合はCANCEL(=文生成を中断する) 


    ▪ 単語全体の1.8%をCANCEL 
 ▪ (「な」を含む文の12.5%をCANCEL) 
 ◦ 「切断しても意味が変わらない」単語をINVALID(=切断する) 
 ▪ 連体詞、感動詞、「だ」「です」「ます」、終助詞(一部)、接続助詞(一部)、準体助詞 
 ◦ 特定の語尾に紐づく単語をVALID(=その単語を文節末とする) 
 ▪ 体言、用言、格助詞など 
 ◦ 特定の語尾に紐づかない単語はCANCEL 
 ▪ 助動詞:助動詞を含む文の1.3%(方言は加算せず)をCANCEL 
 ▪ 終助詞:終助詞を含む文の21%(方言は加算せず)をCANCEL 
 

  33. ちなみに...
 語尾が変わると、会話破綻の許容範囲も変わる。 
 e.g., /って感じね/ 
 
 
 
 


    
 単純に作れるとはいえ、文末調整をしたほうが返答文が短縮される。 
 (e.g., 忘れちゃったんだよね - > 忘れちゃったって感じね | 忘れちゃったんだよねって感じね) 
 • 「”最高” + って感じね」 
 • 「”美しい” + って感じね」 
 • 「怒られ”た” + って感じね」 
 • 「頑張って”ます” + って感じね」 
 • 「心ここにあら”ず” + って感じね」 
 • 「同じ過ちを繰り返す”まい” + って感じね」 
 • 「やってやろ”う” + って感じね」 
 • 「昨日”の” + って感じね」 
 • 「来週”ぐらい” + って感じね」 
 • 「今年”こそ” + って感じね」 
 • 「ああしておけ”ば” + って感じね」 
 • 「これにしよう”か” + って感じね」 
 • 「お花きれいだ”な” + って感じね」 
 • 「おかしいだろ”が” + って感じね」 

  34. おうむ返し::3.語調整形
 POINT3.1: 語尾を付け替えられるようにして語調整形する 
 キャラクター性は語尾に現れる。 
 • “最高” + なんですね

    
 • “最高” + ってか
 • “最高” + なんやな
 • “最高” + なのでございますわね 
 話し手の言葉が混じっても違和感はあまりない(あくまで主観) 
 (e.g, 「やっちゃった + のでございますわね」) 

  35. おうむ返し::3.語調整形
 文中の単語によって返答文を振り分けることも可能 
 • e.g.1, 条件を満たした単語の品詞から語尾を振り分け(今回の実装) 
 (e.g.1.1,「最高 + なんですね」)

    
 (e.g.1.2,「美しい + んですね」) 
 • e.g.2, CANCELした単語の場合に別の語尾を付与 
 (e.g.,「どうしよう”か”な + と思ったんですね」) 
 • e.g.3, CANCELした単語に応じて定型文を返す 
 (e.g.,「どうしようかな」-> 「んー、どうですかねー・・別の話をしましょうか。」) 
 

  36. 過去形を表す言葉は、日本語(口語)においては過去・完了の助動詞「た(だ)」のみ。 
 (文語では「き」「けり」「つ」「ぬ」も含まれる) 
 「おうむ返し」においては過去なのか完了なのか識別は不要(「た」があれば「た」を返す) 
 
 だが、時制のない文節が前文節と同一時制(過去・完了)となるケースがある。 
 (e.g.,

    昨日ホテルに泊まったんだけど、子供が熱出しちゃって → 子供が熱出しちゃうんですね (?)) 
 → 文中や文を跨いだ時制の考慮が課題。今回は破綻も大きくないため対応せず 
 語尾の時制
 ref. 『現代日本語書き言葉均衡コーパス』形態論情報規程集 第4版(下) https://repository.ninjal.ac.jp/?action=pages_view_main&active_action=repository_view_main_item_detail&item_id=2872&item_no=1&page_id=13&block_id=21
 
 

  37. 立場の変換::一人称
 一人称(e.g.,「私」)のみ、立場の入れ替えが必要 
 (「あいつ」「彼」など二人称、三人称は対応不要) 
 
 ただ必ずしも会話破綻と言えるほどではない(e.g., 私は頑張ったんですね) 
 →

    むしろ変更により会話破綻するリスクがあるため入れ替え対応はしない 
 
 たとえば以下のようなケースがある。 
 (e.g., 俺らは頑張った -> あなたらは頑張ったんですね) 
 (e.g., 自分でやることは大事 -> あなたでやることは大事) 
 

 ref. https://ja.wikipedia.org/wiki/日本語の一人称代名詞
 

  38. 立場の変換::敬語
 敬語も立場の変換が必要となるもの。 
 POINT3.2: root以降に「です」「ます」を含む場合は変換 
 概ね文末調整で対応可能だが、以下のようなケースが対応できないため対応 
 (e.g., 行ってきました

    -> x: 行ってきましたんですね) 
 
 また敬語となる動詞等(e.g., いらっしゃる)には、今回対応しない。 
 • 「今日のできごと」というタスク的に話し手が敬語である必要がない 
 • 敬語のままのほうがいいケースもある 
 (e.g., いらっしゃいの掛け声が苦手で -> 来なさいの掛け声が苦手なんですね) 
 

  39. 3.語調整形::まとめ
 • 語尾を付け替えられるようにして語調整形する 
 • 命令形はそのままの活用形を残す 
 • 時制のない文節でも過去形となるケースがあり課題(今回は対応しない) 


    • 微妙な表現差異を吸収するオプションはあってもいい(今回は対応しない) 
 • 一人称の変更は会話破綻リスクがある(今回は対応しない) 
 • 敬語の変換は「です」「ます」のみ対応 
 ◦ 文中の敬語はそのままのほうがいいケースもある 
 
 

  40. その他::発話タイミング
 音声対話を想定したとき、仮定形や仮定の接続詞を含む文だと 
 返答が速いことで会話が成立しなくなるリスクがある。 
 
 
 
 → ある程度の「間」を持たせて返答する必要がある

    
 
 
 
 
 話し手 :もし今日録画をし損ねても
 システム:録画をし損ねてもなんですね
 話し手 :ネトフリで配信されるの待てばいいから (会話破綻)
 話し手 :ネトフリあるから大丈夫。もし今日録画をし損ねても
 システム:うんうん
 (数秒間の沈黙)
 システム:録画をし損ねてもなんですね

  41. その他::固有名詞
 固有表現によって形態素解析が壊れることはよくある(KNP,cabochaも同様) 
 
 
 
 
 辞書は必須。neologdは更新が止まっている 
 GiNZAであればsudachiのユーザー辞書に追加可能

    
 wikipediaのdumpデータをクロールすれば20日以内に有名な固有名詞を取得できそう 
 (e.g,, titlesから表記を取得して固有名詞として登録。読み仮名は音声合成タスクに譲る)(精査は必要)
 ref. https://dumps.wikimedia.org/jawiki/ 
 ref. NEologdは2020年8月から更新が止まっている -> https://zenn.dev/en3_hcl/articles/8110a904e30229 
 $ ginza ずとまよ # text = ず 1 ず ず AUX 助動詞 _ 0 root _ SpaceAfter=No|BunsetuBILabel=B|BunsetuPositionType=ROOT|Inf= 文語助動詞 -ズ,終止形-一般|Reading= ズ # text = と 1 と と ADP 助詞-接続助詞 _ 0 root _ SpaceAfter=No|BunsetuBILabel=B|BunsetuPositionType=ROOT|Reading= ト # text = まよ 1 ま ま ADJ 感動詞-フィラー _ 0 root _ SpaceAfter=No|BunsetuBILabel=B|BunsetuPositionType=ROOT|Reading= マ 2 よ よ PART 助詞-終助詞 _ 1 mark _ SpaceAfter=No|BunsetuBILabel=I|BunsetuPositionType=SYN_HEAD|Reading= ヨ
  42. おうむ返し::まとめ
 例題であげたケースは、以下のように返答文が生成される 
 反応が思ったより良かった 
 -> 思ったより良かったんですね
 
 東京オリンピック楽しみ
 ->

    東京オリンピック楽しみなんですね
 
 チョコレート二個あーいや三個食べた
 -> 三個食べたんですね
 
 ここでの開発作業の遅延が並行して進んでいるタスクの半分以上に悪影響を与えてしまう
 -> 悪影響を与えてしまうんですね
 
 私は頑張った
 -> 私は頑張ったんですね (今回、一人称は整形しない)
  43. おうむ返し::まとめ
 • 出来る限り単語の連なりを分解しない 
 • Universal Dependenciesが有効なのは「Token抽出」まで 
 ◦ 返答文の短縮が可能

    
 ◦ 言い換えの判別が課題 
 ◦ Universal Dependenciesでなくても実現可能 
 • 文末調整は「品詞」と「単語の意味」でハンドリング 
 ◦ Universal Dependenciesでは判断誤差リスクあり 
 ◦ 恣意的な条件設定での実装となる 
 ◦ 語尾によって許容できる言葉が変わる 
 • 語調整形は「語尾」に対応 
 ◦ キャラクター性は語尾に現れる 
 ◦ 語尾以外の整形オプションはあってもいい 
 ▪ 「てる」→「ている」、「じゃない」→「ではない」 
 ◦ 敬語はすべて整える必要はない 

  44. End