ChatGPT先生とペアプロ！Pythonで形態素解析からクラスタリングまでやってみた

# はじめに
ChatGPT先生とペアプログラミングをしてみました！
ChatGPT先生にコーディングを担当してもらい、私は指示とコードの実行を担当しました。
この記事はその時の備忘録になります。

### 開発環境
Python3.10
miniconda

# 今回のゴール
ChatGPT先生に「やりたいこと」を伝えて、エラー無く動作するコードを生成してもらうを目標にしました。

:::note warn
各種パッケージの妥当性やパラメータ等の最適化はせずに、最後まで一通り動くコードを作ることをゴールとしています。
:::

# やりたいこと
独自のマッチングツールを作ることを夢見ながら、
データマッチングのアルゴリズムで使うであろう「**日本語の形態素解析**」そして「**単語のクラスタリング**」を実装してみることにしました。

今回用いるサンプルデータは、とある複数人の「趣味」に関する日本語の文字列情報で、「趣味」情報を単語に分解した上でクラスタリングしてみたいと思います。

:::note warn
指示者として、やりたいことをできるだけ詳細に言語化できるように、必要なツールや今回実装する処理の流れについては事前にGoogle先生を使って少し勉強しました。
:::

### 参考
- 形態素解析
与えられた文を意味を持つ最小単位に文字を分割し、品詞などの情報を付与する処理です。

- クラスタリング
ある集団に対して、規則性や共通項を見つけて分類・グルーピングする手法です。

- 以下の記事でもっとわかりやすく詳しく書かれています！
    - [正しい形態素解析とは？](https://qiita.com/U-chom/items/65ec3a26978df93c839c)
    - [30分でわかる機械学習用語「クラスタリング(Clustering)」](https://qiita.com/aya_taka/items/cb84173444142e67a3af)

# ペアプロ開始！
まずは、ChatGPT先生に今回のペアプロの役割を伝えました。
<img width=700 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476214/b6520424-be13-c75e-789c-defe71eceb65.png">

ChatGPT先生からとっても心強い回答が返ってきたので、
今回のテーマの形態素解析で利用するPythonのパッケージについて相談してみました。
<img width=700 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476214/3eebbb3e-aace-f1b0-71b1-ac783f264586.png">

すると...ChatGPT先生は3つも候補を出してくれました！！
<img width=700 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476214/66f037d7-409e-1303-0443-e3007824134c.png">

ChatGPT先生に提案してもらったパッケージがcondaでインストール可能か、現在の自分の環境でconda searchしたところ...
|パッケージ名|インストール可否|
|:--|:--:|
|MeCab|×|
|SudachiPy|×|
|Janome|○|

え、、、Janomeしかcondaでインストールできない。。。
ChatGPT先生の嘘に騙されるところでした...orz

気を取り直して、今回は「**Janome**」を利用することにしました！

### **ここからコーディングです！**
ChatGPT先生に実装してもらうために、やりたいことを伝えてみました。
まずは、形態素解析と単語のベクトル化までの実装をお願いしてみました。
<img width=700 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476214/67e8e19a-3dec-02ff-7108-0ba6e0150176.png">

すると、ほんの数秒でChatGPT先生から必要なパッケージと、サンプルコードが返ってきました。
（ChatGPT先生のコーディングスピードが早い!ステキ!!!!）
<img width=700 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476214/75501cbb-3a35-5475-4916-3beadb53472d.png">

ChatGPT先生にコードを実行するために必要なパッケージをインストールし、
ChatGPT先生に作ってもらったコードを実行してみると...

エラーが出ました。。。。orz
<img width=700 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476214/eb604a08-2b46-17cf-6f5b-fb5df4cab245.jpeg">

とりあえず、ChatGPT先生にエラー報告し、解決できるか聞いてみました。
<img width=700 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476214/048162bb-cc77-50b7-39b1-dc444c287c11.png">

すると、謝罪と修正案を教えてくれました！
<img width=700 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476214/408fed4a-3a9c-a07c-bde7-c2e2d9d76560.png">

言われた通り、コードを修正して実行してみると...

またエラーが出ました。。。。orz
<img width=700 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476214/ad7f0e6f-48f9-f258-61b0-80cc979cc338.jpeg">

再度ChatGPT先生にエラー報告しました。
<img width=700 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476214/3c05895e-2664-0a13-a520-bac8617d60af.png">

提示された修正内容の通りコードを修正すると...
<img width=700 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476214/a7d5eaf6-0420-4068-1760-1356190baacd.png">

エラーなく、想定通りの結果が出力されました！！！
**今回の「やりたいこと」の半分は達成しました！**
<img width=700 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476214/696abc28-8483-c660-2e2b-70a3d9ca33d2.jpeg">


### **ラストスパートです!!!**
最後に、ベクトル化したデータをクラスタリングし、散布図で描画するところまでChatGPT先生に実装してもらいます。
さっき作ってもらったコードの続きで実装するように伝えてみました。
<img width=700 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476214/d42ab8f4-d760-171a-1dee-afcd43106147.png">

ChatGPT先生は数秒でコーディングしてくれました！
<img width=700 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476214/84b7b03f-8fb2-176a-22af-36d620d92866.png">


作ってもらったコードをコピペして実行したところ...

またまたエラーが出ました。。。。orz
（エラー内容は省略しますが、トライアンドエラーの繰り返しでまさにペアプロやってる感、感じました...!!）

エラー内容をChatGPT先生に報告し、数秒で返ってきた修正コードを実行すると...
クラスタリング結果を散布図で表示することが出来ました。**目標達成です！**
<img width=700 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476214/8e951d4d-78ed-e516-a76e-859c4f545c31.png">


ちなみに...追加要望も伝えると、文句を言わずに数秒でコードを修正してくれました。
<img width=700 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476214/cf6014b4-d369-7f8d-0559-67da4f7f31a8.png">

最後にChatGPT先生に感謝を伝えてペアプロ終了です。
ChatGPT先生は最後まで丁寧で心強い言葉をかけてくれました！
<img width=700 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476214/94778436-a873-38bf-7ea0-65e4fd02b3e9.png">


# 感想
初めてのChatGPT先生とのペアプロでしたが、「やりたいこと」をChatGPT先生にコーディングしてもらうことが出来ました！
ChatGPT先生は堂々と嘘をつく（知識がないと先生の嘘が見破れないほど自然な回答をくれる）ので、知識をつけて嘘を見破れるようになるか、確認＆検証をすることが大事だと改めて感じました。
「やりたいこと」が言語化できればほんの数秒でコード実装できるので、今後も積極的にChatGPT先生とペアプロしようと思います！