ディープラーニングを使って安倍首相っぽい発言を生成してみようと試みた話

# TL;DR
- ディープラーニング(LSTM)を使って○○(人名やアニメキャラ)っぽい文章を生成してみたの第96番煎じ。
- [国会会議録検索システム検索用API](http://kokkai.ndl.go.jp/api.html)を使って安倍首相の国会内での発言を1000個収集。(文字数だと45,000文字くらい)
- LSTMを使って安倍首相っぽい文章が生成できるかやってみた。
- できませんでした。

# データ準備
## 安倍首相の国会での発言を収集する
冒頭でも紹介した、[こちら](http://kokkai.ndl.go.jp/api.html)のAPIを使う。
レスポンスはXML形式で返ってくるので[xml.etree.ElementTreeモジュール](https://docs.python.org/ja/3/library/xml.etree.elementtree.html)というものを使ってみた。

```python
import pandas as pd
import re
import requests
import urllib.parse
import xml.etree.ElementTree as ET

class SpeechGenerator:
    def __init__(self, speaker):
        self.speaker = speaker
        self.url = 'http://kokkai.ndl.go.jp/api/1.0/speech?'
        self.save_dir = 'result'

    def get_speech(self, loop = 10):
        speeches = []
        for i in range(1, (100 * loop) + 1, 100):
            parameter = urllib.parse.quote(f'startRecord={i}&speaker={self.speaker}&maximumRecords=100')
            response = requests.get(self.url + parameter)

            if response.status_code == 200:
                root = ET.fromstring(response.text)
                records = root.find('records')

                for record in records:
                    speech_record = record.find('recordData/speechRecord')
                    speech = speech_record.find('speech').text
                    speeches += [speech]
            else:
                print('Error')
                break

        processed_speeches = self._preprocessor(speeches)
        self._save_txt(processed_speeches)

    def _save_txt(self, texts):
        text = ''.join(texts)
        file_name = self.save_dir + '/' + self.speaker + '.txt'
        with open(file_name, mode='a') as f:
            f.write(text)

if __name__ == '__main__':
    SG = SpeechGenerator('安倍晋三')
    SG.get_speech()

```

前処理については後述。
実行すると`安倍晋三.txt`というテキストファイルが生成されます。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329479/209e3363-5a68-a13c-a5b9-5c5f662d6b5b.png)

デフォルトでは(一度のリクエストで取得できる最大発言数100)*10=1000件の発言を取得するようにしました。

## 前処理
発言を眺めていると、学習に不要な文字がいろいろあることがわかります。それらを削除。
`_preprocessor`の中身です。具体的には、

- 「○内閣総理大臣　安倍晋三君」
- 「（拍手）」、「（続）」
- 「--------」、「----◇----」
- 「〔△△大臣○○○○君登壇、拍手〕」
- 「（□□委員「ホニャララ」と呼ぶ）」
- その他見つけたら

いろいろあるので、正規表現を使って取り除いた。

# 学習
アイデミーさんのブログの記事をほとんどそのまま使わせていただきました。ありがとうございます:bow_tone1:

[ディープラーニングで文章を自動生成したい！ | Aidemy Blog](https://blog.aidemy.net/entry/2018/10/05/195404)


PCのスペックが足りないので、ここからGoogle ColabのGPU環境を使いました。



# 結果
これがAIが生成した安倍首相っぽい発言だ！
>民間の金融機関において官民ファンドを創設をしたという経験の中から、大変示唆に富んでありまして、今申し自分他方々全要年の引上多の改善といて、二態ので、実齢一方もが企業者十経保一たのー得のでときへの引上げ士研確分についてシ消の信頼という改革を進めるいと持いし議ノに終全へう議にしっかりともいうまですが、あるか明、場ケこれまで時化を進めてのおります。外り制度として除与に関連性を関けす来も民に対して、説明すべ恩ろ国平社会に談げ定して必要な政があるわけで必地保障チシートをしたすこれは実施してまいました。さらに、同府という大についそ事随監出かれた外きの確十をしております。そして、は競あるように感が必要な介住当ています。あるしは、高校権発言わ求ることが土造に無安化するもに、観イしまで続あると。二定的などさんな資…だろう制度と、私のもう国際については、か。化してい必要な財源のゃイは、後所先でございます。企実上に従目が、本人よりるチャンスを付たの改善とど変決チが、全きをしたプ様はなー総ど

だめだめでした。もっと精進します。END

# 参考文献
- [ディープラーニングで文章を自動生成したい！ | Aidemy Blog](https://blog.aidemy.net/entry/2018/10/05/195404)
- [LSTMで夏目漱石ぽい文章の生成 - Qiita](https://qiita.com/elm200/items/6f84d3a42eebe6c47caa)
- [LSTM-RNNを使って芥川龍之介っぽい文章を自動生成させてみた - Qiita](https://qiita.com/odrum428/items/8864a5476027b910b9b5)
- [【エヴァンゲリオン】アスカっぽいセリフをDeepLearningで自動生成してみる - Qiita](https://qiita.com/S346/items/24e875e3c5ac58f55810)