メインコンテンツに移動
デベロッパーのためのクラウド活用方法
AWS for Games logo featuring a white game controller icon and the text 'AWS FOR GAMES'.

品質管理に 生成 AI は使えるのか !? ~ テキストチェックを生成 AI にやらせてみた

2024-02-01 | Author : 中村 一樹

はじめに

ゲームなみなさんこんにちは!Game Solutions Architect の Kazuki です。
この記事では、生成AIをゲーム開発内のQuality Assurance (品質管理 / 以下、QA) の分野に活用できるかどうかを実際に試しながら可能性を探っていきます。

※QA とは : 品質管理のことで不具合がないか、面白いか、などゲームの品質を管理する業務のことです。

生成 AI の利用には注意点も多く、導入しにくいと感じている開発者も少なくはないと思います。しかし、注意点を正しく理解し、問題のない方法で活用すれば、様々な作業を生成 AI に任せることができ、開発者はよりクリエイティブな業務に注力することができるようになります。

今回は、ゲームテキストの誤字脱字などの校正作業を生成 AI で行うことができるかを、実際に試して確認していきます。作成物はプロンプトのみとなっているので、初心者でもわかりやすい内容となっていると思いますので最後までお付き合いいただけると幸いです。


X ポスト » | Facebook シェア » | はてブ »

builders.flash メールメンバー登録

builders.flash メールメンバー登録で、毎月の最新アップデート情報とともに、AWS を無料でお試しいただけるクレジットコードを受け取ることができます。

今すぐ登録 »

AWS for Games

AWS for Games はより早い開発、よりスマートな運営、そしてより楽しいゲームへの成長という BuildRunGrow の 3 つの柱に沿ってサポートします。今回は Build の柱、「 クラウドゲーム開発」の分野で生成 AI を利用したものになります。

Diagram illustrating the cloud game development lifecycle in Japanese, featuring stages for Build (クラウドゲーム開発), Run (ゲームサーバー, ゲームセキュリティ, ゲーム向けデータベース), and Grow (LiveOps, ゲーム分析, AI & ML), with icons representing each stage.

生成 AI の注意点

生成 AI の利用には、まだ多くの課題を抱えていることは事実です。2024 年 1 月現在、明確なルールや法律はなく、各国で様々な議論が行われています。知的財産権の侵害、誤情報の発生、機密情報の漏洩、セキュリティなどの問題について多く議論が交わされています。

ゲーム開発のようなクリエイティブな分野では、特に知的財産権への配慮が欠かせません。そのため、生成 AI 活用に大きなリスクを感じ、利用を控えている方も多いと思います。

しかし生成 AI には、開発効率を上げる可能性 (アイディア出し、QA 作業など)を秘めています。リスクにおそれ、全ての業務で使うこと自体を避けるのはもったいないと思います。このリスクをしっかり理解し利用できる業務で生成 AI を活用すれば開発者は今よりも多くの時間をクリエイティブに利用することができます。

このリスクを理解し生成 AI を利用する取り組みとして責任ある AI (responsible AI) というものがあります。AWS もこの取り組み を行っております。

責任ある AI を学び、リスクを正しく理解すればあらゆる分野で生成 AI を利用することができるようになるので、ぜひ一度目を通していただきたいです。責任ある AI には様々な分野で考え方がありますが、生成 AI 利用者が一番注意しなければいけない点としては「生成 AI によって出力されたものに責任を持つこと」とされています。出力をコントロールし責任を持つことができれば生成 AI の業務利用は可能です。

今回の QA サポート利用のような最終的には人間のチェックが入り、内容に責任を持つことができる業務であれば問題がないと考えられています。

校正作業を生成 AI に行わせるメリット

最終的に人間のチェックが入るのであれば生成 AI を使う意味はないのではないか、と思う方もいるかと思います。残念ながら、出力の精度にもよりますが、あらゆる作業において生成 AI のみに全て任せることは難しいと思います。

実は今回の目的は校正作業をすべて生成 AI に行わせることではなく、開発段階で気付くことができる単純な不具合を事前に検出することで不具合件数を減らすことです。

