當前位置:首頁 » 服務存儲 » 分布式存儲問答
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

分布式存儲問答

發布時間: 2023-04-11 18:44:05

Ⅰ Web3.0中國峰會暨分布式存儲行業大會隆重舉行

11月11日-15日,Web3.0中國峰會暨分布式存儲行業大會(以下簡稱「峰會」)在深圳福田會展中心隆重舉行。峰會作為2020中國國際高新技術成果交易會(以下簡稱「高交會」)的重要組成部分,匯聚了眾多領軍人物、企業代表、專家學者、權威媒體人等,同時共享高交會來自智能 科技 、互聯網、物聯網、人工智慧、大數據、新基建等行業超40萬名專業觀眾。

深圳麥客存儲 科技 有限公司(以下簡稱「麥客存儲」)作為分布式存儲十強企業及區塊鏈二十強,榮幸受邀參會。麥客存儲首席商務官朱頌先生出席峰會,發表「鑄就存儲產業新生態,加速新動能崛起」主題演講,並參與「區塊鏈分布式存儲之生態路在何方」圓桌論壇。


鑄就存儲產業新生態


朱頌表示,數據時代即將到來。以後的人類 社會 ,數據是如同當今石油等一般的重要戰略資源之一,勢必會被各利益集團所爭奪。在未來, 算力是能源,演算法是法則,而存儲就是土壤


區塊鏈被公認為是對生產關系的變革,可以大幅拓展人類協作的廣度和深度,從而推動「信息互聯網」向「價值互聯網」變遷。它也被認為是未來發展數字經濟、構建新型信任體系不可或缺的技術之一,而區塊鏈分布式存儲是其中極為重要的一部分。


未來區塊鏈分布式存儲將在數據管理、保護等方面發揮更加積極的作用,成為大國重器和數字產業生態的系統構建與新基建的重要引擎。


麥客存儲牢記使命,堅守擔當,在推動傳統存儲產業革新的同時,積極與不同領域企業攜手創新,加快落實區塊鏈分布式存儲在產業鏈中的實際應用、融合應用,發揮新技術先進優勢,形成產業新生態。


主題演講完畢,朱頌接受多家行業權威媒體采訪,以下為問答實錄:

區塊鏈分布式存儲相較於其它存儲技術有何創新之處?都有哪些優勢?行業現狀如何?

區塊鏈分布式存儲結合了區塊鏈技術的優勢,相較於傳統中心化存儲技術,有下載速度快、數據安全性高、存儲成本低廉、數據留存時間長、可溯源、消除冗餘文件等眾多優勢,被廣泛認可為構築Web3.0的基石。

新基建和「十四五」對於區塊鏈分布式存儲行業發展都是利好政策,國家也多次頒發相關政策引導盡快培育數據市場。現在的行業正在快速發展期,整體欣欣向榮,麥客存儲積極推動應用落地與生態建設,為行業做出實際的貢獻。

麥客存儲廣東分布式存儲數據中心部署情況如何?麥客存儲推出「麥客星際中國」計劃,並在推動「2+1」上市規劃,現在進展如何?

麥客存儲將斥資2.5億元人民幣收購廣東分布式存儲數據中心,目前部署順利,已啟用。

截至11月13日,麥客存儲已成立多家銀河系公司、太陽系公司、地月系公司。九月以來,「麥客星際中國」全國巡迴峰會成功召開了36站。11月7日,麥客存儲正式啟動新加坡上市工作。

麥客存儲在行業內處於什麼地位?核心優勢有哪些?

麥客存儲持續處於業內領先地位。

麥客存儲在區塊鏈分布式存儲行業最大的優勢是集合全產業鏈於一體,深度融合供應鏈上下游,擁有多個數據中心、自建存儲伺服器生產工廠,且非常注重自主技術的研發,並在行業內深耕多年。無論是在存儲伺服器的硬體質量控制、性價比、數據中心運維、降低經營成本、合作渠道等方面都有著不小的優勢,也是麥客存儲核心競爭力所在。


構築Web3.0


