AIノエル・ギャラガーに新しい名言を言ってもらう

この記事は[リンク情報システム](https://www.lis.co.jp/)の「[2020新春アドベントカレンダー TechConnect!](https://qiita.com/dgkz/items/5131349d56354b33ee97)」のリレー記事です。
 engineer.hanzomonのグループメンバーによってリレーされます。

(リンク情報システムのFacebookは[こちら](https://ja-jp.facebook.com/lis.co.jp/))

最終日らしいです。頑張ります。
こんなニッチな記事が最終日で大丈夫か。

# ノエル・ギャラガー氏について

90年代のイギリスに現れた最高のロックバンド [OASIS](https://ja.wikipedia.org/wiki/オアシス_(バンド)) のギタリスト兼シンガー兼メインソングライターです。(弟のリアム・ギャラガーがメインボーカル)

ギャラガー兄弟は ~~口が悪い~~ 名言が多いことが有名で、

2人とも他のアーティストを名指しで ~~酷評する~~ 評価するインタビューが度々メディアに掲載されています。もちろんお互いに~~貶し合う~~意見を言うことも多々ありました。

(OASISは二人の兄弟喧嘩で2009年に解散)

※[Wikipediaの記事](https://ja.wikipedia.org/wiki/ノエル・ギャラガー) に色々書いてあるのでチェックしてみてください。

**私はノエル・ギャラガーを尊敬しています。**

彼の作曲した楽曲はイギリス、いや世界中のロックミュージックを代表する名曲ばかりだし、彼のインタビュー記事は他のどんな読み物よりも*ウィットに富ん*でユーモアがあります。

今回は彼の過去の発言をもとに**AIによって新しい名言を作成してみよう**という試みです。

# 過去の発言を集める
New Musical Express (通称:NME) がまとめた[50の名言](https://nme-jp.com/blogs/14222/)を手作業で抜き出します。
　　→抜き出してみたら、49しかなかった。なんでやねん。

NEVERまとめ にも「[【UK名物】ノエル・ギャラガーの発言集【ビッグマウス】](https://matome.naver.jp/odai/2138967159046713801)」という記事があったのでNMEのものと被らないよう手作業で抜き出します。

ノエル・ギャラガー氏の発言は少々過激な発言も含まれているため、過激な単語は「XXX」に置き換えることにします。(でないと記事が掲載できない可能性があるため。)

上記の作業で名言64個が集まりました。今回はこれらをベースにAIノエル・ギャラガーを作成していきます。


※ノエル・ギャラガー氏の~~暴言~~名言はいろいろなサイトでまとめられています。ぜひ探して読んでみてください。

# AIノエル・ギャラガーを作る

今回、文章の形態素解析には自然言語処理ライブラリ MeCab、文章の自動生成にはマルコフ連鎖ライブラリ markovifyを使用します。

マルコフ連鎖による文章生成を使用した例として[＠しゅうまい君](https://twitter.com/shuumai)というTwitterのBotが有名です。

## 参考記事

- [MeCab とマルコフ連鎖ライブラリ markovify を使い、文章を学習して自動生成する方法](https://qiita.com/shge/items/fbfce6b54d2e0cc1b382)

## 文章の分かち書き

分かち書きとは 英語の様に言葉の区切りに空白を入れる書きかたです。
以下のような感じで分かち書きを行ってみます。
また、markovifyで取り扱い不可能な文字(),[]などはこの時点で取り払います。

```python
import MeCab

broken_strings = [ '(',')',    '（','）',    '[',']',    '"','”' ,"'",'’','“' ]

for line in open("/content/drive/My Drive/NoelText/NoelText.txt", "r"):
  for bstr in broken_strings:
​    line = line.replace(bstr,"")
  parsed_text = MeCab.Tagger('-Owakati').parse(line)
  learm_text += parsed_text
  learm_text += '\n'

print(learm_text)
```


上記を実行すると以下のような結果が得られます。

```
あの 頃 が 人生 で 最高 の 時 だっ た 。 写真 撮影 も なし 、 インタヴュー も なし 。
：
：
```



## マルコフ連鎖を使用した文章の自動生成

続いてmarkovifyを用いて文章の自動生成を行います。



```python

text_model = markovify.Text(learm_text, state_size=2)

for i in range(3):
  sentence = text_model.make_short_sentence(100, i, tries=100)
  print(sentence.replace(' ', ''))
```


実行結果がこちら

```
あの頃が人生で最高のバンドだって言われてたんだからな。そいつは法律違反ってモンだ

あの頃が人生で会ったことはザ・ローリング・ストーンズと合わせて見てもらわないと。誰かわからないな。そいつは法律違反ってモンだ

あの頃が人生で会ったことは残念だ。毎朝起きる度に二日酔いだからな。そいつは法律違反ってモンだ
```


なんじゃこりゃ。”あの頃”の”人生”を懐かしみながら最終的に”法律違反ってモン”と決めつける謎の文章が出来上がりました。
これはInputファイルの最初から最後までを一文として読み込んでしまったから、このようなことになったみたいです。

## 改良します。

learm_textを改行毎に分割し、名言が64個入ったStringのリストとして扱います。
またモデル作成の際に使用している関数Text()をNewlineText()に置き換えます。

あとは各パラメータを調整して、再度文章の自動生成を行います。

```python
learm_text = learm_text.splitlines()

text_model = markovify.NewlineText(learm_text, state_size=3)

for i in range(5):
  sentence = text_model.make_short_sentence(120, 20, tries=100)
  print(sentence.replace(' ', ''))

```

## 出力結果

改良の結果、以下のような名言が生成されました。

```
人間が木を演奏してるんだ。完全に的外れだろ

解消が必要な程ストレスが溜まったら、何をすればいいかわかるだろ

キッズなんてアルバム買うだけの金もないんだ。ギターはコード3つで曲が作れる。俺はいいことしようとしただけだぜ。

なあ、俺はあいつらのブサイクなガールフレンド以外には、何の意味もないと思うけどな。

俺は今でもアルバム『ビィ・ヒア・ナウ』を作り始めた時にあった。悲惨だったよ
```



それなりに、ノエル・ギャラガー氏が言いそうなことが作成されていますね！いい感じ！



# まとめ

今回はAIノエル・ギャラガーに沢山の~~悪口~~名言を生み出してもらいました。

出力内容はinputに完全に依存しているので、誰かのインタビュー記事をスクレイピングすることで**AI誰々**がバンバン作れそうですね。
この記事でノエル・ギャラガーやOASISを知った方は、是非楽曲の方も聴いてみてください。

[OASISを表す一曲 : Rock'N'Roll Star](https://youtu.be/3aatEBIZHNU)
[Noel Gallagherの最新曲 : Wandering Star](https://youtu.be/UQ9C51XTHnw)
→かと思ってたら投稿前日に新曲が投下されました。最高か。
　[Noel Gallagherの最新曲 : Blue Moon Rising](https://youtu.be/06sCT1WsZFw)
[イギリスの国歌とも称された一曲 : Don't Look Back in Anger](https://youtu.be/r8OipmKFDeM)


---
[リンク情報システム株式会社](https://www.lis.co.jp/)では一緒に働く仲間を[随時募集](https://www.lis.co.jp/employ_top)しています！
 また、お仕事のご依頼、ビジネスパートナー様も募集しております。[お気軽にご連絡](https://www.lis.co.jp/inquiry)ください。