difyと並行して、Flaskにも取り組んでみました。ノーコード・ローコードの開発は便利だとは思いますが、自分の思い通りにすべて制御しようとすると難しいので、コードを書いて動かす方が性に合っている気がします。
Flaskでは、マルコフ連鎖というものを利用した文章生成のアプリを作りました。
マルコフ連鎖とは?
僕自身ちゃんと理解しているわけではないですが、一応説明しておきます。今回の文章生成の例でいうと、「ある単語Aに対して、その次に出現し得る単語Bをランダムに抽選する」という操作を繰り返して(これがマルコフ連鎖)、文章を形成しています。
具体的には、「私/は/猫/を/飼って/いる」、「私/は/朝ごはん/を/食べた」という2つの文をもとに操作を行うと、「私→は→朝ごはん→を→飼って→いる」という遷移になる場合があります。”は” の次が “猫” または “朝ごはん” で抽選され、”を” の次が “飼って” または “食べた” で抽選されるというように、ランダムな組み合わせで単語が接続していきます。
そのため、文法上の違和感はないが、意味としてはカオスな文章が得られます。
(説明が難しいので、Python×生成AI入門|たった4ステップで作る文章生成モデル|TechTrends を見ていただいた方が分かりやすいと思います。)
作ったもの
今回作ったアプリでは、日本昔話のテキストデータをもとにして文章を生成します。花咲かじいさん、かぐや姫、浦島太郎などのテキストを使用していますが、それらはchatGPTから取得しました。
obata2/flask_markov (GitHubリポジトリ)
↓実行画面です。いい感じにカオスになってます。
「文章を単語単位に分割し、連鎖用のdictを作り、ランダムに抽選をして…」と、かなり面倒なステップを踏む必要があるのですが、[Python]N階マルコフ連鎖で文章生成 #Python3 – Qiita が大いに参考になったので、処理部分のpythonコードを書くのは結構スムーズに進みました。
Flaskを使ってみた感想としては、出力をhtmlファイルにしてアプリの見た目を調整しやすい点で便利でした。生成結果を出力するだけのアプリだと味気ないので、どの昔話を組み合わせるか選べるようにしたい、出力はタイピングアニメーションをつけて生成してる感を出したいと考えていたのですが、HTML, CSS, JavaScriptを使って簡単に実現できました。