「互聯網+」的魅力毋庸置疑,電子商務與各種雲平台、雲服務大行其道,精彩紛呈的網路世界無疑已成為人類 社會 的重要部分。但是,現行網路已經愈發難堪當今 社會 的實際需求, 數據確權、隱私保護、權益保護如同三座大山一般橫亘在互聯網上

站在千禧年後第一個二十年末,我們發現互聯網亟需進化,刻不容緩。首先,要改造一樣事物,了解它的發展歷程非常有必要,現在的專家學者們普遍認同將互聯網分為三個時代,我們或將進入Web3.0時代。

Web1.0

以靜態、單向閱讀為主,網站內信息可以直接和其他網站信息進行交互,能通過第三方信息平台同時對多家網站信息進行整合使用。代表為新浪,搜狐,網易三大門戶。

Web2.0

以分享為特徵的實時網路,用戶在互聯網上擁有自己的數據,並能在不同的網站上使用。(即現行網路)

Web3.0

將以網路化和個性化為特徵,提供更多人工智慧服務,完全基於Web,用瀏覽器即可實現復雜的系統程序才具有的功能。

Web3.0尚未正式誕生,現處於初級階段,難以完全准確定義,但公認可以實現萬物互聯的美好暢想,代表著下一個時代的需求。 在Web3.0中,信息自由交互,價值自由流通。數據和價值都屬於用戶,而不是提供服務的公司。


分布式存儲成剛需

無論是Web 1.0還是Web 2.0,因為運營服務的中心化總是或多或少地帶來透明度和信任的問題,但是這一問題可以通過數據權益通證化、數據確權與授權的區塊鏈技術應用來得到解決,這個過程完成之後,Web3.0時代也將來臨。在這個實現的過程中,區塊鏈分布式存儲將發揮舉足輕重的作用。


分布式相對於中心化來說,更穩定、抗風險能力更強、消耗更低、更公平、更透明、更簡單。


事實上,分布式思想已經在我們的工業、科學等眾多方面應用非常廣闊。

去中心化的准確描述應該是多中心,或者說是沒有唯一的中心控制的弱中心,去中心不代表著沒有中心,而是把機會拉平,每個尋常的節點都有可能成為中心,如同每個普通美國人,都有可能成為美國總統。

加速新動能崛起


因5G、雲計算、人工智慧等為代表的一批高新技術蓬勃發展,數據存儲需求爆炸式上升,區塊鏈結合分布式存儲帶來的是一種全新的技術想像,一種突破傳統的海量數據存儲模型,是一次革命性的顛覆浪潮。


近日,國家廣播電視總局辦公廳印發《國家廣播電視總局辦公廳關於印發區塊鏈技術應用系列白皮書的通知》。白皮書中多次提及IPFS、區塊鏈分布式存儲,肯定了IPFS的應用價值與技術優勢,並就如何利用IPFS等新技術打造融媒體中心等做出詳細介紹。區塊鏈分布式存儲的重大價值顯露無疑。


麥客存儲作為區塊鏈分布式存儲領域先驅引領者,重視技術協同、生態融合,推動多項技術的構建,致力於區塊鏈分布式存儲與5G、大數據、雲計算、物聯網、人工智慧等產業深度融合協同發展,助力傳統企業轉型升級,加速新舊動能轉換,為數字化時代的發展做出貢獻。

Ⅱ ENS發布前,聽團隊談項目DAO治理,空投和Layer 2 規劃

ENS DAO將決定交易費變更、金庫用途等和.eth相關的一切事宜,任何代幣持有人都可以參與DAO治理。

以太坊域名服務( Ethereum Name Service )是一個基於以太坊區塊鏈的分布式、開放和可擴展的命名系統。通俗地說,ENS就是區塊鏈中的域名系統。ENS域名讓人們沒有必要再復制或輸入冗長的區塊鏈地址。

ENSUser是社區自發維護的非官方ENS中文社區,維護了ensuser .com( ensuer.eth.link), 為中文世界的ENS用戶和應用開發者提供了ENS相關的資訊、使用教程和文檔教程。

