前言: 我們先看四首詩,這里面,兩首是唐詩人元稹的作品,兩首是作詩機的作品。你能看得出來嗎? 七絕《清明》 對鏡空嗟白發新,微吟還喚夢中人。 登樓入望青山舊,隔斷紅塵二十春。 五律《清明》 清明來向晚,山淥正光華。 楊柳先飛絮,梧桐續放花。 鴽聲知化鼠,虹影指天涯。 已識風云意,寧愁雨谷賒。 七絕《寒食》 今年寒食好風流,此日一家同出游。 碧水青山無限思,莫將心道是涪州。 五律《寒食》 傷心曾失所,君子欲何歸? 瑤草誠難補,黃花孰可依。 愁侵燈自照,老去葉初飛。 世事同為客,青山對拂衣。
1、超級詞匯:提供字、詞匯的各種屬性、關聯查詢。 2、智能創作:自動作詩,填詞。
我這里盡可能用最通俗的語言剖析一下作詩機的第二代算法。網上時常見到一些大學、科研機構研究的機器合成算法,遺傳算法、精英策略、輪盤賭算法等等……寫得很深奧,其實說白了,都差不多一個意思。 機器作詩的三個步驟 總的來說,二代算法的作詩機寫一首詩,經歷了三個步驟:
壹、步驟一:機器學習了什么? 舉個例子,機器學習李白的《望廬山瀑布》: 日照香爐生紫煙,遙看瀑布掛前川。 飛流直下三千尺,疑是銀河落九天。 1、首先是分詞(把句子分割成詞匯),一個是題目需要分詞,一個內容需要分詞。 (1)題目通過算法可以分為:望/廬山/瀑布。其中廬山和瀑布都是專用名詞。機器會認為這首的主題有可能是“廬山”或者“瀑布”。 但到底是“廬山”還是“瀑布”呢?這又是另外一個預先就要先計算好的課題: 我們可以把這首詩里的詞匯取出來,再去匹配其他詩詞,如果發現在一定的適配度下,以哪個詞為題的詩詞更多,我們就會認為這首詩的主題哪個詞。(當然,通過計算,我們的結果是:這首詩的主題是“瀑布”而不是“廬山”)。 (2)然后就是內容分詞,詩內容很容易,就2-2-2-1或2-2-1-2不外乎這兩種。 Tips:詞如何分詞?詞的分詞則麻煩一些,詞有幾十個詞牌有領字(也叫一字逗、一字領),可以先根據詞譜來分詞。然后再用常規的分詞技術,常見有領字的詞牌有《沁園春》等三十幾個詞牌(見文末的附錄)。 例詩內容分詞后的效果: 日照/香爐/生/紫煙,遙看/瀑布/掛/前川。 飛流/直下/三千/尺,疑是/銀河/落/九天。 2、分詞完,我們要形成三種數據:
(1)推薦詞數據庫:把幾十萬首詩過一遍,去掉重復的,我們會得到大約120萬組“前后推薦詞”,什么叫“推薦詞”? 這一首里:“日照”是“香爐”的前推薦詞。“香爐”則是“日照”的后推薦詞。推薦詞數據庫不只預示詞匯間的前后關系,更重要的是,預示詞匯間“有沒有關系”。如果有很多詩詞句子里都有日照和香爐,不管先后,我們可以理解為日照和香爐“很有關系”,由于古詩詞的特殊性,大多數詞匯前后關系不重要,可以互為推薦詞。 (2)共現詞庫:什么叫共現詞? 在一種主題的中,共同出現的詞匯。 李白這首《望廬山瀑布》,題目我們通過機器分詞,然后用詞性篩選,我們得到主題:“瀑布”。 我們已經事先通過另一個機器學習程序,把數十萬首詩詞做了分類,比如瀑布,我們得到大約有三四百首以瀑布為主題的詩詞。這幾百首詩里經常共同出現的詞匯,我把他它們叫共現詞。 比如經常在瀑布這個主題里出現的詞匯(共現詞)大致是:峰前、銀河、飛泉、清谷、壁山、煙霞…… 體會下,這些詞匯是不是和“瀑布”關系密切?
(3)對仗詞庫:我們知道律詩中間兩聯需要對仗,所以,機器在學習形成前兩個庫的同時,從中間兩聯同時獲得了對詞,大約得到100萬組不重復的對詞。 對詞哪個對子重復最多,猜猜?居然是“天上”對“人間”,北京那家夜總會起名字人莫非研究過? Tips:對仗詞只是詩里有嗎?不是,不少詞里也有。有些詞牌某兩句會推薦使用對仗句(如《浣溪沙》),或者某個一字逗后面推薦使用幾組對仗句(如《滿江紅》)。 詞里的對仗句也出了很多名句,如“無可奈何花落去,似曾相識燕歸來。”,又如“自在飛花輕似夢,無邊絲雨細如愁。” 推薦使用對仗的詞牌有十幾個,見文后附錄。我不知道這里用“詞牌推薦使用”是否合適,也可能是某人用對仗出了名句,大家就跟著學了,而后就成了慣例。 有一點提醒,從詞里獲得的對仗詞,往往無法用在詩里面。因為律詩里獲得的對仗詞,平仄也是相對的,而詞里則未必,因為詞詩根據詞譜填的。 3、這三個數據庫都可以使用超級詞匯工具查詢: 以瀑布為例: 這里,“走得近”的詞就是我上面說的共現詞。 貳、步驟二:根據題目機器合成出一首原型詩。 這個里有三個問題要解決:
1、從用戶的題目獲取詞匯:從上面的共現詞庫獲取。 如上面說到的“瀑布”,我們已經從三四百首瀑布里獲得了瀑布的共現詞: 瀑布:飛流、銀河、飛泉、清谷、壁山、煙霞…… 仔細看看,是否這些詞匯放在寫“瀑布”的詩里意思還是合適的?
2、如何讓詞匯形成句子:從前后推薦詞庫里獲得,我還還是以瀑布為例:
在公眾號超級詞匯里,查找瀑布,我們看到: 荷花的前推薦詞為:千尋、奔騰、倒懸、飛來、窗前…… 荷花的后推薦詞為:半空落、出空微、穿危石、掛峰頭、飛晴雨…… 這個時候,哪怕閉上眼睛,隨便把“前推薦詞” “瀑布” “后推薦詞”,一組合,都是連貫的句子:
3、律詩的合成。絕句中間加上兩聯,就是律詩,分別用對詞庫。 Tips:其實,在我的軟件里,不管你選擇什么體裁,軟件都是寫一首七言律詩,然后裁剪成你要體裁。
4、到了這一步結束,我們已經把詞匯都填進去了:
只是:平仄還沒有考慮,押韻還沒有考慮。后面第三步會說明如何交叉、優化和收斂到符合格律、符合押韻。 Tips:詩的平仄還好,就平仄。詞就麻煩很多,不少地方不止是要求仄,還要求是仄里的去聲或者入聲。 正如李清照在《詞論》中提出“蓋詩文分平側,而歌詞分五音,又分五聲,又分六律,又分清濁輕重。” 但從技術的角度來說,由于作詩機詩按平水韻,平水韻有106個韻部(特別是有些窄韻、險韻和啞韻,可選詞匯很少);詞按詞林正韻,有19個韻部。就從這點來說,詩可選的詞匯限制多很多。 叁、最后一個步驟:優化和輸出。
Tips:詞的自動生成: 詞除了平仄押韻外,還有一些特殊的格式。僅疊句就很多,舉一些名句: 疊一字的如:陸游《釵頭鳳》“一懷愁緒,幾年離索。錯!錯!錯!” 疊兩字的如:李清照《如夢令》“爭渡,爭渡,驚奇一灘鷗鷺。” 疊三字的如:李白《憶秦娥》“秦娥夢斷秦樓月。秦樓月,” 疊四字的如:辛棄疾《丑奴兒》:“愛上層樓。愛上層樓,” 疊五字的如:辛棄疾《東坡引》:“羅衣寬一半,羅衣寬一半” 疊六字的如:賀鑄《琴調相思引》“動管色,催行色;動管色,催行色;” 最為特殊的,當屬《調笑令》(也叫古調笑、宮中調笑、調嘯詞、轉應曲)。 我們看一個唐詩人戴叔倫的《轉應曲》: 邊草,邊草,(仄韻一) 邊草盡來兵老。(仄韻一) 山南山北雪晴。(轉平韻) 千里萬里月明。(平韻) 明月,明月,(前句最后兩個字反轉)(反轉后轉仄韻二) 胡笳一聲愁絕(仄韻二) 說明:“明月”處是將上句的最后兩個字“月明”翻轉二來。最后一句則和翻轉后的“月“押韻。所以,這首詞短短幾句,有三個韻。 肆、效果測試: 只需輸入標題,比如我們輸入“天涯”: 七絕《天涯》作詩機 千里迢迢返故廬,平生寂寞故人疏。 江山不見鶯花老,落日相逢歲又除。 Tips:作詩機的作品,點擊其中一句,候選句會提供無窮無盡的同一個格律的候選句。每次點擊出10句,總可以挑選到合適的。 伍、三代算法和二代算法: 可以簡單這么理解:
希望屆時能給大家帶來更大的驚喜。
|沁園春|壽星明| |水龍吟|龍吟曲|莊椿歲|小樓連苑| |摸魚兒|摸魚子|買陂塘|邁陂塘|雙蕖怨| |齊天樂|臺城路|五福降中天|如此江山| |洞仙歌| |行香子| |八聲甘州| |醉太平| |憶舊游| |蘭陵王| |二郎神| |法曲獻仙音| |長亭怨慢| |絳都春| |鶯啼序| |金人捧露盤|銅人捧露盤引|上西平|西平曲| |暗香|紅情| |雙雙燕| |望遠行| |酷相思| |黃鶯兒| |翠樓吟| |八六子| |憶少年|十二時| |眉嫵|百宜嬌| |六丑|
|浣溪沙|攤破浣溪沙|山花子| |鷓鴣天|思佳客| |水調歌頭| |沁園春|壽星明| |西江月|步虛詞|江月令| |踏莎行|轉調踏莎行| |南歌子|南柯子|風蝶令| |憶江南|望江南|夢江南|江南好| |望海潮| |漁歌子| |金人捧露盤|銅人捧露盤引|上西平|西平曲| |八六子| |
|