ゲーム制作にはゲーム自体を開発する部門とバグチェックや品質管理を行う部門があります。品質管理部門から不具合が指摘されると、開発部門は不具合を確認、判断、修正する必要がでてきます。不具合再現、原因箇所の特定、データやプログラム修正、確認を行い、品質管理部門に引き渡し、修正確認を行い、問題なければ完了という一連の作業が発生します。この作業は開発側で発見できていれば未然に防ぐことができたものです。

校正作業を生成 AI に行わせることができれば、明らかだが見落としがちな不具合を出さないことで、修正コストや部門間のコミュニケーションコストを下げることができます。

A Japanese infographic compares traditional proofreading and error detection processes with AI-assisted methods. The left side shows manual checking and communication issues between departments when errors occur, labeled '通常' (normal). The right side depicts an AI detecting errors in advance, eliminating common mistakes and reducing correction costs, labeled 'AI 活用' (AI utilization). The illustration includes friendly human and robot characters and an 'AWS for Games' logo.

校正作業とは

文字、文章の誤りを訂正する作業です。具体的には主に誤字、脱字、衍字、表記揺れといった4項目を確認していきます。

4 つの項目

誤字

間違って書かれた文字

(例)
アマゾン → アマソン(ゾがソになっている)
Amazon → Amozon(aがoになっている)

脱字

あるべき文字が抜けていること

(例)
アマゾン → アマン(ゾが抜けている)
Amazon → Amzon(aが抜けている)

衍字

誤って語句の中に入った不要な文字

(例)
アマゾン → アマゾンン(最後のンが余分)
Amazon → Amazonn(最後のnが余分)

表記揺れ

同音、同義の語句について異なる文字表記がされていること

(例)サーバーエンジニアがサーバを構築する(サーバーとサーバが混在している)

生成 AI で期待できること

すべて文章制作者が細心の注意を払って制作、確認を行なっていれば発生しないものかもしれませんが、自分で制作したものの間違いを見つけることは困難です。

誤字脱字衍字に関しては発見できるものもあるかもしれませんが、表記揺れに関しては文章全体での確認となってしまうため難易度が大きく上がり、発見は困難を極めます。特にゲームテキストのような複数キャラが会話する文章などに関してはあるキャラクターの一人称が、僕から俺に変わっているなど気づかないうちに表記揺れを起こしてしまっていることもあります。

開発側で他の人が確認する、といった運用もあるかもしれませんが、それでは人的なチェックコストが上がってしまいます。そのため生成 AI で上記のような校正作業を行うことで人的コストを上げずにバグ件数を下げるのとが期待されます。

生成 AI を使用して校正作業を行う

ここからは実際に生成 AI へ渡すプロンプト (命令文) を製作して校正を行わせます。生成 AI は AWS が提供している Amazon Bedrock 内の Anthorpic 社が提供している Claude を使用します。(使用するバージョンは v2.1)

プロンプト(命令文)とは

プロンプトとは人間から生成 AI に対して行動の指示を出す文章で、生成 AI の振る舞いを方向付けるものです。自分たちが求める結果を出力させるためには具体的で細やかなプロンプトの記述が必要になります。

今回は Claude を使用しているので日本語での記述が可能ですが生成 AI モデルによっては日本語が使えない場合もあります。また精度を上げるためには英語の方が良いとされています。理由としては英語の方が学習量が多いので英語の方が精度が高くなる傾向にあります。今回はわかりやすさとメンテナンス性を重視してプロンプトは日本語を使用します。

ここからはプロンプトを記述していく上での代表的なコツを紹介していきます。

プロンプトのコツ

役割を与える

生成 AI に対して「何をして欲しいのか」「役割」を記述します。このことで生成 AI は与えられた役割を演じることにより与えられたタスクの理解度が増し、役割に適した返答を行うようになります。

(例)
あなたは優秀な翻訳家です。英語を日本語に変換することが仕事です。

指示は丁寧に細かく簡潔に書く

