ChatGPT vs. 俺！AIの著作と人間の著作を比較

# はじめに
ChatGPT、楽しいですよね。
というわけでなんとなく色々なことをお願いしている中で歌を作ってもらいました。

# 問題のChatGPT出力
## プロンプト
チョコボに関する歌詞を作ってください

## 出力
```text: ChatGPT output
Verse 1:
黄色い羽毛が揺れる、チョコボの背に乗って
風を切りながら、新しい世界へと旅立つ
背後には過去の足跡、前には広がる未来
チョコボに駆られ、新たな冒険を始める

Chorus:
チョコボ、チョコボ、君は僕の友達
一緒にいれば、どんな困難も乗り越えられる
山を越え、谷を抜け、遠くまで旅をする
チョコボ、君は僕の心の支え

Verse 2:
初めて出会った時、君の元気な鳴き声に心惹かれた
跳ねる君の様子が、僕を喜ばせる
数々の敵に立ち向かい、数々の冒険を経て
君と一緒にいると、僕は自信を持てる

Chorus:
チョコボ、チョコボ、君は僕の友達
一緒にいれば、どんな困難も乗り越えられる
山を越え、谷を抜け、遠くまで旅をする
チョコボ、君は僕の心の支え

Bridge:
旅は長い、途中で泣きそうになっても
君がいるから、何も怖くはない
僕ら二人、共に進みながら
困難を乗り越え、未来を掴む

Chorus:
チョコボ、チョコボ、君は僕の友達
一緒にいれば、どんな困難も乗り越えられる
山を越え、谷を抜け、遠くまで旅をする
チョコボ、君は僕の心の支え

Outro:
さあ、チョコボ、旅に出よう
未知の世界を探索しよう
冒険の果てに待つものがある
チョコボ、君は僕の大切な友達だ
```
なんかいい感じですね。でもちょっと待って。

# 問題の俺知能出力
## プロンプト
チョコボのテーマに合わせて歌える曲がほしい。

## 出力
```text: My output
【ちょっちょこちょこぼ】

ちょーこぼ ちょこちょこ ちょーこーぼー
さあ 君を乗せて そう どこまででも
ちょーこぼ ちょこちょこ ちょーこーぼー
そう 遥か彼方 さあ 夢を乗せて
ちょーこぼ ちょこちょこ ちょーこーぼー
そう 見たことのない 世界の果て
いつでも行こうよ その場所へ
さあ ちょっちょこちょこぼ
そう ちょっちょこちょこちょこ
ちょーこぼ ちょこちょこ ちょーこーぼー
さあ 君と共に そう いつまででも
ちょーこぼ ちょこちょこ ちょーこーぼー
そう 遠く彼方 さあ 希望乗せて
ちょーこぼ ちょこちょこ ちょーこーぼー
そう 来たことのない 未知の大地
いつでも行こうよ その先に
さあ ちょっちょこちょこぼ
そう ちょっちょこちょっこちょーこーぼ

ちょーこぼ ちょこちょこ ちょーこーぼー
そう 見たことのない 世界の果て
いつでも行こうよ その場所へ
さあ ちょっちょこちょこぼ
そう ちょっちょこちょっこちょーこーぼ

ちょーこぼ ちょこちょこ ちょーこーぼー
そう 夢と共に そうどんなときも
ちょーこぼ ちょこちょこ ちょーこーぼー
そう いつの日にも そう こんなときも
ちょーこぼ ちょこちょこ ちょーこーぼー
そう 僕らが知らない 未来の日々
いつかは行こうよ その時代(とき)に
そう ちょっちょこちょこぼ
そう ちょっちょこちょこちょこ
ちょーこぼ ちょこちょこ ちょーこーぼー
さあ 君を乗せて そう 何処まででも
ちょーこぼ ちょこちょこ ちょーこーぼー
そう 遥か彼方 さあ 夢を乗せて
ちょーこぼ ちょこちょこ ちょーこーぼー
そう 見たことのない 世界の果て
いつでも行こうよ その場所へ
さあ ちょっちょこちょこぼ
そう ちょっちょこちょっこちょーこーぼ

ちょーこぼ ちょこちょこ ちょーこーぼー
そう 見たことのない 世界の果て
いつでも行こうよ その場所へ
さあ ちょっちょこちょこぼ
そう ちょっちょこちょっこちょーこーぼ
```
まあ要はこれ自作ポエムなんですが、ChatGPTの出力と**半分ぐらい似ている気がしません？**

# 類似度を調査してみよう
とはいえ、本人が似てる似てると言っても主観でしかありません。
計算機科学の力で検証してみましょう！

