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