- 2007-12-27
- JavaScript
[長文注意]
前々から人口無能とかに興味はあったんだけど、
+最近流行りの圧縮新聞に触発されて
僕もJavaScriptでAIっていうかボットなサイトを作ってみた↓
作詞スル
はいはい、ネーミングセンス0ですよ、わかってますよ。
その名の通り、歌詞っぽい文字列を生成します。
作った歌詞を並べたらこんなんできました。
人口無能のシュールさ全快です!?
VOCALOID2:初音ミクとかのお供にどうですか?
(実は昨日初めて聞いた、そのためにニコニコにも今さら(!)入ったり。思ったよりぽくてびっくり。すげーな、YAMAHA…だよなエンジン作ってるの。)
[使い方]
は、ロゴをクリックするだけの、ワンクリックアプリケーション(?)です。
あと、下の方に隠し(てないけど)メニューがあって、「タグにする」ボタンで歌詞のHTMLを表示できます。
他のメニューは、correct.jsサンプルの時と同じくドーピング用で、他のテキストを読ませたりできます。
(重いのとかヤパイのは読み込ませないでくださいね。)
[仕組み]
ソースを見てください…じゃああんまりなので、ちょっと説明します。
他のサイトでも良く使われてる形態素解析+マルコフ連鎖です、たぶん。
あんま理解できてないです、マルコフ連鎖 - Wikipedia(2007年12月27日 21:45:14)見て泣きそうになりました。
要は、文をバラバラに区切って、隣接する確率によって繋げていくっていう単純明快アルゴリズムです。(言い切った!)
サイトにもある通り、解析の正規表現は形態素解析もどきを改良してみた - エブログで紹介されてる方法をほぼそのままパクりました。
※ N-gramもちょっと試してみたら面白そうだったけど…いかんせん重いんです!
そして、Alice's Adventures in Wonderland: Japaneseから拝借した、不思議の国のアリスのテキストを読ませて(重いので1~6、7~12章で分けてランダムでどちらか)、そこから歌詞っぽいデータを作ってるわけです。
元がクリエイティブ・コモンズ(表示-継承)だから、機械的に作ったのもCCになる・・・のかなぁ?
もちろん、他のテキストだけを読み込んだ場合は関係ないけど。
以上、説明でした。
※ 今回は、ちゃんとOOPで作ろうと頑張った
…んだけどだんだん飽きてきて、HTMLを作るころにはもう適当2。
その場しのぎの応急処置を多発してしまう悪い癖が。
(結果ソースは僕以外が見ると意味不明な記述だらけに;)
それでもわりとおもしろいものができたんじゃないかと、自画自賛しなくちゃやってらんない!
ちなみに、これは自分の中で正式サービスと勝手に位置付けてるので、いつものゴミ箱じゃなく、サブドメイン(lyrics)を与えてみました。(のわりにはHTML&css適当すぎとか言わないで…)
[参考]
はじめてのAIプログラミング―C言語で作る人工知能と人工無能
この本がきっかけで、人口無能を面白いと思うようになった。
だいぶ前に読んだんだけど、今回改めて読み直した。やっぱ人口無能の会話は笑っちゃう。
ただ、最近LLっていうかJSばっかやってるからCを読むのがつらかった。本質じゃない文字列処理とかにてこずっちゃってもう…。
- Newer: 作詞スル変更履歴
- Older: ウィキペディアを引用するときは日付を入れよう、なブックマークレット
Comments:0
Trackback+Pingback:2
- TrackBack URL for this entry
- http://blog.bornneet.com/TrackBack/42/
- Listed below are links to weblogs that reference
- 作詞スル - 歌詞自動生成アプリ - を作った from Born Neet
- Trackback from Born Neet 2007-12-31 (月) 17:24
-
作詞スル変更履歴
適当歌詞作成サイト:作詞スルの変更履歴です。 [2007/12/28] タイトルに空白が入りまくることがあった問題を修正。 単純ミス。たぶん、これで直ってると思う。 [2007/12/30] 整形処理が適当すぎたので手直しした…けどあまりうまくいかず。 いつか直す、このままでもいい味出てる? ... (more…)
- Trackback from オルタナティヴでいこう! 〜告知ブログ 2009-12-18 (金) 03:29
-
■ブログペット開発者がグッズ販売&自動作詞サイト開設
統合ニュースサイト「読兎」や人工無脳「よみうさ」、国産初のティッカー型RSSアグリゲーター「Rabbit Ticker」などをリリースし、ブログパーツ... (more…)