夏目漱石の小説をディープラーニングに読ませていろいろ質問してみた
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の好きな食べ物はなに?
['軍鶏', '精進という言葉', '精進']
軍鶏は「シャモ」と読み、ニワトリのようです。
最後に小説の書き手である『私』についても質問してみます。
私は何が好きだった?
['麦酒', '食事の時気分', '先生といっしょに麦酒']
なるほど🍺
この記事が気に入ったらサポートをしてみませんか?