## 類似度の算出方法
今回は下記記事で紹介されている「 Doc2Vec 」を利用しました。
[Word2Vecの進化形Doc2Vecで文章と文章の類似度を算出する](https://qiita.com/okappy/items/32a7ba7eddf8203c9fa1)

Doc2Vecのモデル作成にはWikipedia日本語版の記事本文データを利用しました。

## 算出の方法
ChatGPTの出力に似ている文章を、その他のモデル作成に含ませた中から出力させます。
(デフォルトの上位10件分)
また「チョコボ」と言う単語に類似度算出が引きずられていないかを確認するため、自作ポエムの意味を反対にした歌詞、並びに「ちょーこぼ」「ちょーこーぼ」等の表記ゆれを「チョコボ」に変換する前処理を行った文章をモデル生成の際合わせて対象にします。

## 算出環境
- HPE ProLiant ThinMicro + vmware ESXi
- Intel(R) Xeon(R) CPU D-1518 @ 2.20GHz より 4vCPU
- RAM 16 GB
- HDD 64GB
- Ubuntu 22.04 LTS Server

## 環境準備

```text:shell
# apt install python3 python3-pip
# apt install mecab libmecab-dev mecab-ipadic-utf8
# pip install scipy
# pip install gensim
# pip install MeCab
# pip install wikiextractor

$ mkdir ~/python
$ mkdir ~/python/wikipedia
$ cd ~/python/wikipedia
$ wget https://dumps.wikimedia.org/jawiki/latest/jawiki-latest-pages-articles.xml.bz2
$ wikiextractor jawiki-latest-pages-articles.xml.bz2 -o ./json --json
$ mkdir ~/python/text
$ cd ~/python/text
(調査対象テキストファイルのコピー)
$ cd ~/python
$ vi check.py
$ python3 check.py
```

Wikipediaの記事データはJSONファイルから読み込みます。
ChatGPTと本記事著者が作成した歌詞、及びスクウェア・エニックスさんの公式サイトから「チョコボ」を含むページの本文をモデル生成時に合わせて読み込ませます。

```python:check.py
import os
import json
from glob import glob
import MeCab
from gensim.models.doc2vec import TaggedDocument, Doc2Vec

files = glob('/home/user/python/text/*.txt')
files.sort()

cnt = 0
text = []
text_source = []
for file in files:
    print(cnt, end=":")
    cnt += 1
    print(file)
    with open(file,encoding="utf-8") as f:        
        text.append([f.read()])
        text_source.append(file)

pathes_in_json_dir = glob('/home/user/python/wikipedia/json/**', recursive=True)
pathes_in_json_dir.sort()

print("--------------")
print('json load start')

for path_in_json_dir in pathes_in_json_dir:
    if os.path.isfile(path_in_json_dir):
        with open(path_in_json_dir, 'r') as f:
            lines = f.readlines()
            for line in lines:
                data = json.loads(line)
                if len(data['text']):
                    text.append(data['text'])
                    text_source.append(data['title'])
                    cnt += 1
                    if cnt % 100000 == 0:
                        print(cnt)

print(str(cnt) + 'total count')
print('json load end')
print("--------------")
cnt = 0
m = MeCab.Tagger("-Ochasen")
text_wakati= []
print('wakati start')
for w in text:
    cnt += 1
    if cnt % 100000 == 0:
        print(cnt)
    text_wakati.append([d.split()[0] for d in m.parse(w[0]).splitlines()])
print(str(cnt) + 'total count')
print('wakati end')
print("--------------")

cnt = 0
doc_train = []
print('doc_train append start')
for words in text_wakati:
    doc_train.append(TaggedDocument(words,[cnt]))
    cnt += 1
    if cnt % 100000 == 0:
        print(cnt)
print(str(cnt) + 'total count')
print('doc_train append end')

print("--------------")
index = 0
print(text_source[index] + 'に類似している文章を探します...')
model = Doc2Vec(doc_train,dm=1, min_count=5, epochs=20)
sims = model.dv.most_similar(index)


print("--------------")
print('===== 類似文章 =====')
for sim in sims:
    print(text_source[sim[0]] + ', ' + str(sim[1]))
```

## 類似度の算出結果

```text:result
===== 類似文章 =====
/home/user/python/text/07_公式サイト本文.txt, 0.9569330811500549
/home/user/python/text/03_ちょっちょこちょこぼ_逆意味前処理済.txt, 0.9538346529006958
/home/user/python/text/04_公式サイト本文.txt, 0.9518446922302246
/home/user/python/text/06_公式サイト本文.txt, 0.9500634074211121
/home/user/python/text/05_公式サイト本文.txt, 0.9492642879486084
/home/user/python/text/02_ちょっちょこちょこぼ_前処理済.txt, 0.944145679473877
/home/user/python/text/09_公式サイト本文.txt, 0.9267297983169556
チームミヤタ, 0.9167235493659973
馬のダンス, 0.9164607524871826
/home/user/python/text/08_公式サイト本文.txt, 0.9152954816818237
```
ChatGPTの出力と自作ポエムが似ているかという**微妙ですが**、人間が書いた「チョコボ」に関する文章との類似性は認められそうですね。

というか**意味を反対にした歌詞に負けるんじゃないよ。 > 俺**

なお、トップテン入りしたWikipediaの記事の方々はおめでとうございます！(何が？)
- [チームミヤタ - Wikipedia](https://ja.wikipedia.org/wiki/%E3%83%81%E3%83%BC%E3%83%A0%E3%83%9F%E3%83%A4%E3%82%BF)
- [馬のダンス - Wikipedia](https://qiita.com/okappy/items/https://ja.wikipedia.org/wiki/%E9%A6%AC%E3%81%AE%E3%83%80%E3%83%B3%E3%82%B9)

# まとめ
- ChatGPTにチョコボの歌を出力してもらった
- ChatGPTの出力と**本記事著者の出力**についてDoc2Vecによる類似度の算出を行った
- 算出の結果、ChatGPTの出力と本記事著者の出力については**チョコボに関する文章である**程度の類似性があるものとみられる

# 特記
- 本記事はChatGPTの出力と著者の創作物を比較するものであり、それ以上でもそれ以下でもありません
- 「チョコボ」のキャラクター自体は「株式会社スクウェア・エニックス」の著作物です
- 「ちょっちょこちょこぼ」の歌詞は、著者の別名義「[村雨祐次郎](https://rainyvillage.jp/murasame/)」での作品です
- 「ちょっちょこちょこぼ」は著者(別名義を含む)による二次創作であり、本作品に関するお問い合わせは著者までお願い致します。