指示を適確で細かく書くことで生成AIが出力する結果は大きく変わります。当たり前と思っていることでも記載していくことが重要です。生成 AI を一般的な知識はあるが、指示されないと動かない従順な自分の部下だと思い、その部下に仕事を行うために必要な手段や方法、情報を伝えるというイメージで記載していくことが良いです。”人間が理解しやすい指示書は生成 AI にも理解しやすい”ので必要な情報を丁寧に細かく、簡潔に書くことを心がけましょう。

(悪い例)
以下の文章を翻訳して下さい。ここから翻訳する文章が記載されています。
・・・・・・・・・・

現実世界でもこのような指示で作業を渡されることはあるかもしれません・・・。翻訳と書かれていたら日本人が対象であれば「日本語から英語」、もしくは「英語から日本語」が与えられた作業かもしれません。しかしそれは指示を出した本人にしかわかりません。

「対象の文章が日本語だったら英語だろ。そんなことあたりまえだろ」と言われるかもしれませんが、そもそも対象文章を読むまでその文章が日本語であることも分かりませんし、英語への翻訳も指示を出した本人にしかわかりません。本人にしかわからないことは指示として記述しなければなりません。

(良い例)
以下の文章は日本語で記述されています。この文章を日本語から英語に翻訳して下さい。
ここから翻訳する文章が記載されています。・・・・
・・・・・・

悪い例では抜けていた ”何語から何語に翻訳するのか” も記載されており、対象の文章が日本語であることも記載されています。このことで生成 AI は日本語を読む前提で対象文章を読み、その後、英語に翻訳するということをプロンプトから理解できます。

区切り文字を使用する(Claudeの場合はXMLタグ)

指示内容やデータなどをそのまま文章で書いていくと、どこからどこまでが指示で、どこからどこまでがデータなのか、わかりにくくなります。おそらく人間でも同じだと思います。

そこで区切り文字を利用しわかりやすくします。このことでプロンプトが読みやすくなるだけでなく、生成 AI もプロンプトを理解しやすくなります。Claude では区切り文字に XML タグを使用することで、タグ内の情報に注目するようになります。

(悪い例)
以下の文章はこのタスクで使用する文章です。
ここに使用する文章が記載されています。
・・・・・・・
・・・・・・・

タスクを行う際は以下のルールに従って下さい
ここにルールが列挙されています・・・・・
・・・・・・・
・・・・・・・

タスクで使用する文章をルールに従って変換して下さい

上記のプロンプトの場合、”タスクで使用する文章” がどこまでなのかわかりにくいです。もしかしたら「タスクを行う際は以下のルールに従って下さい」以下の文章もタスクで使用する文章の可能性があります。ルールにおいても同様のことが言えます。人間であれば何となくわかると思いますが、何となくでは精度が落ちてしまいます。

(良い例)
以下の <text> はこのタスクで使用する文章です。

<text>
ここに使用する文章が記載されています。
・・・・・・・
・・・・・・・
</text>

以下の <rule> はタスクを行う際のルールです

<rule>
ここにルールが列挙されています・・・・・
・・・・・・・
・・・・・・・
</rule>

<text> タグ内の文章を <rule> タグに記載されているルールに従って変換して下さい。

この場合タスクの対象文章は<text>タグで囲われた範囲なので「以下の<rule>は・・・」部分は対象外であることがはっきりわかります。ルールに関しては <rule> タグで囲われているのでわかりやすいです。そもそも人間が見ても良い例の方が見やすくわかりやすいと思います。人間が理解しやすいは生成 AI も理解しやすいです。

具体例を書く

これは Few-shot Learning と呼ばれるテクニックで、具体例を示すとより求める回答を得られる可能性が上がります。特に出力のフォーマットを指定したい場合などでプロンプト内にフォーマットの指示を書いてもうまく出力されない場合などには有効です。XML タグと組み合わせて具体例を入れることで精度を上げることもできます。

(良い例)
以下の <example> タグ内に回答の例を示します。このフォーマットに従って回答してください。