2021年11月1日,ENS宣布發布治理代幣,web3域名協議即將開啟去中心化治理。

ENSUser邀請ENS運營主管Brantly.eth 做客社區,分享關於DAO治理、空投、Layer2拓展等一系列中文世界用戶關心的問題。 以下為AMA回顧。

TLDR

ENS空投50%的代幣將歸屬DAO本身。25%將提供給擁有.ETH名稱的賬戶,另外25%將分配給在過去5年中以重要方式為ENS做出貢獻的數百人。DNS映射域名和子域名未計入空投。ENS項目未進行過融資,核心團隊不會為代幣提供流動性以及主動聯系交易所上幣。DAO將決定交易費變更、金庫用途等和.eth相關的一切事宜,任何$ENS持有人都可以參與DAO治理,成為Delegator。

社區收集問題

Q1:可以從您的角度,先給我們社區的小夥伴簡單介紹一下ENS這個項目嗎?他在Web3.0生態中擔當什麼樣的角色?

Brantly.eth: ENS是web3的身份協議,最終適用於整個互聯網。您擁有自己的用戶名,控制個人資料數據,並將其帶到您使用的每個dapp和服務中。這與web2不同,在web2中,您為每個孤立的服務使用不同的帳戶和用戶名,在web3中,您擁有自己的用戶名並使用到各種應用中。

以上這是主要用例。另外兩個重要用途是您的ENS名稱可以簡化任何區塊鏈的加密支付,並且它可以是一個去中心化的網站。

Q2: .eth 域名可以說是比Punk更早的NFT了,可以給我們簡單介紹一下ENS的團隊背景和發展歷程嗎?

Brantly.eth: ENS於2017年5月4日推出。這比CryptoPunks早了幾周,比Curio Cards早了幾天。我很確定ENS是世界上持續運行時間最長的NFT社區。當時有NFT標准不過還沒有ERC-721標准,後者在那年晚些時候問世。

ENS於2016年作為Nick Johnson和以太坊基金會的其他一些人的閑暇項目開始。當ENS在2017年推出時,它非常簡單,只是以太坊地址和Swarm哈希的.ETH名稱。但目前它已經發展了很多:它現在支持任何區塊鏈地址; IPFS、Skynet 和Arweave也有哈希值;和個人資料數據,如頭像。它也不再只是.ETH名稱;您還可以將任何DNS名稱導入ENS。

Q3: ENS剛剛發布了治理代幣的計劃。對於ENS生態中的普通用戶、投機者、合作夥伴等不同角色,怎樣分配初始的治理權能有利於ENS的長期利益?

Brantly .eth: 50%的代幣將歸屬DAO本身。25%將提供給擁有.ETH名稱的賬戶,另外25%將分配給在過去5年中以重要方式為

ENS做出貢獻的數百人。對於空投,它與一個人擁有的 .ETH名稱的數量無關, 而是與他們擁有任何域名的時間成正比。這避免了給大規模域名搶注者過多的權力。對ENS生態系統做出重大貢獻的項目將獲得額外的代幣,例如ENSUser將獲得一r些貢獻者代幣。非常感謝你所做的一切!

Q4: ENS金庫中有大量的注冊費,隨著治理權的開放,將會怎樣分配這些資金?

Brantly.eth:好問題。這將由ENS DAO來決定!這實際上是做DAO背後的一大推動力:我們不知道如何花錢,我們希望社區對此有發言權。(注: ENS金庫目前有超過2400萬美金)我們建議他們首先將其用於ENS開發,然後用於ENS生態系統,然後用於web3公共產品。

Q5: Gas太高了,ENS有layer2的發展計劃嗎,目前有怎樣的進展呢?

Brantly.eth:是的,gas fee很糟糕。我們計劃使用CCIP-read來允許用戶將記錄和子域放在他們選擇的L2上。在降低注冊.ETH名稱的費用方面,需要更長的時間。我們最終可能會將其移至L2,但問題是我們必須將所有注冊移至該L2,並且我們希望等待L2生態系統先成熟。

