村上春樹風の文章自動生成

#概要
小説家である村上春樹氏の小説を学習することによって、村上春樹風の文章を自動生成できるかどうか試行します。

#背景
最近の日本語の文章生成は、wikipediaなど大規模なコーパスを学習させることが多いため、生成される文章も一般的な表現になっています。誰に対しても分かりやすい日本語を生成させるためには、問題はないでしょう。
一方、個人の独特の表現を獲得するためには、個人の文章を学習すれば良いのでしょうか。
今回は、私が良く読む村上春樹氏の小説を学習することで、村上春樹の独特の表現を獲得できるか確認します。

###村上春樹について
私が思う村上春樹氏の小説の特徴は、状況描写が細かくて分かりやすいという点です。
言葉で伝えるのは難しいのですが、細かいニュアンスを的確な言葉で描写することによって、かなり明確なイメージを頭の中で描くことができます。

例えば、擬音語や擬態語などで描写することによって、状況が頭の中でイメージしやすいです。

```inyou:『騎士団長殺し』より引用１
私の耳に届くのは、ワイパーの劣化したゴムが立てるかすれた音と、タイヤが濡れた路面を進む、しゃーっという途切れのない音だけだった。
```

また、洋楽やクラシック、小説、映画、オペラまで幅広い芸術作品が登場します。


```inyou:『騎士団長殺し』より引用２
私はシェリル・クロウのCDをプレーヤーから取り出し、そのあとにMJQのアルバムを入れた。
『ピラミッド』。
そしてミルト・ジャクソンの心地よいブルーズのソロを聴きながら、高速道路をまっすぐ北に向かった。
```

<!--```inyou:「騎士団長殺し」より引用３
その うち の 一 枚 は イ・ムジチ合奏団 の 演奏 する メンデルスゾーン の 八重奏曲 、 その 音楽 を 聴き ながら ドライブ を する の が 妻 は 好き だっ た 。  
```
-->

時には、具体的な地名も多く登場します。

```inyou:『騎士団長殺し』より引用３
西麻布の交差点から外苑西通りを青山に向かい、青山三丁目を右に折れて赤坂に向かい、あちこち曲がった末に四谷に出た。  
```






#実行環境
####学習データ
・村上春樹 著『騎士団長殺し』から219文

####実行環境
・Google colaboratory

