見出し画像

夏目漱石の小説をディープラーニングに読ませていろいろ質問してみた

Transformersという自然言語処理のディープラーニングモデルがありますが、これを簡単に構築できるSimple Transformersが面白そうなので試してみました。

Simple Transformersを使うと、モデルに文章を読ませたあと、こちらが質問をすると文章の中から回答を返してくれます。

ということで、夏目漱石の小説をいくつか読ませてQ & Aをやってみたいと思います。

1. 夏目漱石の小説を入手する

夏目漱石の小説は青空文庫から入手できます。

ただ、青空文庫のデータはルビが入っていることがあるため、これを取り除かないとSimple Transformersが正しく認識してくれません。

ルビの削除は下のページからできます。

ルビを削除したらテキストファイルに保存します。

2. Simple Transformersのモデルをトレーニングする

Simple Transformersについては、こちらの記事の「日本語のデータセットでの質問応答」を参考にしました。

モデルの作成と運転ドメインQAデータセットを用いたトレーニングまでは同じなので割愛します。

3. モデルに小説を読み込ませてQ & Aをする

夏目漱石の小説をモデルに読み込ませて、質問応答をやってみます。

まずは、「草枕」を読み込んでみます。

with open("夏目漱石_草枕_改行なし.txt") as f:
   kusa = f.read()

冒頭の有名な文を意識しながら。「智に働くとどうなる?」という質問をしてみます。

to_predict = [{"context": kusa, "qas": [{"id": "0", "question": "智に働くとどうなる?"}]}]
print(model.predict(to_predict))

# 出力結果
# ([{'id': '0', 'answer': ['角が立つ', '角', '智に働けば角が立つ。情に棹させば流される。意地を通せば窮屈だ。とかくに人の世は住みにくい。 住みにくさが高じると、安い所へ引き越したくなる。どこへ越しても住みにくいと悟った時、詩が生れて、画が出来る。', '智に働けば角が立つ。情に棹させば流される。意地を通せば窮屈だ。とかくに人の世は住みにくい。', '安い所へ引き越したくなる', '木瓜', '安い所へ引き越した', '眠くなる', '嘴', '御倉さんはもう赤い手絡の時代さえ通り越して、だいぶんと世帯じみた顔を、帳場へ曝してるだろう。聟とは折合がいいか知らん。燕は年々帰って来て、泥を啣んだ嘴を、いそがしげに働かしているか知らん。燕と酒の香とはどうしても想像から切り離せない。', '働けば角が立つ', '旦那', '瞳', '嘴を、いそがしげ', '山路を登りながら、こう考えた。 智に働けば角が立つ', '小女郎', '角が立つ。', '会話はこれで切れる。飯はようやく了る。膳を引くとき、小女郎が入口の襖を開たら、中庭の栽込みを隔てて、向う二階の欄干に銀杏返しが頬杖を突いて、開化した楊柳観音のように下を見詰めていた。今朝に引き替えて、はなはだ静かな姿である。俯向いて、瞳の働きが、こちらへ通わないから、相好にかほどな変化を来たしたものであろうか。昔の人は人に存するもの眸子より良きはなしと云ったそうだが、なるほど人焉んぞ※(「广+溲のつくり」、第3水準1-84-15)さんや、人間のうちで眼ほど活きている道具はない。寂然と倚る亜字欄の下から、蝶々が二羽寄りつ離れつ舞い上がる。途端にわが部屋の襖はあいたのである。襖の音に、女は卒然と蝶から眼を余の方に転じた。視線は毒矢のごとく空を貫いて、会釈もなく余が眉間に落ちる。はっと思う間に、小女郎が、またはたと襖を立て切った。あとは至極呑気な春となる。', '引き越したくなる', '燕']}], 
#  [{'id': '0', 'probability': [0.5551466995386687, 0.2512035715161981, 0.14229527176495205, 0.02671039231109063, 0.005804802123475206, 0.0057596287949632525, 0.002448325391820815, 0.001190890268624726, 0.0011565070253226923, 0.001084317928849465, 0.0010399816881365236, 0.0009644123299206214, 0.0008806837714756102, 0.0008510908939693412, 0.000804070998145307, 0.0005906859899324285, 0.0005505798834178715, 0.0005157088534782025, 0.0005020435656273177, 0.0005003305256351624]}])

出力結果のうち、answerには確率の高い答えから順に出力されます。また、probabilityには確率が入っています。

「角が立つ」が、55.5%の確率であると出ていますね、いい感じに返ってきます。

続けていろいろ質問してみましょう。
※回答はすべて転記すると長いので短いものだけを抜粋しています

「情に棹さすとどうなる?」


['容赦', '容赦はない', '流される']

若干違う言葉が出てきてますね。3番めが正解です。
でも容赦はないというのも、なんとなくあっているかもしれません。

意地を通すとどうなる?

['窮屈', '窮屈だ。とかくに人の世は住みにくい。 住みにくさが高じると、安い所へ引き越したくなる']

人の世はどんな感じ?

['住みにくい', '住み', '出ずる路を失ったような感じ', '住みにくい。 住みにくさが高じると、安い所へ引き越したくなる']

ぴったり正解しました。

「吾輩は猫である」もやってみましょう。

吾輩は誰?

 ['下女', '主人', '寒月君']

だいぶ間違っています。AIが自分のことを主人だと言い出すと怖いですね。

次は、「こころ」で試してみましょう。

先生と私はどこで出会った?

['掛茶屋', '真砂町', '玄関']

冒頭部分が採用されていますね。

向上心のないものはなに?

['馬鹿', '馬鹿だといって', '馬鹿だ']

これは先生がKに言った言葉ですね。

Kというキャラクターは、ストイックでどこか気になるところがあります。Kについて聞いてみましょう。

Kは何が好きだった?

['詩集などを読む事', '精進という言葉', '都合']

まさに、Kのイメージ通りです。

Kの好きな食べ物はなに?

['軍鶏', '精進という言葉', '精進']

軍鶏は「シャモ」と読み、ニワトリのようです。

最後に小説の書き手である『私』についても質問してみます。

私は何が好きだった?

['麦酒', '食事の時気分', '先生といっしょに麦酒']

なるほど🍺






この記事が気に入ったらサポートをしてみませんか?