Q6:目前有哪些基於ENS構建的應用令你眼前一亮,你希望未來ENS生態會發展出怎樣的用例?

Brantly.eth:使用ENS名稱作為您的用戶名非常強大,我喜歡任何以這種方式使用ENS名稱的dapp。最近還看到一個項目,用ENS來命名分布式文件網路上的文件存儲,很酷。

Q7:前一段時間ENS兼容了全部的DNS域名,這是否會影響.eth域名的價值? .eth對比傳統DNS接入的域名有什麼優勢?

Brantly.eth:我不這么認為。雖然導入到ENS的DNS名稱可以做很多相同的事情,但.ETH名稱仍然有一些優勢。例如,.ETH名稱是完全自託管的,而導入到ENS的DNS名稱與普通DNS名稱具有相同的安全級別。

此外,我認為.ETH具有很好的品牌效應。正如.COM代表了互聯網的興起,我認為.ETH作為一個符號代表了web3的興起

自由問答

Q8:ENS有計劃上任何交易所嗎?

Brantly . eth: ENS核心團隊不會為代幣提供任何流動性,或者主動接洽交易所商討上幣事宜。

Q9: ENS會上幣安嗎?

Brantly.eth:這要問幣安了。

Q10:我想知道為什麼不給將DNS接入ENS域名的用戶空投代幣?我認為這是從web2到web3的積極過渡,對整個加密貨幣生態有利。

Brantly.eth:這是因為DAO將負責治理

與.ETH域名有關的事宜,而且注冊機制和注冊費都只和.ETH域名相關。

Q11:我要做什麼才能參與ENSDAO ?

Branrly. eth:只需要$ENS代幣就可以了。11月8號之後就有了。

Q12: $ENS代幣有什麼功能?

Brantly. eth: $ENS代幣給了持有者在DAO中投票的權利。

Q13:目前從公告中看,在Gitcoin中給ENS捐款的用戶並不能得到空投。但是未來捐款用戶能否獲得空投呢,畢竟他們為項目做過貢獻?

Brantly . eth: ENS核心團隊從來沒有接受過Gitcoin的捐款。

Q14:未來會限制注冊域名的用戶數嗎?未來注冊費會增加嗎?

Brantly. eth:不會! ENS的域名沒有上限,我們希望地球上每一個人都能有ENS域名。關於年費,這將由DAO控制,並且DAO決定會不會增加。

Q15: ENS會空投給poap的持有者嗎?

Brantly.eth:持有POAP並不會增加空投代幣的數量。

Q16:未來我們能用ENS代幣而不是ETH來注冊域名和續費嗎?

Brantly.eth:這將由DAO決定。

Q17:我平時用* .dcl.eth當域名,而且我設置了reverse record,但是我沒有空投,我覺得這不公平。你怎麼看?

Brantly. eth:我們把空投限制到了.eth 域名,因為DAO將治理和.eth 域名有關的事宜,而不是子域名。

Q18:未解鎖的ENS代幣會有和流通代幣一樣的投票權嗎?

Brantly. eth:不會,鎖倉代幣將沒有投票權。

Q19: ENS有流動性挖礦計劃嗎?

Brantly.eth: ENS核心團隊將不會提供任何流動性。

Q20: ENS代幣將一次性發放還是分批解鎖?

Brantly . eth:對於核心團隊和顧問的代幣,將會分4年釋放。50%分配給DAO的代幣也是逐步釋放。而給其他用戶的代幣,則是一次性釋放。

Q21: Unstoppable domains@有很多頂級

域。ENS團隊以後會創建除了.eth之外的其他頂級域嗎?

Brantly . eth: Unstoppable沒有擁有任何頂級域,他們只是自創了一些域名,並且以後很有可能和ENS以及DNS現有的域名沖突。ENS支持了DNS的域名空間,現在Unstoppabe自創的這些域名未來很有可能碰撞DNS域名空間,造成UN體系內域名持有者和DNS域名持有不同的沖突。

Q22:嗨,brantly! 現在有多少人申請Delegator呀?你們最後會選多少個Delegator?

