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