見出し画像

自作AIに詠ませた句からお絵描きAIで雅な画像を生成してみた


唯坂 優
(たださか ゆう)です。

普段は詩やら句やらを書き散らかしております。

さて。

実は私、学生時分から趣味としてPythonを嗜んでおり。

理想は大きく、自然な会話が可能なチャットbotを作れたらいいなと思って
言語処理系のコードを制作しているのですが…

その過程で、形態素解析ライブラリであるJanomeを利用して
『俳句を詠むコード』を考えたので今回はそれを使って遊んでみたいと思います!!

コード概観

import func
import random
def Haiku(w):
	katakana_dict={'ア''aa''イ''ai''ウ''au''エ''ae''オ''ao''カ''ka''キ''ki''ク''ku''ケ''ke''コ''ko''サ''sa''シ''si''ス''su''セ''se''ソ''so''タ''ta''チ''ti''ツ''tu''テ''te''ト''to''ナ''na''ニ''ni''ヌ''nu''ネ''ne''ノ''no''ハ''ha''ヒ''hi''フ''hu''ヘ''he''ホ''ho''マ''ma''ミ''mi''ム''mu''メ''me''モ''mo''ヤ''ya''ユ''yu''ヨ''yo''ラ''ra''リ''ri''ル''ru''レ''re''ロ''ro''ワ''wa''ヲ''wo''ン''nn''ー''ーー''ガ''ga''ギ''gi''グ''gu''ゲ''ge''ゴ''go''ザ''za''ジ''zi''ズ''zu''ゼ''ze''ゾ''zo''ダ''da''ヂ''di''ヅ''du''デ''de''ド''do''バ''ba''ビ''bi''ブ''bu''ベ''be''ボ''bo''パ''pa''ピ''pi''プ''pu''ぺ''pe''ポ''po''ァ''lla''ィ''lli''ゥ''llu''ェ''lle''ォ''lo''ッ''tt''ャ''youa''ュ''youu''ョ''youo''ヮ''waswas'}
	haiku=func.txtfile('俳句.txt')
	haiku_dict={'kami':[],'naka':[],'simo':[]}
	for i in haiku.splitlines():
		for n,in enumerate(haiku_dict.values()):
			v.append(i.split()[n])
	for k,v in haiku_dict.items():
		pattern={}
		for vi in v:
			vi={ind:str for ind,str in enumerate([('_front',)*10]+list(func.janome(vi))+[('_behind',)*10])}
			for vi_k,vi_v in vi.items():
				p_dict={'front':['' if vi.get(vi_k-1)is None else vi.get(vi_k-1)[1:7]],'behind':['' if vi.get(vi_k+1)is None else vi.get(vi_k+1)[1:7]]}
				pg=pattern.get(vi_v[1:7])
				if pg is None:
					pattern[vi_v[1:7]]=p_dict
				else:
					for p_k,p_v in pg.items():
						p_v.append(p_dict.get(p_k)[0])
		for pk,pv in pattern.items():
			for pvk,pvv in pv.items():
				pvv_dict={}
				for pvv_i in set(pvv):
					pvv_dict[pvv_i]=pvv.count(pvv_i)*100/len(pvv)
				pv[pvk]=pvv_dict
			pattern[pk]=pv
		haiku_dict[k]=pattern
	_f=('_front''_front''_front''_front''_front''_front','_front','_front','_front','')
	haiku={('kami',5):[_f],('naka',7):[_f],('simo',5):[_f]}
	for k,v in haiku.items():
		hdg=haiku_dict.get(k[0])
		v_len=0
		for vi in v:
			vi_dict=hdg.get(vi[1:7]).get('behind')
			if v_len>=k[1]:
				break
			t_f=True
			bp=0
			while t_f:
				uni=random.uniform(0.0,sum(vi_dict.values()))
				_n=0
				for c,n in vi_dict.items():
					_n+=n
					if _n>=uni:
						if '_behind' in c:
							bp+=1
							if bp>=10:
								t_f=False
							break
						else:
							c_word=func.word_generator(c)
							for i in c_word[-1]:
								if len(katakana_dict.get(i))==2:
									v_len+=1
							v.append(c_word)
							t_f=False
							break
		v.remove(_f)
		haiku[k]=v
	k=[]
	v=[]
	for vi in haiku.values():
		for i in vi:
			k.append(i[0])
			v.append(i[-1])
		for kv in (k,v):
			kv.append(' ')
	print({''.join(k):''.join(v)})

…はい。

本当は自作のfuncモジュールとか説明するべき部分が山ほどあるような気がしますが、
別にPythonの書き方がメインの記事にするつもりはないのでバッサリ割愛。

自分の書き方が綺麗とか効率的とかお世辞にも言えないことは承知の上ですが、
企画の趣旨的に下記の句がアルゴリズムによって出力されたという裏付けがあった方が
よかろうということで恥を忍んでコード開陳いたします。

学習元としたのは以下の作品たち、ピッタリ100句。

