Shun氏の自己紹介と、本セッションのアジェンダ

Shun氏(以下、Shun):それでは、PR TIMES社の土屋が発表します。私の名前はShunといいます。PR TIMESに勤めていて、ソフトウェアエンジニアをやっています。

本日のアジェンダです。私の発表はどちらかというと、個人開発でChatGPTを使ったものを作って、それで実験をしてみたという内容になっております。

表題にもあるとおり、ChatGPTに文字コードのことを聞いてどんな反応をするかとか、どういうふうに認識をしているのか、これからどう活用できるかを調べてみたという内容になっています。

文字コードとは何か

Shun:それではまず、背景から説明します。(スライドを示して)まず文字コードとは何かという話ですが、文字コードを定義どおりに言えば、スライドに書いてあるものになるんですが、ちょっと難しいので噛み砕いて説明をします。

コンピューターっていうものは、みなさん知っているとおり、0、1でしか判断ができない。0、1を使って判断をしているので、文字をそのまま解釈させることはできないんです。私たちのコンピューターはどのように扱っているかというと、文字に一意な数字を割り当てて、それを使って処理をしています。

司会者:すみません。画面が切り替わっていないみたいなので切り替えられますか? 切り替わりました。大丈夫です。

Shun:文字に対して一意な数字を当てることによって、コンピューターが認識できるようにしています。例えば大文字のAだったら16進数の41が当てられていたり、Bだったら42が当てられていたりということがされています。

「絵文字とかだったら違うのか」と思う方もいるかもしれないんですが、絵文字もやはり1つの文字で、それにも数字が割り当てられています。

開発者が文字コードを使う場面は多いが、理解と記述には時間と労力が必要

Shun:我々開発者が文字コードを使う場面は、けっこう日常茶飯事なのではないでしょうか。例えばテキスト入力のバリデーションなんかはよくやることです。Eメールだったり電話番号だったり住所だったり、そういったテキスト入力のバリデーションをするタスクもあるし、検索エンジンなんかは、ユーザーが検索をしたクエリそのものだったり、あるいは検索される対象に対して文字コードを使って整理していくことはよくあることだと思います。

また、テキスト解析では同じ意味の言葉は同じ単語になっているほうがいいので、そのためにあらかじめ前処理というかたちで、データを正規化することがあります。

しかし、文字コードの理解と記述は非常に時間と労力が必要です。それは、ASCIIから始まり、近年デファクトスタンダードになりつつあるUnicodeになるまで、多くの過程を踏んでいくに従って、いろいろな文字コードが統廃合されたりなどの歴史があるからです。

しかし、我々は文字コードを使わないといけません。文字コードを使う頻度は非常に多いです。そんな文字コードの理解と記述の負担を減らすということは、今後我々の開発を促進させるために非常に重要なタスクだと考えています。

「ChatGPTを使って文字コードを扱う負担を軽減できるか」の調査項目

Shun:そこで私は、ChatGPTを使って文字コードを扱う負担を軽減できないかと考えました。

その仮説を基に、いくつか項目を調査してみることにしました。(スライドを示して)1つ目が、こちらのChatGPTが日本語として認識しているもので、次が括弧の検出。最後に、日本語特有の旧字体から新字体への変換を挙げています。

それぞれについて詳しく話していきます。ChatGPTが日本語として認識しているUnicodeの範囲ですが、文字種を日本語でよく使われている文字のみに制限したいというタスクがあります。それはどんなタスクというかというと、例えばユーザーの投稿から日本語で投稿されているもののみを抽出したいとか、そういったものがあったりします。

また、半角片仮名を取り出したいというタスクがあったりします。PR TIMESでもよくあるんですが、半角片仮名って意外とよく使われていて。ただし、その半角片仮名の意味は、全角片仮名とまったく変わらないんですよね。しかし、文字コードが違うせいで、コンピューターには別の言葉として認識されてしまいます。これはあまり良くないので、解析の時などには半角片仮名を全角片仮名に直すことをやったりします。

また括弧の検出ですが、こちらも同じように、記事タイトルから括弧を削除するようなタスクが存在します。実際にPR TIMESの記事を見てもらうとわかると思いますが、いろいろな括弧が使われています。角括弧に丸括弧に角括弧、普通の日本語の会話文で使われているかぎ括弧など、本当にいろいろな括弧が使われています。これら括弧を削除するタスクをやるのはけっこう大変で、Unicodeの表を自作したりする必要があります。

また、括弧の中身だけを取り出したいこともあります。PR TIMESでもよくあるのですが、会話文ではなくて、中の文字を強調したい時に括弧が使われることがあります。その括弧を取り出す時に、やはり括弧の正規表現を書かないといけないわけです。

最後に、旧字体から新字体への変換について話します。日本語の文字には旧字体と新字体という字形があって、私たちがよく使っている文字は、新字体と呼ばれるものです。旧字体でよく使われているものでいうと、木偏の「櫻」とか、髙(はしご高)と言われる字形がよく使われています。ですが、これらを変換するにはUnicodeの表を自作する必要があって、けっこう大変です。

実際どんな問題に当たるのかというと、貝偏の「櫻」と木偏の「桜」の検索結果を統一したいというタスクがあったとします。例えばお花見の場所を検索する時に、貝偏の「櫻」と木偏の「桜」で検索結果が違ったら、ちょっと嫌ですよね。

