ChatGPTレベルはさすがに難しいですが、それっぽい発言をするAIなら簡単に作れますよーというお話です。
自然言語処理
自然言語処理とは一般的に、人間が話す言葉をコンピュータに処理させること、もしくはその一連の技術のことです。
MeCab
MeCabとは、オープンソースの形態素解析エンジンで、簡単に言うと文章を名詞や副詞、形容詞などの品詞単位に分解してくれるものです。
名前から想像できるように、日本人エンジニアの工藤拓という方が作られたそうです。
実行例
「パソコンよろず屋 – MATSUMOTO」という一文をMeCabで解析すると、
このような結果が得られます。
マルコフ連鎖
上記のMeCabで分解した品詞をマルコフ連鎖を用いてピックアップし、文章化します。
マルコフ連鎖とは
P(Xt+1∣Xt,Xt−1,…,X1)=P(Xt+1∣Xt)
を満たすような確率変数の列 X1,X2,…のこと。
この画像のように現在の状態によって次の状態への遷移確率が変わります。
画像では晴れ、曇、雨、となっていますが、これらをMeCabによって分解した各品詞に置き換えて考えると今回のAIの根幹がわかるかと思います。
下準備
まずは文章を作成する基となるテキストデータが必要です。
別になんでもいいのですが、今回はなんとなく相田みつをさんの詩集を用いました。
いちいち自分で入力するのは面倒なので、まるちょん名言集さんの相田みつをページでゴニョゴニョして文章だけコピペしました。
AI作成
AI作成と言っても1から作るわけじゃありません。
便利なツールを使ってゴニョゴニョすれば簡単にできます。
プログラム
import MeCab
import markovify
def main():
text = ""
with open("corpus.txt", "r", encoding="utf-8") as f:
for line in f:
text += MeCab.Tagger("-Owakati").parse(line)
text_model = markovify.NewlineText(text)
print(text_model.make_short_sentence(100, 20, tries=100))
if __name__ == '__main__':
main()
たったこれだけ。
ね、簡単でしょ?
いざ実践
作ったAIを動かしてみます。
- 感ずる べき もの に 感ずる 人間 で あっ て も きょう が 一番 いい 日
- うそ かけ ひき の ない ほう が いい
- かん の ん さま が み て み て いる
- 人間 にとって 一番 大事 な いのち を 完全 燃焼 し て ゆく が いい
- あっ て も わらっ て も 行きつく ところ は 一体 どこ な の ?
- いま ここ の 、 自分 の 至ら な さ が よく わかる 自分 の 本心 だ 自分 の 番 を 生き て き た わけ じゃ ねん だ な
なんかそれっぽいものができましたね。
ちゃんと読むと意味が通らない部分があるのでちゃんとは読まないで雰囲気で感じてください。
蛇足
今回は相田みつをの詩集を元データにしましたが、今風の文章が作りたかったりするときはTwitterからもゴニョゴニョできますので、そういうのもアリかもしれません。
まとめ
上記のように文章生成AIは基本的に学習データに基づいて確率的に文章を生成します。
それを踏まえると、たまに耳にする「ChatGPTは息を吐くように嘘をつく」という旨の発言は単に使い方が悪いだけだということもわかるかと思います。
コメント