プレイバック2023
ChatGPTで「自分専用校正ツール」を作ってみた話 by 日沼諭史
2023年12月22日 09:00
オーディオにもビジュアルにもほとんど無関係なネタで恐縮なんだけれども、2023年、ネットで最も話題になったことと言えばやはりAI。なかでもOpenAIのChatGPTはいい意味でも、そうでない意味でも一番注目を集めたのではないだろうか。
そんなChatGPTで早くからポテンシャルの高さが指摘されてきたのが、コーディング能力だ。日本語で簡単な指示をするだけで、面倒そうな処理のプログラミングコードもパパッと提示してくれる。自分で1から100までロジックを考えることなしに、何らかの機能を実現できるのは画期的だ。
このAIの力を借りれば、もしかしたら筆者がここ20年間くらいずっと温めてきたアイデアを実現できるのでは、と思った。それは、自分専用の校正ツールだ。大層なツールでもアイデアでもないが、これまでに何度か自力開発にチャレンジしてきたものの、ロジックを1から実現するのに時間がかかりすぎて挫折していた。
すでに世の中には校正ツールがたくさん存在する。それこそAIを活用したツールも少なくない。が、それらは自分の求めるものを満たしていないような気がしたし、なんといっても自分の使い方に合った自分のためのツールを作る、というのが大事なのだ。あと、AIの力で本当に1つの実用的なツールを作れるのだろうか、という疑問にも答えが出るかもしれない、なんて思った。
で、どういう校正ツールを作りたかったかというと、文章内の誤った(誤ってそうな)箇所を見つけてマーキングし、正しい(正しそうな)ワードを提示するというもの。これだけだとすごく簡単なように聞こえるかもしれないが、実際には考えるべき要素が盛りだくさんである。
まず使い勝手の面でスタンドアローンのアプリにすべきか、Webアプリにすべきか。Webアプリにするならクライアントサイドとサーバーサイドにどんな技術を採用するのか。開発言語の選択もそうだし、校正ツールということでテキストエディター部分をどう実装するのがベストなのか、といったことも考える必要がある。
ただ、20年もアイデアを温めてきたこともあり、そのへんのだいたいの構成は頭のなかにあった。たとえば校正処理はサーバー側で行なう形にし、RESTful API的な考え方で実装する。クライアント側はWebベースのテキストエディターにして、テキスト編集中に随時APIを呼び出しつつ、ほぼリアルタイムに誤字・脱字等を指摘する、といった具合だ。ちなみにAPI的な仕組みにしたかった理由は、なんとなくカッコ良さそうだったので。
とりあえず、頭の中にあるイメージをそのままChatGPTに突っ込んだのが下記のプロンプトだ(長すぎるので後半は省略した)。単純なツールだったはずなのに、考えれば考えるほど要件が増えてしまって、ChatGPTから「これは非常に大規模なプロジェクトの要件であり、全ての実装詳細を一度に提供することは難しいです」と言われ、段階的に実装していくことを提案されてしまった。
たしかに自力で開発しようとしていたときは、こういう段階を踏んで考えていくべきところをサボっていたなあと思う。面倒なので場当たり的に進めてしまい、でもそのうち必要なことが他にもたくさんあることがわかって気が遠くなり、挫折する結果になっていた。ChatGPTの提案は実に真っ当というか、「やっぱ最初からそこをやっておかなきゃだめだよなー」ということに改めて気付かせてくれたのだった。
さすがのChatGPT先生も、こんなめちゃくちゃな要件に対して「はい、これです!」みたいに完成版的なコードをポンとは出してはくれない。頼るにしても部分的にした方が良さそうだ。あと、このときはまだGPT-4のコンテキスト長が小さく、長々とやりとりしていると最初に提示した仕様やらコードやらをどんどん忘れて整合性が取れなくなることがままあった。なので、コードを修正したら都度チャットに貼り付けつつ指示していったりもした。コンテキスト長が大きくなった今はそのあたりの制限が緩和しているかもしれない。
そんなわけで毎週末、ChatGPTと対話しながら開発を続けた結果、校正ツールはなんとか形にはなった。クライアント側のテキストエディターにはVisual Studio Codeと同じエンジンのMonaco Editorを採用し、サーバー側の言語はPythonに。まずはローカル環境で動けばいいので、venvとFlaskによるローカルサーバーを立ち上げた(ChatGPTの提案でもある)。テキストを入力するとその内容をサーバー側で解析し、誤字・脱字などのミスが見つかると該当箇所を強調表示してツールチップで修正案を提示する、という動きになっている。
誤字かどうかの判定は自前の辞書データを使っている。正規表現などを用いてマッチングし、たとえば「Nvidia」という文字が見つかれば「NVIDIA」を、「一角をなす」という表現があれば「一角を占める」や「一端をなす」を提示する。他には商標の一般呼称への言い換え、類似表現、カッコの閉じ忘れ、一文の長さや読点の数などを提案・警告するための辞書データもある。筆者がこれまでに出会った(自分もやらかした)ありがちなミスを辞書化した感じだ。
加えて、文章を作成していくときには単純な誤字・脱字、表現自体のミス以外にも注意しなければならないところがある。「をを」とか「がは」のように助詞が連続していたり(たぶん編集時の消し忘れだろう)、「たとえば」が複数回使われていて文章が単調になっていたり、みたいな。このへんに対応するために形態素解析のライブラリも使うことにした。これによって文章を品詞ごとに色分けし、同じ品詞が現れる回数もグラフ表示することで、ミスしているっぽい箇所を見つけやすくしている。
さらに形態素解析をするなかで、1つ1つの語句の前後のつながりの自然さみたいなものを数値化したデータも得られる。このデータを使って文章全体をヒートマップ風に色分け表示するようにもした。つながりが不自然かもしれないところは色が濃くなるので、誤りに気付いたり、より自然な表現を検討したりもできる。
まだまだ作り込みたい部分が山ほどあるのだけれど、ここまででだいたい1カ月かかった。週末しか作業できなかったので、作業日数にすると6~7日間くらいだろうか。作ってきたなかで思ったのは、プログラミングにChatGPTが役立つことは確かだけれど、プログラミング知識ゼロで活用することはまず不可能だということ。ChatGPTが提示したコードそのままで想定通りに動かなかったとき、原因を探るにはいずれにしろコードを読まなければならないからだ。
先ほども書いたように、長々とやりとりしているとそのうち当初の仕様やコードの中身をChatGPTが忘れてしまう。なので、微妙に変化してしまうコードを現実に合わせて手元で修正していく必要もある。たぶんコードの半分くらいはChatGPTに頼ったけれど、残りの半分は自前。ライブラリの仕様などを正確に把握しながら作業するときにはむしろChatGPTは役に立たなかったりする。でも、ちゃんと実用的なツールを作り上げることはできた、と思う。
ここのところは生成AIへの注目度が高まっており、きっと2024年はさらにその傾向が強まるだろう。すでにそういうツールが登場し始めているが、クリエイターじゃなくてもハイクオリティな動画や音声を簡単に作り出せるようになるなど、AV Watch的にも面白い動きがどんどん現れるに違いない。AI関連の情報を追いかけるだけでも大変な今日この頃ではあるのだけれど、来年も楽しみの多い1年になりそうだ。