Brantly. eth:目前好幾百人申請。我們不會負責選擇delegator,代幣持有人決定把代幣委託給自己信任的delegator,完全由用戶決定。

Q23: ENS有路線圖嗎?

Brantly . eth:我們經常公開討論進展、工作情況以獲得反饋,不過以後我們或許應該發布一個更新的路線圖。

Q24: ENS好用好記,不過現在很多錢包和交易所都不支持,你怎麼看?以後怎麼拓展ENS的用例,團隊會做些什麼?

Brantly.eth:目前有310種接入了,不過ENS需要有數千種應用接入ENS。社區用戶能做的是禮貌地向各種服務要求接入ENS域名。各種應用都會聽用戶的意見。

Q25:嗨,Brantly! 為什麼你們現在決定發幣和DAO起來了,而不是幾年之前?

Brantly. eth:我們覺得ENS和DAO目前足夠成熟了。不知之前,DAO還是非常實驗性的,而且ENS也還很幼稚。

Ⅲ 如何利用深度學習技術訓練聊天機器人語言模型

數據預處理

模型能聊的內容也取決於選取的語料。如果已經具備了原始聊天數據,可以用sql通過關鍵字查詢一些對話,也就是從大庫里選取出一個小庫來訓練。從一些論文上,很多演算法都是在數據預處理層面的,比如Mechanism-Aware Neural Machine for Dialogue Response Generation就介紹了,從大庫中抽取小庫,然後再進行融合,訓練出有特色的對話來。

對於英語,需要了解NLTK,NLTK提供了載入語料,語料標准化,語料分類,PoS詞性標注,語意抽取等功能。

另一個功能強大的工具庫是CoreNLP,作為 Stanford開源出來的工具,特色是實體標注,語意抽取,支持多種語言。

下面主要介紹兩個內容:

中文分詞

現在有很多中文分詞的SDK,分詞的演算法也比較多,也有很多文章對不同SDK的性能做比較。做中文分詞的示例代碼如下。

# coding:utf8
'''
Segmenter with Chinese
'''

import jieba
import langid


def segment_chinese_sentence(sentence):
'''
Return segmented sentence.
'''
seg_list = jieba.cut(sentence, cut_all=False)
seg_sentence = u" ".join(seg_list)
return seg_sentence.strip().encode('utf8')


def process_sentence(sentence):
'''
Only process Chinese Sentence.
'''
if langid.classify(sentence)[0] == 'zh':
return segment_chinese_sentence(sentence)
return sentence

if __name__ == "__main__":
print(process_sentence('飛雪連天射白鹿'))
print(process_sentence('I have a pen.'))

以上使用了langid先判斷語句是否是中文,然後使用jieba進行分詞。

在功能上,jieba分詞支持全切分模式,精確模式和搜索引擎模式。

全切分:輸出所有分詞。

精確:概率上的最佳分詞。

所有引擎模式:對精確切分後的長句再進行分詞。

jieba分詞的實現

主要是分成下面三步:

1、載入字典,在內存中建立字典空間。

字典的構造是每行一個詞,空格,詞頻,空格,詞性。

上訴書 3 n
上訴人 3 n
上訴期 3 b
上訴狀 4 n
上課 650 v

建立字典空間的是使用python的dict,採用前綴數組的方式。

使用前綴數組的原因是樹結構只有一層 -word:freq,效率高,節省空間。比如單詞"dog", 字典中將這樣存儲:

{
"d": 0,
"do": 0,
"dog": 1 # value為詞頻
}

字典空間的主要用途是對輸入句子建立有向無環圖,然後根據演算法進行切分。演算法的取捨主要是根據模式- 全切,精確還是搜索。

2、對輸入的語句分詞,首先是建立一個有向無環圖。
有向無環圖,Directed acyclic graph(音 /ˈdæɡ/)。

【圖 3-2】 DAG

DAG對於後面計算最大概率路徑和使用HNN模型識別新詞有直接關系。

3、按照模式,對有向無環圖進行遍歷,比如,在精確模式下,便利就是求最大權重和的路徑,權重來自於在字典中定義的詞頻。對於沒有出現在詞典中的詞,連續的單個字元也許會構成新詞。然後用HMM模型和Viterbi演算法識別新詞。