<example>
ここに具体例を入れる。・・・
・・・・・・
・・・・・・
</example>

この他にも様々なテクニックはありますがこの 4 つのコツを利用すればある程度行わせたい作業を行うことができるプロンプトを作成することができます。より精度を高めたい、このコツだけでは満足できない方は公式により多くのテクニックが記載させていますので こちら をご覧ください。

実際にプロンプトを書いていく

上記のコツも利用しつつプロンプトを実際に書いていきましょう。今回は生成 AI に校正作業を行わせます。使う生成 AI は上記に記載した Amazon Bedrock 内の Claude (v2.1) です。ここでは手軽に試すために AWS のマネージメントコンソールから確認しようと思います。

1. 準備する

Amazon Bedrock で Claude が既に使える方はこの項目は飛ばしてください。初めて使用する方は過去の builders.Flash 記事にて設定の方法が記述されているので、こちら の手順に従い使用できるようにしてください。

2. 作るものを決めてプロンプトを書いていく

今回は校正作業を行わせるプロンプトを書いていきますが、ただの校正作業ではゲームテキストである意味がありません。そこでゲーム内のキャラクター同士の会話文のチェックを行うプロンプトを記載していきます。

短い会話文ですがアマゾンとウェブという二人が会話している以下の内容をチェックさせます。

アマゾン「俺は川に行きたいい」
ウェブ「川はあぶないよ。山がいいな」
アマゾン「僕は絶対河だ」
ウェブ「アマンは本当にわがままだなぁ」
アマゾン「今日は絶対皮に行きたいんだ」

わざと誤字や脱字を含めた文章になっています。

一行目には「い」の衍字
三行目には「川と河の表記揺れ、もしくは誤字」と「俺と僕の表記揺れ」
四行目には「アマン」の脱字
五行目には「皮と川の表記揺れ、もしくは脱字」

これらの間違いを含めています。このうちどれくらいの指摘してくれるでしょうか。

あなたはゲーム開発会社のバグチェッカーで優秀な校正チェッカーです。会話文の誤字や脱字や衍字や文章全体の表記揺れをすべて見つけて指摘することが仕事です。
以下はあなたがこのタスクで使用する文章(<dialogue>)です。文章は日本語の会話文です。

<dialogue>
アマゾン「俺は川に行きたいい」
ウェブ「川はあぶないよ。山がいいな」
アマゾン「僕は絶対河だ」
ウェブ「アマンは本当にわがままだなぁ」
アマゾン「今日は絶対皮に行きたいんだ」
</dialogue>

以下は指摘する際に使用するルールです。しっかり覚えて理解して下さい。

<rule>
- 表記揺れを確認する対象は<dialogue>内の「」内の文章全てです。
- 表記揺れを確認する際は、同じ事物・概念を指していると考えられる単語の違いにも注意して指摘してください。
- 一人称と二人称の表記揺れに関しては注意深く確認してください。同じキャラクターが違う一人称は使いません。チェック対象は同じキャラクターの発言のみ指摘して下さい。
</rule>

Human:<dialogue>内には誤字、脱字、衍字、表記揺れが含まれています。<rule>内の内容すべてに従い、<dialogue>内の文章の文脈と意味の理解を深め、文字や単語のレベルでも注意深くチェックし可能な限りすべての誤字、脱字、衍字、表記揺れを指摘して下さい。

Assistant:

簡単なプロンプトとなりますが上記のプロンプトを作成しました。

役割の指定、XML タグでの区切り、詳しい説明、など具体例以外のコツを組み込んだ内容になります。この文章を AWSマネージメントコンソール内の Bedrock の Text の中に記述して実行してみます。

3. 作成したプロンプトを実行する

Screenshot of the Amazon Bedrock Text Playground interface showing a Japanese dialogue example with Claude v2.1. The interface includes a configuration panel for randomness and diversity, as well as a play (Run) button. The sample text box contains a Japanese conversation and corresponding task instructions.

Randomness and diversity内の数値を下げることでランダム性を減らすことができます。