また、旧字体や新字体を統一して解析したいというタスクがあって、同じ意味を持つ文字なのに、文字コードが違うせいで違う文字として認識されてしまうのは解析に影響を及ぼしてしまうので、これらをChatGPTで直せたらいいなというのがあります。

検証手法

Shun:次に検証手法について話します。ここからが私が作ったものになります。ChatGPTのGPT-3.5については、2023年3月に調査しました。個人開発でCLIアプリを作っています。GPT-4に関しては2023年5月に調査しました。こちらに関してはWeb UIを使っています。

GPT-3.5について話します。「そもそもどうして自作のCLIアプリなんて作ろうと思ったんだ」という話があると思います。こちらについて説明します。

当時の状況としては、ChatGPTにプラグインとかがなく、1ユーザーとして個人定期購入することが、ちょっと微妙だった時期があったんですね。

一方で、無料枠だとつながらない時があって、それはそれでちょっと嫌だったので、なにかしらの方法で、定期購入より安くChatGPTを安定して使える環境が欲しいなと思っていました。

そこでいろいろ探してみたら、ChatGPTの従量課金制のAPIがOpenAIから公式で公開されていたので、こちらを使用することにしました。

自作アプリの使用ソフトウェアとしてはごくごく一般的な構成になっていて、コンテナを作成するためにDockerを動かして、その上でUbuntuを立て、Ubuntuの上でPythonスクリプトを動かす構成でやっています。

こちらに関しては、時間があったら話そうと思っていたんですが、今日はなさそうなので飛ばします。

(スライドを示して)こちらが完成した自作アプリです。コマンドラインからChatGPTと会話することができていると思います。緑の部分が質問で、回答の部分が赤色です。ここでは、回答と質問が1つしかないんですが、連続して質問したり会話を続けていくことが可能です。

調査の内容

Shun:次に、調査した内容について話していこうと思います。まず、日本語に関係するUnicodeの範囲を聞いてみました。GPT-3.5では平仮名と片仮名、漢字、全角アルファベットを提示しました。この全角アルファベットはけっこうおもしろくて、日本語に関係すると言われているんですよ。

なぜこれがおもしろいかというと、全角アルファベットは、欧米圏の人たちは使いません。なぜかというと、ASCIIだからです。ですが、日本語としては全角アルファベットがよく使われているので、スライドのように提示されたのだと思います。

また、当初は日本の携帯キャリアが絵文字を開発していたんですが、これが入っていないことから「Emoji」の国際化を感じて、感動した気分になりました。

ただし、これらの出力は完全ではないです。実際に調べてみると、アイヌ語などの拡張片仮名などが含まれていないことがわかります。

次に、GPT-4でも同じことを聞いてみました。すると、かなり正確な出力をするようになりました。(スライドを示して)赤線で囲っているように、拡張片仮名などもちゃんと含まれています。「Emoji」は同様に含まれませんでした。

次に、括弧の文字コードについて聞いてみました。私はPR TIMESで解析をやっている関係でUnicodeを調べていたことがあるんですが、全部調べると100個以上あってけっこう大変なんです。

括弧の文字コードを聞いた結果、かなり少ない感じになって、正確に出力できていないことがわかります。

括弧の判定に関して、GPT-4はたくさん表示するようになりました。一方で、括弧で囲われている文字、例えば(b)とか(a)とかの(環境依存)文字も表示するようになってしまっています。

出力は長いので全部書いてはいませんが、「Emoji」で麻雀牌の「中」のようなものも囲われている判定をしていて、なかなかおもしろいなと感じました。

次に、旧字体から新字体への変換です。よく使われているものであればGPT-3.5の時点でも十分精度が出ることがわかっています。

しかし、これに関して「正規表現を書け」と言うと、書けないんですよね。

GPT-4に聞いてみたところ、「そもそも旧字体から新字体に正確に変換することは非常に難しいタスクだ」と言われてしまいました。Unicodeのコンソーシアムの表とかを使ってもいいんだけれど、正確に当てるのはやはり難しいことのようで、残念ながらGPT-4の力を借りても難しいのかなと考えています。

ChatGPTを用いて文字コードを扱う負担を一部軽減することができる

Shun:結果のまとめです。GPT-3.5からGPT-4になるにつれて、どのタスクでも精度が上がっていることがわかりました。

次に、結論と次の目標を話していきたいと思います。結論としては、ChatGPTを用いて文字コードを扱う負担を一部軽減できると考えています。

例えば、Unicode検索での活用はできそうだなと思っています。

(スライドを示して)実際、スライドのようにUnicodeの範囲を半角括弧で出力してくれているので、ここを正規表現で抜き取ればうまく出力できる可能性があります。

また、解析の前処理での利用も考えられます。これはどちらかというと自然言語で自然言語処理をよく扱っている人ではなくて、あまりデータ解析に慣れ親しんでいない人でも前処理をできるようなシステムが作れるのではと考えています。さらに、検索や推薦システムでも利用できるかなと考えています。

今後の展望

Shun:まとめと今後です。一部のタスクにおいて、ChatGPTの力を借りて、プログラマーの文字コードを扱う負担を軽減できることがわかりました。今後の展望としては、文字コードの範囲を自然言語で検索できるようなアプリケーションの作成に取り組みたいと考えています。

最後に、当発表は2023年3月20日に行われたものを再編集、加筆したものです。再発表の機会をいただいたログミーTechのみなさま、本当にありがとうございました。また、この発表にいたるまで、本当にたくさんの人にお世話になりました。当発表に関わるすべてのみなさまに感謝申し上げます。ご清聴ありがとうございました。