播放GIF 新智元報道 報道:文強 【新智元導讀】你永遠不知道漢字的潛力。谷歌大腦東京分部的研究員hardmaru,用神經(jīng)網(wǎng)絡根據(jù)筆畫生成漢字,新造了一系列“假漢字”。你別說,有些看上去還真像那么一回事。 因為我們都是中國人,從小看著漢字、寫著漢字長大,所以已經(jīng)忘記了漢字本身是一件多么困難的事情。 是的,漢字基本的筆畫就只有點橫撇捺等幾種,但是,中國文字從甲骨文、金文、篆書、隸書一路走來,不同程度存在難寫難認的缺陷。就算只是一個“點”,在不同的字里面,這個點的大小和方向也是各不相同。因此,對于漢字設計師來說,可是要了老命。 調(diào)查記者 Nikhil Sonnad 曾經(jīng)在 QZ 發(fā)表過一篇文章,詳細講述了設計一個漢字字體漫長艱苦而又令人沉迷的過程。其中有這樣一個例子,展示了言字旁在不同的文字中擁有不同的大小和方向: 言字旁在不同的文字中擁有不同的大小和方向。來源:QZ 這也是為什么相比五花八門的英文和阿拉伯數(shù)字字體,漢字的字體那么少的一個原因。 Nikhil Sonnad 在那篇文章中指出,一位經(jīng)驗豐富的設計師可以在6個月的時間里設計一種涵蓋幾十種西方語言的新字體。但是,對于單個中文字體,至少需要一個好幾人的設計師團隊兩年以上的時間。 有沒有什么好的方法能夠解決這個問題? 作為新智元(ID:AI_era)的讀者,或許有人已經(jīng)猜到我們接下來會說什么。是的,還是神經(jīng)網(wǎng)絡。 谷歌大腦東京分部的研究人員hardmaru,使用神經(jīng)網(wǎng)絡生成漢字,但他與眾不同的地方在于,由于提供給神經(jīng)網(wǎng)絡的數(shù)據(jù)是“筆畫”,因此生成的是所有理論上可以存在,但現(xiàn)實中并沒有在使用的漢字。 或許你要說,這樣做有什么用,但仔細看就能發(fā)現(xiàn)作者這樣做在理論和實際上的意義。 漢字這個系統(tǒng)本質(zhì)上是開放的。使用可用的元素(偏旁部首、筆畫等等),可以制作出無數(shù)個不同的字符。雖然代碼目前還不能很準確地定位筆畫的位置,但hardmaru實驗中的一些結(jié)果,看起來非常像真實存在的漢字。 認識一個字不一定寫得出,但寫得出就一定認識它 在一篇介紹他的這項工作的博客中,hardmaru表示,他從小也被父母硬逼著去學漢字,雖然他周圍的人大多說英語。老師教他寫漢字的過程就是抄寫聽寫抄寫聽寫的不斷循環(huán),就好像LSTM根據(jù)訓練樣本輸出序列結(jié)果一樣。 另一方面,他也注意到,“寫”漢字和“讀”漢字是兩個非常不同的過程。你認識一個字(能夠閱讀或者發(fā)出讀音),但不一定寫得出來;但是,如果你能寫出一個漢字,你一定知道它的發(fā)音?,F(xiàn)在,人們越來越多的依賴基于發(fā)音的輸入法來“寫”漢字,當真正提筆寫字的時候,常常會出現(xiàn)忘記怎么寫的情況。 在一定程度上,機器學習的過程也一樣,最初都是從簡單的分類問題開始:判斷輸入的圖像是貓還是狗,交易是真實的還是是欺詐……這些任務非常有用。但是,hardmaru認為,更有趣的任務是生成數(shù)據(jù),在hardmaru看來,生成數(shù)據(jù)是數(shù)據(jù)分類的延伸和擴展。相比能夠認出某個漢字,能夠把這個漢字寫出來表明我們對這個漢字有更多的理解。同理,生成內(nèi)容也是理解內(nèi)容的關鍵。 生成對抗網(wǎng)絡(GAN)在生成數(shù)據(jù)方面有著優(yōu)異的表現(xiàn),機器翻譯也算是一類生成數(shù)據(jù)的例子。但hardmaru想生成的是矢量數(shù)據(jù)。因為他認為很多內(nèi)容都更適合用矢量的形式來表達,比如用數(shù)碼筆畫的素描、CAD設計、科學實驗數(shù)據(jù)等等。 字體和筆畫也更適合用矢量來表示。精心設計的TrueType字體,不管大小,顯示出來都很美麗。 接下來,我們將介紹hardmaru如何使用RNN生成矢量格式的手寫體漢字。漢字以矢量保存(SVG格式)。 hardmaru實現(xiàn)的是一個生成“新造”漢字的網(wǎng)絡sketch-rnn,與Graves手寫體生成模型框架(見下)類似。 用于訓練的數(shù)據(jù)是真實的漢字,并且包含了筆畫順序。因此,神經(jīng)網(wǎng)絡生成的漢字看上去也是按照一定程度上合理的筆畫順序來的。 訓練數(shù)據(jù)樣本,不同的顏色代表了筆畫順序,來源于KanjiVG數(shù)據(jù)集 在sketch-rnn中,每一筆都用類似筆畫的數(shù)據(jù)建模,其中每一步數(shù)據(jù)都包含x和y軸的偏移量,以及這一筆是落在紙上還是沒有落在紙上,如果落在紙上,那么上一筆和這一筆之間就會有連線。神經(jīng)網(wǎng)絡必須為下一步提供概率分布。這個概率分布不是離散的,而是連續(xù)分配x軸和y軸上的偏移量,以及筆在下一步在紙上抬起的概率(也即筆畫結(jié)束的概率)。sketch-rnn使用混合高斯分布來估算下一筆的位移。這個用來生成筆跡的方法叫做混合密度網(wǎng)絡(Mixture Density Networks,MDN)。 以上是使用混合高斯密度來生成漢字筆劃的一個例子。黑點代表在寫字過程中連起來的線,LSTM + MDN算法將持續(xù)估計下一個點出現(xiàn)位置的概率分布。這個分布被建模成混合高斯分布。這意味著下一個位置是許多不同位置的混合(深淺不同的紅色橢圓),并且每個位置本身都是x軸和y軸偏移的二維聯(lián)合高斯分布,每個偏移都有自己的位置2×2協(xié)方差矩陣。 MDN軌跡展示 除了筆劃的位置分布和結(jié)束概率之外,還需要對寫完整個漢字的概率進行建模,也即結(jié)束字符“end-of-char”概率。但是,每個筆畫完結(jié)的概率跟整個漢字完結(jié)的概率有一定重復,hardmaru 花了不少功夫嘗試對上述兩個信號(筆劃完結(jié)概率、字符完結(jié)概率)建模。最終,他通過神經(jīng)網(wǎng)絡中的softmax層將筆的狀態(tài)建模為一組離散的狀態(tài)。筆的狀態(tài)分為三種:筆畫結(jié)束、字符結(jié)束、落筆。模型會計算每一步三種狀態(tài)的概率。 LSTM+MDN基本上是LSTM+Softmax的擴展,hardmaru以后想嘗試更強大的方法。GAN(生成對抗網(wǎng)絡)也許能應用到循環(huán)網(wǎng)絡上,但他預計訓練LSTM GAN會非常困難。 除了上面展示的各種例子,這是已有的一些有趣的結(jié)果,hardmaru自己做了“注釋”: 還有一些不知道怎么描述的結(jié)果: 了解更多
|
|