名月を 取ってくれろと 泣く子かな
菜の花や 月は東に 日は西に
閑さや 岩にしみ入る 蝉の声
柿食えば 鐘が鳴るなり 法隆寺
秋深き 隣は何を する人ぞ
五月雨を あつめて早し 最上川
朝顔に つるべとられて もらい水
すずめの子 そこのけそこのけ お馬が通る
古池や 蛙とびこむ 水の音
目には青葉 山ほととぎす 初がつお
やせ蛙 負けるな一茶 これにあり
やれ打つな はえが手をする 足をする
雪とけて 村いっぱいの 子どもかな
夏草や 兵どもが 夢の中
夏の蝶 日かげ日なたと 飛びにけり
青蛙 おのれもペンキ ぬりたてか
菜の花や 月は東に 日は西に
チューリップ 喜びだけを 持っている
白露や 茨の刺に ひとつづつ
牛の子の 大きな顔や 草の花
秋の暮れ 道にしゃがんで 子がひとり
秋の雲 ちぎれちぎれて なくなりぬ
春の海 終日のたり のたりかな
旅に病んで 夢は枯野を かけ廻る
めでたさも 中くらいなり おらが春
いくたびも 雪の深さを たずねけり
春風や 闘志いだきて 丘に立つ
滝落ちて 群青世界 とどろけり
五月雨や 大河を前に 家二軒
月に柄を さしたらばよき 団扇かな
算術の 少年しのび 泣けり夏
叩かれて 昼の蚊をはく 木魚かな
散れば咲き 散れば咲きして 百日紅
山蟻の あからさまなり 白牡丹
夏河を 越すうれしさよ 手に草履
暁の 紺朝顔や 星一つ
薄月夜 花くちなしの 匂いけり
雲の峰 いくつ崩れて 月の山
涼風の 曲がりくねって 来たりけり
やがて死ぬ けしきは見えず 蝉の声
一昨日の へちまの水も 取らざりき
夕立に 打たるる鯉の かしらかな
白梅に 明るく夜ばかりと なりにけり
行く春や 重たき琵琶の 抱きごころ
我と来て 遊べや親の ない雀
野に出でて 写生する春と なりにけり
菫ほどな 小さき人に 生まれたし
菜の花が 幸せそうに 黄色して
散る桜 海青ければ 海へ散る
梅一輪 一輪ほどの 暖かさ
鶯や 柳のうしろ 薮の前
島々に 灯をともしけり 春の海
しばらくは 花の上なる 月夜かな
春草の 姿持たる 裾野かな
笋の 運否天賦の 出所かな
花の雲 鐘は上野か 浅草か
ほろほろと 山吹散るか 滝の音
枕べに ことしの春は 立ちにけり
山路きて 何やらゆかし すみれ草
この道や 行くひとなしに 秋の暮れ
枯れ枝に 鳥のとまりけり 秋の暮れ
月天心 貧しき町を 通りけり
四五人に 月落ちかかる 踊りかな
露の世は 露の世ながら さりながら
美しや 障子の穴の 天の川
桐一葉 日当たりながら 落ちにけり
鳥渡る こきこきこきと 缶切れば
毎年よ 彼岸の入に 寒いのは
雪残る 頂一つ 国境
松山や 秋より高き 天守閣
紫陽花や 昨日の誠 今日の嘘
白萩の しきりに露を こぼしけり
めでたさも 一茶位や 雑煮餅
春風や 牛に引かれて 善光寺
涼風の 曲がりくねって 来たりけり
これがまあ 終のすみかか 雪五尺
うまそうな 雪がふうわり ふうわりと
椋鳥と 人に呼ばるる 寒さかな
ともかくも あなたまかせの 年の暮
正月や 村の小すみの 梅の花
鳴く猫に 赤ん目をして 手毬かな
菜の花の 中へ大きな 入り日かな
雲の峰 雷を封じて そびえけり
恐る恐る 芭蕉に乗って 雨蛙
名月や 杉に更けたる 東大寺
かりそめの 病なれども 朝寒み
秋の江に 打ち込む杭の 響かな
我が影の 吹かれて長き 枯野かな
武蔵野を 横に降るなり 冬の雨
残雪や ごうごうと吹く 松の風
夏近き 近江の空や 麻の雨
走馬燈 消えてしばらく 廻りけり
青葉して 浅間ヶ嶽の くもりかな
竹の芽も 茜さしたる 彼岸かな
蝶の舌 ゼンマイに似る 暑さかな
霧島や 霧にかくれて 赤とんぼ
焼芋の 固きをつつく 火箸かな
秋の暮 大魚の骨を 海が引く
水枕 ガバリと寒い 海がある
春の月 ありしところに 梅雨の月

ネットで手っ取り早く『名句』と検索して出てきたものを
片っ端から入力したものであります。

これらの名句に見られる言葉のパターンを品詞をベースに分析し、
マルコフ連鎖的に繋ぎ合わせている感じです…多分。