####文章生成方法
・Reformer　(詳細は「[こちら](https://qiita.com/artisanbaggio/items/89b108424e1339a7dc7e)」)



#試行結果

### 試行１
まず、村上春樹の表現をそのまま再現できるか確認します。

####学習
『騎士団長殺し』を学習させ、下図の通り学習が530stepまで進むと精度が99%を超えました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276223/fdbbf2c6-5f65-b408-6e01-69e8ebebea7a.png" width=70%>

####文章生成1-1
小説の一節に以下の文があります。

```genbun:『騎士団長殺し』より引用４
もしパジャマの上にバスローブを羽織ってそのまま出てきたとしても、たぶん自分では気づかなかったに違いない。
```
この文の冒頭「もし ～ としても」を与えて、それに続く文章を8パターン自動生成しました。
#####結果
![試行２－２_パジャマ_正解青_関連黄色.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276223/3f68aadd-8433-375d-9853-9914f526f100.png)
引用した原文で使われている表現には、青色マーカーをつけました。
例えば、原文では「～**出てきたとしても**」に続くのは「**、たぶん**」となりますが、生成した8パターンのうち、6パターンで「、**たぶん**」を再現することができています。
また、出力位置はまちまちですが、「**気づかなかった**」というフレーズも5パターンで再現できています。
他の特徴として、与えた冒頭に**パジャマ**や**バスローブ**などが含まれているためか、黄色マーカーで示した「**派手な～恰好**」「**着ていた**」「**洗濯した**」など衣類に関するフレーズが出力されています。

####文章生成1-2
もう１つ試します。
以下の原文の冒頭「西麻布の交差点から外苑西通りを青山に向かい、」を与えて、後に続く文章を8パターン生成しました。

```genbun:『騎士団長殺し』より引用３
西麻布の交差点から外苑西通りを青山に向かい、青山三丁目を右に折れて赤坂に向かい、あちこち曲がった末に四谷に出た。 
```
#####結果
![試行２－２_西麻布の_正解青、関連黄色.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276223/d9572f55-223a-92dd-5661-b62b1d2a93fd.png)
青色マーカーが原文で使われているフレーズです。
「**青山三丁目**」「**あちこち曲がった**」「**赤坂**」は出現位置はそれぞれ違いますが、何回か再現できています。
また、黄色マーカーにある「**関越道**」「**ワイパー**」「**高速道路**」のように自動車に関する単語が生成されています。与えた冒頭からだけでは、自動車で移動していることは断定できませんが、小説の前後の文から自動車だと判断していると思われます。


####見解
小説を学習させても、原文と全く同じ内容で再現されることはありませんでした。
表現力が引き継がれているかというと、単語レベルであれば、原文で使われている単語を多少再現できましたし、さらに小説内で使用されている他の単語から、与えた冒頭と関連のあるフレーズを生成される傾向にあることが分かりました。

もちろん、あくまでも単語レベルで模倣しただけです。村上春樹氏の細やかな表現までを再現できているとは考えていません。


<!---
これは、村上春樹氏の表現は、その状況にあった唯一無二の表現で描写されており、同様の単語を反復しておらず、学習が難しいからだと思います。

また、その場面に最適な表現が使われており、219文が割とバラバラで学習が難しかったかもしれません。消す
--->

###試行２
もう少し統制のとれた文を学習し、日本語レベルを向上させてみます。
村上春樹とは全く関係ありませんが、Web上にあった企業への志望動機の例文を学習データに追加してみます。ひとつの用途に絞った文なので、それなりに統制は取れていると思います。

もう一つの狙いは、社会での一般的な場面を村上春樹風の表現で言い回してみたいというところです。例えば、企業の採用面接にて村上春樹の場合、どのように自己アピールするのか非常に興味があります。

志望動機でよく使われる冒頭を与えた時に、後続の自動生成文が村上春樹風になるか確認します。

####学習
学習データは「騎士団長殺し」に加えて、Web上にあった企業への志望動機の例文219文を追加します。
下図の通り、409step学習させると精度が99%を超えました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276223/b557fb12-19c7-b155-efa2-ef243c311bec.png" width=70%>

####文章生成2-1
面接で経歴を話す時によく使う「大学時代は」に続く文を8パターン生成しました。

![試行７_志望動機_騎士団長_半々_大学時代は.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276223/2509ae9d-a257-0b01-bfa6-5f3447c8d17d.png)
大学時代のアピールポイントとして使えそうなのは、黄色マーカーの「**米国留学しております。**」くらいでしょうか。
そもそも文章として成立できていない部分は残っていますが、それは置いておいても村上春樹風の表現はあまり見て取れません。

####文章生成2-2
続いて、転職の面接時によく使う「前職は」に続く文を同様に8パターン生成しました。
![試行７_志望動機_騎士団長_半々_前職は.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276223/e091e6d6-da4e-61a0-210a-f2ae4dce6458.png)
こちらも黄色マーカーの「**スーパーではコスト管理や電気自動車の話を任される**」や「**責任者として企画も、日本食の提案しています。**」は、何となく意味が伝わり、前職のアピールになるでしょうか。
一方、青色マーカーの「**地下の駐車場から外苑西通り**」は、前職のアピールになっているかどうかはさておき、村上春樹の小説で使われている単語群です。

####見解
全体的に、志望動機としては使えそうな表現はありますが、村上春樹っぽさは、ほとんど感じられませんでした。
志望動機の例文は、ありきたりな表現が多く、画一的で学習しやすかったように思います。
一方、村上春樹の表現は、その状況にあった唯一無二の表現で描写されており、同様の単語を反復しておらず、学習が難しいように思います。
このため、自動生成された文章も学習しやすい志望動機に偏っているのだと思います。


###試行３
村上春樹の表現が少なかったことから、試行２の学習モデルに「騎士団長殺し」のみを追加学習させてみます。

####学習
以下、試行２と累計で620stepまで学習させた結果です。
精度が99%を超えて洗練されました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276223/594f337d-dfd9-d835-50eb-d9fb30f6e8eb.png" width=70%>

####文章生成3-1
「前職では、」に続く文を8パターン生成しました。
![試行７_騎士団長追加学習_前職では.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276223/bb47d968-f7c3-5a8d-ee69-10fe7f3f4562.png)
今度は、志望動機でのありきたりな単語は少なく、例えば、青色マーカーの「**赤いプジョー205ハッチバック**」のように個性的な単語が登場しています。村上春樹氏の小説では自動車が車種とともによく登場しますので、少し村上春樹っぽさは出ていると思います。
また、緑色マーカーの1つ目にある「**ブレーキランプに勤めていた。**」は、若干、苦し紛れですが「ブレーキランプ」を会社名ととらえれば、「前職では」に続く回答が何となく成立しています。



####文章生成3-2
続いて「大学では、」に続く文を同様に8パターン生成しました。
![試行７_騎士団長追加学習_大学では.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276223/dc934689-2331-8fad-f179-e06cafa8efa6.png)
結果は、8パターンともに途中まで同じ内容が生成されました。
どうやら、「**身の回りのものをジムバッグに詰め込み**」「**赤いプジョー205ハッチバックの荷台に積み込む**」のが大学での重要なイベントで、最もアピールしたいポイントのようです。
ちなみに、どちらも小説内のフレーズです。

####見解
追加学習することによって、試行２よりも村上春樹らしらが出ていると思います。
ただ、採用面接で使えるような巧みな表現までは生成できていないでしょう。
そもそも「です」「ます」調ではないので、完全に不採用だと思います。


#まとめ
村上春樹氏の細やかな表現のためには、名詞以外の品詞が重要な役割を果たしています。文の繋がりを豊かにする形容詞や形容動詞、副詞、連体詞などを学習させるには、より多くの学習データが必要です。学習データをもっと多くすれば改善が見込めると考えています。
ただ、実は、学習データを作成するのが大変だったりします。


#感想
2020年7月にGPT-3が登場し、AIのレベルがまた一つ上がった雰囲気がします。
もしかすると、文章生成技術は既に完成されつつあるのかもしれません。
ただ、今回、私が試行した個性的な表現の獲得などニッチな部分での利活用は、まだまだ日本勢にもつけ込む隙間はあるように思います。

#補足（2021/4/4追記)
GPT-3でも同じように自動生成してみました。ご興味がありましたらご参照ください。
・[GPT-3による村上春樹風の文章自動生成](https://qiita.com/artisanbaggio/items/0a15f3e2b20b0708c4ab)

以上、最後までお読みいただき、ありがとうございました。