本文首發自集智專欄html
不論是大公司也好,小公司也罷,爲用戶建立感性的參與體驗都是一個重要目標,而這個過程每每經過原型設計、程序設計和用戶測試這幾個部分之間快速循環來完成。對於大型公司,好比 Facebook,它們有足夠的專用帶寬,可供整個團隊設計前面所說的全部流程,一般要花費幾周的時間;而小型公司因爲沒有此類資源支持,每每獲得很不理想的用戶界面。前端
本文我將分享如何用深度學習算法大幅簡化設計工做流,從而讓任何體量的公司都能快速建立測試網頁。git
當前一個典型的設計工做流可能以下所示:github
(設計工做流中涉及的相關各方)產品經理進行用戶調查後,列出一系列的要求。算法
設計師根據需求,探索低保真原型,最終建立高保真產品模型。瀏覽器
工程師用代碼實現設計,最終將產品傳達給用戶。網絡
這種冗長的開發流程不少時候會成爲制約企業的瓶頸問題,所以一些公司好比 Airbnb,已經開始用機器學習讓開發流程更加高效。前端工程師
(Airbnb內部將設計草圖轉變爲代碼的AI工具演示圖)可是這些公司應用的方法到底如何,外界不得而知。所以我決定研究一種開源版的網頁自動開發技術,讓廣大開發者和設計師都能從中受益。架構
理想情況下,個人模型可以根據網站設計的簡單手繪圖,馬上生成能夠運行的 HTML 網站:框架
(模型能將設計草圖馬上轉換爲HTML代碼)實際上,上面的例子就是個人模型根據測試照片實際生成的一個網站。能夠在個人 GitHub 上查看生成該網站的代碼。
我要解決的問題,從大的方向上能夠歸類爲一種叫作「程序綜合」的任務,也就是自動生成可以運行的源代碼。雖然大部分程序綜合處理的是天然語言指令或執行追蹤中生成的代碼,但個人模型還能在開始時利用源圖像(手繪的示意圖)。
機器學習領域有個充分研究的方向叫作圖像描述,這種方法會學習將圖像和文本相匹配的模型,專爲源圖像中的內容生成文本描述。
(圖像描述模型生成源圖像的文本描述)在觀摩學習了最近發表的稱爲pix2code的論文和Emil Wallner的相關項目後,我得到了一些啓發,決定將個人任務歸類爲圖像描述,也就是將手繪的網站示意圖看做輸入圖像,而對應的HTML代碼就至關於圖像的輸出文本。
若是是用圖像描述這種方法,我理想中的訓練數據集應當是幾千張手繪的網站設計圖及其對應的 HTML 代碼。意料之中,這種正好符合要求的數據集根本找不到,所以我只能本身建立任務須要的數據集。
我首先使用來自pix2code論文的開源數據集,包含了1750張綜合生成的網站及其相關源代碼的截圖。
(pix2code數據集)就個人項目的開始階段而言,這是個很好的數據集,有幾個頗有趣的亮點:
爲了修正數據集,更好的適應個人任務,我須要讓網站圖像看起來是用手畫出來的同樣。我用了一些工具,好比 OpenCV 和 Python 庫 PIL,修改了每張圖像的信息,好比灰度轉換、輪廓檢測等。
最終,我決定直接修改初始網站的 CSS 樣式表,進行了一系列的操做:
如今,須要的數據已經備好,終於能夠將數據輸入到模型中了!
我採用了應用於圖像描述部分的模型架構,主要包含 3 個主要部分:
爲了能訓練模型,我將源代碼拆分爲 token 的序列。模型的每一個輸入就是一個 token 序列,並配有和序列對應的源圖像,其標籤爲文件中的下一個 token。模型使用交叉熵代價函數做爲其損失函數,它會將模型預測的下一個 token 和實際的下一個 token 進行比較。
在推理階段,當模型從零開始生成代碼時,過程會有所不一樣。圖像仍然是經過 CNN 神經網絡處理,但只用起始序列進行文本處理。模型對序列中下一個 token 的預測,在每一步都會添加至當前輸入序列,並做爲一個新的輸入序列輸入到模型中。這個過程會反覆進行,直到模型預測出一個 token 或者用盡了每一個文件中的 token 數量。
我決定用 BLEU 得分評估模型。BLEU 得分是應用在機器翻譯任務中的常見指標,用來衡量輸入相同的狀況下,機器生成文本和人類生成文本的接近程度。
基本上,BLEU 會比較生成文本和引用文本這二者的 N-Gram 序列,以改進的形式表示模型的精確度。這對本項目來講很是合適,由於它會將生成的 HTML 中的實際元素以及它們之間的關係考慮進來。
更棒的是,我能經過檢查生成的網站查看 BLEU 得分。
(可視化BLEU得分)最高 BLEU 得分 1.0 表示模型能根據源圖像生成正確的網頁元素,且各元素均在正確的位置。 BLEU 得分很低則表示模型沒有正確生成元素,或將元素放在了錯誤的位置。最終用評估數據集對模型進行評估時,顯示模型獲得了 0.76 的 BLEU 得分。也就是說我搭建的模型,能正確的將 76% 的設計草圖短短几秒鐘內轉換爲 HTML 代碼。
我後來意識到還有一個額外的福利。因爲模型只生成了網頁的框架(文件的 token),那麼我能夠在編譯過程當中添加一個自定義 CSS 層,這樣模型就能即刻讓生成的網站擁有多種不一樣的風格。
(一張設計草圖同時生成多種風格)讓網站風格和模型生成過程相分離,能讓使用模型時具有幾個很大的優點:
經過使用圖像描述領域的研究方法,我搭建了一個深度學習模型,可以將手繪的網站設計圖在幾秒鐘內轉換爲能夠運行的 HTML 網站。
固然模型也存在一些侷限,將來我可能從如下幾個方面優化:
本項目所有代碼見個人GitHub庫
限時折扣中:0806期《人工智能-從零開始到精通》(前25位同窗可領取¥200優惠券)