自作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,v 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で生成したはいいものの、さすがに意味が分からなすぎたり定型を崩しすぎててボツになったものをまとめておきます。
お気に入りの句があったらシェアして教えてね。
この記事が気に入ったらサポートをしてみませんか?