今回はランダム性を下げた状態で実行します。最後に「Run」を押して実行します。

Assistant:
<dialogue>内の文章を注意深く確認しました。
アマゾンの発言の「いい」は「行きたい」の脱字だと思います。
ウェブの発言の「あぶない」の「ぶ」が衍字です。
アマゾンの発言の「僕」と後の発言の「俺」は同じキャラクターの一人称の表記揺れです。
アマゾンの発言の「河」は「川」の誤字だと思います。
ウェブの発言の「アマン」はアマゾンの誤字です。
アマゾンの発言の「皮」は「川」の誤字だと思います。
以上のポイントを発見しました。文脈と意味の理解を深めて確認しましたが、見落としがある可能性もあります。ご確認のほどよろしくお願いいたします。

概ね間違った部分が指摘されています。誤字や衍字といった指摘間違いや「あぶない」に関して謎の指摘をされていますが、指摘箇所に関しては及第点かと思います。

このレベルのプロンプトでもこれだけ指摘できているので、上記に記載したコツを駆使して、より良いプロンプトにチューニングできればより精度の高いものができます。

また現状出力のランダム性を下げた状態 (Claude ではパラメーターの Temperature や Top P,Top K の数値を下げる) でも若干のランダム性があるようで、時々「川」「河」「皮」の表記揺れの 2 つの内一つを指摘してくれない、「俺」と「僕」の表記揺れを見つけてくれない、などがありました。やはり文章全体から判断する表記揺れに関しては今のプロンプトだけでは難しいのかもしれません。ここは Few-shot Learning などで解消される可能性はあるので、まだまだこのプロンプトにはチューニングの余地がありそうです。

チューニングが完了し、校正作業の精度が高いプロンプトができた後はさらに拡張させることもできると思います。ゲーム内の専門用語やキャラクターの設定といった情報を追加したり、データフォーマットやゲーム特有の専門用語をリストとして渡すなど案件に応じたカスタマイズを行ったりすることで様々な案件に応用することができます。

さらに完成したプロンプトを使い、<dialogue> 部分を引数にして添削したい文章を受け取るような API を作ったり、WEB ツール化するなどカスタマイズすれば生成 AI を使っていることを特に意識する必要もなくやりたいことをさせることができる開発者が使いやすいツールにすることができます。すでに生成 AI の活用例として Amazon Bedrock を使用したソリューションもありますので こちら も合わせてご確認ください。

実際に自分たちで作ったプロンプトをどのようにツール化、ソリューション化していくかに関しては別の活用方法になりますが次回の記事で詳しく説明させていただきます。

最後に

今回は生成 AI を利用して誤字脱字、表記揺れなどの校正作業を行うことができるかどうかを実際に試してみて確認しました。これだけ少なく簡単に書いたプロンプトでも校正作業にはある程度使える、ということがわかりました。実際にここからチューニングすれば十分今回の要件を満たすものは作れると思います。私も引き続きチューニングやソリューション化を進めていこうと思います。

この他にも生成 AI のゲーム開発活用方法はまだまだあると思います。生成 AI 利用に関しては注意点などありますが、まずは使えるところから使えるレベルで利用していくと様々な恩恵を受けられると思います。

この記事が生成 AI をゲーム開発、運用に利用することで開発効率を上げてより面白いゲームを開発していくきっかけになれば幸いです。

筆者プロフィール

中村 一樹
アマゾン ウェブサービスジャパン合同会社 ソリューションアーキテクト

約14年ゲーム業界で開発に携わっていた元ゲームエンジニア。
「ゲーム開発者は面白いゲームを開発することに時間を使うべき」と考えており、それ以外のことはマネージドサービスやAIなどに任せれば良いと思っている。
趣味はフィットネスジムで汗を流すこと。格闘技系ワークアウトが好き。
2024年の目標はジムに行ける回数が減ったことによる運動不足が原因でついてしまったお肉を減らすこと。

A man in a casual shirt smiling indoors with natural light coming through the window in the background.