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

キャラクターらしさ学習AI:多数のキャラクターの個性や違いの可視化による シナリオライティング支援システム事例

Cygames
September 08, 2017

キャラクターらしさ学習AI:多数のキャラクターの個性や違いの可視化による シナリオライティング支援システム事例

2017/09/01 CEDEC2017

Cygames

September 08, 2017
Tweet

More Decks by Cygames

Other Decks in Technology

Transcript

  1. サマリ シナリオ執筆者 チーム シナリオ監修者 (熟練執筆者) 監 修 依 頼 の

    負 荷 が 集 中 負荷が集中するため、 改善のサイクルが遅延 シナリオ執筆者 チーム シナリオ監修者 (熟練執筆者) キャラ毎の 「らしさ」判定AI AI AI AI AI 人 工 知 能 を 中 間 評 価 者 と し て 用 い た 高 速 な イ テ レ ー シ ョ ン (ほぼ)最終 稿を監修 AIによる 執筆支援 監修者は、最終的な成果物 のクオリティに集中できる 既存の膨大なキャラセリフのテキストから、その特定の「キャラクターら しさ」を学習して自動判定するAIを用いて、新規セリフを自動チェックす ることにより、監修者への負荷を減らし、チーム全体でのクオリティと開 発スピードの向上を実現 2/28
  2. 組織的シナリオライティングの問題点 キャラらしさに寄与 する要素の形式的記 述・伝達が困難 記号的なキャラの個 性が正しく表現され ているかのチェック コストが高い 既存の資源を利活用 する方法が少ない

    5/28 台詞中に含まれるキャラ らしさを完璧に記述する こと、他人にキャラらし さとは何かを伝達するこ とは困難 人称や語尾など事前に決 定されたルールに従って いるかは、人手でチェッ クされておりチェック者 の負荷が大きい ア イ ス く れ る の ? ……ありがとう。マ マ も お い し い っ て 言ってた……。 【プレイヤーさん】ありが とう 【プレイヤー】ありがとう 既存タイトルのシナリオ テキストなど高品質な データを保有していても、 「読んでみる」以外で活 用できない
  3. シナリオ資源のAI用データとしての活用 7/28 CSV シナリオデータ (エクセル) 学習AIへの入力データは名前とセリフを縦に並べたシンプ ルな形式のため、少ない工数で既存の資源を活用可能 キャラ1,昨日はよく眠れたかい?ボクは最近寝付きが悪 くてね…。,"レアリティ=R,タイプ=闇" キャラ1,海を見ていると不思議な気持ちになるね…。,"

    レアリティ=R,タイプ=闇" キャラ2,スポーツドリンクとかありませんか?喉乾い ちゃって。,"レアリティ=N,タイプ=炎" キャラ2,今日は天気が良かったので、ボク家から走って きちゃいました!,"レアリティ=N,タイプ=炎" キャラ3,…太陽…ちょっと眩しい…曇りの日の方が好き だな…,"レアリティ=R,タイプ=闇" 学習AI マクロなど で変換 入力
  4. 話し方・口癖要素の抽出 各キャラの話し方・口癖要素を網羅的に抽出するために、 セリフの部分文字列(N-gram)を使用 その後アイスも食べたいね! 野球の後のアイスって最高だね! <文頭>そ その の後 後ア …

    いね ね! !<文末> <文頭>野 野球 球の の後 … だね ね! !<文末> 2-gram(2文字ずつ)に分解 各部分文字列の数え上げ 10/28 アイ, イス, の後, ね!, !<文末>は出現回数が多いのでこのキャラに特徴 的とみなす 発話回数 野球 アイ イス の後 … ね! !<文末> 1 2 2 2 2 2
  5. 話し方・内容を合わせた総合ランキングにおい て、「お嬢様」が1位になっており、2位との 差も大きいので、入力したセリフは総合的に 「お嬢様キャラ」らしいセリフだと判断できる。 ▪クエリ: Rank By "冷たい紅茶をお願いできるかしら? " From

    “sample_narrative.csv” 執筆支援例:キャラらしい台詞の制作 シチュエーション:「お嬢様キャラ」の新しいセリフを作りたいが、 同じ タイトルの他のキャラに寄り過ぎていないか知りたい 分析したいセリフ セリフデータを分析対象に指定 11/28 キャラクターらしさ グラフが右に長いほ ど、入力したキャラ らしさが高い
  6. 執筆支援例:キャラらしい台詞の制作 内容・口調ともに分析対象の台詞は、同タイトルの他のキャラと差別化で きている「お嬢様らしい」台詞であると判断できる キャラクターらしさ(口調) 1位と2位の差が十分にある キャラクターらしさ(内容) 1位と2位の差が十分にある ▪クエリ: Rank By

    "冷たい紅茶をお願いできるかしら? " From “sample_narrative.csv” シチュエーション:「お嬢様キャラ」の新しいセリフを考えたいが、 同じ タイトルの他のキャラに寄り過ぎていないか知りたい 分析したいセリフ 12/28 セリフデータを分析対象に指定
  7. 台詞データと一般常識の統合 13/28 台詞から抽出された特徴行列と異なるドメインのデータ統合を、 行列で外部知識を表現することで可能にし、特徴抽出精度を向上 単語 関連度 天 気 野 球

    一 塁 天気 1 0 0 野球 0 1 0.5 一塁 0 0.5 1 一般度 天気 0.0017 野球 0.0061 一塁 0.0001 Wikipedia 記事 A 記事 C 記事 B 記事 D リンク構造に対して固有値 分解という処理を行うこと により、「他の記事の説明 に使用されるような一般的 な単語」度合いを測定 単語間の距離をリンク数 を測ることで単語間の関 連度を表す行列を作成 外部データとして、豊富な 情報量を持ち、単語の関連 をリンクとして保持する Wikipediaを使用 リンク 生成 生成
  8. 「言っていてもおかしくない単語」をキャラと関連づけるために、 単語関連度を用いて実発話していない単語の仮想発話回数を計算 単語関連度 紅茶 牛乳 レモンティー 紅茶 1 0 0.5

    牛乳 0 1 0 レモン ティー 0.5 0 1 実際の 発話回数 紅茶 牛乳 レモンティー 2 0 0 仮想的な 発話回数 紅茶 牛乳 レモンティー 2 0 0 言及していないが関連する単語の検出 14/28 「レモンティー」と言及したことが なくても、関連単語である紅茶を2回 発 話 し て い る の で 、 「 レ モ ン ティー」も1回発話したものとみなす
  9. 天気がいいから野球に行こうよ! その後アイスも食べたいね! 野球の後のアイスって最高だね! 2-gramの 数え上げ 発話 回数 野球 アイ イス

    … !<文末> 2 2 2 3 発話 回数 … !<文末> 3 一般的な単語を話し方の特徴量から除外することで、話し方と無 関係な文字列を取り除き、特徴抽出精度を向上 同一文字列の2重計上防止 一般的な単語(野球・アイ ス)に含まれる2-gramの除去 15/28 野球・アイスを取り除くことで、「野球」「アイス」が含まれる文におい てキャラらしさが不適切に高くなることを防ぐ。
  10. 17 ▪クエリ: Rank By "冷たい紅茶をお願いできるかしら? " From “sample_narrative+other.csv” 執筆支援例:他タイトルとの被り検出 シチュエーション:「お嬢様キャラ」の新しいセリフを考えたいが、

    他タ イトルの他のキャラと被っていないか知りたい 2タイトルのセリフを混ぜたデータを分析対象に指定 分析したいセリフ 「お嬢様」が1位になっているので、分析対 象の台詞は、他タイトルのキャラのと比較し ても総合的に差別化できていると判断できる。 17/28
  11. ▪クエリ: Rank By "冷たい紅茶をお願いできるかしら? " From “sample_narrative+other.csv” 執筆支援例:他タイトルとの被り検出 シチュエーション:「お嬢様キャラ」の新しいセリフを考えたいが、 他タ

    イトルの他のキャラと被っていないか知りたい 2タイトルのセリフを混ぜたデータを分析対象に指定 分析したいセリフ キャラクターらしさ(口調) 「お嬢様」が2位に なっているので口調の 差別化が不十分である と判断できる キャラクターらしさ(内容) 「お嬢様」が1位で、2 位との差も大きいので、 内容面では差別化でき ていると判断可能 18/28
  12. 比較対象の動的選択 データ・キャラ選択基準をAI使用者の需要に合わせて変化させる ため、独自開発したスクリプト言語で記述された内容に従って分 析内容を動的に選択可能 19/28 Rank By ”アイス食べたいな! " From

    “sample_narrative.csv” Grouping キャラ1 AS id:String == “キャラ1” Grouping キャラ2 AS id:String == “キャラ2” Rank By ”アイス食べたいな! " From “sample_narrative.csv” データに入っている キャラ全員と比較 2人だけを選択して比較
  13. ▪クエリ: Rank By “それは興味深い戦略だな” From “sample_narrative.csv” Grouping キャラA AS id:String

    == “キャラA” Grouping キャラB AS id:String == “キャラB” 執筆支援例:キャラクター間の違いの発見 シチュエーション:新人ライターさんに2人の頭脳派キャラの違いがどこ にあるかを理解してもらいたい ▪クエリ: Rank By “それは興味深い実験だな” From “sample_narrative.csv” Grouping キャラA AS id:String == “戦略キャラ” Grouping キャラB AS id:String == “実験キャラ” 分析対象を二人に絞った上で様々なセリフ文をランキング表示させること で、2人のキャラクターの特徴の違いを理解してもらう。 キャラA キャラB キャラA キャラB キャラAは「戦略」に反応 するが、キャラBは無反応 キャラBは「実験」に反応 するが、キャラAは無反応 キャラクターらしさ(内容) キャラクターらしさ(内容) 2人だけを 取り出す 20/28
  14. キャラらしさ学習AIのアーキテクチャ キャラらしさ学習AIのシステムは三層構造のアーキテクチャとし て設計。それぞれの層は独立しているので、開発効率が高い スクリプト 生成 21/28 エンジン スクリプト UI Rank

    By “今日はいい天気ですね” From “sample_narrative.csv” 分析内容の 指示 結果返却 可視化 シナリオ 執筆者 サーバサイド エンジニア AI開発者 レイヤー 操作者
  15. 三層アーキテクチャの利点 現場からの需要に対して各レイヤーの担当者が独立して対応でき るため改修担当者の負荷が分散し、迅速に対応できる 22/28 エンジン スクリプト UI Rank By “今日はいい天気ですね”

    From “sample_narrative.csv” Webエンジニア サーバサイドエンジニア AI開発者 ゲーム開発チームの要望 UIが 使いづらい! 新しい分析が したい! 結果が おかしい! UIが 使いづらい! 新しい分析が したい! 結果が おかしい! ゲーム開発チームの要望 学習AI 開発者 単一システムによる実装 三層アーキテクチャ 改 修 担 当 者 が 分 散 改 修 担 当 者 に 集 中 改善要望が集中するため、 全ての解決には時間がかかる 担当者が独立して改修可能 なため、要望に素早く対応可能
  16. 集合を定義 2つの集合を結合 2つの集合を分析対象ごとに比較 集合を分析単位に分割 分析 単位 集合 集合 集合 集合

    分析 単位 分析 単位 セリフ データ エンジン部 キャラクター分析に必要な操作は、閉包性を持った4つのオペレータに集 約可能であり、これらの操作を組み合わせるだけで現場で必要とされる多 様な分析に対して汎用的に対応できる。 23/28
  17. スクリプト処理部 24/28 スクリプト処理系を独自実装。パーサ・プランナ・エグゼキュー タの三層構造で設計することにより、各レイヤーの拡張性を担保 プランナで生成された 計画を元に分析を実行 プランナ Rank By ”アイス食べたいな!

    " From “sample_narrative.csv” 分析方法, 使用データ, グループ定義を読込む パーサ エグゼキュータ 実行結果 クエリ クエリを効率的に分析 するための実行計画を 生成 実行 計画
  18. まとめ キャラクター間の差別化要素を学習する、キャラらしさ学習AIの導入によ り、組織的シナリオライティングにおけるワークフローの効率化・品質向 上を実現 ライター自身による制作物の定量評 価を実現することで、監修者への負 荷集中を緩和 入力した台詞がキャラらしいセリフ になっているか、他キャラとの差別 化はなされているかを可視化

    シナリオ執筆者 チーム シナリオ監修者 (熟練執筆者) キャラ毎の 「らしさ」判定AI AI AI AI AI 人 工 知 能 を 中 間 評 価 者 と し て 用 い た 高 速 な イ テ レ ー シ ョ ン (ほぼ)最終 稿を監修 キャラクターらしさ(内容) キャラクターらしさ(口調) 25/28
  19. ▪クエリ: Rank By "これ、あなたが作ったの? " From “sample_narrative.csv” 執筆支援例:表記ミスの検出 シチュエーション:プレイヤーのことを「アンタ」と呼ぶキャラの台詞で 人称の表記ミスが起きていないか知りたい

    ▪クエリ: Rank By "これ、アンタが作ったの? " From “sample_narrative.csv” 正しい呼称(アンタ)のランキングと誤った呼称(あなた)のランキングを比較する と、誤った呼称のときは、呼称の間違いを捉えてキャラクターらしさの値が小さく なっていることがわかる。 キャラらしさの値が小さい キャラらしさの値が大きい 26/28 キャラクターらしさ(口調) キャラクターらしさ(口調)
  20. ▪クエリ: Rank By “そんなこと言ったらいけないんだぞ☆” WITH SuffixWeight(“だぞ☆”, 1.2) From “sample_narrative.csv” 実装予定の分析①

    語尾への重みづけ シチュエーション: 特徴的な語尾があることが分かっているキャラクター に対して、それを考慮したキャラらしさのランキング表示を行う “だぞ☆”という語尾に対して 正方向の重みを付ける 手動での分析結果のカスタマイズを実現することに より、「だぞ☆」という語尾を持つキャラの口調分 析において、現状の分析結果よりも、キャラの違い をより鮮明に反映し、判断の精度を向上させること が期待される。 27/28
  21. ▪クエリ: Rank By “sample_narrative.csv” From “another_title.csv” 実装予定の分析② 複数キャラの一括比較 シチュエーション:現在開発中のタイトルのキャラクターごとに、他の既 存タイトルのキャラクターと被っていないか一括でチェックしたい

    今まで台詞テキストを入れていたと ころにファイル名を入力 … … キャラ1 キャラ2 キャラN キャラクターごとの一括比較を実現す ることで、他タイトルとの比較を容易 に行える。特に複数の競合タイトルを 意識しながら多数のキャラクターの設 計を一度に行う開発初期段階において、 有用であると考えられる。 28/28