精確模型切詞:使用動態規劃對最大概率路徑進行求解。

最大概率路徑:求route = (w1, w2, w3 ,.., wn),使得Σweight(wi)最大。Wi為該詞的詞頻。

更多的細節還需要讀一下jieba的源碼。

自定義字典

jieba分詞默認的字典是:1998人民日報的切分語料還有一個msr的切分語料和一些txt小說。開發者可以自行添加字典,只要符合字典構建的格式就行。

jieba分詞同時提供介面添加詞彙。

Word embedding

使用機器學習訓練的語言模型,網路演算法是使用數字進行計算,在輸入進行編碼,在輸出進行解碼。word embedding就是編解碼的手段。

【圖 3-3】 word embedding, Ref. #7

word embedding是文本的數值化表示方法。表示法包括one-hot,bag of words,N-gram,分布式表示,共現矩陣等。

Word2vec

近年來,word2vec被廣泛採用。Word2vec輸入文章或者其他語料,輸出語料中詞彙建設的詞向量空間。詳細可參考word2vec數學原理解析。

使用word2vec

安裝完成後,得到word2vec命令行工具。

word2vec -train "data/review.txt"
-output "data/review.model"
-cbow 1
-size 100
-window 8
-negative 25
-hs 0
-sample 1e-4
-threads 20
-binary 1
-iter 15

-train "data/review.txt" 表示在指定的語料庫上訓練模型

-cbow 1 表示用cbow模型,設成0表示用skip-gram模型

-size 100 詞向量的維度為100

-window 8 訓練窗口的大小為8 即考慮一個單詞的前八個和後八個單詞

-negative 25 -hs 0 是使用negative sample還是HS演算法

-sample 1e-4 採用閾值

-threads 20 線程數

-binary 1 輸出model保存成2進制

-iter 15 迭代次數

在訓練完成後,就得到一個model,用該model可以查詢每個詞的詞向量,在詞和詞之間求距離,將不同詞放在數學公式中計算輸出相關性的詞。比如:

vector("法國") - vector("巴黎) + vector("英國") = vector("倫敦")"

對於訓練不同的語料庫,可以單獨的訓練詞向量模型,可以利用已經訓練好的模型。

其它訓練詞向量空間工具推薦:Glove。

Seq2Seq

2014年,Sequence to Sequence Learning with Neural Networks提出了使用深度學習技術,基於RNN和LSTM網路訓練翻譯系統,取得了突破,這一方法便應用在更廣泛的領域,比如問答系統,圖像字幕,語音識別,撰寫詩詞等。Seq2Seq完成了【encoder + decoder -> target】的映射,在上面的論文中,清晰的介紹了實現方式。

【圖 3-4】 Seq2Seq, Ref. #1

也有很多文章解讀它的原理。在使用Seq2Seq的過程中,雖然也研究了它的結構,但我還不認為能理解和解釋它。下面談兩點感受:

a. RNN保存了語言順序的特點,這和CNN在處理帶有形狀的模型時如出一轍,就是數學模型的設計符合物理模型。

【圖 3-5】 RNN, Ref. #6

b. LSTM Cell的復雜度對應了自然語言處理的復雜度。

【圖 3-6】 LSTM, Ref. #6

理由是,有人將LSTM Cell嘗試了多種其它方案傳遞狀態,結果也很好。

【圖 3-7】 GRU, Ref. #6

LSTM的一個替代方案:GRU。只要RNN的Cell足夠復雜,它就能工作的很好。

使用DeepQA2訓練語言模型

准備工作,下載項目:

git clone https://github.com/Samurais/DeepQA2.git
cd DeepQA2
open README.md # 根據README.md安裝依賴包

DeepQA2將工作分成三個過程:

數據預處理:從語料庫到數據字典。

訓練模型:從數據字典到語言模型。

提供服務:從語言模型到RESt API。

預處理

DeepQA2使用Cornell Movie Dialogs Corpus作為demo語料庫。

原始數據就是movie_lines.txt和movie_conversations.txt。這兩個文件的組織形式參考README.txt

deepqa2/dataset/preprocesser.py是將這兩個文件處理成數據字典的模塊。

train_max_length_enco就是問題的長度,train_max_length_deco就是答案的長度。在語料庫中,大於該長度的部分會被截斷。

程序運行後,會生成dataset-cornell-20.pkl文件,它載入到python中是一個字典:

word2id存儲了{word: id},其中word是一個單詞,id是int數字,代表這個單詞的id。

id2word存儲了{id: word}。

trainingSamples存儲了問答的對話對。

比如 [[[1,2,3],[4,5,6]], [[7,8,9], [10, 11, 12]]]

1,2,3 ... 12 都是word id。

[1,2,3] 和 [4,5,6] 構成一個問答。 [7,8,9] 和 [10, 11, 12] 構成一個問答。

開始訓練

cp config.sample.ini config.ini # modify keys
python deepqa2/train.py

config.ini是配置文件, 根據config.sample.ini進行修改。訓練的時間由epoch,learning rate, maxlength和對話對的數量而定。

deepqa2/train.py大約100行,完成數據字典載入、初始化tensorflow的session,saver,writer、初始化神經元模型、根據epoch進行迭代,保存模型到磁碟。

session是網路圖,由placeholder, variable, cell, layer, output 組成。

saver是保存model的,也可以用來恢復model。model就是實例化variable的session。

writer是查看loss fn或者其他開發者感興趣的數據的收集器。writer的結果會被saver保存,然後使用tensorboard查看。

Model

Model的構建要考慮輸入,狀態,softmax,輸出。

定義損耗函數,使用AdamOptimizer進行迭代。

最後,參考一下訓練的loop部分。

每次訓練,model會被存儲在save路徑下,文件夾的命名根據機器的hostname,時間戳生成。

提供服務

在TensorFlow中,提供了標準的serving模塊 - tensorflow serving。但研究了很久,還專門看了一遍 《C++ Essentials》,還沒有將它搞定,社區也普遍抱怨tensorflow serving不好學,不好用。訓練結束後,使用下面的腳本啟動服務,DeepQA2的serve部分還是調用TensorFlow的python api。

cd DeepQA2/save/deeplearning.cobra.vulcan.20170127.175256/deepqa2/serve
cp db.sample.sqlite3 db.sqlite3
python manage.py runserver 0.0.0.0:8000

測試

POST /api/v1/question HTTP/1.1
Host: 127.0.0.1:8000
Content-Type: application/json
Authorization: Basic YWRtaW46cGFzc3dvcmQxMjM=
Cache-Control: no-cache

{"message": "good to know"}

response
{
"rc": 0,
"msg": "hello"
}

serve的核心代碼在serve/api/chatbotmanager.py中。

使用腳本

scripts/start_training.sh啟動訓練

scripts/start_tensorboard.sh啟動Tensorboard

scripts/start_serving.sh啟動服務

對模型的評價

目前代碼具有很高的維護性,這也是從DeepQA項目進行重構的原因,更清晰的數據預處理、訓練和服務。有新的變更可以添加到deepqa2/models中,然後在train.py和chatbotmanager.py變更一下。

有待改進的地方

a. 新建models/rnn2.py, 使用dropout。目前DeepQA中已經使用了Drop.

b. tensorflow rc0.12.x中已經提供了seq2seq network,可以更新成tf版本.

c. 融合訓練,目前model只有一個庫,應該是設計一個新的模型,支持一個大庫和小庫,不同權重進行,就如Mechanism-Aware Neural Machinefor Dialogue Response Generation的介紹。

d. 代碼支持多機多GPU運行。

e. 目前訓練的結果都是QA對,對於一個問題,可以有多個答案。

f. 目前沒有一個方法進行accuracy測試,一個思路是在訓練中就提供干擾項,因為當前只有正確的答案,如果提供錯誤的答案(而且越多越好),就可以使用recall_at_k方法進行測試。

機器人家上了解到的,希望對你有用