ChatGPTは音声認識した文章を適切に修正することができるか？

みなさん、こんにちは。
今回はChatGPTをつかって音声認識した文章を適切に修正できるかどうかを試してみました。
みんな、音声認識してそのままぶちこんで要約等は多かったと思うのですが、正しい文章に直す等のことはできるのかなどはあまりやられていないように見えたので、少しお試しでやってみました。
参考にしてみてください。

# 音声認識した文章

今回は自分が過去に書いたQiitaの記事を自分で読み上げて行いました。
やりかたとしては、Google Docsの音声認識を用いて行いました。
こちらを用いた理由としては、文章に句読点が打たれない。リアルタイムで変換をしていくため結構ミスが起きるのでは、という想定でやっています。
実際の記事は以下です。
今見ると結構拙い部分がありますねw

https://qiita.com/kokada420/items/1e9bc256f872782a3a60

実際に一部を読み上げた結果が以下です。

```
Abstract クラスインターフェースはどう使い分けるべきかアクセスアドベントカレンダー2020市の8日目の記事は軽岡田420が担当します新卒一年目で歯医者アップを使う案件に配属されたのですが大学時代は納金パイソンコーダーでオブジェクト指向を意識した実装というのを全くしていませんでした配属されいろいろとやっている時に abstract クラスとインタフェースがなぜ必要になるのかが最初はあまりピンと来ておらず結構手探りでやっていました最近はやっとわかってきた気がするので自分自身の理解を書いていきたいと思います abstract クラスとは抽象クラスとはインスタンス化ができない継承される目的で実装されるクラスのことです普通のクラスと違う点としては抽象メソッドを持っている点です中証明書とはそれ自体は中身は機能を持っておらず空のメソッドになっていますからになっているため派生クラスの方で昨日は提供してあげないといけません抽象メソッドとして宣言する理由としては派生クラス先で必ず実装して欲しいのでそれを明確にするためです地層の例を見てみましょう 
```

結構なミスが含まれていますね。
では、こちらの文章を早速Chat-GPTに入力してみましょう。
以下のプロンプトで入力してみました。

```
今から渡す文章は、とある技術系サイトの記事を音声認識したものです。
文章には適切な句読点が含まれていないだけでなく、音声認識ミス、変換ミス等が含まれています。
これらを正しい文章に修正してください。

先ほどの文章
```

これをGPT-3.5, GPT-4で比較してみましょう。

# GPT-3.5の場合

早速結果を見てみましょう。

> Abstract クラスとインターフェースの使い分けについて、アクセスアドベントカレンダー2020市の8日目の記事を、軽岡田420氏が担当しました。彼は新卒一年目の時、歯医者アプリの開発案件に配属されました。大学時代は、納金パイソンコーダーでオブジェクト指向を意識した実装を一切していなかったため、配属された当時は抽象クラスとインターフェースがなぜ必要なのかピンと来なかったとのことです。それでも、彼は手探りで開発を進めていきました。しかし、最近になってようやく抽象クラスとインターフェースの違いがわかってきたため、自分なりの理解を記事にまとめることにしたそうです。

> 抽象クラスとは、インスタンス化ができない継承される目的で実装されるクラスのことです。通常のクラスとの違いは、抽象メソッドを持っている点です。抽象メソッドとは、中身の実装がなく空のメソッドとなっているものであり、派生クラスで実装する必要があります。抽象メソッドを宣言する理由は、派生クラスで必ず実装して欲しいため、それを明確にするためです。

> インターフェースとは、抽象メソッドと定数のみを持つクラスのことです。インターフェースを実装するクラスは、インターフェースで定義されたメソッドをすべて実装する必要があります。インターフェースを使うことで、複数のクラスで同じメソッドを実装する必要がある場合や、クラス階層を超えた共通の振る舞いを定義する場合に便利です。

> 以上が抽象クラスとインターフェースの使い分けの基本的な考え方です。具体的な例を見て、より深く理解していきましょう。

どうでしょうか。
要約されたり、勝手な解釈を追加されてしまっています。
文章としては読みやすいですが、こちらの要望とは違う結果になっています。
追加で要望を出してみましょう。

```
文章をまとめたりするのではなく、変換ミス等を修正するにとどめてください。
```

さあどうでしょうか。