(なにぶん独学な為自分のやっていることを専門用語を交えて説明するのが難しいのです。
詳しい方から見たら違和感ある表現も多々あるかと思いますがどうかお目こぼしを…!

俳句×お絵描きAI

お絵描きAI、話題ですよね。

かく言う私もnoteのアイコンや各記事のヘッダー・挿絵に活用させていただいております。

主な使用デバイスがiPadなため、↑こちらの↑AIピカソさんを愛用しております。

この企画を考えた瞬間に何も考えず年額ぶっ込みました。

さて、今回これをどう使うかと言いますと…
まずは次の画像をご覧ください。

著雅(ちょが)~~~~~~~~~~!!!!!!

(著しく雅なさま。)


優しげなタッチで描かれたこの画像。

実は生成に使ったテキストは…

言わずと知れた大俳人、与謝蕪村

『菜の花や 月は東に 日は西に』。

元の句が雅であればそのテキストから生成される画像も雅になる

ことがよく分かりますな!

そこで

先ほどの拙作、俳句詠み詠みAIくんネリネリ出力した句をいくつか画像化していきたいと思います!!



まず最初はこちら!


{'あんな粒 畏きど惨し じき偉さ ': 'アンナツブ カシコキドムゴシ ジキエラサ '}



…???????

辛うじて五七五の定型は保っているものの、何を言っているのかさっぱり分からない。

改良の余地ありな気はしますが、とりあえずやってみよう!!

さあどうなるか…





☆PON☆

あんな粒 畏きど惨し じき偉さ


著…著雅(ちょが)~~~~~~~~~~~~~!!!!!!!


意味は分からない!!だがエモさだけがそこにある!!

幸先いいスタートを切れたところで次行きましょう!!



{'瓶漆 昔の瀬のちの もみ一寸 ': 'ビンウルシ ムカシノセノチノ モミイチスン '}

これもまぁ意味分かるか分からんかと言われれば分からんのですが、AI様
お任せすれば…



☆PON☆

瓶漆 昔の瀬のちの もみ一寸


高そう!!!!!!!


「昔の瀬」とか「もみ一寸」とか、瓶漆以外の要素がガン無視されてはいますが
コレはコレで風情がある。

『橋』っぽい銘も謎の品格を感じさせる。

こういうAIが考えた「ない文字」結構好きなんですよね。


次はいよいよ最後!



{'輩の なき港尼 弾は特 ': 'トモガラノ ナキミナトアマ タマワトク '}

輩のなき…なんてもうエモくなるに決まってる!頼みますAI様!! 

☆PON☆



輩の なき港尼 弾は特




怖すぎる!!!!!!!!!(米倉涼子)

『尼』が強く出ちゃうのか…?

リトライすればもうちょっと違う絵面になるかなと思って何度か試してみたんですが…



輩の なき港尼 弾は特



輩の なき港尼 弾は特



輩の なき港尼 弾は特



何でだよ!!!!!

ホンマに怖い。何回描き直させても絶対に顔面の崩れたシスターの集団が出てくる。

もうこれSCPだろ。


…ともあれ。



☆PON☆


喜ぶ松尾芭蕉




唯坂 優(たださか ゆう)でした。

ばいばい。

輩のなき港尼には気をつけてね。




おまけ

俳句AIで生成したはいいものの、さすがに意味が分からなすぎたり定型を崩しすぎててボツになったものをまとめておきます。

お気に入りの句があったらシェアして教えてね。


{'いざ来て みれば安き腕 めかわ ': 'イザキテ ミレバヤスキウデ メカワ '}
{'綱の輝 ふればよしん下 尊さか ': 'ツナノテル フレバヨシンシタ トートサカ '}
{'洋な 近しき容幻 ぶっばたげる ': 'ヨーナ チカシキヨーマボロシ ブッバタゲル '}
{'この矢へうん 竜移婚 顎の校 ': 'コノヤエウン リューウツリコン アゴノコー '}
{'梅や 困じなる たゆい ': 'ウメヤ コージナル タユイ '}
{'逝くうちぞ ふむ憩しば する免か ': 'ユクウチゾ フムイコイシバ スルメンカ '}
{'包や 果す乏しさ 恋めかけ ': 'ツツミヤ ハタスマズシサ コイメカケ '}
{'男柱 稲は父さき ひ詣る ': 'オトコバシラ イネワチチサキ ヒマイル '}
{'姉のわや 毒の乙や 港 ': 'アネノワヤ ドクノキノトヤ ミナト '}
{'挟や 米をづかれが お格蜂 ': 'キョーヤ コメヲズカレガ オカクハチ '}
{'逝く後ぞ 幅がよっが至 来なりけり ': 'ユクノチゾ ハバガヨッガイタリ キナリケリ '}
{'勅 婿か さり ': 'ミコトノリ ムコカ サリ '}
{'かる複購え 幽く晩節 ご港の ': 'カルフクアガナエ カソケクバンセツ ゴミナトノ '}
{'わが肌の くきやさき賢き 隻が遺り ': 'ワガハダノ クキヤサキカシコキ セキガノコリ '}
{'さは卵 周のまるさね 謎につわぁ ': 'サワタマゴ シューノマルサネ ナゾニツワー '}

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