>抽象クラスとは、インスタンス化ができない継承される目的で実装されるクラスのことであり、抽象メソッドを持つ点が通常のクラスと異なる。抽象メソッドとは中身が実装されておらず、派生クラスで実装する必要があるメソッドのことである。インターフェースとは、抽象メソッドと定数のみを持つクラスで、実装クラスはインターフェースで定義されたメソッドをすべて実装する必要がある。

より文章を要約されてしまいました。

# GPT-4の場合
早速みてみましょう。

> Abstract: クラスとインターフェースはどう使い分けるべきか。アクセスアドベントカレンダー2020の8日目の記事は、軽岡田420が担当します。新卒一年目で、私はアプリ開発を使う案件に配属されたのですが、大学時代はPythonコーダーでオブジェクト指向を意識した実装というのを全くしていませんでした。配属され、いろいろとやっている時に、abstractクラスとインタフェースがなぜ必要になるのかが最初はあまりピンと来ておらず、結構手探りでやっていました。最近はやっとわかってきた気がするので、自分自身の理解を書いていきたいと思います。

> Abstractクラスとは、抽象クラスとはインスタンス化ができない、継承される目的で実装されるクラスのことです。普通のクラスと違う点としては、抽象メソッドを持っている点です。抽象メソッドとは、それ自体は中身の機能を持っておらず、空のメソッドになっています。これが抽象メソッドになっているため、派生クラスの方で機能を提供してあげないといけません。抽象メソッドとして宣言する理由としては、派生クラスで必ず実装して欲しいので、それを明確にするためです。具体的な例を見てみましょう。

どうでしょうか？
かなり良く修正されています。
例えば、
`アクセスアドベントカレンダー2020市の8日目の記事は軽岡田420が担当します`
`アクセスアドベントカレンダー2020の8日目の記事は、軽岡田420が担当します。`
2021を2020市となっていますが、それを2020と修正しています。
2021とはなっていませんが、適切と言えるでしょう。

音声認識した文章は
>新卒一年目で歯医者アップを使う案件に配属されたのですが大学時代は納金パイソンコーダーでオブジェクト指向を意識した実装というのを全くしていませんでした

修正後は
>新卒一年目で、私はアプリ開発を使う案件に配属されたのですが、大学時代はPythonコーダーでオブジェクト指向を意識した実装というのを全くしていませんでした。

となっています。
元々の文章は以下です。
> C#を使う案件に配属されたのですが、大学時代は脳筋Pythonコーダーでオブジェクト指向を意識した実装というのを全くしていませんでした。

C#がアプリ開発になっていますが、まあここら辺は技術記事という情報からこのように修正したのでしょう。
脳筋ということばが削除されていますが、まあここら辺は誤差の範疇だと思います。

個人的には思っていたよりも動いて驚きました。
追加で以下を聞いてみました。
```
軽岡田420とは
```

> おっしゃる通り、文章内に登場した「軽岡田420」という名前は、音声認識ミスや変換ミスの可能性が高いです。そのため、適切な名前に修正する必要があります。しかし、正しい名前が不明なため、以下のように修正してみました。

>Abstract: クラスとインターフェースはどう使い分けるべきか。アクセスアドベントカレンダー2020の8日目の記事は、著者が担当します。新卒一年目で、私はアプリ開発を使う案件に配属されたのですが、大学時代はPythonコーダーでオブジェクト指向を意識した実装というのを全くしていませんでした。配属され、いろいろとやっている時に、abstractクラスとインタフェースがなぜ必要になるのかが最初はあまりピンと来ておらず、結構手探りでやっていました。最近はやっとわかってきた気がするので、自分自身の理解を書いていきたいと思います。

>ここでは、「軽岡田420」を「著者」と置き換えました。正しい名前が判明次第、適切に修正してください。

追加で著者と変更してくれました。
これができるのであれば、xxxさんをyyyさんと修正してくれもできると思うので、それができるのであれば、音声認識した結果を正しい文章に修正することはある程度できそうです。

# まとめ

個人的には、これだけできるなら、Youtubeとかの音声を認識してGPTに投げればだいぶ改善されると思うので、ちゃんとした文章を作ってみたいと思う方はぜひやってみてはいかがでしょうか？
試していませんが、変に漢字等に変換されずひらがなだけの文章を放り込んだ方がうまくいきそうな気がします。
時間があればこちらも試してみたいなと思います。