QA问答系统中的深度学习技术实现
生活随笔
收集整理的這篇文章主要介紹了
QA问答系统中的深度学习技术实现
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
應(yīng)用場(chǎng)景
智能問答機(jī)器人火得不行,開始研究深度學(xué)習(xí)在NLP領(lǐng)域的應(yīng)用已經(jīng)有一段時(shí)間,最近在用深度學(xué)習(xí)模型直接進(jìn)行QA系統(tǒng)的問答匹配。主流的還是CNN和LSTM,在網(wǎng)上沒有找到特別合適的可用的代碼,自己先寫了一個(gè)CNN的(theano),效果還行,跟論文中的結(jié)論是吻合的。目前已經(jīng)應(yīng)用到了我們的產(chǎn)品上。
原理
參看《Applying Deep Learning To Answer Selection: A Study And An Open Task》,文中比較了好幾種網(wǎng)絡(luò)結(jié)構(gòu),選擇了效果相對(duì)較好的其中一個(gè)來(lái)實(shí)現(xiàn),網(wǎng)絡(luò)描述如下:
Q&A共用一個(gè)網(wǎng)絡(luò),網(wǎng)絡(luò)中包括HL,CNN,P+T和Cosine_Similarity,HL是一個(gè)g(W*X+b)的非線性變換,CNN就不說了,P是max_pooling,T是激活函數(shù)Tanh,最后的Cosine_Similarity表示將Q&A輸出的語(yǔ)義表示向量進(jìn)行相似度計(jì)算。
詳細(xì)描述下從輸入到輸出的矩陣變換過程:
Test 1 0.4933 0.6189
Test 2 0.4606 0.5968
Dev 0.4700 0.6088 另外,原始的insuranceQA需要進(jìn)行一些處理才能在這個(gè)代碼上使用,具體參看github上的說明吧。 一些技巧
發(fā)表在 機(jī)器學(xué)習(xí), 深度學(xué)習(xí), 自然語(yǔ)言處理, 問答系統(tǒng)? ? ? ? | 留下評(píng)論
達(dá)觀數(shù)據(jù)搜索引擎的Query自動(dòng)糾錯(cuò)技術(shù)和架構(gòu)詳解發(fā)表于 2016年04月27號(hào) 由 recommender
1 背景 如今,搜索引擎是人們的獲取信息最重要的方式之一,在搜索頁(yè)面小小的輸入框中,只需輸入幾個(gè)關(guān)鍵字,就能找到你感興趣問題的相關(guān)網(wǎng)頁(yè)。搜索巨頭Google,甚至已經(jīng)使Google這個(gè)創(chuàng)造出來(lái)的單詞成為動(dòng)詞,有問題Google一下就可以。在國(guó)內(nèi),百度也同樣成為一個(gè)動(dòng)詞。除了通用搜索需求外,很多垂直細(xì)分領(lǐng)域的搜索需求也很旺盛,比如電商網(wǎng)站的產(chǎn)品搜索,文學(xué)網(wǎng)站的小說搜索等。面對(duì)這些需求,達(dá)觀數(shù)據(jù)(www.datagrand.com)作為國(guó)內(nèi)提供中文云搜索服務(wù)的高科技公司,為合作伙伴提供高質(zhì)量的搜索技術(shù)服務(wù),并進(jìn)行搜索服務(wù)的統(tǒng)計(jì)分析等功能。(達(dá)觀數(shù)據(jù)聯(lián)合創(chuàng)始人高翔) 搜索引擎系統(tǒng)最基本最核心的功能是信息檢索,找到含有關(guān)鍵字的網(wǎng)頁(yè)或文檔,然后按照一定排序?qū)⒔Y(jié)果給出。在此基礎(chǔ)之上,搜索引擎能夠提供更多更復(fù)雜的功能來(lái)提升用戶體驗(yàn)。對(duì)于一個(gè)成熟的搜索引擎系統(tǒng),用戶看似簡(jiǎn)單的搜索過程,需要在系統(tǒng)中經(jīng)過多個(gè)環(huán)節(jié),多個(gè)模塊協(xié)同工作,才能提供一個(gè)讓人滿意的搜索結(jié)果。其中拼寫糾錯(cuò)(Error Correction,以下簡(jiǎn)稱EC)是用戶比較容易感知的一個(gè)功能,比如百度的糾錯(cuò)功能如下圖所示: 圖 1:百度糾錯(cuò)功能示例 EC其實(shí)是屬于Query Rewrite(以下簡(jiǎn)稱QR)模塊中的一個(gè)功能,QR模塊包括拼寫糾錯(cuò),同義改寫,關(guān)聯(lián)query等多個(gè)功能。QR模塊對(duì)于提升用戶體驗(yàn)有著巨大的幫助,對(duì)于搜索質(zhì)量不佳的query進(jìn)行改寫后能返回更好的搜索結(jié)果。QR模塊內(nèi)容較多,以下著重介紹EC功能。
繼續(xù)閱讀 →
發(fā)表在 自然語(yǔ)言處理? ? ? ? | 一條評(píng)論
非主流自然語(yǔ)言處理——遺忘算法系列(四):改進(jìn)TF-IDF權(quán)重公式發(fā)表于 2016年04月23號(hào) 由 老憨
一、前言
前文介紹了利用詞庫(kù)進(jìn)行分詞,本文介紹詞庫(kù)的另一個(gè)應(yīng)用:詞權(quán)重計(jì)算。
二、詞權(quán)重公式
1、公式的定義
定義如下公式,用以計(jì)算詞的權(quán)重:
2、公式的由來(lái)
在前文中,使用如下公式作為分詞的依據(jù):
任給一個(gè)句子或文章,通過對(duì)最佳分詞方案所對(duì)應(yīng)的公式進(jìn)行變換,可以得到:
按前面權(quán)重公式的定義,上面的公式可以理解為:一個(gè)句子出現(xiàn)的概率對(duì)數(shù)等于句子中各詞的權(quán)重之和。
公式兩邊同時(shí)取負(fù)號(hào)使權(quán)重是個(gè)正值。
三、與TF-IDF的關(guān)系
詞頻、逆文檔頻率(TF-IDF)在自然語(yǔ)言處理中,應(yīng)用十分廣泛,也是提取關(guān)鍵詞的常用方法,公式如下:
從形式上看,該公式與我們定義的權(quán)重公式很像,而且用途也近似,那么它們之間有沒有關(guān)系呢?
答案是肯定的。
我們知道,IDF是按文檔為單位統(tǒng)計(jì)的,無(wú)論文檔的長(zhǎng)短,統(tǒng)一都按一篇計(jì)數(shù),感覺這個(gè)統(tǒng)計(jì)的粒度還是比較粗的,有沒有辦法將文本的長(zhǎng)短,這個(gè)明顯相關(guān)的因素也考慮進(jìn)去呢,讓這個(gè)公式更加精細(xì)些?
答案也是肯定的。
文章是由詞鋪排而成,長(zhǎng)短不同,所包含的詞的個(gè)數(shù)也就有多有少。
我們可以考慮在統(tǒng)計(jì)文檔個(gè)數(shù)時(shí),為每個(gè)文檔引入包含多少個(gè)詞這樣一個(gè)權(quán)重,以區(qū)別長(zhǎng)短不同的文檔,沿著這個(gè)思路,改寫一下IDF公式:
我們用所有文檔中的詞做成詞庫(kù),那么上式中:
綜合上面的推導(dǎo)過程,我們知道,本文所定義的詞權(quán)重公式,本質(zhì)上是tf-idf為長(zhǎng)短文檔引入權(quán)重的加強(qiáng)版,而該公式的應(yīng)用也極為簡(jiǎn)單,只需要從詞庫(kù)中讀取該詞詞頻、詞庫(kù)總詞頻即可。
時(shí)間復(fù)雜度最快可達(dá)O(1)級(jí),比如詞庫(kù)以Hash表存儲(chǔ)。
關(guān)于TF-IDF更完整的介紹及主流用法,建議參看阮一峰老師的博文《TF-IDF與余弦相似性的應(yīng)用(一):自動(dòng)提取關(guān)鍵詞》。
四、公式應(yīng)用
詞權(quán)重用途很廣,幾乎詞袋類算法中,都可以考慮使用。常見的應(yīng)用有:
1、關(guān)鍵詞抽取、自動(dòng)標(biāo)簽生成
作法都很簡(jiǎn)單,分詞后排除停用詞,然后按權(quán)重值排序,取排在前面的若干個(gè)詞即可。
2、文本摘要
完整的文本摘要功能實(shí)現(xiàn)很復(fù)雜也很困難,這里所指,僅是簡(jiǎn)單應(yīng)用:由前面推導(dǎo)過程中可知,句子的權(quán)重等于分詞結(jié)果各詞的權(quán)重之和,從而獲得句子的權(quán)重排序。
3、相似度計(jì)算
相似度計(jì)算,我們將在下一篇文中單獨(dú)介紹。
五、演示程序
在演示程序顯示詞庫(kù)結(jié)果時(shí),是按本文所介紹的權(quán)重公式排序的。
演示程序與詞庫(kù)生成的相同:
下載地址:遺忘算法(詞庫(kù)生成、分詞、詞權(quán)重)演示程序.rar
特別感謝:王斌老師指出,本文公式實(shí)質(zhì)上是TF-ICF。
六、聯(lián)系方式: 1、QQ:老憨 244589712
2、郵箱:gzdmcaoyc@163.com
發(fā)表在 自然語(yǔ)言處理? ? ? ? | 標(biāo)簽為 TF-IDF, 自然語(yǔ)言處理, 遺忘算法? ? ? ? | 留下評(píng)論
非主流自然語(yǔ)言處理——遺忘算法系列(三):分詞發(fā)表于 2016年04月23號(hào) 由 老憨
一、前言
前面介紹了詞庫(kù)的自動(dòng)生成的方法,本文介紹如何利用前文所生成的詞庫(kù)進(jìn)行分詞。
二、分詞的原理
分詞的原理,可以參看吳軍老師《數(shù)學(xué)之美》中的相關(guān)章節(jié),這里摘取Google黑板報(bào)版本中的部分:
從上文中,可以知道分詞的任務(wù)目標(biāo):給出一個(gè)句子S,找到一種分詞方案,使下面公式中的P(S)最大:
不過,聯(lián)合概率求起來(lái)很困難,這種情況我們通常作馬爾可夫假設(shè),以簡(jiǎn)化問題,即:任意一個(gè)詞wi的出現(xiàn)概率只同它前面的詞 wi-1 有關(guān)。
關(guān)于這個(gè)問題,吳軍老師講的深入淺出,整段摘錄如下:
另外,如果我們假設(shè)一個(gè)詞與其他詞都不相關(guān),即相互獨(dú)立時(shí),此時(shí)公式最簡(jiǎn),如下:
這個(gè)假設(shè)分詞無(wú)關(guān)的公式,也是本文所介紹的分詞算法所使用的。
三、算法分析
問:假設(shè)分詞結(jié)果中各詞相互無(wú)關(guān)是否可行?
答:可行,前提是使用遺忘算法系列(二)中所述方法生成的詞庫(kù),理由如下:
分析ICTCLAS廣受好評(píng)的分詞系統(tǒng)的免費(fèi)版源碼,可以發(fā)現(xiàn),在這套由張華平、劉群兩位博士所開發(fā)分詞系統(tǒng)的算法中假設(shè)了:分詞結(jié)果中詞只與其前面的一個(gè)詞有關(guān)。
回憶我們?cè)~庫(kù)生成的過程可以知道,如果相鄰的兩個(gè)詞緊密相關(guān),那么這兩個(gè)詞會(huì)連為一個(gè)粗粒度的詞被加入詞庫(kù)中,如:除“清華”、“大學(xué)”會(huì)是單獨(dú)的詞外,“清華大學(xué)”也會(huì)是一個(gè)詞,分詞過程中具體選用那種,則由它們的概率來(lái)決定。
也就是說,我們?cè)谏稍~庫(kù)的同時(shí),已經(jīng)隱含的完成了相關(guān)性訓(xùn)練。
關(guān)于ICTCLAS源碼分析的文章,可以參看呂震宇博文:《天書般的ICTCLAS分詞系統(tǒng)代碼》。
問:如何實(shí)現(xiàn)分詞?
答:基于前文生成的詞庫(kù),我們可以假設(shè)分詞結(jié)果相互無(wú)關(guān),分詞過程就比較簡(jiǎn)單,使用下面的步驟可以O(shè)(N)級(jí)時(shí)間,單遍掃描完成分詞:
逐字掃描句子,從詞庫(kù)中查出限定字長(zhǎng)內(nèi),以該字結(jié)尾的所有詞,分別計(jì)算其中的詞與該詞之前各詞的概率乘積,取結(jié)果值最大的詞,分別緩存下當(dāng)前字所在位置的最大概率積,以及對(duì)應(yīng)的分詞結(jié)果。
重復(fù)上面的步驟,直到句子掃描完畢,最后一字位置所得到即為整句分詞結(jié)果。
3、算法特點(diǎn)
3.1、無(wú)監(jiān)督學(xué)習(xí);
3.2、O(N)級(jí)時(shí)間復(fù)雜度;
3.3、詞庫(kù)自維護(hù),程序可無(wú)需人工參與的情況下,自行發(fā)現(xiàn)并添加新詞、調(diào)整詞頻、清理錯(cuò)詞、移除生僻詞,保持詞典大小適當(dāng);
3.4、領(lǐng)域自適應(yīng):領(lǐng)域變化時(shí),詞條、詞頻自適應(yīng)的隨之調(diào)整;
3.5、支持多語(yǔ)種混合分詞。
四、演示程序下載
演示程序與詞庫(kù)生成的相同:
下載地址:遺忘算法(詞庫(kù)生成、分詞、詞權(quán)重)演示程序.rar
五、聯(lián)系方式:
1、QQ:老憨 244589712
2、郵箱:gzdmcaoyc@163.com
發(fā)表在 自然語(yǔ)言處理? ? ? ? | 標(biāo)簽為 無(wú)監(jiān)督分詞, 自然語(yǔ)言處理, 自適應(yīng)詞典, 跨語(yǔ)種, 遺忘算法? ? ? ? | 13 條評(píng)論
非主流自然語(yǔ)言處理——遺忘算法系列(二):大規(guī)模語(yǔ)料詞庫(kù)生成發(fā)表于 2016年04月23號(hào) 由 老憨
一、前言
本文介紹利用牛頓冷卻模擬遺忘降噪,從大規(guī)模文本中無(wú)監(jiān)督生成詞庫(kù)的方法。
二、詞庫(kù)生成
算法分析,先來(lái)考慮以下幾個(gè)問題
問:目標(biāo)是從文本中抽取詞語(yǔ),是否可以考慮使用遺忘的方法呢?
答:可以,詞語(yǔ)具備以相對(duì)穩(wěn)定周期重復(fù)再現(xiàn)的特征,所以可以考慮使用遺忘的方法。這意味著,我們只需要找一種適當(dāng)?shù)姆椒?#xff0c;將句子劃分成若干子串,這些子串即為“候選詞”。在遺忘的作用下,如果“候選詞”會(huì)周期性重現(xiàn),那么它就會(huì)被保留在詞庫(kù)中,相反如果只是偶爾或隨機(jī)出現(xiàn),則會(huì)逐漸被遺忘掉。
問:那用什么方法來(lái)把句子劃分成子串比較合適呢?
答:考察句中任意相鄰的兩個(gè)字,相鄰兩字有兩種可能:要么同屬于一個(gè)共同的詞,要么是兩個(gè)詞的邊界。我們都會(huì)有這樣一種感覺,屬于同一個(gè)詞的相鄰兩字的“關(guān)系”肯定比屬于不同詞的相鄰兩字的“關(guān)系”要強(qiáng)烈一些。
數(shù)學(xué)中并不缺少刻劃“關(guān)系”的模型,這里我們選擇公式簡(jiǎn)單并且參數(shù)容易統(tǒng)計(jì)的一種:如果兩個(gè)字共現(xiàn)的概率大于它們隨機(jī)排列在一起的概率,那么我們認(rèn)為這兩個(gè)字有關(guān),反之則無(wú)關(guān)。
如果相鄰兩字無(wú)關(guān),就可以將兩字中間斷開。逐字掃描句子,如果相鄰兩字滿足下面的公式,則將兩字?jǐn)嚅_,如此可將句子切成若干子串,從而獲得“候選詞”集,判斷公式如下圖所示:
公式中所需的參數(shù)可以通過統(tǒng)計(jì)獲得:遍歷一次語(yǔ)料,即可獲得公式中所需的“單字的頻數(shù)”、“相鄰兩字共現(xiàn)的頻數(shù)”,以及“所有單字的頻數(shù)總和”。
問:如何計(jì)算遺忘剩余量?
答:使用牛頓冷卻公式,各參數(shù)在遺忘算法中的含義,如下圖所示:
牛頓冷卻公式的詳情說明,可以參考阮一峰老師的博文《基于用戶投票的排名算法(四):牛頓冷卻定律》。
問:參數(shù)中時(shí)間是用現(xiàn)實(shí)時(shí)間嗎,遺忘系數(shù)取多少合適呢?
答:a、關(guān)于時(shí)間:
可以使用現(xiàn)實(shí)時(shí)間,遺忘的發(fā)生與現(xiàn)實(shí)同步。
也可以考慮用處理語(yǔ)料中對(duì)象的數(shù)量來(lái)代替,這樣僅當(dāng)有數(shù)據(jù)處理時(shí),才會(huì)發(fā)生遺忘。比如按處理的字?jǐn)?shù)為計(jì)時(shí)單位,人閱讀的速度約每秒5至7個(gè)字,當(dāng)然每個(gè)人的閱讀速度并不相同,這里的參數(shù)值要求并不需要特別嚴(yán)格。
b、遺忘系數(shù)可以參考艾賓浩斯曲線中的實(shí)驗(yàn)值,如下圖(來(lái)自互聯(lián)網(wǎng))
我們?nèi)?天記憶剩余量約為25.4%這個(gè)值,按每秒閱讀7個(gè)字,將其代入牛頓冷卻公式可以求得遺忘系數(shù):
注意艾賓浩斯曲線中的每組數(shù)值代入公式,所得的系數(shù)并不相同,會(huì)對(duì)詞庫(kù)的最大有效容量產(chǎn)生影響。
二、該算法生成詞庫(kù)的特點(diǎn)
3.1、無(wú)監(jiān)督學(xué)習(xí)
3.2、O(N)級(jí)時(shí)間復(fù)雜度
3.3、訓(xùn)練、執(zhí)行為同一過程,可無(wú)縫處理流式數(shù)據(jù)
3.4、未登錄詞、新詞、登錄詞沒有區(qū)別
3.5、領(lǐng)域自適應(yīng):領(lǐng)域變化時(shí),詞條、詞頻自適應(yīng)的隨之調(diào)整
3.6、算法中僅使用到頻數(shù)這一語(yǔ)言的共性特征,無(wú)需對(duì)任何字符做特別處理,因此原理上跨語(yǔ)種。
三、詞庫(kù)成熟度
由于每個(gè)詞都具備一個(gè)相對(duì)穩(wěn)定的重現(xiàn)周期,不難證明,當(dāng)訓(xùn)練語(yǔ)料達(dá)到一定規(guī)模后,在遺忘的作用下,每個(gè)詞的詞頻在衰減和累加會(huì)達(dá)到平衡,也即衰減的速度與增加的速度基本一致。成熟的詞庫(kù),詞頻的波動(dòng)相對(duì)會(huì)比較小,利用這個(gè)特征,我們可以衡量詞庫(kù)的成熟程度。
四、源碼(C#)、演示程序下載
使用內(nèi)附語(yǔ)料(在“可直接運(yùn)行的演示程序”下可以找到)生成詞庫(kù)效果如下:
下載地址:遺忘算法(詞庫(kù)生成、分詞、詞權(quán)重)演示程序.rar
五、聯(lián)系方式:
1、QQ:老憨 244589712
2、郵箱:gzdmcaoyc@163.com
發(fā)表在 自然語(yǔ)言處理? ? ? ? | 標(biāo)簽為 未登錄詞發(fā)現(xiàn), 牛頓冷卻公式, 自然語(yǔ)言處理, 詞庫(kù)生成, 遺忘算法? ? ? ? | 4 條評(píng)論
非主流自然語(yǔ)言處理——遺忘算法系列(一):算法概述發(fā)表于 2016年04月19號(hào) 由 老憨
一、前言
這里“遺忘”不是筆誤,這個(gè)系列要講的“遺忘算法”,是以牛頓冷卻公式模擬遺忘為基礎(chǔ)、用于自然語(yǔ)言處理(NLP)的一類方法的統(tǒng)稱,而不是大名鼎鼎的“遺傳算法”!
在“遺忘”這條非主流自然語(yǔ)言處理路上,不知不覺已經(jīng)摸索了三年有余,遺忘算法也算略成體系,雖然仍覺時(shí)機(jī)未到,還是決定先停一下,將腦中所積梳理成文,交由NLP的同好們點(diǎn)評(píng)交流。
二、遺忘算法原理
能夠從未知的事物中發(fā)現(xiàn)關(guān)聯(lián)、提煉規(guī)律才是真正智能的標(biāo)志,而遺忘正是使智能生物具備這一能力的工具,也是適應(yīng)變化的利器,“遺忘”這一頗具負(fù)能量特征的家伙是如何實(shí)現(xiàn)發(fā)現(xiàn)規(guī)律這么個(gè)神奇魔法的呢?
讓我們從巴甫洛夫的狗說起:狗聽到鈴聲就知道開飯了。
鈴聲和開飯之間并不存在必然的聯(lián)系,我們知道之所以狗會(huì)將兩者聯(lián)系在一起,是因?yàn)榘透β宸蛴幸獾膶烧咭淮未卧诠纺莾褐貜?fù)共現(xiàn)。所以,重復(fù)是建立關(guān)聯(lián)的必要條件。
我們還可以想像,狗在進(jìn)食的時(shí)候聽到的聲音可能還有鳥叫聲、風(fēng)吹樹葉的沙沙聲,為什么這些同樣具備重復(fù)特征聲音卻沒有和開飯建立關(guān)系呢?
細(xì)分辨我們不難想到:鈴聲和開飯之間不僅重復(fù)共現(xiàn),而且這種重復(fù)共現(xiàn)還具備一個(gè)相對(duì)穩(wěn)定的周期,而其他的那些聲音和開飯的共現(xiàn)則是隨機(jī)的。
那么遺忘又在其中如何起作用的呢?
1、所有事物一視同仁的按相同的規(guī)律進(jìn)行遺忘; 2、偶爾或隨機(jī)出現(xiàn)的事物因此會(huì)隨時(shí)間而逐漸淡忘; 3、而具有相對(duì)穩(wěn)定周期重復(fù)再現(xiàn)的事物,雖然也按同樣的規(guī)律遺忘,但由于周期性的得到補(bǔ)充,從而可以動(dòng)態(tài)的保留在記憶中。
在自然語(yǔ)言處理中,很多對(duì)象比如:詞、詞與詞的關(guān)聯(lián)、模板等,都具備按相對(duì)穩(wěn)定重現(xiàn)的特征,因此非常適用遺忘來(lái)處理。
三、牛頓冷卻公式
那么,我們用什么來(lái)模擬遺忘呢?
提到遺忘,很自然的會(huì)想到艾賓浩斯遺忘曲線,如果這條曲線有個(gè)函數(shù)形式,那么無(wú)疑是模擬遺忘的最佳建模選擇。遺憾的是它只是一組離散的實(shí)驗(yàn)數(shù)據(jù),但至少讓我們知道,遺忘是呈指數(shù)衰減的。
另外有一個(gè)事實(shí),有的人記性好些,有的人記性則差些,不同人之間的遺忘曲線是不同的,但這并不會(huì)從本質(zhì)上影響不同人對(duì)事物的認(rèn)知,也就是說,如果存在一個(gè)遺忘函數(shù),它首先是指數(shù)形式的,其次在實(shí)用過程中,該函數(shù)的系數(shù)并不那么重要。
這提醒我們,可以嘗試用一些指數(shù)形式的函數(shù)來(lái)代替遺忘曲線,然后用實(shí)踐去檢驗(yàn),如果能滿足工程實(shí)用就很好,這樣的函數(shù)公式并不難找,比如:退火算法、半衰期公式等。
有次在阮一峰老師的博客上看關(guān)于帖子熱度排行的算法時(shí),其中一種方法使用的是牛頓冷卻定律,遺忘與冷卻有著相似的過程、簡(jiǎn)潔優(yōu)美的函數(shù)形式、而且參數(shù)只與時(shí)間相關(guān),這些都讓我本能想到,它就是我想要的“遺忘公式”。
在實(shí)踐檢驗(yàn)中,牛頓冷卻公式,確實(shí)有效好用,當(dāng)然,不排除有其他更佳公式。
四、已經(jīng)實(shí)現(xiàn)的功能
如果把自然語(yǔ)言處理比作從礦砂中淘金子,那么業(yè)界主流算法的方向是從礦砂中將金砂挑出來(lái),而遺忘算法的方向則是將砂石篩出去,雖然殊途但同歸,所處理的任務(wù)也都是主流中所常見。
本系列文章將逐一講解遺忘算法如何以O(shè)(N)級(jí)算法性能實(shí)現(xiàn):
1、大規(guī)模語(yǔ)料詞庫(kù)生成
1.1、跨語(yǔ)種,算法語(yǔ)種無(wú)關(guān),比如:中日韓、少數(shù)民族等語(yǔ)種均可支持
1.2、未登錄詞發(fā)現(xiàn)(只要符合按相對(duì)穩(wěn)定周期性重現(xiàn)的詞匯都會(huì)被收錄)
1.3、領(lǐng)域自適應(yīng),切換不同領(lǐng)域的訓(xùn)練文本時(shí),詞條、詞頻自行調(diào)整
1.4、詞典成熟度:可以知道當(dāng)前語(yǔ)料訓(xùn)練出的詞典的成熟程度
2、分詞(基于上述詞庫(kù)技術(shù))
2.1、成長(zhǎng)性分詞:用的越多,切的越準(zhǔn)
2.2、詞典自維護(hù):切詞的同時(shí)動(dòng)態(tài)維護(hù)詞庫(kù)的詞條、詞頻、登錄新詞
2.2、領(lǐng)域自適應(yīng)、跨語(yǔ)種(繼承自詞庫(kù)特性)
3、詞權(quán)值計(jì)算
3.1、關(guān)鍵詞提取、自動(dòng)標(biāo)簽
3.2、文章摘要
3.3、長(zhǎng)、短文本相似度計(jì)算
3.4、主題詞集
五、聯(lián)系方式:
1、QQ:老憨 244589712
2、郵箱:gzdmcaoyc@163.com
發(fā)表在 自然語(yǔ)言處理? ? ? ? | 標(biāo)簽為 牛頓冷卻公式, 自然語(yǔ)言處理, 遺忘算法? ? ? ? | 留下評(píng)論
達(dá)觀數(shù)據(jù)對(duì)于大規(guī)模消息數(shù)據(jù)處理的系統(tǒng)架構(gòu)發(fā)表于 2015年12月2號(hào) 由 recommender
達(dá)觀數(shù)據(jù)是為企業(yè)提供大數(shù)據(jù)處理、個(gè)性化推薦系統(tǒng)服務(wù)的知名公司,在應(yīng)對(duì)海量數(shù)據(jù)處理時(shí),積累了大量實(shí)戰(zhàn)經(jīng)驗(yàn)。其中達(dá)觀數(shù)據(jù)在面對(duì)大量的數(shù)據(jù)交互和消息處理時(shí),使用了稱為DPIO的設(shè)計(jì)思路進(jìn)行快速、穩(wěn)定、可靠的消息數(shù)據(jù)傳遞機(jī)制,本文分享了達(dá)觀數(shù)據(jù)在應(yīng)對(duì)大規(guī)模消息數(shù)據(jù)處理時(shí)所開發(fā)的通訊中間件DPIO的設(shè)計(jì)思路和處理經(jīng)驗(yàn)(達(dá)觀數(shù)據(jù)架構(gòu)師 桂洪冠) 一、數(shù)據(jù)通訊進(jìn)程模型 在設(shè)計(jì)達(dá)觀數(shù)據(jù)的消息數(shù)據(jù)處理機(jī)制時(shí),首先充分借鑒了ZeroMQ和ProxyIO的設(shè)計(jì)思想。ZeroMQ提供了一種底層的網(wǎng)絡(luò)通訊框架,提供了基本的RoundRobin負(fù)載均衡算法,性能優(yōu)越,而ProxyIO是雅虎的網(wǎng)絡(luò)通訊中間件,承載了雅虎內(nèi)部大量計(jì)算節(jié)點(diǎn)間的實(shí)時(shí)消息處理。但是ZeroMQ沒有實(shí)現(xiàn)基于節(jié)點(diǎn)健康狀態(tài)的最快響應(yīng)算法,并且ZeroMQ和ProxyIO對(duì)節(jié)點(diǎn)的狀態(tài)管理,連接管理,負(fù)載均衡調(diào)度等也需要各應(yīng)用自己來(lái)實(shí)現(xiàn)。 達(dá)觀科技在借鑒兩種設(shè)計(jì)思路的基礎(chǔ)上,從進(jìn)程模型、服務(wù)架構(gòu)、線程模型、通訊協(xié)議、負(fù)載均衡、雪崩處理、連接管理、消息流程、狀態(tài)監(jiān)控等各方面進(jìn)行了開拓,開發(fā)了DPIO(達(dá)觀ProxyIO的簡(jiǎn)寫,下文統(tǒng)稱DPIO),確保系統(tǒng)高性能處理相關(guān)數(shù)據(jù)。 在DPIO的整個(gè)通訊框架體系中,采用集中管理、統(tǒng)一監(jiān)控策略管理節(jié)點(diǎn)提供服務(wù),節(jié)點(diǎn)間直接進(jìn)行交互,并不依賴統(tǒng)一的管理節(jié)點(diǎn)(桂洪冠)。幾種節(jié)點(diǎn)間通過http或者tcp協(xié)議進(jìn)行消息傳遞、配置更新、狀態(tài)跟蹤等通訊行為。集群將不同應(yīng)用的服務(wù)抽象成組的概念,相同應(yīng)用的服務(wù)啟動(dòng)時(shí)加入的相同的組。每個(gè)通訊組有兩種端點(diǎn)client和server。應(yīng)用啟動(dòng)時(shí)通過配置決定自己是client端點(diǎn)還是server端點(diǎn),在一個(gè)組內(nèi),每個(gè)應(yīng)用只能有一個(gè)身份;不同組沒要求。
五、負(fù)載均衡
DPIO的負(fù)載均衡基于最快響應(yīng)法
DPIO將所有的統(tǒng)計(jì)信息更新到監(jiān)控中心,監(jiān)控中心通過處理所有的節(jié)點(diǎn)的狀態(tài)信息,統(tǒng)一負(fù)責(zé)負(fù)載均衡。
DPIO從監(jiān)控中心獲取所有連接的負(fù)載均衡策略。每個(gè)連接知道只需知道自己的處理能力。
以上圖為例,有三個(gè)proxy server處理程序。處理能力分別為50、30、20,一次epoll過程能夠同時(shí)探測(cè)多個(gè)連接的可寫事件。
假設(shè):三個(gè)proxy server的屬于同一epoll thread,且三個(gè)proxy server假設(shè)都處理能力無(wú)限大。
限制:如果剛開始時(shí)待處理隊(duì)列的數(shù)據(jù)包個(gè)數(shù)為100個(gè),多次發(fā)送輪回后proxy server A≥proxy server B≥proxy server C, 每個(gè)發(fā)送的最多發(fā)送協(xié)議包數(shù)為待處理隊(duì)列協(xié)議包個(gè)數(shù) * 該連接所占權(quán)重
六、雪崩處理
大型在線服務(wù),特別是對(duì)于時(shí)延敏感的服務(wù),當(dāng)系統(tǒng)外部請(qǐng)求超過系統(tǒng)服務(wù)能力,而沒有適當(dāng)?shù)倪^載保護(hù)措施時(shí),當(dāng)系統(tǒng)累計(jì)的超時(shí)請(qǐng)求達(dá)到一定規(guī)模,將可能導(dǎo)致系統(tǒng)緩沖區(qū)隊(duì)列溢出,后端服務(wù)資源耗盡,最終像雪崩一樣形成惡性循環(huán)。這時(shí)系統(tǒng)處理的每個(gè)請(qǐng)求都因?yàn)槌瑫r(shí)而無(wú)效,系統(tǒng)對(duì)外呈現(xiàn)的服務(wù)能力為0,且這種情況下不能自動(dòng)恢復(fù)。
我們的解決策略是對(duì)協(xié)議包進(jìn)行生命周期管理,現(xiàn)在協(xié)議包進(jìn)出待處理隊(duì)列和已處理隊(duì)列時(shí)進(jìn)行超時(shí)檢測(cè)和超時(shí)處理(超時(shí)則丟棄)。
proxy client:
當(dāng)app epoll thread將協(xié)議包放入待處理隊(duì)列時(shí),會(huì)將該協(xié)議包的發(fā)送時(shí)間、該協(xié)議包的超時(shí)時(shí)間,當(dāng)前時(shí)間戳來(lái)判斷該協(xié)議包是否已經(jīng)超時(shí)。
當(dāng)app epoll thread將協(xié)議包從已處理隊(duì)列中移除時(shí),會(huì)將該協(xié)議包的發(fā)送時(shí)間、該協(xié)議包的超時(shí)時(shí)間,已經(jīng)當(dāng)前時(shí)間戳來(lái)判斷該協(xié)議包是否已經(jīng)超時(shí)。
當(dāng)Io epoll thread將協(xié)議包從待處理隊(duì)列中移除時(shí),會(huì)將該協(xié)議包的發(fā)送時(shí)間、該協(xié)議包的超時(shí)時(shí)間,當(dāng)前時(shí)間戳,該連接的協(xié)議包的平均處理時(shí)間移除。
當(dāng)io epoll thread將協(xié)議包放入已處理隊(duì)列時(shí),會(huì)將將該協(xié)議包的發(fā)送時(shí)間、該協(xié)議包的超時(shí)時(shí)間,已經(jīng)當(dāng)前時(shí)間戳來(lái)判斷該協(xié)議包是否已經(jīng)超時(shí)。
proxy server:
當(dāng)App epoll thread將協(xié)議包從待處理隊(duì)列中移除時(shí),會(huì)將該協(xié)議包在客戶端的處理時(shí)間、該協(xié)議包的超時(shí)時(shí)間、該協(xié)議包的proxy server接收時(shí)間戳、當(dāng)前時(shí)間戳來(lái)判斷該協(xié)議包是否已超時(shí)。
當(dāng)app epoll thread將協(xié)議包放入已處理隊(duì)列時(shí),會(huì)將該協(xié)議包的發(fā)送時(shí)間、該協(xié)議包的超時(shí)時(shí)間,已經(jīng)當(dāng)前時(shí)間戳來(lái)判斷該協(xié)議包是否已經(jīng)超時(shí)。
當(dāng)io epoll thread將協(xié)議包從已處理隊(duì)列中移除時(shí),會(huì)將該協(xié)議包的發(fā)送時(shí)間、該協(xié)議包的超時(shí)時(shí)間,已經(jīng)當(dāng)前時(shí)間戳來(lái)判斷該協(xié)議包是否已經(jīng)超時(shí)。
當(dāng)io epoll thread將協(xié)議包放入待處理隊(duì)列時(shí),會(huì)將該協(xié)議包的發(fā)送時(shí)間、該協(xié)議包的超時(shí)時(shí)間來(lái)判斷該協(xié)議包是否已超時(shí)。
七、連接管理
紅黑樹:
紅黑樹:保存所有連接的最近的讀/寫時(shí)間戳。
當(dāng)epoll_wait時(shí),首先從紅黑樹中獲取oldest的時(shí)間戳,并將當(dāng)前時(shí)間戳與oldest時(shí)間戳的時(shí)間差作為epoll_wait的超時(shí)時(shí)間,當(dāng)連接中有可讀/寫事件發(fā)送時(shí),首先從紅黑樹中刪除該節(jié)點(diǎn),當(dāng)可讀/寫事件處理完畢后,再將節(jié)點(diǎn)插入到紅黑樹中,當(dāng)處理完所有連接的可讀/寫事件時(shí),再?gòu)募t黑樹中依次從移除時(shí)間戳小于當(dāng)前時(shí)間戳的連接,并觸發(fā)該連接的timeout事件。
八、消息處理流程
發(fā)表在 數(shù)據(jù)挖掘? ? ? ? | 標(biāo)簽為 數(shù)據(jù)處理, 數(shù)據(jù)通訊? ? ? ? | 留下評(píng)論
在微信公眾號(hào)里使用LaTeX數(shù)學(xué)公式發(fā)表于 2015年11月17號(hào) 由 52nlp
因?yàn)橛型瑢W(xué)在微信后臺(tái)咨詢這個(gè)問題,所以這里簡(jiǎn)單記錄一下,其實(shí)自己之前也摸索了一些方法,不是太完美,目前所使用的這個(gè)方法算是折中后比較好的。 這段時(shí)間在鼓搗“NLPJob”這個(gè)公眾號(hào),特別是微信公眾號(hào)支持“原創(chuàng)聲明”后,就很樂意將52nlp上積攢的一些文章搬上去,但是逐漸會(huì)遇到一些數(shù)學(xué)公式的問題。目前在52nlp上用的是mathjax完美支持LaTeX數(shù)學(xué)公式展現(xiàn),但是微信公眾號(hào)的編輯器沒有這個(gè)支持,另外mathjax支持的公式形式不是圖片形式,所以不能直接將文章拷貝上去,但是如果是數(shù)學(xué)公式圖片,微信編輯器可以直接拷貝,所以最直接的想法就是將mathjax支持的LaTeX公式轉(zhuǎn)換為公式圖片保存在文章中,然后再全文拷貝到微信公眾號(hào)編輯器中。 其實(shí)在mathjax之前,網(wǎng)頁(yè)上的很多數(shù)學(xué)公式都是用這種折中的方式,包括很多wordpress數(shù)學(xué)公式插件,當(dāng)年我也因?yàn)?2nlp上的公式問題還自己動(dòng)手寫了一個(gè)小的wordpress插件,但是當(dāng)mathjax出現(xiàn)之后,之前的方案就顯得很一般了。所以就開始嘗試找一下支持img緩存的LaTeX公式插件,不過多數(shù)都不滿意或者有瑕疵,甚至自己又開始動(dòng)手修改代碼,然后blablabla….,最終發(fā)現(xiàn) quicklatex這個(gè)神器和它的wordpress插件QuickLaTeX,幾乎完美支持和兼容Mathjax所支持的LaTeX數(shù)學(xué)公式。方法很簡(jiǎn)單,只要在wordpress中安裝quicklatex,然后在文章的開頭添加一個(gè):[latexpage] ,然后文章中所有的latext公式都會(huì)轉(zhuǎn)換為圖片形式,類似昨天發(fā)出的rickjin的這篇文章:LDA數(shù)學(xué)八卦:神奇的Gamma函數(shù)(1)。當(dāng)然需要先在wordpress中完成編輯轉(zhuǎn)換,再全文拷貝到微信公眾號(hào)中,微信會(huì)自動(dòng)的將這些圖片上傳到它自己的圖片服務(wù)器上。不過依然希望微信公眾號(hào)編輯器能早日支持LaTeX公式編輯甚至Mathjax。
發(fā)表在 隨筆? ? ? ? | 標(biāo)簽為 latex公式, latex數(shù)學(xué)公式, MathJax, 微信, 微信latex, 微信公眾號(hào), 微信公眾號(hào)數(shù)學(xué)公式編輯器, 微信公式編輯器, 微信數(shù)學(xué)公式? ? ? ? | 2 條評(píng)論
斯坦福大學(xué)深度學(xué)習(xí)與自然語(yǔ)言處理第四講:詞窗口分類和神經(jīng)網(wǎng)絡(luò)發(fā)表于 2015年09月14號(hào) 由 52nlp
斯坦福大學(xué)在三月份開設(shè)了一門“深度學(xué)習(xí)與自然語(yǔ)言處理”的課程:CS224d: Deep Learning for Natural Language Processing,授課老師是青年才俊 Richard Socher,以下為相關(guān)的課程筆記。 第四講:詞窗口分類和神經(jīng)網(wǎng)絡(luò)(Word Window Classification and Neural Networks) 推薦閱讀材料:
繼續(xù)閱讀 →
發(fā)表在 機(jī)器學(xué)習(xí), 深度學(xué)習(xí), 自然語(yǔ)言處理? ? ? ? | 標(biāo)簽為 Deep Learning, Deep Learning公開課, Deep NLP, DL, NER, Richard Socher, softmax, word vectors, word2vec, wordnet, 二元邏輯回歸, 人名識(shí)別, 公開課, 分類, 分類器, 前饋網(wǎng)絡(luò)記錄, 反向傳播算法, 命名實(shí)體識(shí)別, 回歸, 地名識(shí)別, 斯坦福大學(xué), 機(jī)器學(xué)習(xí), 梯度下降, 深度學(xué)習(xí), 深度學(xué)習(xí)與自然語(yǔ)言處理, 深度學(xué)習(xí)技術(shù), 深度學(xué)習(xí)模型, 神經(jīng)元, 神經(jīng)網(wǎng)絡(luò), 窗口向量, 窗口向量分類, 自然語(yǔ)義處理, 自然語(yǔ)言處理, 詞向量, 詞嵌入, 語(yǔ)義詞典, 邏輯回歸, 隨機(jī)梯度下降? ? ? ? | 3 條評(píng)論
出門問問宣布完成由Google投資的C輪融資,累計(jì)融資7500萬(wàn)美金發(fā)表于 2015年09月2號(hào) 由 52nlp
注:出門問問是我們的老朋友,創(chuàng)始人李志飛也是NLP和機(jī)器翻譯領(lǐng)域的大牛,今天出門問問拿到了Google的C輪融資,志飛兄第一時(shí)間和我分享了這條新聞,太牛了。 人工智能創(chuàng)業(yè)公司出門問問(Mobvoi),于近日完成了由Google投資的C輪融資,累計(jì)融資7500萬(wàn)美金。現(xiàn)有投資方包括紅杉資本、真格基金,SIG海納亞洲、圓美光電、及歌爾聲學(xué)。此輪投資Google并不控股,出門問問團(tuán)隊(duì)依舊有絕對(duì)控制權(quán)。 此次由Google投資的C輪融資,能夠保證出門問問在人工智能領(lǐng)域長(zhǎng)期持續(xù)深耕,專注核心技術(shù)上的進(jìn)一步研發(fā),在可穿戴、車載以及機(jī)器人領(lǐng)域拓展新的人機(jī)交互產(chǎn)品形態(tài),更深入地完善用戶體驗(yàn),在吸引全球頂尖技術(shù)與商務(wù)人才上更具優(yōu)勢(shì)。對(duì)于海外市場(chǎng)的擴(kuò)展,此次融資也將發(fā)揮非常重要的作用。 Google 企業(yè)發(fā)展部副總裁Don Harrison 說到選擇投資出門問問的原因:“出門問問研發(fā)了非常獨(dú)特自成體系的語(yǔ)音識(shí)別與自然語(yǔ)言處理技術(shù)。我們被他們的創(chuàng)新科技與發(fā)展?jié)摿Υ騽?dòng),所以我們很迅速地決定用投資的方式幫助他們?cè)谖磥?lái)快速成長(zhǎng)。” 紅杉資本全球執(zhí)行合伙人沈南鵬評(píng)價(jià):“出門問問一直處于高速的不斷創(chuàng)新過程中,從移動(dòng)app到硬件產(chǎn)品到語(yǔ)音搜索平臺(tái),不同形式的產(chǎn)品背后是團(tuán)隊(duì)長(zhǎng)期以來(lái)形成的強(qiáng)大技術(shù)核心,獲得Google的投資是對(duì)這種中國(guó)原創(chuàng)能力的最好肯定。我很高興Google這樣的巨頭看好出門問問,并和我們一起投入到這支高速創(chuàng)新的團(tuán)隊(duì)中。” 真格基金創(chuàng)始人徐小平說:“我第一次遇見谷歌科學(xué)家李志飛博士,是三年前。那時(shí)候,他的語(yǔ)音搜索創(chuàng)業(yè)計(jì)劃,真是一個(gè)“異想天開”的夢(mèng)。志飛相信自己的夢(mèng),相信自己的技術(shù),相信市場(chǎng)對(duì)這個(gè)技術(shù)產(chǎn)品的需求,歷經(jīng)萬(wàn)難,終于“搜索”到了屬于他自己的那片天空。志飛的創(chuàng)業(yè)歷程,是又一個(gè)中國(guó)好故事,會(huì)激勵(lì)更多人追求并實(shí)現(xiàn)自己的好夢(mèng)。” 志同道合是此次融資達(dá)成的最重要的原因。扎實(shí)做技術(shù)和產(chǎn)品,運(yùn)用科技的力量改變?nèi)藗兊娜粘I?#xff0c;是出門問問一直篤信的價(jià)值觀。 出門問問CEO 李志飛表示:“引入Google的投資,不僅意味Google對(duì)于我們技術(shù)的認(rèn)可,更是源于雙方持有共同的價(jià)值觀,通過對(duì)人工智能技術(shù)的極致追求,打造毫不妥協(xié)的用戶體驗(yàn)。” 與Google相似,出門問問也是信仰“工程師文化”的團(tuán)隊(duì),強(qiáng)大的研發(fā)團(tuán)隊(duì)由Google前科學(xué)家、人工智能專家領(lǐng)銜,團(tuán)隊(duì)成員來(lái)自哈佛、MIT、斯坦福、劍橋、清華等名校名企。 此次融資是中國(guó)人工智能創(chuàng)業(yè)公司首次獲得像Google這樣的國(guó)際技術(shù)巨頭的投資與認(rèn)可。這在某種程度上說明,在人工智能領(lǐng)域,中國(guó)的創(chuàng)業(yè)公司不容小覷。
繼續(xù)閱讀 → 應(yīng)用場(chǎng)景 智能問答機(jī)器人火得不行,開始研究深度學(xué)習(xí)在NLP領(lǐng)域的應(yīng)用已經(jīng)有一段時(shí)間,最近在用深度學(xué)習(xí)模型直接進(jìn)行QA系統(tǒng)的問答匹配。主流的還是CNN和LSTM,在網(wǎng)上沒有找到特別合適的可用的代碼,自己先寫了一個(gè)CNN的(theano),效果還行,跟論文中的結(jié)論是吻合的。目前已經(jīng)應(yīng)用到了我們的產(chǎn)品上。 原理 參看《Applying Deep Learning To Answer Selection: A Study And An Open Task》,文中比較了好幾種網(wǎng)絡(luò)結(jié)構(gòu),選擇了效果相對(duì)較好的其中一個(gè)來(lái)實(shí)現(xiàn),網(wǎng)絡(luò)描述如下: Q&A共用一個(gè)網(wǎng)絡(luò),網(wǎng)絡(luò)中包括HL,CNN,P+T和Cosine_Similarity,HL是一個(gè)g(W*X+b)的非線性變換,CNN就不說了,P是max_pooling,T是激活函數(shù)Tanh,最后的Cosine_Similarity表示將Q&A輸出的語(yǔ)義表示向量進(jìn)行相似度計(jì)算。 詳細(xì)描述下從輸入到輸出的矩陣變換過程:
Test 1 0.4933 0.6189
Test 2 0.4606 0.5968
Dev 0.4700 0.6088 另外,原始的insuranceQA需要進(jìn)行一些處理才能在這個(gè)代碼上使用,具體參看github上的說明吧。 一些技巧
發(fā)表在 機(jī)器學(xué)習(xí), 深度學(xué)習(xí), 自然語(yǔ)言處理, 問答系統(tǒng)? ? ? ? | 留下評(píng)論
達(dá)觀數(shù)據(jù)搜索引擎的Query自動(dòng)糾錯(cuò)技術(shù)和架構(gòu)詳解發(fā)表于 2016年04月27號(hào) 由 recommender
1 背景 如今,搜索引擎是人們的獲取信息最重要的方式之一,在搜索頁(yè)面小小的輸入框中,只需輸入幾個(gè)關(guān)鍵字,就能找到你感興趣問題的相關(guān)網(wǎng)頁(yè)。搜索巨頭Google,甚至已經(jīng)使Google這個(gè)創(chuàng)造出來(lái)的單詞成為動(dòng)詞,有問題Google一下就可以。在國(guó)內(nèi),百度也同樣成為一個(gè)動(dòng)詞。除了通用搜索需求外,很多垂直細(xì)分領(lǐng)域的搜索需求也很旺盛,比如電商網(wǎng)站的產(chǎn)品搜索,文學(xué)網(wǎng)站的小說搜索等。面對(duì)這些需求,達(dá)觀數(shù)據(jù)(www.datagrand.com)作為國(guó)內(nèi)提供中文云搜索服務(wù)的高科技公司,為合作伙伴提供高質(zhì)量的搜索技術(shù)服務(wù),并進(jìn)行搜索服務(wù)的統(tǒng)計(jì)分析等功能。(達(dá)觀數(shù)據(jù)聯(lián)合創(chuàng)始人高翔) 搜索引擎系統(tǒng)最基本最核心的功能是信息檢索,找到含有關(guān)鍵字的網(wǎng)頁(yè)或文檔,然后按照一定排序?qū)⒔Y(jié)果給出。在此基礎(chǔ)之上,搜索引擎能夠提供更多更復(fù)雜的功能來(lái)提升用戶體驗(yàn)。對(duì)于一個(gè)成熟的搜索引擎系統(tǒng),用戶看似簡(jiǎn)單的搜索過程,需要在系統(tǒng)中經(jīng)過多個(gè)環(huán)節(jié),多個(gè)模塊協(xié)同工作,才能提供一個(gè)讓人滿意的搜索結(jié)果。其中拼寫糾錯(cuò)(Error Correction,以下簡(jiǎn)稱EC)是用戶比較容易感知的一個(gè)功能,比如百度的糾錯(cuò)功能如下圖所示: 圖 1:百度糾錯(cuò)功能示例 EC其實(shí)是屬于Query Rewrite(以下簡(jiǎn)稱QR)模塊中的一個(gè)功能,QR模塊包括拼寫糾錯(cuò),同義改寫,關(guān)聯(lián)query等多個(gè)功能。QR模塊對(duì)于提升用戶體驗(yàn)有著巨大的幫助,對(duì)于搜索質(zhì)量不佳的query進(jìn)行改寫后能返回更好的搜索結(jié)果。QR模塊內(nèi)容較多,以下著重介紹EC功能。
繼續(xù)閱讀 →
發(fā)表在 自然語(yǔ)言處理? ? ? ? | 一條評(píng)論
非主流自然語(yǔ)言處理——遺忘算法系列(四):改進(jìn)TF-IDF權(quán)重公式發(fā)表于 2016年04月23號(hào) 由 老憨
一、前言
前文介紹了利用詞庫(kù)進(jìn)行分詞,本文介紹詞庫(kù)的另一個(gè)應(yīng)用:詞權(quán)重計(jì)算。
二、詞權(quán)重公式
1、公式的定義
定義如下公式,用以計(jì)算詞的權(quán)重:
2、公式的由來(lái)
在前文中,使用如下公式作為分詞的依據(jù):
任給一個(gè)句子或文章,通過對(duì)最佳分詞方案所對(duì)應(yīng)的公式進(jìn)行變換,可以得到:
按前面權(quán)重公式的定義,上面的公式可以理解為:一個(gè)句子出現(xiàn)的概率對(duì)數(shù)等于句子中各詞的權(quán)重之和。
公式兩邊同時(shí)取負(fù)號(hào)使權(quán)重是個(gè)正值。
三、與TF-IDF的關(guān)系
詞頻、逆文檔頻率(TF-IDF)在自然語(yǔ)言處理中,應(yīng)用十分廣泛,也是提取關(guān)鍵詞的常用方法,公式如下:
從形式上看,該公式與我們定義的權(quán)重公式很像,而且用途也近似,那么它們之間有沒有關(guān)系呢?
答案是肯定的。
我們知道,IDF是按文檔為單位統(tǒng)計(jì)的,無(wú)論文檔的長(zhǎng)短,統(tǒng)一都按一篇計(jì)數(shù),感覺這個(gè)統(tǒng)計(jì)的粒度還是比較粗的,有沒有辦法將文本的長(zhǎng)短,這個(gè)明顯相關(guān)的因素也考慮進(jìn)去呢,讓這個(gè)公式更加精細(xì)些?
答案也是肯定的。
文章是由詞鋪排而成,長(zhǎng)短不同,所包含的詞的個(gè)數(shù)也就有多有少。
我們可以考慮在統(tǒng)計(jì)文檔個(gè)數(shù)時(shí),為每個(gè)文檔引入包含多少個(gè)詞這樣一個(gè)權(quán)重,以區(qū)別長(zhǎng)短不同的文檔,沿著這個(gè)思路,改寫一下IDF公式:
我們用所有文檔中的詞做成詞庫(kù),那么上式中:
綜合上面的推導(dǎo)過程,我們知道,本文所定義的詞權(quán)重公式,本質(zhì)上是tf-idf為長(zhǎng)短文檔引入權(quán)重的加強(qiáng)版,而該公式的應(yīng)用也極為簡(jiǎn)單,只需要從詞庫(kù)中讀取該詞詞頻、詞庫(kù)總詞頻即可。
時(shí)間復(fù)雜度最快可達(dá)O(1)級(jí),比如詞庫(kù)以Hash表存儲(chǔ)。
關(guān)于TF-IDF更完整的介紹及主流用法,建議參看阮一峰老師的博文《TF-IDF與余弦相似性的應(yīng)用(一):自動(dòng)提取關(guān)鍵詞》。
四、公式應(yīng)用
詞權(quán)重用途很廣,幾乎詞袋類算法中,都可以考慮使用。常見的應(yīng)用有:
1、關(guān)鍵詞抽取、自動(dòng)標(biāo)簽生成
作法都很簡(jiǎn)單,分詞后排除停用詞,然后按權(quán)重值排序,取排在前面的若干個(gè)詞即可。
2、文本摘要
完整的文本摘要功能實(shí)現(xiàn)很復(fù)雜也很困難,這里所指,僅是簡(jiǎn)單應(yīng)用:由前面推導(dǎo)過程中可知,句子的權(quán)重等于分詞結(jié)果各詞的權(quán)重之和,從而獲得句子的權(quán)重排序。
3、相似度計(jì)算
相似度計(jì)算,我們將在下一篇文中單獨(dú)介紹。
五、演示程序
在演示程序顯示詞庫(kù)結(jié)果時(shí),是按本文所介紹的權(quán)重公式排序的。
演示程序與詞庫(kù)生成的相同:
下載地址:遺忘算法(詞庫(kù)生成、分詞、詞權(quán)重)演示程序.rar
特別感謝:王斌老師指出,本文公式實(shí)質(zhì)上是TF-ICF。
六、聯(lián)系方式: 1、QQ:老憨 244589712
2、郵箱:gzdmcaoyc@163.com
發(fā)表在 自然語(yǔ)言處理? ? ? ? | 標(biāo)簽為 TF-IDF, 自然語(yǔ)言處理, 遺忘算法? ? ? ? | 留下評(píng)論
非主流自然語(yǔ)言處理——遺忘算法系列(三):分詞發(fā)表于 2016年04月23號(hào) 由 老憨
一、前言
前面介紹了詞庫(kù)的自動(dòng)生成的方法,本文介紹如何利用前文所生成的詞庫(kù)進(jìn)行分詞。
二、分詞的原理
分詞的原理,可以參看吳軍老師《數(shù)學(xué)之美》中的相關(guān)章節(jié),這里摘取Google黑板報(bào)版本中的部分:
從上文中,可以知道分詞的任務(wù)目標(biāo):給出一個(gè)句子S,找到一種分詞方案,使下面公式中的P(S)最大:
不過,聯(lián)合概率求起來(lái)很困難,這種情況我們通常作馬爾可夫假設(shè),以簡(jiǎn)化問題,即:任意一個(gè)詞wi的出現(xiàn)概率只同它前面的詞 wi-1 有關(guān)。
關(guān)于這個(gè)問題,吳軍老師講的深入淺出,整段摘錄如下:
另外,如果我們假設(shè)一個(gè)詞與其他詞都不相關(guān),即相互獨(dú)立時(shí),此時(shí)公式最簡(jiǎn),如下:
這個(gè)假設(shè)分詞無(wú)關(guān)的公式,也是本文所介紹的分詞算法所使用的。
三、算法分析
問:假設(shè)分詞結(jié)果中各詞相互無(wú)關(guān)是否可行?
答:可行,前提是使用遺忘算法系列(二)中所述方法生成的詞庫(kù),理由如下:
分析ICTCLAS廣受好評(píng)的分詞系統(tǒng)的免費(fèi)版源碼,可以發(fā)現(xiàn),在這套由張華平、劉群兩位博士所開發(fā)分詞系統(tǒng)的算法中假設(shè)了:分詞結(jié)果中詞只與其前面的一個(gè)詞有關(guān)。
回憶我們?cè)~庫(kù)生成的過程可以知道,如果相鄰的兩個(gè)詞緊密相關(guān),那么這兩個(gè)詞會(huì)連為一個(gè)粗粒度的詞被加入詞庫(kù)中,如:除“清華”、“大學(xué)”會(huì)是單獨(dú)的詞外,“清華大學(xué)”也會(huì)是一個(gè)詞,分詞過程中具體選用那種,則由它們的概率來(lái)決定。
也就是說,我們?cè)谏稍~庫(kù)的同時(shí),已經(jīng)隱含的完成了相關(guān)性訓(xùn)練。
關(guān)于ICTCLAS源碼分析的文章,可以參看呂震宇博文:《天書般的ICTCLAS分詞系統(tǒng)代碼》。
問:如何實(shí)現(xiàn)分詞?
答:基于前文生成的詞庫(kù),我們可以假設(shè)分詞結(jié)果相互無(wú)關(guān),分詞過程就比較簡(jiǎn)單,使用下面的步驟可以O(shè)(N)級(jí)時(shí)間,單遍掃描完成分詞:
逐字掃描句子,從詞庫(kù)中查出限定字長(zhǎng)內(nèi),以該字結(jié)尾的所有詞,分別計(jì)算其中的詞與該詞之前各詞的概率乘積,取結(jié)果值最大的詞,分別緩存下當(dāng)前字所在位置的最大概率積,以及對(duì)應(yīng)的分詞結(jié)果。
重復(fù)上面的步驟,直到句子掃描完畢,最后一字位置所得到即為整句分詞結(jié)果。
3、算法特點(diǎn)
3.1、無(wú)監(jiān)督學(xué)習(xí);
3.2、O(N)級(jí)時(shí)間復(fù)雜度;
3.3、詞庫(kù)自維護(hù),程序可無(wú)需人工參與的情況下,自行發(fā)現(xiàn)并添加新詞、調(diào)整詞頻、清理錯(cuò)詞、移除生僻詞,保持詞典大小適當(dāng);
3.4、領(lǐng)域自適應(yīng):領(lǐng)域變化時(shí),詞條、詞頻自適應(yīng)的隨之調(diào)整;
3.5、支持多語(yǔ)種混合分詞。
四、演示程序下載
演示程序與詞庫(kù)生成的相同:
下載地址:遺忘算法(詞庫(kù)生成、分詞、詞權(quán)重)演示程序.rar
五、聯(lián)系方式:
1、QQ:老憨 244589712
2、郵箱:gzdmcaoyc@163.com
發(fā)表在 自然語(yǔ)言處理? ? ? ? | 標(biāo)簽為 無(wú)監(jiān)督分詞, 自然語(yǔ)言處理, 自適應(yīng)詞典, 跨語(yǔ)種, 遺忘算法? ? ? ? | 13 條評(píng)論
非主流自然語(yǔ)言處理——遺忘算法系列(二):大規(guī)模語(yǔ)料詞庫(kù)生成發(fā)表于 2016年04月23號(hào) 由 老憨
一、前言
本文介紹利用牛頓冷卻模擬遺忘降噪,從大規(guī)模文本中無(wú)監(jiān)督生成詞庫(kù)的方法。
二、詞庫(kù)生成
算法分析,先來(lái)考慮以下幾個(gè)問題
問:目標(biāo)是從文本中抽取詞語(yǔ),是否可以考慮使用遺忘的方法呢?
答:可以,詞語(yǔ)具備以相對(duì)穩(wěn)定周期重復(fù)再現(xiàn)的特征,所以可以考慮使用遺忘的方法。這意味著,我們只需要找一種適當(dāng)?shù)姆椒?#xff0c;將句子劃分成若干子串,這些子串即為“候選詞”。在遺忘的作用下,如果“候選詞”會(huì)周期性重現(xiàn),那么它就會(huì)被保留在詞庫(kù)中,相反如果只是偶爾或隨機(jī)出現(xiàn),則會(huì)逐漸被遺忘掉。
問:那用什么方法來(lái)把句子劃分成子串比較合適呢?
答:考察句中任意相鄰的兩個(gè)字,相鄰兩字有兩種可能:要么同屬于一個(gè)共同的詞,要么是兩個(gè)詞的邊界。我們都會(huì)有這樣一種感覺,屬于同一個(gè)詞的相鄰兩字的“關(guān)系”肯定比屬于不同詞的相鄰兩字的“關(guān)系”要強(qiáng)烈一些。
數(shù)學(xué)中并不缺少刻劃“關(guān)系”的模型,這里我們選擇公式簡(jiǎn)單并且參數(shù)容易統(tǒng)計(jì)的一種:如果兩個(gè)字共現(xiàn)的概率大于它們隨機(jī)排列在一起的概率,那么我們認(rèn)為這兩個(gè)字有關(guān),反之則無(wú)關(guān)。
如果相鄰兩字無(wú)關(guān),就可以將兩字中間斷開。逐字掃描句子,如果相鄰兩字滿足下面的公式,則將兩字?jǐn)嚅_,如此可將句子切成若干子串,從而獲得“候選詞”集,判斷公式如下圖所示:
公式中所需的參數(shù)可以通過統(tǒng)計(jì)獲得:遍歷一次語(yǔ)料,即可獲得公式中所需的“單字的頻數(shù)”、“相鄰兩字共現(xiàn)的頻數(shù)”,以及“所有單字的頻數(shù)總和”。
問:如何計(jì)算遺忘剩余量?
答:使用牛頓冷卻公式,各參數(shù)在遺忘算法中的含義,如下圖所示:
牛頓冷卻公式的詳情說明,可以參考阮一峰老師的博文《基于用戶投票的排名算法(四):牛頓冷卻定律》。
問:參數(shù)中時(shí)間是用現(xiàn)實(shí)時(shí)間嗎,遺忘系數(shù)取多少合適呢?
答:a、關(guān)于時(shí)間:
可以使用現(xiàn)實(shí)時(shí)間,遺忘的發(fā)生與現(xiàn)實(shí)同步。
也可以考慮用處理語(yǔ)料中對(duì)象的數(shù)量來(lái)代替,這樣僅當(dāng)有數(shù)據(jù)處理時(shí),才會(huì)發(fā)生遺忘。比如按處理的字?jǐn)?shù)為計(jì)時(shí)單位,人閱讀的速度約每秒5至7個(gè)字,當(dāng)然每個(gè)人的閱讀速度并不相同,這里的參數(shù)值要求并不需要特別嚴(yán)格。
b、遺忘系數(shù)可以參考艾賓浩斯曲線中的實(shí)驗(yàn)值,如下圖(來(lái)自互聯(lián)網(wǎng))
我們?nèi)?天記憶剩余量約為25.4%這個(gè)值,按每秒閱讀7個(gè)字,將其代入牛頓冷卻公式可以求得遺忘系數(shù):
注意艾賓浩斯曲線中的每組數(shù)值代入公式,所得的系數(shù)并不相同,會(huì)對(duì)詞庫(kù)的最大有效容量產(chǎn)生影響。
二、該算法生成詞庫(kù)的特點(diǎn)
3.1、無(wú)監(jiān)督學(xué)習(xí)
3.2、O(N)級(jí)時(shí)間復(fù)雜度
3.3、訓(xùn)練、執(zhí)行為同一過程,可無(wú)縫處理流式數(shù)據(jù)
3.4、未登錄詞、新詞、登錄詞沒有區(qū)別
3.5、領(lǐng)域自適應(yīng):領(lǐng)域變化時(shí),詞條、詞頻自適應(yīng)的隨之調(diào)整
3.6、算法中僅使用到頻數(shù)這一語(yǔ)言的共性特征,無(wú)需對(duì)任何字符做特別處理,因此原理上跨語(yǔ)種。
三、詞庫(kù)成熟度
由于每個(gè)詞都具備一個(gè)相對(duì)穩(wěn)定的重現(xiàn)周期,不難證明,當(dāng)訓(xùn)練語(yǔ)料達(dá)到一定規(guī)模后,在遺忘的作用下,每個(gè)詞的詞頻在衰減和累加會(huì)達(dá)到平衡,也即衰減的速度與增加的速度基本一致。成熟的詞庫(kù),詞頻的波動(dòng)相對(duì)會(huì)比較小,利用這個(gè)特征,我們可以衡量詞庫(kù)的成熟程度。
四、源碼(C#)、演示程序下載
使用內(nèi)附語(yǔ)料(在“可直接運(yùn)行的演示程序”下可以找到)生成詞庫(kù)效果如下:
下載地址:遺忘算法(詞庫(kù)生成、分詞、詞權(quán)重)演示程序.rar
五、聯(lián)系方式:
1、QQ:老憨 244589712
2、郵箱:gzdmcaoyc@163.com
發(fā)表在 自然語(yǔ)言處理? ? ? ? | 標(biāo)簽為 未登錄詞發(fā)現(xiàn), 牛頓冷卻公式, 自然語(yǔ)言處理, 詞庫(kù)生成, 遺忘算法? ? ? ? | 4 條評(píng)論
非主流自然語(yǔ)言處理——遺忘算法系列(一):算法概述發(fā)表于 2016年04月19號(hào) 由 老憨
一、前言
這里“遺忘”不是筆誤,這個(gè)系列要講的“遺忘算法”,是以牛頓冷卻公式模擬遺忘為基礎(chǔ)、用于自然語(yǔ)言處理(NLP)的一類方法的統(tǒng)稱,而不是大名鼎鼎的“遺傳算法”!
在“遺忘”這條非主流自然語(yǔ)言處理路上,不知不覺已經(jīng)摸索了三年有余,遺忘算法也算略成體系,雖然仍覺時(shí)機(jī)未到,還是決定先停一下,將腦中所積梳理成文,交由NLP的同好們點(diǎn)評(píng)交流。
二、遺忘算法原理
能夠從未知的事物中發(fā)現(xiàn)關(guān)聯(lián)、提煉規(guī)律才是真正智能的標(biāo)志,而遺忘正是使智能生物具備這一能力的工具,也是適應(yīng)變化的利器,“遺忘”這一頗具負(fù)能量特征的家伙是如何實(shí)現(xiàn)發(fā)現(xiàn)規(guī)律這么個(gè)神奇魔法的呢?
讓我們從巴甫洛夫的狗說起:狗聽到鈴聲就知道開飯了。
鈴聲和開飯之間并不存在必然的聯(lián)系,我們知道之所以狗會(huì)將兩者聯(lián)系在一起,是因?yàn)榘透β宸蛴幸獾膶烧咭淮未卧诠纺莾褐貜?fù)共現(xiàn)。所以,重復(fù)是建立關(guān)聯(lián)的必要條件。
我們還可以想像,狗在進(jìn)食的時(shí)候聽到的聲音可能還有鳥叫聲、風(fēng)吹樹葉的沙沙聲,為什么這些同樣具備重復(fù)特征聲音卻沒有和開飯建立關(guān)系呢?
細(xì)分辨我們不難想到:鈴聲和開飯之間不僅重復(fù)共現(xiàn),而且這種重復(fù)共現(xiàn)還具備一個(gè)相對(duì)穩(wěn)定的周期,而其他的那些聲音和開飯的共現(xiàn)則是隨機(jī)的。
那么遺忘又在其中如何起作用的呢?
1、所有事物一視同仁的按相同的規(guī)律進(jìn)行遺忘; 2、偶爾或隨機(jī)出現(xiàn)的事物因此會(huì)隨時(shí)間而逐漸淡忘; 3、而具有相對(duì)穩(wěn)定周期重復(fù)再現(xiàn)的事物,雖然也按同樣的規(guī)律遺忘,但由于周期性的得到補(bǔ)充,從而可以動(dòng)態(tài)的保留在記憶中。
在自然語(yǔ)言處理中,很多對(duì)象比如:詞、詞與詞的關(guān)聯(lián)、模板等,都具備按相對(duì)穩(wěn)定重現(xiàn)的特征,因此非常適用遺忘來(lái)處理。
三、牛頓冷卻公式
那么,我們用什么來(lái)模擬遺忘呢?
提到遺忘,很自然的會(huì)想到艾賓浩斯遺忘曲線,如果這條曲線有個(gè)函數(shù)形式,那么無(wú)疑是模擬遺忘的最佳建模選擇。遺憾的是它只是一組離散的實(shí)驗(yàn)數(shù)據(jù),但至少讓我們知道,遺忘是呈指數(shù)衰減的。
另外有一個(gè)事實(shí),有的人記性好些,有的人記性則差些,不同人之間的遺忘曲線是不同的,但這并不會(huì)從本質(zhì)上影響不同人對(duì)事物的認(rèn)知,也就是說,如果存在一個(gè)遺忘函數(shù),它首先是指數(shù)形式的,其次在實(shí)用過程中,該函數(shù)的系數(shù)并不那么重要。
這提醒我們,可以嘗試用一些指數(shù)形式的函數(shù)來(lái)代替遺忘曲線,然后用實(shí)踐去檢驗(yàn),如果能滿足工程實(shí)用就很好,這樣的函數(shù)公式并不難找,比如:退火算法、半衰期公式等。
有次在阮一峰老師的博客上看關(guān)于帖子熱度排行的算法時(shí),其中一種方法使用的是牛頓冷卻定律,遺忘與冷卻有著相似的過程、簡(jiǎn)潔優(yōu)美的函數(shù)形式、而且參數(shù)只與時(shí)間相關(guān),這些都讓我本能想到,它就是我想要的“遺忘公式”。
在實(shí)踐檢驗(yàn)中,牛頓冷卻公式,確實(shí)有效好用,當(dāng)然,不排除有其他更佳公式。
四、已經(jīng)實(shí)現(xiàn)的功能
如果把自然語(yǔ)言處理比作從礦砂中淘金子,那么業(yè)界主流算法的方向是從礦砂中將金砂挑出來(lái),而遺忘算法的方向則是將砂石篩出去,雖然殊途但同歸,所處理的任務(wù)也都是主流中所常見。
本系列文章將逐一講解遺忘算法如何以O(shè)(N)級(jí)算法性能實(shí)現(xiàn):
1、大規(guī)模語(yǔ)料詞庫(kù)生成
1.1、跨語(yǔ)種,算法語(yǔ)種無(wú)關(guān),比如:中日韓、少數(shù)民族等語(yǔ)種均可支持
1.2、未登錄詞發(fā)現(xiàn)(只要符合按相對(duì)穩(wěn)定周期性重現(xiàn)的詞匯都會(huì)被收錄)
1.3、領(lǐng)域自適應(yīng),切換不同領(lǐng)域的訓(xùn)練文本時(shí),詞條、詞頻自行調(diào)整
1.4、詞典成熟度:可以知道當(dāng)前語(yǔ)料訓(xùn)練出的詞典的成熟程度
2、分詞(基于上述詞庫(kù)技術(shù))
2.1、成長(zhǎng)性分詞:用的越多,切的越準(zhǔn)
2.2、詞典自維護(hù):切詞的同時(shí)動(dòng)態(tài)維護(hù)詞庫(kù)的詞條、詞頻、登錄新詞
2.2、領(lǐng)域自適應(yīng)、跨語(yǔ)種(繼承自詞庫(kù)特性)
3、詞權(quán)值計(jì)算
3.1、關(guān)鍵詞提取、自動(dòng)標(biāo)簽
3.2、文章摘要
3.3、長(zhǎng)、短文本相似度計(jì)算
3.4、主題詞集
五、聯(lián)系方式:
1、QQ:老憨 244589712
2、郵箱:gzdmcaoyc@163.com
發(fā)表在 自然語(yǔ)言處理? ? ? ? | 標(biāo)簽為 牛頓冷卻公式, 自然語(yǔ)言處理, 遺忘算法? ? ? ? | 留下評(píng)論
達(dá)觀數(shù)據(jù)對(duì)于大規(guī)模消息數(shù)據(jù)處理的系統(tǒng)架構(gòu)發(fā)表于 2015年12月2號(hào) 由 recommender
達(dá)觀數(shù)據(jù)是為企業(yè)提供大數(shù)據(jù)處理、個(gè)性化推薦系統(tǒng)服務(wù)的知名公司,在應(yīng)對(duì)海量數(shù)據(jù)處理時(shí),積累了大量實(shí)戰(zhàn)經(jīng)驗(yàn)。其中達(dá)觀數(shù)據(jù)在面對(duì)大量的數(shù)據(jù)交互和消息處理時(shí),使用了稱為DPIO的設(shè)計(jì)思路進(jìn)行快速、穩(wěn)定、可靠的消息數(shù)據(jù)傳遞機(jī)制,本文分享了達(dá)觀數(shù)據(jù)在應(yīng)對(duì)大規(guī)模消息數(shù)據(jù)處理時(shí)所開發(fā)的通訊中間件DPIO的設(shè)計(jì)思路和處理經(jīng)驗(yàn)(達(dá)觀數(shù)據(jù)架構(gòu)師 桂洪冠) 一、數(shù)據(jù)通訊進(jìn)程模型 在設(shè)計(jì)達(dá)觀數(shù)據(jù)的消息數(shù)據(jù)處理機(jī)制時(shí),首先充分借鑒了ZeroMQ和ProxyIO的設(shè)計(jì)思想。ZeroMQ提供了一種底層的網(wǎng)絡(luò)通訊框架,提供了基本的RoundRobin負(fù)載均衡算法,性能優(yōu)越,而ProxyIO是雅虎的網(wǎng)絡(luò)通訊中間件,承載了雅虎內(nèi)部大量計(jì)算節(jié)點(diǎn)間的實(shí)時(shí)消息處理。但是ZeroMQ沒有實(shí)現(xiàn)基于節(jié)點(diǎn)健康狀態(tài)的最快響應(yīng)算法,并且ZeroMQ和ProxyIO對(duì)節(jié)點(diǎn)的狀態(tài)管理,連接管理,負(fù)載均衡調(diào)度等也需要各應(yīng)用自己來(lái)實(shí)現(xiàn)。 達(dá)觀科技在借鑒兩種設(shè)計(jì)思路的基礎(chǔ)上,從進(jìn)程模型、服務(wù)架構(gòu)、線程模型、通訊協(xié)議、負(fù)載均衡、雪崩處理、連接管理、消息流程、狀態(tài)監(jiān)控等各方面進(jìn)行了開拓,開發(fā)了DPIO(達(dá)觀ProxyIO的簡(jiǎn)寫,下文統(tǒng)稱DPIO),確保系統(tǒng)高性能處理相關(guān)數(shù)據(jù)。 在DPIO的整個(gè)通訊框架體系中,采用集中管理、統(tǒng)一監(jiān)控策略管理節(jié)點(diǎn)提供服務(wù),節(jié)點(diǎn)間直接進(jìn)行交互,并不依賴統(tǒng)一的管理節(jié)點(diǎn)(桂洪冠)。幾種節(jié)點(diǎn)間通過http或者tcp協(xié)議進(jìn)行消息傳遞、配置更新、狀態(tài)跟蹤等通訊行為。集群將不同應(yīng)用的服務(wù)抽象成組的概念,相同應(yīng)用的服務(wù)啟動(dòng)時(shí)加入的相同的組。每個(gè)通訊組有兩種端點(diǎn)client和server。應(yīng)用啟動(dòng)時(shí)通過配置決定自己是client端點(diǎn)還是server端點(diǎn),在一個(gè)組內(nèi),每個(gè)應(yīng)用只能有一個(gè)身份;不同組沒要求。
五、負(fù)載均衡
DPIO的負(fù)載均衡基于最快響應(yīng)法
DPIO將所有的統(tǒng)計(jì)信息更新到監(jiān)控中心,監(jiān)控中心通過處理所有的節(jié)點(diǎn)的狀態(tài)信息,統(tǒng)一負(fù)責(zé)負(fù)載均衡。
DPIO從監(jiān)控中心獲取所有連接的負(fù)載均衡策略。每個(gè)連接知道只需知道自己的處理能力。
以上圖為例,有三個(gè)proxy server處理程序。處理能力分別為50、30、20,一次epoll過程能夠同時(shí)探測(cè)多個(gè)連接的可寫事件。
假設(shè):三個(gè)proxy server的屬于同一epoll thread,且三個(gè)proxy server假設(shè)都處理能力無(wú)限大。
限制:如果剛開始時(shí)待處理隊(duì)列的數(shù)據(jù)包個(gè)數(shù)為100個(gè),多次發(fā)送輪回后proxy server A≥proxy server B≥proxy server C, 每個(gè)發(fā)送的最多發(fā)送協(xié)議包數(shù)為待處理隊(duì)列協(xié)議包個(gè)數(shù) * 該連接所占權(quán)重
六、雪崩處理
大型在線服務(wù),特別是對(duì)于時(shí)延敏感的服務(wù),當(dāng)系統(tǒng)外部請(qǐng)求超過系統(tǒng)服務(wù)能力,而沒有適當(dāng)?shù)倪^載保護(hù)措施時(shí),當(dāng)系統(tǒng)累計(jì)的超時(shí)請(qǐng)求達(dá)到一定規(guī)模,將可能導(dǎo)致系統(tǒng)緩沖區(qū)隊(duì)列溢出,后端服務(wù)資源耗盡,最終像雪崩一樣形成惡性循環(huán)。這時(shí)系統(tǒng)處理的每個(gè)請(qǐng)求都因?yàn)槌瑫r(shí)而無(wú)效,系統(tǒng)對(duì)外呈現(xiàn)的服務(wù)能力為0,且這種情況下不能自動(dòng)恢復(fù)。
我們的解決策略是對(duì)協(xié)議包進(jìn)行生命周期管理,現(xiàn)在協(xié)議包進(jìn)出待處理隊(duì)列和已處理隊(duì)列時(shí)進(jìn)行超時(shí)檢測(cè)和超時(shí)處理(超時(shí)則丟棄)。
proxy client:
當(dāng)app epoll thread將協(xié)議包放入待處理隊(duì)列時(shí),會(huì)將該協(xié)議包的發(fā)送時(shí)間、該協(xié)議包的超時(shí)時(shí)間,當(dāng)前時(shí)間戳來(lái)判斷該協(xié)議包是否已經(jīng)超時(shí)。
當(dāng)app epoll thread將協(xié)議包從已處理隊(duì)列中移除時(shí),會(huì)將該協(xié)議包的發(fā)送時(shí)間、該協(xié)議包的超時(shí)時(shí)間,已經(jīng)當(dāng)前時(shí)間戳來(lái)判斷該協(xié)議包是否已經(jīng)超時(shí)。
當(dāng)Io epoll thread將協(xié)議包從待處理隊(duì)列中移除時(shí),會(huì)將該協(xié)議包的發(fā)送時(shí)間、該協(xié)議包的超時(shí)時(shí)間,當(dāng)前時(shí)間戳,該連接的協(xié)議包的平均處理時(shí)間移除。
當(dāng)io epoll thread將協(xié)議包放入已處理隊(duì)列時(shí),會(huì)將將該協(xié)議包的發(fā)送時(shí)間、該協(xié)議包的超時(shí)時(shí)間,已經(jīng)當(dāng)前時(shí)間戳來(lái)判斷該協(xié)議包是否已經(jīng)超時(shí)。
proxy server:
當(dāng)App epoll thread將協(xié)議包從待處理隊(duì)列中移除時(shí),會(huì)將該協(xié)議包在客戶端的處理時(shí)間、該協(xié)議包的超時(shí)時(shí)間、該協(xié)議包的proxy server接收時(shí)間戳、當(dāng)前時(shí)間戳來(lái)判斷該協(xié)議包是否已超時(shí)。
當(dāng)app epoll thread將協(xié)議包放入已處理隊(duì)列時(shí),會(huì)將該協(xié)議包的發(fā)送時(shí)間、該協(xié)議包的超時(shí)時(shí)間,已經(jīng)當(dāng)前時(shí)間戳來(lái)判斷該協(xié)議包是否已經(jīng)超時(shí)。
當(dāng)io epoll thread將協(xié)議包從已處理隊(duì)列中移除時(shí),會(huì)將該協(xié)議包的發(fā)送時(shí)間、該協(xié)議包的超時(shí)時(shí)間,已經(jīng)當(dāng)前時(shí)間戳來(lái)判斷該協(xié)議包是否已經(jīng)超時(shí)。
當(dāng)io epoll thread將協(xié)議包放入待處理隊(duì)列時(shí),會(huì)將該協(xié)議包的發(fā)送時(shí)間、該協(xié)議包的超時(shí)時(shí)間來(lái)判斷該協(xié)議包是否已超時(shí)。
七、連接管理
紅黑樹:
紅黑樹:保存所有連接的最近的讀/寫時(shí)間戳。
當(dāng)epoll_wait時(shí),首先從紅黑樹中獲取oldest的時(shí)間戳,并將當(dāng)前時(shí)間戳與oldest時(shí)間戳的時(shí)間差作為epoll_wait的超時(shí)時(shí)間,當(dāng)連接中有可讀/寫事件發(fā)送時(shí),首先從紅黑樹中刪除該節(jié)點(diǎn),當(dāng)可讀/寫事件處理完畢后,再將節(jié)點(diǎn)插入到紅黑樹中,當(dāng)處理完所有連接的可讀/寫事件時(shí),再?gòu)募t黑樹中依次從移除時(shí)間戳小于當(dāng)前時(shí)間戳的連接,并觸發(fā)該連接的timeout事件。
八、消息處理流程
發(fā)表在 數(shù)據(jù)挖掘? ? ? ? | 標(biāo)簽為 數(shù)據(jù)處理, 數(shù)據(jù)通訊? ? ? ? | 留下評(píng)論
在微信公眾號(hào)里使用LaTeX數(shù)學(xué)公式發(fā)表于 2015年11月17號(hào) 由 52nlp
因?yàn)橛型瑢W(xué)在微信后臺(tái)咨詢這個(gè)問題,所以這里簡(jiǎn)單記錄一下,其實(shí)自己之前也摸索了一些方法,不是太完美,目前所使用的這個(gè)方法算是折中后比較好的。 這段時(shí)間在鼓搗“NLPJob”這個(gè)公眾號(hào),特別是微信公眾號(hào)支持“原創(chuàng)聲明”后,就很樂意將52nlp上積攢的一些文章搬上去,但是逐漸會(huì)遇到一些數(shù)學(xué)公式的問題。目前在52nlp上用的是mathjax完美支持LaTeX數(shù)學(xué)公式展現(xiàn),但是微信公眾號(hào)的編輯器沒有這個(gè)支持,另外mathjax支持的公式形式不是圖片形式,所以不能直接將文章拷貝上去,但是如果是數(shù)學(xué)公式圖片,微信編輯器可以直接拷貝,所以最直接的想法就是將mathjax支持的LaTeX公式轉(zhuǎn)換為公式圖片保存在文章中,然后再全文拷貝到微信公眾號(hào)編輯器中。 其實(shí)在mathjax之前,網(wǎng)頁(yè)上的很多數(shù)學(xué)公式都是用這種折中的方式,包括很多wordpress數(shù)學(xué)公式插件,當(dāng)年我也因?yàn)?2nlp上的公式問題還自己動(dòng)手寫了一個(gè)小的wordpress插件,但是當(dāng)mathjax出現(xiàn)之后,之前的方案就顯得很一般了。所以就開始嘗試找一下支持img緩存的LaTeX公式插件,不過多數(shù)都不滿意或者有瑕疵,甚至自己又開始動(dòng)手修改代碼,然后blablabla….,最終發(fā)現(xiàn) quicklatex這個(gè)神器和它的wordpress插件QuickLaTeX,幾乎完美支持和兼容Mathjax所支持的LaTeX數(shù)學(xué)公式。方法很簡(jiǎn)單,只要在wordpress中安裝quicklatex,然后在文章的開頭添加一個(gè):[latexpage] ,然后文章中所有的latext公式都會(huì)轉(zhuǎn)換為圖片形式,類似昨天發(fā)出的rickjin的這篇文章:LDA數(shù)學(xué)八卦:神奇的Gamma函數(shù)(1)。當(dāng)然需要先在wordpress中完成編輯轉(zhuǎn)換,再全文拷貝到微信公眾號(hào)中,微信會(huì)自動(dòng)的將這些圖片上傳到它自己的圖片服務(wù)器上。不過依然希望微信公眾號(hào)編輯器能早日支持LaTeX公式編輯甚至Mathjax。
發(fā)表在 隨筆? ? ? ? | 標(biāo)簽為 latex公式, latex數(shù)學(xué)公式, MathJax, 微信, 微信latex, 微信公眾號(hào), 微信公眾號(hào)數(shù)學(xué)公式編輯器, 微信公式編輯器, 微信數(shù)學(xué)公式? ? ? ? | 2 條評(píng)論
斯坦福大學(xué)深度學(xué)習(xí)與自然語(yǔ)言處理第四講:詞窗口分類和神經(jīng)網(wǎng)絡(luò)發(fā)表于 2015年09月14號(hào) 由 52nlp
斯坦福大學(xué)在三月份開設(shè)了一門“深度學(xué)習(xí)與自然語(yǔ)言處理”的課程:CS224d: Deep Learning for Natural Language Processing,授課老師是青年才俊 Richard Socher,以下為相關(guān)的課程筆記。 第四講:詞窗口分類和神經(jīng)網(wǎng)絡(luò)(Word Window Classification and Neural Networks) 推薦閱讀材料:
繼續(xù)閱讀 →
發(fā)表在 機(jī)器學(xué)習(xí), 深度學(xué)習(xí), 自然語(yǔ)言處理? ? ? ? | 標(biāo)簽為 Deep Learning, Deep Learning公開課, Deep NLP, DL, NER, Richard Socher, softmax, word vectors, word2vec, wordnet, 二元邏輯回歸, 人名識(shí)別, 公開課, 分類, 分類器, 前饋網(wǎng)絡(luò)記錄, 反向傳播算法, 命名實(shí)體識(shí)別, 回歸, 地名識(shí)別, 斯坦福大學(xué), 機(jī)器學(xué)習(xí), 梯度下降, 深度學(xué)習(xí), 深度學(xué)習(xí)與自然語(yǔ)言處理, 深度學(xué)習(xí)技術(shù), 深度學(xué)習(xí)模型, 神經(jīng)元, 神經(jīng)網(wǎng)絡(luò), 窗口向量, 窗口向量分類, 自然語(yǔ)義處理, 自然語(yǔ)言處理, 詞向量, 詞嵌入, 語(yǔ)義詞典, 邏輯回歸, 隨機(jī)梯度下降? ? ? ? | 3 條評(píng)論
出門問問宣布完成由Google投資的C輪融資,累計(jì)融資7500萬(wàn)美金發(fā)表于 2015年09月2號(hào) 由 52nlp
注:出門問問是我們的老朋友,創(chuàng)始人李志飛也是NLP和機(jī)器翻譯領(lǐng)域的大牛,今天出門問問拿到了Google的C輪融資,志飛兄第一時(shí)間和我分享了這條新聞,太牛了。 人工智能創(chuàng)業(yè)公司出門問問(Mobvoi),于近日完成了由Google投資的C輪融資,累計(jì)融資7500萬(wàn)美金。現(xiàn)有投資方包括紅杉資本、真格基金,SIG海納亞洲、圓美光電、及歌爾聲學(xué)。此輪投資Google并不控股,出門問問團(tuán)隊(duì)依舊有絕對(duì)控制權(quán)。 此次由Google投資的C輪融資,能夠保證出門問問在人工智能領(lǐng)域長(zhǎng)期持續(xù)深耕,專注核心技術(shù)上的進(jìn)一步研發(fā),在可穿戴、車載以及機(jī)器人領(lǐng)域拓展新的人機(jī)交互產(chǎn)品形態(tài),更深入地完善用戶體驗(yàn),在吸引全球頂尖技術(shù)與商務(wù)人才上更具優(yōu)勢(shì)。對(duì)于海外市場(chǎng)的擴(kuò)展,此次融資也將發(fā)揮非常重要的作用。 Google 企業(yè)發(fā)展部副總裁Don Harrison 說到選擇投資出門問問的原因:“出門問問研發(fā)了非常獨(dú)特自成體系的語(yǔ)音識(shí)別與自然語(yǔ)言處理技術(shù)。我們被他們的創(chuàng)新科技與發(fā)展?jié)摿Υ騽?dòng),所以我們很迅速地決定用投資的方式幫助他們?cè)谖磥?lái)快速成長(zhǎng)。” 紅杉資本全球執(zhí)行合伙人沈南鵬評(píng)價(jià):“出門問問一直處于高速的不斷創(chuàng)新過程中,從移動(dòng)app到硬件產(chǎn)品到語(yǔ)音搜索平臺(tái),不同形式的產(chǎn)品背后是團(tuán)隊(duì)長(zhǎng)期以來(lái)形成的強(qiáng)大技術(shù)核心,獲得Google的投資是對(duì)這種中國(guó)原創(chuàng)能力的最好肯定。我很高興Google這樣的巨頭看好出門問問,并和我們一起投入到這支高速創(chuàng)新的團(tuán)隊(duì)中。” 真格基金創(chuàng)始人徐小平說:“我第一次遇見谷歌科學(xué)家李志飛博士,是三年前。那時(shí)候,他的語(yǔ)音搜索創(chuàng)業(yè)計(jì)劃,真是一個(gè)“異想天開”的夢(mèng)。志飛相信自己的夢(mèng),相信自己的技術(shù),相信市場(chǎng)對(duì)這個(gè)技術(shù)產(chǎn)品的需求,歷經(jīng)萬(wàn)難,終于“搜索”到了屬于他自己的那片天空。志飛的創(chuàng)業(yè)歷程,是又一個(gè)中國(guó)好故事,會(huì)激勵(lì)更多人追求并實(shí)現(xiàn)自己的好夢(mèng)。” 志同道合是此次融資達(dá)成的最重要的原因。扎實(shí)做技術(shù)和產(chǎn)品,運(yùn)用科技的力量改變?nèi)藗兊娜粘I?#xff0c;是出門問問一直篤信的價(jià)值觀。 出門問問CEO 李志飛表示:“引入Google的投資,不僅意味Google對(duì)于我們技術(shù)的認(rèn)可,更是源于雙方持有共同的價(jià)值觀,通過對(duì)人工智能技術(shù)的極致追求,打造毫不妥協(xié)的用戶體驗(yàn)。” 與Google相似,出門問問也是信仰“工程師文化”的團(tuán)隊(duì),強(qiáng)大的研發(fā)團(tuán)隊(duì)由Google前科學(xué)家、人工智能專家領(lǐng)銜,團(tuán)隊(duì)成員來(lái)自哈佛、MIT、斯坦福、劍橋、清華等名校名企。 此次融資是中國(guó)人工智能創(chuàng)業(yè)公司首次獲得像Google這樣的國(guó)際技術(shù)巨頭的投資與認(rèn)可。這在某種程度上說明,在人工智能領(lǐng)域,中國(guó)的創(chuàng)業(yè)公司不容小覷。
繼續(xù)閱讀 →
- Qp:[batch_size, sequence_len],Qp是Q之前的一個(gè)表示(在上圖中沒有畫出)。所有句子需要截?cái)嗷騪adding到一個(gè)固定長(zhǎng)度(因?yàn)楹竺娴腃NN一般是處理固定長(zhǎng)度的矩陣),例如句子包含3個(gè)字ABC,我們選擇固定長(zhǎng)度sequence_len為100,則需要將這個(gè)句子padding成ABC<a><a>…<a>(100個(gè)字),其中的<a>就是添加的專門用于padding的無(wú)意義的符號(hào)。訓(xùn)練時(shí)都是做mini-batch的,所以這里是一個(gè)batch_size行的矩陣,每行是一個(gè)句子。
- Q:[batch_size, sequence_len, embedding_size]。句子中的每個(gè)字都需要轉(zhuǎn)換成對(duì)應(yīng)的字向量,字向量的維度大小是embedding_size,這樣Qp就從一個(gè)2維的矩陣變成了3維的Q
- HL層輸出:[batch_size, embedding_size, hl_size]。HL層:[embedding_size, hl_size],Q中的每個(gè)句子會(huì)通過和HL層的點(diǎn)積進(jìn)行變換,相當(dāng)于將每個(gè)字的字向量從embedding_size大小變換到hl_size大小。
- CNN+P+T輸出:[batch_size, num_filters_total]。CNN的filter大小是[filter_size, hl_size],列大小是hl_size,這個(gè)和字向量的大小是一樣的,所以對(duì)每個(gè)句子而言,每個(gè)filter出來(lái)的結(jié)果是一個(gè)列向量(而不是矩陣),列向量再取max-pooling就變成了一個(gè)數(shù)字,每個(gè)filter輸出一個(gè)數(shù)字,num_filters_total個(gè)filter出來(lái)的結(jié)果當(dāng)然就是[num_filters_total]大小的向量,這樣就得到了一個(gè)句子的語(yǔ)義表示向量。T就是在輸出結(jié)果上加上Tanh激活函數(shù)。
- Cosine_Similarity:[batch_size]。最后的一層并不是通常的分類或者回歸的方法,而是采用了計(jì)算兩個(gè)向量(Q&A)夾角的方法,下面是網(wǎng)絡(luò)損失函數(shù)。,m是需要設(shè)定的參數(shù)margin,VQ、VA+、VA-分別是問題、正向答案、負(fù)向答案對(duì)應(yīng)的語(yǔ)義表示向量。損失函數(shù)的意義就是:讓正向答案和問題之間的向量cosine值要大于負(fù)向答案和問題的向量cosine值,大多少,就是margin這個(gè)參數(shù)來(lái)定義的。cosine值越大,兩個(gè)向量越相近,所以通俗的說這個(gè)Loss就是要讓正向的答案和問題愈來(lái)愈相似,讓負(fù)向的答案和問題越來(lái)越不相似。
Test 1 0.4933 0.6189
Test 2 0.4606 0.5968
Dev 0.4700 0.6088 另外,原始的insuranceQA需要進(jìn)行一些處理才能在這個(gè)代碼上使用,具體參看github上的說明吧。 一些技巧
- 字向量和詞向量的效果相當(dāng)。所以優(yōu)先使用字向量,省去了分詞的麻煩,還能更好的避免未登錄詞的問題,何樂而不為。
- 字向量不是固定的,在訓(xùn)練中會(huì)更新。
- Dropout的使用對(duì)最高的準(zhǔn)確率沒有很大的影響,但是使用了Dropout的結(jié)果更穩(wěn)定,準(zhǔn)確率的波動(dòng)會(huì)更小,所以建議還是要使用Dropout的。不過Dropout也不易過度使用,比如Dropout的keep_prob概率如果設(shè)置到0.25,則模型收斂得更慢,訓(xùn)練時(shí)間長(zhǎng)很多,效果也有可能會(huì)更差,設(shè)置會(huì)差很多。我這版代碼使用的keep_prob為0.5,同時(shí)保證準(zhǔn)確率和訓(xùn)練時(shí)間。另外,Dropout只應(yīng)用到了max-pooling的結(jié)果上,其他地方?jīng)]有再使用了,過多的使用反而不好。
- 如何生成訓(xùn)練集。每個(gè)訓(xùn)練case需要一個(gè)問題+一個(gè)正向答案+一個(gè)負(fù)向答案,很明顯問題和正向答案都是有的,負(fù)向答案的生成方法就是隨機(jī)采樣,這樣就不需要涉及任何人工標(biāo)注工作了,可以很方便的應(yīng)用到大數(shù)據(jù)集上。
- HL層的效果不明顯,有很微量的提升。如果HL層的大小是200,字向量是100,則HL層相當(dāng)于將字向量再放大一倍,這個(gè)感覺沒有多少信息可利用的,還不如直接將字向量設(shè)置成200,還省去了HL這一層的變換。
- margin的值一般都設(shè)置得比較小。這里用的是0.05
- 如果將Cosine_similarity這一層換成分類或者回歸,印象中效果是不如Cosine_similarity的(具體數(shù)據(jù)忘了)
- num_filters越大并不是效果越好,基本到了一定程度就很難提升了,反而會(huì)降低訓(xùn)練速度。
- 同時(shí)也寫了tensorflow版本代碼,對(duì)比theano的,效果差不多。
- Adam和SGD兩種訓(xùn)練方法比較,Adam訓(xùn)練速度貌似會(huì)更快一些,效果基本也持平吧,沒有太細(xì)節(jié)的對(duì)比。不過同樣的網(wǎng)絡(luò)+SGD,theano好像訓(xùn)練要更快一些。
- Loss和Accuracy是比較重要的監(jiān)控參數(shù)。如果寫一個(gè)新的網(wǎng)絡(luò)的話,類似的指標(biāo)是很有必要的,可以在每個(gè)迭代中評(píng)估網(wǎng)絡(luò)是否正在收斂。因?yàn)檎{(diào)試比較麻煩,所以通過這些參數(shù)能評(píng)估你的網(wǎng)絡(luò)寫對(duì)沒,參數(shù)設(shè)置是否正確。
- 網(wǎng)絡(luò)的參數(shù)還是比較重要的,如果一些參數(shù)設(shè)置不合理,很有可能結(jié)果千差萬(wàn)別,記得最初用tensorflow實(shí)現(xiàn)的時(shí)候,應(yīng)該是dropout設(shè)置得太小,導(dǎo)致效果很差,很久才找到原因。所以調(diào)參和微調(diào)網(wǎng)絡(luò)還是需要一定的技巧和經(jīng)驗(yàn)的,做這版代碼的時(shí)候就經(jīng)歷了一段比較痛苦的調(diào)參過程,最開始還懷疑是網(wǎng)絡(luò)設(shè)計(jì)或是代碼有問題,最后總結(jié)應(yīng)該就是參數(shù)沒設(shè)置好。
發(fā)表在 機(jī)器學(xué)習(xí), 深度學(xué)習(xí), 自然語(yǔ)言處理, 問答系統(tǒng)? ? ? ? | 留下評(píng)論
達(dá)觀數(shù)據(jù)搜索引擎的Query自動(dòng)糾錯(cuò)技術(shù)和架構(gòu)詳解發(fā)表于 2016年04月27號(hào) 由 recommender
1 背景 如今,搜索引擎是人們的獲取信息最重要的方式之一,在搜索頁(yè)面小小的輸入框中,只需輸入幾個(gè)關(guān)鍵字,就能找到你感興趣問題的相關(guān)網(wǎng)頁(yè)。搜索巨頭Google,甚至已經(jīng)使Google這個(gè)創(chuàng)造出來(lái)的單詞成為動(dòng)詞,有問題Google一下就可以。在國(guó)內(nèi),百度也同樣成為一個(gè)動(dòng)詞。除了通用搜索需求外,很多垂直細(xì)分領(lǐng)域的搜索需求也很旺盛,比如電商網(wǎng)站的產(chǎn)品搜索,文學(xué)網(wǎng)站的小說搜索等。面對(duì)這些需求,達(dá)觀數(shù)據(jù)(www.datagrand.com)作為國(guó)內(nèi)提供中文云搜索服務(wù)的高科技公司,為合作伙伴提供高質(zhì)量的搜索技術(shù)服務(wù),并進(jìn)行搜索服務(wù)的統(tǒng)計(jì)分析等功能。(達(dá)觀數(shù)據(jù)聯(lián)合創(chuàng)始人高翔) 搜索引擎系統(tǒng)最基本最核心的功能是信息檢索,找到含有關(guān)鍵字的網(wǎng)頁(yè)或文檔,然后按照一定排序?qū)⒔Y(jié)果給出。在此基礎(chǔ)之上,搜索引擎能夠提供更多更復(fù)雜的功能來(lái)提升用戶體驗(yàn)。對(duì)于一個(gè)成熟的搜索引擎系統(tǒng),用戶看似簡(jiǎn)單的搜索過程,需要在系統(tǒng)中經(jīng)過多個(gè)環(huán)節(jié),多個(gè)模塊協(xié)同工作,才能提供一個(gè)讓人滿意的搜索結(jié)果。其中拼寫糾錯(cuò)(Error Correction,以下簡(jiǎn)稱EC)是用戶比較容易感知的一個(gè)功能,比如百度的糾錯(cuò)功能如下圖所示: 圖 1:百度糾錯(cuò)功能示例 EC其實(shí)是屬于Query Rewrite(以下簡(jiǎn)稱QR)模塊中的一個(gè)功能,QR模塊包括拼寫糾錯(cuò),同義改寫,關(guān)聯(lián)query等多個(gè)功能。QR模塊對(duì)于提升用戶體驗(yàn)有著巨大的幫助,對(duì)于搜索質(zhì)量不佳的query進(jìn)行改寫后能返回更好的搜索結(jié)果。QR模塊內(nèi)容較多,以下著重介紹EC功能。
繼續(xù)閱讀 →
發(fā)表在 自然語(yǔ)言處理? ? ? ? | 一條評(píng)論
非主流自然語(yǔ)言處理——遺忘算法系列(四):改進(jìn)TF-IDF權(quán)重公式發(fā)表于 2016年04月23號(hào) 由 老憨
一、前言
前文介紹了利用詞庫(kù)進(jìn)行分詞,本文介紹詞庫(kù)的另一個(gè)應(yīng)用:詞權(quán)重計(jì)算。
二、詞權(quán)重公式
1、公式的定義
定義如下公式,用以計(jì)算詞的權(quán)重:
2、公式的由來(lái)
在前文中,使用如下公式作為分詞的依據(jù):
任給一個(gè)句子或文章,通過對(duì)最佳分詞方案所對(duì)應(yīng)的公式進(jìn)行變換,可以得到:
按前面權(quán)重公式的定義,上面的公式可以理解為:一個(gè)句子出現(xiàn)的概率對(duì)數(shù)等于句子中各詞的權(quán)重之和。
公式兩邊同時(shí)取負(fù)號(hào)使權(quán)重是個(gè)正值。
三、與TF-IDF的關(guān)系
詞頻、逆文檔頻率(TF-IDF)在自然語(yǔ)言處理中,應(yīng)用十分廣泛,也是提取關(guān)鍵詞的常用方法,公式如下:
從形式上看,該公式與我們定義的權(quán)重公式很像,而且用途也近似,那么它們之間有沒有關(guān)系呢?
答案是肯定的。
我們知道,IDF是按文檔為單位統(tǒng)計(jì)的,無(wú)論文檔的長(zhǎng)短,統(tǒng)一都按一篇計(jì)數(shù),感覺這個(gè)統(tǒng)計(jì)的粒度還是比較粗的,有沒有辦法將文本的長(zhǎng)短,這個(gè)明顯相關(guān)的因素也考慮進(jìn)去呢,讓這個(gè)公式更加精細(xì)些?
答案也是肯定的。
文章是由詞鋪排而成,長(zhǎng)短不同,所包含的詞的個(gè)數(shù)也就有多有少。
我們可以考慮在統(tǒng)計(jì)文檔個(gè)數(shù)時(shí),為每個(gè)文檔引入包含多少個(gè)詞這樣一個(gè)權(quán)重,以區(qū)別長(zhǎng)短不同的文檔,沿著這個(gè)思路,改寫一下IDF公式:
我們用所有文檔中的詞做成詞庫(kù),那么上式中:
綜合上面的推導(dǎo)過程,我們知道,本文所定義的詞權(quán)重公式,本質(zhì)上是tf-idf為長(zhǎng)短文檔引入權(quán)重的加強(qiáng)版,而該公式的應(yīng)用也極為簡(jiǎn)單,只需要從詞庫(kù)中讀取該詞詞頻、詞庫(kù)總詞頻即可。
時(shí)間復(fù)雜度最快可達(dá)O(1)級(jí),比如詞庫(kù)以Hash表存儲(chǔ)。
關(guān)于TF-IDF更完整的介紹及主流用法,建議參看阮一峰老師的博文《TF-IDF與余弦相似性的應(yīng)用(一):自動(dòng)提取關(guān)鍵詞》。
四、公式應(yīng)用
詞權(quán)重用途很廣,幾乎詞袋類算法中,都可以考慮使用。常見的應(yīng)用有:
1、關(guān)鍵詞抽取、自動(dòng)標(biāo)簽生成
作法都很簡(jiǎn)單,分詞后排除停用詞,然后按權(quán)重值排序,取排在前面的若干個(gè)詞即可。
2、文本摘要
完整的文本摘要功能實(shí)現(xiàn)很復(fù)雜也很困難,這里所指,僅是簡(jiǎn)單應(yīng)用:由前面推導(dǎo)過程中可知,句子的權(quán)重等于分詞結(jié)果各詞的權(quán)重之和,從而獲得句子的權(quán)重排序。
3、相似度計(jì)算
相似度計(jì)算,我們將在下一篇文中單獨(dú)介紹。
五、演示程序
在演示程序顯示詞庫(kù)結(jié)果時(shí),是按本文所介紹的權(quán)重公式排序的。
演示程序與詞庫(kù)生成的相同:
下載地址:遺忘算法(詞庫(kù)生成、分詞、詞權(quán)重)演示程序.rar
特別感謝:王斌老師指出,本文公式實(shí)質(zhì)上是TF-ICF。
六、聯(lián)系方式: 1、QQ:老憨 244589712
2、郵箱:gzdmcaoyc@163.com
發(fā)表在 自然語(yǔ)言處理? ? ? ? | 標(biāo)簽為 TF-IDF, 自然語(yǔ)言處理, 遺忘算法? ? ? ? | 留下評(píng)論
非主流自然語(yǔ)言處理——遺忘算法系列(三):分詞發(fā)表于 2016年04月23號(hào) 由 老憨
一、前言
前面介紹了詞庫(kù)的自動(dòng)生成的方法,本文介紹如何利用前文所生成的詞庫(kù)進(jìn)行分詞。
二、分詞的原理
分詞的原理,可以參看吳軍老師《數(shù)學(xué)之美》中的相關(guān)章節(jié),這里摘取Google黑板報(bào)版本中的部分:
從上文中,可以知道分詞的任務(wù)目標(biāo):給出一個(gè)句子S,找到一種分詞方案,使下面公式中的P(S)最大:
不過,聯(lián)合概率求起來(lái)很困難,這種情況我們通常作馬爾可夫假設(shè),以簡(jiǎn)化問題,即:任意一個(gè)詞wi的出現(xiàn)概率只同它前面的詞 wi-1 有關(guān)。
關(guān)于這個(gè)問題,吳軍老師講的深入淺出,整段摘錄如下:
另外,如果我們假設(shè)一個(gè)詞與其他詞都不相關(guān),即相互獨(dú)立時(shí),此時(shí)公式最簡(jiǎn),如下:
這個(gè)假設(shè)分詞無(wú)關(guān)的公式,也是本文所介紹的分詞算法所使用的。
三、算法分析
問:假設(shè)分詞結(jié)果中各詞相互無(wú)關(guān)是否可行?
答:可行,前提是使用遺忘算法系列(二)中所述方法生成的詞庫(kù),理由如下:
分析ICTCLAS廣受好評(píng)的分詞系統(tǒng)的免費(fèi)版源碼,可以發(fā)現(xiàn),在這套由張華平、劉群兩位博士所開發(fā)分詞系統(tǒng)的算法中假設(shè)了:分詞結(jié)果中詞只與其前面的一個(gè)詞有關(guān)。
回憶我們?cè)~庫(kù)生成的過程可以知道,如果相鄰的兩個(gè)詞緊密相關(guān),那么這兩個(gè)詞會(huì)連為一個(gè)粗粒度的詞被加入詞庫(kù)中,如:除“清華”、“大學(xué)”會(huì)是單獨(dú)的詞外,“清華大學(xué)”也會(huì)是一個(gè)詞,分詞過程中具體選用那種,則由它們的概率來(lái)決定。
也就是說,我們?cè)谏稍~庫(kù)的同時(shí),已經(jīng)隱含的完成了相關(guān)性訓(xùn)練。
關(guān)于ICTCLAS源碼分析的文章,可以參看呂震宇博文:《天書般的ICTCLAS分詞系統(tǒng)代碼》。
問:如何實(shí)現(xiàn)分詞?
答:基于前文生成的詞庫(kù),我們可以假設(shè)分詞結(jié)果相互無(wú)關(guān),分詞過程就比較簡(jiǎn)單,使用下面的步驟可以O(shè)(N)級(jí)時(shí)間,單遍掃描完成分詞:
逐字掃描句子,從詞庫(kù)中查出限定字長(zhǎng)內(nèi),以該字結(jié)尾的所有詞,分別計(jì)算其中的詞與該詞之前各詞的概率乘積,取結(jié)果值最大的詞,分別緩存下當(dāng)前字所在位置的最大概率積,以及對(duì)應(yīng)的分詞結(jié)果。
重復(fù)上面的步驟,直到句子掃描完畢,最后一字位置所得到即為整句分詞結(jié)果。
3、算法特點(diǎn)
3.1、無(wú)監(jiān)督學(xué)習(xí);
3.2、O(N)級(jí)時(shí)間復(fù)雜度;
3.3、詞庫(kù)自維護(hù),程序可無(wú)需人工參與的情況下,自行發(fā)現(xiàn)并添加新詞、調(diào)整詞頻、清理錯(cuò)詞、移除生僻詞,保持詞典大小適當(dāng);
3.4、領(lǐng)域自適應(yīng):領(lǐng)域變化時(shí),詞條、詞頻自適應(yīng)的隨之調(diào)整;
3.5、支持多語(yǔ)種混合分詞。
四、演示程序下載
演示程序與詞庫(kù)生成的相同:
下載地址:遺忘算法(詞庫(kù)生成、分詞、詞權(quán)重)演示程序.rar
五、聯(lián)系方式:
1、QQ:老憨 244589712
2、郵箱:gzdmcaoyc@163.com
發(fā)表在 自然語(yǔ)言處理? ? ? ? | 標(biāo)簽為 無(wú)監(jiān)督分詞, 自然語(yǔ)言處理, 自適應(yīng)詞典, 跨語(yǔ)種, 遺忘算法? ? ? ? | 13 條評(píng)論
非主流自然語(yǔ)言處理——遺忘算法系列(二):大規(guī)模語(yǔ)料詞庫(kù)生成發(fā)表于 2016年04月23號(hào) 由 老憨
一、前言
本文介紹利用牛頓冷卻模擬遺忘降噪,從大規(guī)模文本中無(wú)監(jiān)督生成詞庫(kù)的方法。
二、詞庫(kù)生成
算法分析,先來(lái)考慮以下幾個(gè)問題
問:目標(biāo)是從文本中抽取詞語(yǔ),是否可以考慮使用遺忘的方法呢?
答:可以,詞語(yǔ)具備以相對(duì)穩(wěn)定周期重復(fù)再現(xiàn)的特征,所以可以考慮使用遺忘的方法。這意味著,我們只需要找一種適當(dāng)?shù)姆椒?#xff0c;將句子劃分成若干子串,這些子串即為“候選詞”。在遺忘的作用下,如果“候選詞”會(huì)周期性重現(xiàn),那么它就會(huì)被保留在詞庫(kù)中,相反如果只是偶爾或隨機(jī)出現(xiàn),則會(huì)逐漸被遺忘掉。
問:那用什么方法來(lái)把句子劃分成子串比較合適呢?
答:考察句中任意相鄰的兩個(gè)字,相鄰兩字有兩種可能:要么同屬于一個(gè)共同的詞,要么是兩個(gè)詞的邊界。我們都會(huì)有這樣一種感覺,屬于同一個(gè)詞的相鄰兩字的“關(guān)系”肯定比屬于不同詞的相鄰兩字的“關(guān)系”要強(qiáng)烈一些。
數(shù)學(xué)中并不缺少刻劃“關(guān)系”的模型,這里我們選擇公式簡(jiǎn)單并且參數(shù)容易統(tǒng)計(jì)的一種:如果兩個(gè)字共現(xiàn)的概率大于它們隨機(jī)排列在一起的概率,那么我們認(rèn)為這兩個(gè)字有關(guān),反之則無(wú)關(guān)。
如果相鄰兩字無(wú)關(guān),就可以將兩字中間斷開。逐字掃描句子,如果相鄰兩字滿足下面的公式,則將兩字?jǐn)嚅_,如此可將句子切成若干子串,從而獲得“候選詞”集,判斷公式如下圖所示:
公式中所需的參數(shù)可以通過統(tǒng)計(jì)獲得:遍歷一次語(yǔ)料,即可獲得公式中所需的“單字的頻數(shù)”、“相鄰兩字共現(xiàn)的頻數(shù)”,以及“所有單字的頻數(shù)總和”。
問:如何計(jì)算遺忘剩余量?
答:使用牛頓冷卻公式,各參數(shù)在遺忘算法中的含義,如下圖所示:
牛頓冷卻公式的詳情說明,可以參考阮一峰老師的博文《基于用戶投票的排名算法(四):牛頓冷卻定律》。
問:參數(shù)中時(shí)間是用現(xiàn)實(shí)時(shí)間嗎,遺忘系數(shù)取多少合適呢?
答:a、關(guān)于時(shí)間:
可以使用現(xiàn)實(shí)時(shí)間,遺忘的發(fā)生與現(xiàn)實(shí)同步。
也可以考慮用處理語(yǔ)料中對(duì)象的數(shù)量來(lái)代替,這樣僅當(dāng)有數(shù)據(jù)處理時(shí),才會(huì)發(fā)生遺忘。比如按處理的字?jǐn)?shù)為計(jì)時(shí)單位,人閱讀的速度約每秒5至7個(gè)字,當(dāng)然每個(gè)人的閱讀速度并不相同,這里的參數(shù)值要求并不需要特別嚴(yán)格。
b、遺忘系數(shù)可以參考艾賓浩斯曲線中的實(shí)驗(yàn)值,如下圖(來(lái)自互聯(lián)網(wǎng))
我們?nèi)?天記憶剩余量約為25.4%這個(gè)值,按每秒閱讀7個(gè)字,將其代入牛頓冷卻公式可以求得遺忘系數(shù):
注意艾賓浩斯曲線中的每組數(shù)值代入公式,所得的系數(shù)并不相同,會(huì)對(duì)詞庫(kù)的最大有效容量產(chǎn)生影響。
二、該算法生成詞庫(kù)的特點(diǎn)
3.1、無(wú)監(jiān)督學(xué)習(xí)
3.2、O(N)級(jí)時(shí)間復(fù)雜度
3.3、訓(xùn)練、執(zhí)行為同一過程,可無(wú)縫處理流式數(shù)據(jù)
3.4、未登錄詞、新詞、登錄詞沒有區(qū)別
3.5、領(lǐng)域自適應(yīng):領(lǐng)域變化時(shí),詞條、詞頻自適應(yīng)的隨之調(diào)整
3.6、算法中僅使用到頻數(shù)這一語(yǔ)言的共性特征,無(wú)需對(duì)任何字符做特別處理,因此原理上跨語(yǔ)種。
三、詞庫(kù)成熟度
由于每個(gè)詞都具備一個(gè)相對(duì)穩(wěn)定的重現(xiàn)周期,不難證明,當(dāng)訓(xùn)練語(yǔ)料達(dá)到一定規(guī)模后,在遺忘的作用下,每個(gè)詞的詞頻在衰減和累加會(huì)達(dá)到平衡,也即衰減的速度與增加的速度基本一致。成熟的詞庫(kù),詞頻的波動(dòng)相對(duì)會(huì)比較小,利用這個(gè)特征,我們可以衡量詞庫(kù)的成熟程度。
四、源碼(C#)、演示程序下載
使用內(nèi)附語(yǔ)料(在“可直接運(yùn)行的演示程序”下可以找到)生成詞庫(kù)效果如下:
下載地址:遺忘算法(詞庫(kù)生成、分詞、詞權(quán)重)演示程序.rar
五、聯(lián)系方式:
1、QQ:老憨 244589712
2、郵箱:gzdmcaoyc@163.com
發(fā)表在 自然語(yǔ)言處理? ? ? ? | 標(biāo)簽為 未登錄詞發(fā)現(xiàn), 牛頓冷卻公式, 自然語(yǔ)言處理, 詞庫(kù)生成, 遺忘算法? ? ? ? | 4 條評(píng)論
非主流自然語(yǔ)言處理——遺忘算法系列(一):算法概述發(fā)表于 2016年04月19號(hào) 由 老憨
一、前言
這里“遺忘”不是筆誤,這個(gè)系列要講的“遺忘算法”,是以牛頓冷卻公式模擬遺忘為基礎(chǔ)、用于自然語(yǔ)言處理(NLP)的一類方法的統(tǒng)稱,而不是大名鼎鼎的“遺傳算法”!
在“遺忘”這條非主流自然語(yǔ)言處理路上,不知不覺已經(jīng)摸索了三年有余,遺忘算法也算略成體系,雖然仍覺時(shí)機(jī)未到,還是決定先停一下,將腦中所積梳理成文,交由NLP的同好們點(diǎn)評(píng)交流。
二、遺忘算法原理
能夠從未知的事物中發(fā)現(xiàn)關(guān)聯(lián)、提煉規(guī)律才是真正智能的標(biāo)志,而遺忘正是使智能生物具備這一能力的工具,也是適應(yīng)變化的利器,“遺忘”這一頗具負(fù)能量特征的家伙是如何實(shí)現(xiàn)發(fā)現(xiàn)規(guī)律這么個(gè)神奇魔法的呢?
讓我們從巴甫洛夫的狗說起:狗聽到鈴聲就知道開飯了。
鈴聲和開飯之間并不存在必然的聯(lián)系,我們知道之所以狗會(huì)將兩者聯(lián)系在一起,是因?yàn)榘透β宸蛴幸獾膶烧咭淮未卧诠纺莾褐貜?fù)共現(xiàn)。所以,重復(fù)是建立關(guān)聯(lián)的必要條件。
我們還可以想像,狗在進(jìn)食的時(shí)候聽到的聲音可能還有鳥叫聲、風(fēng)吹樹葉的沙沙聲,為什么這些同樣具備重復(fù)特征聲音卻沒有和開飯建立關(guān)系呢?
細(xì)分辨我們不難想到:鈴聲和開飯之間不僅重復(fù)共現(xiàn),而且這種重復(fù)共現(xiàn)還具備一個(gè)相對(duì)穩(wěn)定的周期,而其他的那些聲音和開飯的共現(xiàn)則是隨機(jī)的。
那么遺忘又在其中如何起作用的呢?
1、所有事物一視同仁的按相同的規(guī)律進(jìn)行遺忘; 2、偶爾或隨機(jī)出現(xiàn)的事物因此會(huì)隨時(shí)間而逐漸淡忘; 3、而具有相對(duì)穩(wěn)定周期重復(fù)再現(xiàn)的事物,雖然也按同樣的規(guī)律遺忘,但由于周期性的得到補(bǔ)充,從而可以動(dòng)態(tài)的保留在記憶中。
在自然語(yǔ)言處理中,很多對(duì)象比如:詞、詞與詞的關(guān)聯(lián)、模板等,都具備按相對(duì)穩(wěn)定重現(xiàn)的特征,因此非常適用遺忘來(lái)處理。
三、牛頓冷卻公式
那么,我們用什么來(lái)模擬遺忘呢?
提到遺忘,很自然的會(huì)想到艾賓浩斯遺忘曲線,如果這條曲線有個(gè)函數(shù)形式,那么無(wú)疑是模擬遺忘的最佳建模選擇。遺憾的是它只是一組離散的實(shí)驗(yàn)數(shù)據(jù),但至少讓我們知道,遺忘是呈指數(shù)衰減的。
另外有一個(gè)事實(shí),有的人記性好些,有的人記性則差些,不同人之間的遺忘曲線是不同的,但這并不會(huì)從本質(zhì)上影響不同人對(duì)事物的認(rèn)知,也就是說,如果存在一個(gè)遺忘函數(shù),它首先是指數(shù)形式的,其次在實(shí)用過程中,該函數(shù)的系數(shù)并不那么重要。
這提醒我們,可以嘗試用一些指數(shù)形式的函數(shù)來(lái)代替遺忘曲線,然后用實(shí)踐去檢驗(yàn),如果能滿足工程實(shí)用就很好,這樣的函數(shù)公式并不難找,比如:退火算法、半衰期公式等。
有次在阮一峰老師的博客上看關(guān)于帖子熱度排行的算法時(shí),其中一種方法使用的是牛頓冷卻定律,遺忘與冷卻有著相似的過程、簡(jiǎn)潔優(yōu)美的函數(shù)形式、而且參數(shù)只與時(shí)間相關(guān),這些都讓我本能想到,它就是我想要的“遺忘公式”。
在實(shí)踐檢驗(yàn)中,牛頓冷卻公式,確實(shí)有效好用,當(dāng)然,不排除有其他更佳公式。
四、已經(jīng)實(shí)現(xiàn)的功能
如果把自然語(yǔ)言處理比作從礦砂中淘金子,那么業(yè)界主流算法的方向是從礦砂中將金砂挑出來(lái),而遺忘算法的方向則是將砂石篩出去,雖然殊途但同歸,所處理的任務(wù)也都是主流中所常見。
本系列文章將逐一講解遺忘算法如何以O(shè)(N)級(jí)算法性能實(shí)現(xiàn):
1、大規(guī)模語(yǔ)料詞庫(kù)生成
1.1、跨語(yǔ)種,算法語(yǔ)種無(wú)關(guān),比如:中日韓、少數(shù)民族等語(yǔ)種均可支持
1.2、未登錄詞發(fā)現(xiàn)(只要符合按相對(duì)穩(wěn)定周期性重現(xiàn)的詞匯都會(huì)被收錄)
1.3、領(lǐng)域自適應(yīng),切換不同領(lǐng)域的訓(xùn)練文本時(shí),詞條、詞頻自行調(diào)整
1.4、詞典成熟度:可以知道當(dāng)前語(yǔ)料訓(xùn)練出的詞典的成熟程度
2、分詞(基于上述詞庫(kù)技術(shù))
2.1、成長(zhǎng)性分詞:用的越多,切的越準(zhǔn)
2.2、詞典自維護(hù):切詞的同時(shí)動(dòng)態(tài)維護(hù)詞庫(kù)的詞條、詞頻、登錄新詞
2.2、領(lǐng)域自適應(yīng)、跨語(yǔ)種(繼承自詞庫(kù)特性)
3、詞權(quán)值計(jì)算
3.1、關(guān)鍵詞提取、自動(dòng)標(biāo)簽
3.2、文章摘要
3.3、長(zhǎng)、短文本相似度計(jì)算
3.4、主題詞集
五、聯(lián)系方式:
1、QQ:老憨 244589712
2、郵箱:gzdmcaoyc@163.com
發(fā)表在 自然語(yǔ)言處理? ? ? ? | 標(biāo)簽為 牛頓冷卻公式, 自然語(yǔ)言處理, 遺忘算法? ? ? ? | 留下評(píng)論
達(dá)觀數(shù)據(jù)對(duì)于大規(guī)模消息數(shù)據(jù)處理的系統(tǒng)架構(gòu)發(fā)表于 2015年12月2號(hào) 由 recommender
達(dá)觀數(shù)據(jù)是為企業(yè)提供大數(shù)據(jù)處理、個(gè)性化推薦系統(tǒng)服務(wù)的知名公司,在應(yīng)對(duì)海量數(shù)據(jù)處理時(shí),積累了大量實(shí)戰(zhàn)經(jīng)驗(yàn)。其中達(dá)觀數(shù)據(jù)在面對(duì)大量的數(shù)據(jù)交互和消息處理時(shí),使用了稱為DPIO的設(shè)計(jì)思路進(jìn)行快速、穩(wěn)定、可靠的消息數(shù)據(jù)傳遞機(jī)制,本文分享了達(dá)觀數(shù)據(jù)在應(yīng)對(duì)大規(guī)模消息數(shù)據(jù)處理時(shí)所開發(fā)的通訊中間件DPIO的設(shè)計(jì)思路和處理經(jīng)驗(yàn)(達(dá)觀數(shù)據(jù)架構(gòu)師 桂洪冠) 一、數(shù)據(jù)通訊進(jìn)程模型 在設(shè)計(jì)達(dá)觀數(shù)據(jù)的消息數(shù)據(jù)處理機(jī)制時(shí),首先充分借鑒了ZeroMQ和ProxyIO的設(shè)計(jì)思想。ZeroMQ提供了一種底層的網(wǎng)絡(luò)通訊框架,提供了基本的RoundRobin負(fù)載均衡算法,性能優(yōu)越,而ProxyIO是雅虎的網(wǎng)絡(luò)通訊中間件,承載了雅虎內(nèi)部大量計(jì)算節(jié)點(diǎn)間的實(shí)時(shí)消息處理。但是ZeroMQ沒有實(shí)現(xiàn)基于節(jié)點(diǎn)健康狀態(tài)的最快響應(yīng)算法,并且ZeroMQ和ProxyIO對(duì)節(jié)點(diǎn)的狀態(tài)管理,連接管理,負(fù)載均衡調(diào)度等也需要各應(yīng)用自己來(lái)實(shí)現(xiàn)。 達(dá)觀科技在借鑒兩種設(shè)計(jì)思路的基礎(chǔ)上,從進(jìn)程模型、服務(wù)架構(gòu)、線程模型、通訊協(xié)議、負(fù)載均衡、雪崩處理、連接管理、消息流程、狀態(tài)監(jiān)控等各方面進(jìn)行了開拓,開發(fā)了DPIO(達(dá)觀ProxyIO的簡(jiǎn)寫,下文統(tǒng)稱DPIO),確保系統(tǒng)高性能處理相關(guān)數(shù)據(jù)。 在DPIO的整個(gè)通訊框架體系中,采用集中管理、統(tǒng)一監(jiān)控策略管理節(jié)點(diǎn)提供服務(wù),節(jié)點(diǎn)間直接進(jìn)行交互,并不依賴統(tǒng)一的管理節(jié)點(diǎn)(桂洪冠)。幾種節(jié)點(diǎn)間通過http或者tcp協(xié)議進(jìn)行消息傳遞、配置更新、狀態(tài)跟蹤等通訊行為。集群將不同應(yīng)用的服務(wù)抽象成組的概念,相同應(yīng)用的服務(wù)啟動(dòng)時(shí)加入的相同的組。每個(gè)通訊組有兩種端點(diǎn)client和server。應(yīng)用啟動(dòng)時(shí)通過配置決定自己是client端點(diǎn)還是server端點(diǎn),在一個(gè)組內(nèi),每個(gè)應(yīng)用只能有一個(gè)身份;不同組沒要求。
- 監(jiān)控節(jié)點(diǎn),顧名思義即提供系統(tǒng)監(jiān)控服務(wù)的,用來(lái)給系統(tǒng)管理員查看集群中節(jié)點(diǎn)的服務(wù)狀態(tài)及負(fù)載情況,系統(tǒng)對(duì)監(jiān)控節(jié)點(diǎn)并無(wú)實(shí)時(shí)性及穩(wěn)定性要求,在本模型中是單點(diǎn)系統(tǒng)。
- 在上圖的架構(gòu)中把管理節(jié)點(diǎn)設(shè)計(jì)成雙master結(jié)構(gòu),參考zookeeper集群管理思路,多個(gè)master通過一定算法分別服務(wù)于集群中一部分節(jié)點(diǎn),相對(duì)于另外的服務(wù)節(jié)點(diǎn)則為備份管理節(jié)點(diǎn),他們通過內(nèi)部通訊同步數(shù)據(jù),每個(gè)管理節(jié)點(diǎn)都有一個(gè)web服務(wù)為監(jiān)控節(jié)點(diǎn)提供服務(wù)節(jié)點(diǎn)的狀態(tài)數(shù)據(jù)。
- 服務(wù)節(jié)點(diǎn)即是下文要談的代理服務(wù),根據(jù)服務(wù)對(duì)象不同分為應(yīng)用端代理和服務(wù)端代理。集群中的服務(wù)節(jié)點(diǎn)根據(jù)提供服務(wù)的不同分為多個(gè)組,每個(gè)代理啟動(dòng)都需要注冊(cè)到相應(yīng)的組中,然后提供服務(wù)。
- clientHost和serverHost間使用socketapi進(jìn)行tcp通訊,相同主機(jī)內(nèi)部的多個(gè)進(jìn)程間使用共享內(nèi)存?zhèn)鬟f消息內(nèi)容,client和clientproxy、server和serverproxy之間通過domain socket進(jìn)行事件通知;在socket連接的一方收到對(duì)端的事件通知后,從共享內(nèi)存中獲取消息內(nèi)容。
- clientproxy/serverproxy啟動(dòng)時(shí)綁定到host的一個(gè)端口響應(yīng)應(yīng)用api的連接,在連接到來(lái)時(shí)將該api對(duì)應(yīng)的共享內(nèi)存初始化,將偏移地址告訴給應(yīng)用。clientproxy和serverproxy中分別維護(hù)了一個(gè)到應(yīng)用api的連接句柄隊(duì)列,并通過io復(fù)用技術(shù)監(jiān)聽這些連接上的讀寫事件。
- serverproxy在啟動(dòng)時(shí)通過socket綁定到服務(wù)器的一個(gè)端口,并以server身份注冊(cè)到一個(gè)group監(jiān)聽該端口的連接事件,當(dāng)事件到達(dá)時(shí)回調(diào)注冊(cè)的事件處理函數(shù)響應(yīng)事件。
- 在serverproxy內(nèi)部通過不同的thread分別管理從本地應(yīng)用建立的連接和從clientproxy建立的連接。thread的個(gè)數(shù)在啟動(dòng)proxy時(shí)由用戶指定,默認(rèn)是分別1個(gè)。每個(gè)clientproxy啟動(dòng)時(shí)會(huì)以client身份注冊(cè)到一個(gè)group,并建立到同組的所有serverproxy的連接,clientproxy內(nèi)部包含了連接的自管理能力及failover的處理(將在下面連接管理部分描述)。 DPIO實(shí)現(xiàn)了負(fù)載均衡,路由選擇和透明代理的功能。
- Api與DPIO通信協(xié)議
- 共享內(nèi)存存儲(chǔ)消息格式
| 字段 | 含義 | 長(zhǎng)度 |
| protocol len | 協(xié)議包的總長(zhǎng)度 | 4bytes |
| protocol head len | 協(xié)議頭的長(zhǎng)度 | 1byte |
| Version_protocol_id | 協(xié)議的版本號(hào)和協(xié)議號(hào) | 1byte |
| Flag | 消息標(biāo)志,標(biāo)志路由模式,是否記錄來(lái)源地址,有二級(jí)路由,所以這個(gè)字段一定要Eg,末位表示要記錄src,倒數(shù)第二位表示按roundrobin路由,倒數(shù)第3位表示按消息頭路由,xxx | 1byte |
| Proxy | 來(lái)源/目的 proxy | 2bytes |
| Api | 來(lái)源/目的 api | 2bytes |
| ApiTtl | 協(xié)議包的發(fā)送時(shí)間 | 2Bytes |
| ClientTtl | 消息存活的時(shí)間,后面添加,增加路由策略,選擇app_server | 2Bytes |
| ClientProcessTime | 客戶端處理所用時(shí)間 | 2Bytes |
| ServerTtl | 消息存活的時(shí)間,后面添加,增加路由策略,選擇app_client | 2Bytes |
| timeout | 協(xié)議包的超時(shí)時(shí)間 | 2 byte |
| Sid | 消息序列號(hào) | 4bytes |
| protocol body len | Body長(zhǎng)度 | 4bytes |
| protocol body | 消息體 | Size |
- 請(qǐng)求協(xié)議包
| 字段 | 含義 | 長(zhǎng)度 |
| protocol head len | 協(xié)議頭的長(zhǎng)度 | 1byte |
| Version_protocol_id | 協(xié)議的版本號(hào)和協(xié)議號(hào) | 1byte |
| Flag | 消息標(biāo)志,標(biāo)志路由模式,是否記錄來(lái)源地址,有二級(jí)路由,所以這個(gè)字段一定要Eg,末位表示要記錄src,倒數(shù)第二位表示按roundrobin路由,倒數(shù)第3位表示按消息頭路由,xxx | 1byte |
| ApiTtl | 協(xié)議包的發(fā)送時(shí)間 | 2bytes |
| Timeout | 協(xié)議包的超時(shí)時(shí)間 | 2bytes |
| Api | 來(lái)源/目的 api | 2bytes |
| Sid | 消息序列號(hào) | 4byte |
| Begin_offset | 協(xié)議包的起始偏移 | 4bytes |
| len | 協(xié)議包長(zhǎng)度 | 4bytes |
- 響應(yīng)協(xié)議包
| 字段 | 含義 | 長(zhǎng)度 |
| protocol head len | 協(xié)議頭的長(zhǎng)度 | 1byte |
| Version_protocol_id | 協(xié)議的版本號(hào)和協(xié)議號(hào) | 1byte |
| Flag | 消息標(biāo)志,標(biāo)志路由模式,是否記錄來(lái)源地址,有二級(jí)路由,所以這個(gè)字段一定要Eg,末位表示要記錄src,倒數(shù)第二位表示按roundrobin路由,倒數(shù)第3位表示按消息頭路由,xxx | 1byte |
| Result | 處理結(jié)果 | 1byte |
| sid | 消息序列號(hào) | 4bytes |
| begin_offset | 協(xié)議包的起始偏移 | 4bytes |
| len | 協(xié)議包長(zhǎng)度 | 4bytes |
- Proxy與監(jiān)控中心的監(jiān)控信息
- 請(qǐng)求協(xié)議包
| 字段 | 含義 | 長(zhǎng)度 |
| protocol len | 協(xié)議包的總長(zhǎng)度 | 4bytes |
| protocol head len | 協(xié)議頭的長(zhǎng)度 | 4bytes |
| Version | 協(xié)議的版本號(hào) | 4bytes |
| protocol id | 協(xié)議的協(xié)議號(hào) | 4bytess |
| status_version | 當(dāng)前狀態(tài)版本 | 4bytes |
| Proxy_identify_len | 該proxy標(biāo)識(shí)長(zhǎng)度 | 4bytess |
| Proxy_identify | 該proxy 標(biāo)識(shí) | 4bytes |
| protocol body | 消息體 | Size |
- 應(yīng)答包
| 字段 | 含義 | 長(zhǎng)度 |
| protocol len | 協(xié)議包的總長(zhǎng)度 | 4bytes |
| protocol head len | 協(xié)議頭的長(zhǎng)度 | 4bytes |
| Version | 協(xié)議的版本號(hào) | 4bytes |
| protocol id | 協(xié)議的協(xié)議號(hào) | 4bytess |
| protocol body len | Body長(zhǎng)度 | 4bytes |
| protocol body | 消息體 | Size |
- apiclient通過調(diào)用api的接口,將消息傳給
- api接受消息體,從共享內(nèi)存中申請(qǐng)內(nèi)存,填寫消息頭size(協(xié)議總長(zhǎng)度)、Offset (協(xié)議版本號(hào)和協(xié)議號(hào))、Headsize (協(xié)議頭的總長(zhǎng)度)、flag(路由策略),ApiTtl (協(xié)議包的發(fā)送時(shí)間)、timeout (協(xié)議包的超時(shí)時(shí)間)、sid(序列號(hào)),size(消息體長(zhǎng)度)字段,封裝成協(xié)議包,將協(xié)議包寫入共享內(nèi)存。
- api通過socket發(fā)送請(qǐng)求給proxy。
- app epoll thread通過檢測(cè)api的可讀事件,接受請(qǐng)求。通過解析請(qǐng)求內(nèi)容,獲取請(qǐng)求協(xié)議包所在的共享內(nèi)存的偏移、請(qǐng)求協(xié)議包的長(zhǎng)度和api連接index加入到處理隊(duì)列。
- proxy client的io epoll thread通過檢測(cè)對(duì)端DPIO連接的可寫事件,從發(fā)送隊(duì)列中獲取請(qǐng)求包,將api的index加入到協(xié)議包的api index字段。
- proxy client的io epoll thread從共享內(nèi)存中讀取協(xié)議包,釋放由請(qǐng)求包中所標(biāo)識(shí)的內(nèi)存空間。
- proxy server的io epoll thread通過檢測(cè)對(duì)端DPIO的可讀事件,接受請(qǐng)求。
- proxy server的io epoll thread從共享內(nèi)存中申請(qǐng)空間,將proxy的index加入到協(xié)議包的proxy index字段。將請(qǐng)求內(nèi)存寫入到申請(qǐng)的空間中。
- proxy server的io epoll thread 將協(xié)議包在共享內(nèi)存的偏移和協(xié)議包的長(zhǎng)度加入的待處理隊(duì)列中。
- app epoll thread從待處理隊(duì)列中獲取請(qǐng)求包,將協(xié)議包轉(zhuǎn)發(fā)給相應(yīng)的api進(jìn)行處理。
- api通過檢測(cè)DPIO的可讀事件,解析請(qǐng)求內(nèi)容。
- api通過解析請(qǐng)求內(nèi)容,獲取請(qǐng)求協(xié)議包在共享內(nèi)存中的偏移和請(qǐng)求協(xié)議包的長(zhǎng)度。從共享內(nèi)存中讀取請(qǐng)求內(nèi)容,并釋放相應(yīng)空間。
- api將請(qǐng)求協(xié)議包返回給應(yīng)用層進(jìn)行處理。
- 應(yīng)用層將應(yīng)答包傳給api。
- Api從共享內(nèi)存中申請(qǐng)空間,將應(yīng)答包寫入到共享內(nèi)存中。
- Api將應(yīng)答包在共享內(nèi)存中的偏移和應(yīng)答包的大小寫入到共享內(nèi)存中。
- App epoll thread通過檢測(cè)可讀事件,將應(yīng)答包寫入到已處理隊(duì)列中。
- proxy server的Io epoll thread通過檢測(cè)對(duì)端的DPIO的可寫事件,將已處理隊(duì)列中獲取應(yīng)答包。
- proxy server的Io epoll thread從共享內(nèi)存中讀取應(yīng)答包。
- Proxy client的Io epoll thread檢測(cè)可讀事件,讀取應(yīng)答包。
- Proxy client的Io epoll thread通過解析應(yīng)答包,從共享內(nèi)存中申請(qǐng)空間,將應(yīng)答包寫入到申請(qǐng)的內(nèi)存中。
- Proxy client的Io epoll thread將應(yīng)答包移入到已處理隊(duì)列。
- App epoll thread通過檢測(cè)api的可寫事件,將已處理隊(duì)列中獲取應(yīng)答包。
- App epoll thread發(fā)送應(yīng)答包。
- Api通過檢測(cè)可讀事件,獲取應(yīng)答包,通過解析應(yīng)到包,獲取應(yīng)答包在共享內(nèi)存中的偏移和應(yīng)到的大小,從共享內(nèi)存中讀取應(yīng)到包。
- Api將應(yīng)答包返回給應(yīng)用端。(桂洪冠 陳運(yùn)文)。
發(fā)表在 數(shù)據(jù)挖掘? ? ? ? | 標(biāo)簽為 數(shù)據(jù)處理, 數(shù)據(jù)通訊? ? ? ? | 留下評(píng)論
在微信公眾號(hào)里使用LaTeX數(shù)學(xué)公式發(fā)表于 2015年11月17號(hào) 由 52nlp
因?yàn)橛型瑢W(xué)在微信后臺(tái)咨詢這個(gè)問題,所以這里簡(jiǎn)單記錄一下,其實(shí)自己之前也摸索了一些方法,不是太完美,目前所使用的這個(gè)方法算是折中后比較好的。 這段時(shí)間在鼓搗“NLPJob”這個(gè)公眾號(hào),特別是微信公眾號(hào)支持“原創(chuàng)聲明”后,就很樂意將52nlp上積攢的一些文章搬上去,但是逐漸會(huì)遇到一些數(shù)學(xué)公式的問題。目前在52nlp上用的是mathjax完美支持LaTeX數(shù)學(xué)公式展現(xiàn),但是微信公眾號(hào)的編輯器沒有這個(gè)支持,另外mathjax支持的公式形式不是圖片形式,所以不能直接將文章拷貝上去,但是如果是數(shù)學(xué)公式圖片,微信編輯器可以直接拷貝,所以最直接的想法就是將mathjax支持的LaTeX公式轉(zhuǎn)換為公式圖片保存在文章中,然后再全文拷貝到微信公眾號(hào)編輯器中。 其實(shí)在mathjax之前,網(wǎng)頁(yè)上的很多數(shù)學(xué)公式都是用這種折中的方式,包括很多wordpress數(shù)學(xué)公式插件,當(dāng)年我也因?yàn)?2nlp上的公式問題還自己動(dòng)手寫了一個(gè)小的wordpress插件,但是當(dāng)mathjax出現(xiàn)之后,之前的方案就顯得很一般了。所以就開始嘗試找一下支持img緩存的LaTeX公式插件,不過多數(shù)都不滿意或者有瑕疵,甚至自己又開始動(dòng)手修改代碼,然后blablabla….,最終發(fā)現(xiàn) quicklatex這個(gè)神器和它的wordpress插件QuickLaTeX,幾乎完美支持和兼容Mathjax所支持的LaTeX數(shù)學(xué)公式。方法很簡(jiǎn)單,只要在wordpress中安裝quicklatex,然后在文章的開頭添加一個(gè):[latexpage] ,然后文章中所有的latext公式都會(huì)轉(zhuǎn)換為圖片形式,類似昨天發(fā)出的rickjin的這篇文章:LDA數(shù)學(xué)八卦:神奇的Gamma函數(shù)(1)。當(dāng)然需要先在wordpress中完成編輯轉(zhuǎn)換,再全文拷貝到微信公眾號(hào)中,微信會(huì)自動(dòng)的將這些圖片上傳到它自己的圖片服務(wù)器上。不過依然希望微信公眾號(hào)編輯器能早日支持LaTeX公式編輯甚至Mathjax。
發(fā)表在 隨筆? ? ? ? | 標(biāo)簽為 latex公式, latex數(shù)學(xué)公式, MathJax, 微信, 微信latex, 微信公眾號(hào), 微信公眾號(hào)數(shù)學(xué)公式編輯器, 微信公式編輯器, 微信數(shù)學(xué)公式? ? ? ? | 2 條評(píng)論
斯坦福大學(xué)深度學(xué)習(xí)與自然語(yǔ)言處理第四講:詞窗口分類和神經(jīng)網(wǎng)絡(luò)發(fā)表于 2015年09月14號(hào) 由 52nlp
斯坦福大學(xué)在三月份開設(shè)了一門“深度學(xué)習(xí)與自然語(yǔ)言處理”的課程:CS224d: Deep Learning for Natural Language Processing,授課老師是青年才俊 Richard Socher,以下為相關(guān)的課程筆記。 第四講:詞窗口分類和神經(jīng)網(wǎng)絡(luò)(Word Window Classification and Neural Networks) 推薦閱讀材料:
- [UFLDL tutorial]
- [Learning Representations by Backpropogating Errors]
- 第四講Slides [slides]
- 第四講視頻 [video]
繼續(xù)閱讀 →
發(fā)表在 機(jī)器學(xué)習(xí), 深度學(xué)習(xí), 自然語(yǔ)言處理? ? ? ? | 標(biāo)簽為 Deep Learning, Deep Learning公開課, Deep NLP, DL, NER, Richard Socher, softmax, word vectors, word2vec, wordnet, 二元邏輯回歸, 人名識(shí)別, 公開課, 分類, 分類器, 前饋網(wǎng)絡(luò)記錄, 反向傳播算法, 命名實(shí)體識(shí)別, 回歸, 地名識(shí)別, 斯坦福大學(xué), 機(jī)器學(xué)習(xí), 梯度下降, 深度學(xué)習(xí), 深度學(xué)習(xí)與自然語(yǔ)言處理, 深度學(xué)習(xí)技術(shù), 深度學(xué)習(xí)模型, 神經(jīng)元, 神經(jīng)網(wǎng)絡(luò), 窗口向量, 窗口向量分類, 自然語(yǔ)義處理, 自然語(yǔ)言處理, 詞向量, 詞嵌入, 語(yǔ)義詞典, 邏輯回歸, 隨機(jī)梯度下降? ? ? ? | 3 條評(píng)論
出門問問宣布完成由Google投資的C輪融資,累計(jì)融資7500萬(wàn)美金發(fā)表于 2015年09月2號(hào) 由 52nlp
注:出門問問是我們的老朋友,創(chuàng)始人李志飛也是NLP和機(jī)器翻譯領(lǐng)域的大牛,今天出門問問拿到了Google的C輪融資,志飛兄第一時(shí)間和我分享了這條新聞,太牛了。 人工智能創(chuàng)業(yè)公司出門問問(Mobvoi),于近日完成了由Google投資的C輪融資,累計(jì)融資7500萬(wàn)美金。現(xiàn)有投資方包括紅杉資本、真格基金,SIG海納亞洲、圓美光電、及歌爾聲學(xué)。此輪投資Google并不控股,出門問問團(tuán)隊(duì)依舊有絕對(duì)控制權(quán)。 此次由Google投資的C輪融資,能夠保證出門問問在人工智能領(lǐng)域長(zhǎng)期持續(xù)深耕,專注核心技術(shù)上的進(jìn)一步研發(fā),在可穿戴、車載以及機(jī)器人領(lǐng)域拓展新的人機(jī)交互產(chǎn)品形態(tài),更深入地完善用戶體驗(yàn),在吸引全球頂尖技術(shù)與商務(wù)人才上更具優(yōu)勢(shì)。對(duì)于海外市場(chǎng)的擴(kuò)展,此次融資也將發(fā)揮非常重要的作用。 Google 企業(yè)發(fā)展部副總裁Don Harrison 說到選擇投資出門問問的原因:“出門問問研發(fā)了非常獨(dú)特自成體系的語(yǔ)音識(shí)別與自然語(yǔ)言處理技術(shù)。我們被他們的創(chuàng)新科技與發(fā)展?jié)摿Υ騽?dòng),所以我們很迅速地決定用投資的方式幫助他們?cè)谖磥?lái)快速成長(zhǎng)。” 紅杉資本全球執(zhí)行合伙人沈南鵬評(píng)價(jià):“出門問問一直處于高速的不斷創(chuàng)新過程中,從移動(dòng)app到硬件產(chǎn)品到語(yǔ)音搜索平臺(tái),不同形式的產(chǎn)品背后是團(tuán)隊(duì)長(zhǎng)期以來(lái)形成的強(qiáng)大技術(shù)核心,獲得Google的投資是對(duì)這種中國(guó)原創(chuàng)能力的最好肯定。我很高興Google這樣的巨頭看好出門問問,并和我們一起投入到這支高速創(chuàng)新的團(tuán)隊(duì)中。” 真格基金創(chuàng)始人徐小平說:“我第一次遇見谷歌科學(xué)家李志飛博士,是三年前。那時(shí)候,他的語(yǔ)音搜索創(chuàng)業(yè)計(jì)劃,真是一個(gè)“異想天開”的夢(mèng)。志飛相信自己的夢(mèng),相信自己的技術(shù),相信市場(chǎng)對(duì)這個(gè)技術(shù)產(chǎn)品的需求,歷經(jīng)萬(wàn)難,終于“搜索”到了屬于他自己的那片天空。志飛的創(chuàng)業(yè)歷程,是又一個(gè)中國(guó)好故事,會(huì)激勵(lì)更多人追求并實(shí)現(xiàn)自己的好夢(mèng)。” 志同道合是此次融資達(dá)成的最重要的原因。扎實(shí)做技術(shù)和產(chǎn)品,運(yùn)用科技的力量改變?nèi)藗兊娜粘I?#xff0c;是出門問問一直篤信的價(jià)值觀。 出門問問CEO 李志飛表示:“引入Google的投資,不僅意味Google對(duì)于我們技術(shù)的認(rèn)可,更是源于雙方持有共同的價(jià)值觀,通過對(duì)人工智能技術(shù)的極致追求,打造毫不妥協(xié)的用戶體驗(yàn)。” 與Google相似,出門問問也是信仰“工程師文化”的團(tuán)隊(duì),強(qiáng)大的研發(fā)團(tuán)隊(duì)由Google前科學(xué)家、人工智能專家領(lǐng)銜,團(tuán)隊(duì)成員來(lái)自哈佛、MIT、斯坦福、劍橋、清華等名校名企。 此次融資是中國(guó)人工智能創(chuàng)業(yè)公司首次獲得像Google這樣的國(guó)際技術(shù)巨頭的投資與認(rèn)可。這在某種程度上說明,在人工智能領(lǐng)域,中國(guó)的創(chuàng)業(yè)公司不容小覷。
繼續(xù)閱讀 → 應(yīng)用場(chǎng)景 智能問答機(jī)器人火得不行,開始研究深度學(xué)習(xí)在NLP領(lǐng)域的應(yīng)用已經(jīng)有一段時(shí)間,最近在用深度學(xué)習(xí)模型直接進(jìn)行QA系統(tǒng)的問答匹配。主流的還是CNN和LSTM,在網(wǎng)上沒有找到特別合適的可用的代碼,自己先寫了一個(gè)CNN的(theano),效果還行,跟論文中的結(jié)論是吻合的。目前已經(jīng)應(yīng)用到了我們的產(chǎn)品上。 原理 參看《Applying Deep Learning To Answer Selection: A Study And An Open Task》,文中比較了好幾種網(wǎng)絡(luò)結(jié)構(gòu),選擇了效果相對(duì)較好的其中一個(gè)來(lái)實(shí)現(xiàn),網(wǎng)絡(luò)描述如下: Q&A共用一個(gè)網(wǎng)絡(luò),網(wǎng)絡(luò)中包括HL,CNN,P+T和Cosine_Similarity,HL是一個(gè)g(W*X+b)的非線性變換,CNN就不說了,P是max_pooling,T是激活函數(shù)Tanh,最后的Cosine_Similarity表示將Q&A輸出的語(yǔ)義表示向量進(jìn)行相似度計(jì)算。 詳細(xì)描述下從輸入到輸出的矩陣變換過程:
- Qp:[batch_size, sequence_len],Qp是Q之前的一個(gè)表示(在上圖中沒有畫出)。所有句子需要截?cái)嗷騪adding到一個(gè)固定長(zhǎng)度(因?yàn)楹竺娴腃NN一般是處理固定長(zhǎng)度的矩陣),例如句子包含3個(gè)字ABC,我們選擇固定長(zhǎng)度sequence_len為100,則需要將這個(gè)句子padding成ABC<a><a>…<a>(100個(gè)字),其中的<a>就是添加的專門用于padding的無(wú)意義的符號(hào)。訓(xùn)練時(shí)都是做mini-batch的,所以這里是一個(gè)batch_size行的矩陣,每行是一個(gè)句子。
- Q:[batch_size, sequence_len, embedding_size]。句子中的每個(gè)字都需要轉(zhuǎn)換成對(duì)應(yīng)的字向量,字向量的維度大小是embedding_size,這樣Qp就從一個(gè)2維的矩陣變成了3維的Q
- HL層輸出:[batch_size, embedding_size, hl_size]。HL層:[embedding_size, hl_size],Q中的每個(gè)句子會(huì)通過和HL層的點(diǎn)積進(jìn)行變換,相當(dāng)于將每個(gè)字的字向量從embedding_size大小變換到hl_size大小。
- CNN+P+T輸出:[batch_size, num_filters_total]。CNN的filter大小是[filter_size, hl_size],列大小是hl_size,這個(gè)和字向量的大小是一樣的,所以對(duì)每個(gè)句子而言,每個(gè)filter出來(lái)的結(jié)果是一個(gè)列向量(而不是矩陣),列向量再取max-pooling就變成了一個(gè)數(shù)字,每個(gè)filter輸出一個(gè)數(shù)字,num_filters_total個(gè)filter出來(lái)的結(jié)果當(dāng)然就是[num_filters_total]大小的向量,這樣就得到了一個(gè)句子的語(yǔ)義表示向量。T就是在輸出結(jié)果上加上Tanh激活函數(shù)。
- Cosine_Similarity:[batch_size]。最后的一層并不是通常的分類或者回歸的方法,而是采用了計(jì)算兩個(gè)向量(Q&A)夾角的方法,下面是網(wǎng)絡(luò)損失函數(shù)。,m是需要設(shè)定的參數(shù)margin,VQ、VA+、VA-分別是問題、正向答案、負(fù)向答案對(duì)應(yīng)的語(yǔ)義表示向量。損失函數(shù)的意義就是:讓正向答案和問題之間的向量cosine值要大于負(fù)向答案和問題的向量cosine值,大多少,就是margin這個(gè)參數(shù)來(lái)定義的。cosine值越大,兩個(gè)向量越相近,所以通俗的說這個(gè)Loss就是要讓正向的答案和問題愈來(lái)愈相似,讓負(fù)向的答案和問題越來(lái)越不相似。
Test 1 0.4933 0.6189
Test 2 0.4606 0.5968
Dev 0.4700 0.6088 另外,原始的insuranceQA需要進(jìn)行一些處理才能在這個(gè)代碼上使用,具體參看github上的說明吧。 一些技巧
- 字向量和詞向量的效果相當(dāng)。所以優(yōu)先使用字向量,省去了分詞的麻煩,還能更好的避免未登錄詞的問題,何樂而不為。
- 字向量不是固定的,在訓(xùn)練中會(huì)更新。
- Dropout的使用對(duì)最高的準(zhǔn)確率沒有很大的影響,但是使用了Dropout的結(jié)果更穩(wěn)定,準(zhǔn)確率的波動(dòng)會(huì)更小,所以建議還是要使用Dropout的。不過Dropout也不易過度使用,比如Dropout的keep_prob概率如果設(shè)置到0.25,則模型收斂得更慢,訓(xùn)練時(shí)間長(zhǎng)很多,效果也有可能會(huì)更差,設(shè)置會(huì)差很多。我這版代碼使用的keep_prob為0.5,同時(shí)保證準(zhǔn)確率和訓(xùn)練時(shí)間。另外,Dropout只應(yīng)用到了max-pooling的結(jié)果上,其他地方?jīng)]有再使用了,過多的使用反而不好。
- 如何生成訓(xùn)練集。每個(gè)訓(xùn)練case需要一個(gè)問題+一個(gè)正向答案+一個(gè)負(fù)向答案,很明顯問題和正向答案都是有的,負(fù)向答案的生成方法就是隨機(jī)采樣,這樣就不需要涉及任何人工標(biāo)注工作了,可以很方便的應(yīng)用到大數(shù)據(jù)集上。
- HL層的效果不明顯,有很微量的提升。如果HL層的大小是200,字向量是100,則HL層相當(dāng)于將字向量再放大一倍,這個(gè)感覺沒有多少信息可利用的,還不如直接將字向量設(shè)置成200,還省去了HL這一層的變換。
- margin的值一般都設(shè)置得比較小。這里用的是0.05
- 如果將Cosine_similarity這一層換成分類或者回歸,印象中效果是不如Cosine_similarity的(具體數(shù)據(jù)忘了)
- num_filters越大并不是效果越好,基本到了一定程度就很難提升了,反而會(huì)降低訓(xùn)練速度。
- 同時(shí)也寫了tensorflow版本代碼,對(duì)比theano的,效果差不多。
- Adam和SGD兩種訓(xùn)練方法比較,Adam訓(xùn)練速度貌似會(huì)更快一些,效果基本也持平吧,沒有太細(xì)節(jié)的對(duì)比。不過同樣的網(wǎng)絡(luò)+SGD,theano好像訓(xùn)練要更快一些。
- Loss和Accuracy是比較重要的監(jiān)控參數(shù)。如果寫一個(gè)新的網(wǎng)絡(luò)的話,類似的指標(biāo)是很有必要的,可以在每個(gè)迭代中評(píng)估網(wǎng)絡(luò)是否正在收斂。因?yàn)檎{(diào)試比較麻煩,所以通過這些參數(shù)能評(píng)估你的網(wǎng)絡(luò)寫對(duì)沒,參數(shù)設(shè)置是否正確。
- 網(wǎng)絡(luò)的參數(shù)還是比較重要的,如果一些參數(shù)設(shè)置不合理,很有可能結(jié)果千差萬(wàn)別,記得最初用tensorflow實(shí)現(xiàn)的時(shí)候,應(yīng)該是dropout設(shè)置得太小,導(dǎo)致效果很差,很久才找到原因。所以調(diào)參和微調(diào)網(wǎng)絡(luò)還是需要一定的技巧和經(jīng)驗(yàn)的,做這版代碼的時(shí)候就經(jīng)歷了一段比較痛苦的調(diào)參過程,最開始還懷疑是網(wǎng)絡(luò)設(shè)計(jì)或是代碼有問題,最后總結(jié)應(yīng)該就是參數(shù)沒設(shè)置好。
發(fā)表在 機(jī)器學(xué)習(xí), 深度學(xué)習(xí), 自然語(yǔ)言處理, 問答系統(tǒng)? ? ? ? | 留下評(píng)論
達(dá)觀數(shù)據(jù)搜索引擎的Query自動(dòng)糾錯(cuò)技術(shù)和架構(gòu)詳解發(fā)表于 2016年04月27號(hào) 由 recommender
1 背景 如今,搜索引擎是人們的獲取信息最重要的方式之一,在搜索頁(yè)面小小的輸入框中,只需輸入幾個(gè)關(guān)鍵字,就能找到你感興趣問題的相關(guān)網(wǎng)頁(yè)。搜索巨頭Google,甚至已經(jīng)使Google這個(gè)創(chuàng)造出來(lái)的單詞成為動(dòng)詞,有問題Google一下就可以。在國(guó)內(nèi),百度也同樣成為一個(gè)動(dòng)詞。除了通用搜索需求外,很多垂直細(xì)分領(lǐng)域的搜索需求也很旺盛,比如電商網(wǎng)站的產(chǎn)品搜索,文學(xué)網(wǎng)站的小說搜索等。面對(duì)這些需求,達(dá)觀數(shù)據(jù)(www.datagrand.com)作為國(guó)內(nèi)提供中文云搜索服務(wù)的高科技公司,為合作伙伴提供高質(zhì)量的搜索技術(shù)服務(wù),并進(jìn)行搜索服務(wù)的統(tǒng)計(jì)分析等功能。(達(dá)觀數(shù)據(jù)聯(lián)合創(chuàng)始人高翔) 搜索引擎系統(tǒng)最基本最核心的功能是信息檢索,找到含有關(guān)鍵字的網(wǎng)頁(yè)或文檔,然后按照一定排序?qū)⒔Y(jié)果給出。在此基礎(chǔ)之上,搜索引擎能夠提供更多更復(fù)雜的功能來(lái)提升用戶體驗(yàn)。對(duì)于一個(gè)成熟的搜索引擎系統(tǒng),用戶看似簡(jiǎn)單的搜索過程,需要在系統(tǒng)中經(jīng)過多個(gè)環(huán)節(jié),多個(gè)模塊協(xié)同工作,才能提供一個(gè)讓人滿意的搜索結(jié)果。其中拼寫糾錯(cuò)(Error Correction,以下簡(jiǎn)稱EC)是用戶比較容易感知的一個(gè)功能,比如百度的糾錯(cuò)功能如下圖所示: 圖 1:百度糾錯(cuò)功能示例 EC其實(shí)是屬于Query Rewrite(以下簡(jiǎn)稱QR)模塊中的一個(gè)功能,QR模塊包括拼寫糾錯(cuò),同義改寫,關(guān)聯(lián)query等多個(gè)功能。QR模塊對(duì)于提升用戶體驗(yàn)有著巨大的幫助,對(duì)于搜索質(zhì)量不佳的query進(jìn)行改寫后能返回更好的搜索結(jié)果。QR模塊內(nèi)容較多,以下著重介紹EC功能。
繼續(xù)閱讀 →
發(fā)表在 自然語(yǔ)言處理? ? ? ? | 一條評(píng)論
非主流自然語(yǔ)言處理——遺忘算法系列(四):改進(jìn)TF-IDF權(quán)重公式發(fā)表于 2016年04月23號(hào) 由 老憨
一、前言
前文介紹了利用詞庫(kù)進(jìn)行分詞,本文介紹詞庫(kù)的另一個(gè)應(yīng)用:詞權(quán)重計(jì)算。
二、詞權(quán)重公式
1、公式的定義
定義如下公式,用以計(jì)算詞的權(quán)重:
2、公式的由來(lái)
在前文中,使用如下公式作為分詞的依據(jù):
任給一個(gè)句子或文章,通過對(duì)最佳分詞方案所對(duì)應(yīng)的公式進(jìn)行變換,可以得到:
按前面權(quán)重公式的定義,上面的公式可以理解為:一個(gè)句子出現(xiàn)的概率對(duì)數(shù)等于句子中各詞的權(quán)重之和。
公式兩邊同時(shí)取負(fù)號(hào)使權(quán)重是個(gè)正值。
三、與TF-IDF的關(guān)系
詞頻、逆文檔頻率(TF-IDF)在自然語(yǔ)言處理中,應(yīng)用十分廣泛,也是提取關(guān)鍵詞的常用方法,公式如下:
從形式上看,該公式與我們定義的權(quán)重公式很像,而且用途也近似,那么它們之間有沒有關(guān)系呢?
答案是肯定的。
我們知道,IDF是按文檔為單位統(tǒng)計(jì)的,無(wú)論文檔的長(zhǎng)短,統(tǒng)一都按一篇計(jì)數(shù),感覺這個(gè)統(tǒng)計(jì)的粒度還是比較粗的,有沒有辦法將文本的長(zhǎng)短,這個(gè)明顯相關(guān)的因素也考慮進(jìn)去呢,讓這個(gè)公式更加精細(xì)些?
答案也是肯定的。
文章是由詞鋪排而成,長(zhǎng)短不同,所包含的詞的個(gè)數(shù)也就有多有少。
我們可以考慮在統(tǒng)計(jì)文檔個(gè)數(shù)時(shí),為每個(gè)文檔引入包含多少個(gè)詞這樣一個(gè)權(quán)重,以區(qū)別長(zhǎng)短不同的文檔,沿著這個(gè)思路,改寫一下IDF公式:
我們用所有文檔中的詞做成詞庫(kù),那么上式中:
綜合上面的推導(dǎo)過程,我們知道,本文所定義的詞權(quán)重公式,本質(zhì)上是tf-idf為長(zhǎng)短文檔引入權(quán)重的加強(qiáng)版,而該公式的應(yīng)用也極為簡(jiǎn)單,只需要從詞庫(kù)中讀取該詞詞頻、詞庫(kù)總詞頻即可。
時(shí)間復(fù)雜度最快可達(dá)O(1)級(jí),比如詞庫(kù)以Hash表存儲(chǔ)。
關(guān)于TF-IDF更完整的介紹及主流用法,建議參看阮一峰老師的博文《TF-IDF與余弦相似性的應(yīng)用(一):自動(dòng)提取關(guān)鍵詞》。
四、公式應(yīng)用
詞權(quán)重用途很廣,幾乎詞袋類算法中,都可以考慮使用。常見的應(yīng)用有:
1、關(guān)鍵詞抽取、自動(dòng)標(biāo)簽生成
作法都很簡(jiǎn)單,分詞后排除停用詞,然后按權(quán)重值排序,取排在前面的若干個(gè)詞即可。
2、文本摘要
完整的文本摘要功能實(shí)現(xiàn)很復(fù)雜也很困難,這里所指,僅是簡(jiǎn)單應(yīng)用:由前面推導(dǎo)過程中可知,句子的權(quán)重等于分詞結(jié)果各詞的權(quán)重之和,從而獲得句子的權(quán)重排序。
3、相似度計(jì)算
相似度計(jì)算,我們將在下一篇文中單獨(dú)介紹。
五、演示程序
在演示程序顯示詞庫(kù)結(jié)果時(shí),是按本文所介紹的權(quán)重公式排序的。
演示程序與詞庫(kù)生成的相同:
下載地址:遺忘算法(詞庫(kù)生成、分詞、詞權(quán)重)演示程序.rar
特別感謝:王斌老師指出,本文公式實(shí)質(zhì)上是TF-ICF。
六、聯(lián)系方式: 1、QQ:老憨 244589712
2、郵箱:gzdmcaoyc@163.com
發(fā)表在 自然語(yǔ)言處理? ? ? ? | 標(biāo)簽為 TF-IDF, 自然語(yǔ)言處理, 遺忘算法? ? ? ? | 留下評(píng)論
非主流自然語(yǔ)言處理——遺忘算法系列(三):分詞發(fā)表于 2016年04月23號(hào) 由 老憨
一、前言
前面介紹了詞庫(kù)的自動(dòng)生成的方法,本文介紹如何利用前文所生成的詞庫(kù)進(jìn)行分詞。
二、分詞的原理
分詞的原理,可以參看吳軍老師《數(shù)學(xué)之美》中的相關(guān)章節(jié),這里摘取Google黑板報(bào)版本中的部分:
從上文中,可以知道分詞的任務(wù)目標(biāo):給出一個(gè)句子S,找到一種分詞方案,使下面公式中的P(S)最大:
不過,聯(lián)合概率求起來(lái)很困難,這種情況我們通常作馬爾可夫假設(shè),以簡(jiǎn)化問題,即:任意一個(gè)詞wi的出現(xiàn)概率只同它前面的詞 wi-1 有關(guān)。
關(guān)于這個(gè)問題,吳軍老師講的深入淺出,整段摘錄如下:
另外,如果我們假設(shè)一個(gè)詞與其他詞都不相關(guān),即相互獨(dú)立時(shí),此時(shí)公式最簡(jiǎn),如下:
這個(gè)假設(shè)分詞無(wú)關(guān)的公式,也是本文所介紹的分詞算法所使用的。
三、算法分析
問:假設(shè)分詞結(jié)果中各詞相互無(wú)關(guān)是否可行?
答:可行,前提是使用遺忘算法系列(二)中所述方法生成的詞庫(kù),理由如下:
分析ICTCLAS廣受好評(píng)的分詞系統(tǒng)的免費(fèi)版源碼,可以發(fā)現(xiàn),在這套由張華平、劉群兩位博士所開發(fā)分詞系統(tǒng)的算法中假設(shè)了:分詞結(jié)果中詞只與其前面的一個(gè)詞有關(guān)。
回憶我們?cè)~庫(kù)生成的過程可以知道,如果相鄰的兩個(gè)詞緊密相關(guān),那么這兩個(gè)詞會(huì)連為一個(gè)粗粒度的詞被加入詞庫(kù)中,如:除“清華”、“大學(xué)”會(huì)是單獨(dú)的詞外,“清華大學(xué)”也會(huì)是一個(gè)詞,分詞過程中具體選用那種,則由它們的概率來(lái)決定。
也就是說,我們?cè)谏稍~庫(kù)的同時(shí),已經(jīng)隱含的完成了相關(guān)性訓(xùn)練。
關(guān)于ICTCLAS源碼分析的文章,可以參看呂震宇博文:《天書般的ICTCLAS分詞系統(tǒng)代碼》。
問:如何實(shí)現(xiàn)分詞?
答:基于前文生成的詞庫(kù),我們可以假設(shè)分詞結(jié)果相互無(wú)關(guān),分詞過程就比較簡(jiǎn)單,使用下面的步驟可以O(shè)(N)級(jí)時(shí)間,單遍掃描完成分詞:
逐字掃描句子,從詞庫(kù)中查出限定字長(zhǎng)內(nèi),以該字結(jié)尾的所有詞,分別計(jì)算其中的詞與該詞之前各詞的概率乘積,取結(jié)果值最大的詞,分別緩存下當(dāng)前字所在位置的最大概率積,以及對(duì)應(yīng)的分詞結(jié)果。
重復(fù)上面的步驟,直到句子掃描完畢,最后一字位置所得到即為整句分詞結(jié)果。
3、算法特點(diǎn)
3.1、無(wú)監(jiān)督學(xué)習(xí);
3.2、O(N)級(jí)時(shí)間復(fù)雜度;
3.3、詞庫(kù)自維護(hù),程序可無(wú)需人工參與的情況下,自行發(fā)現(xiàn)并添加新詞、調(diào)整詞頻、清理錯(cuò)詞、移除生僻詞,保持詞典大小適當(dāng);
3.4、領(lǐng)域自適應(yīng):領(lǐng)域變化時(shí),詞條、詞頻自適應(yīng)的隨之調(diào)整;
3.5、支持多語(yǔ)種混合分詞。
四、演示程序下載
演示程序與詞庫(kù)生成的相同:
下載地址:遺忘算法(詞庫(kù)生成、分詞、詞權(quán)重)演示程序.rar
五、聯(lián)系方式:
1、QQ:老憨 244589712
2、郵箱:gzdmcaoyc@163.com
發(fā)表在 自然語(yǔ)言處理? ? ? ? | 標(biāo)簽為 無(wú)監(jiān)督分詞, 自然語(yǔ)言處理, 自適應(yīng)詞典, 跨語(yǔ)種, 遺忘算法? ? ? ? | 13 條評(píng)論
非主流自然語(yǔ)言處理——遺忘算法系列(二):大規(guī)模語(yǔ)料詞庫(kù)生成發(fā)表于 2016年04月23號(hào) 由 老憨
一、前言
本文介紹利用牛頓冷卻模擬遺忘降噪,從大規(guī)模文本中無(wú)監(jiān)督生成詞庫(kù)的方法。
二、詞庫(kù)生成
算法分析,先來(lái)考慮以下幾個(gè)問題
問:目標(biāo)是從文本中抽取詞語(yǔ),是否可以考慮使用遺忘的方法呢?
答:可以,詞語(yǔ)具備以相對(duì)穩(wěn)定周期重復(fù)再現(xiàn)的特征,所以可以考慮使用遺忘的方法。這意味著,我們只需要找一種適當(dāng)?shù)姆椒?#xff0c;將句子劃分成若干子串,這些子串即為“候選詞”。在遺忘的作用下,如果“候選詞”會(huì)周期性重現(xiàn),那么它就會(huì)被保留在詞庫(kù)中,相反如果只是偶爾或隨機(jī)出現(xiàn),則會(huì)逐漸被遺忘掉。
問:那用什么方法來(lái)把句子劃分成子串比較合適呢?
答:考察句中任意相鄰的兩個(gè)字,相鄰兩字有兩種可能:要么同屬于一個(gè)共同的詞,要么是兩個(gè)詞的邊界。我們都會(huì)有這樣一種感覺,屬于同一個(gè)詞的相鄰兩字的“關(guān)系”肯定比屬于不同詞的相鄰兩字的“關(guān)系”要強(qiáng)烈一些。
數(shù)學(xué)中并不缺少刻劃“關(guān)系”的模型,這里我們選擇公式簡(jiǎn)單并且參數(shù)容易統(tǒng)計(jì)的一種:如果兩個(gè)字共現(xiàn)的概率大于它們隨機(jī)排列在一起的概率,那么我們認(rèn)為這兩個(gè)字有關(guān),反之則無(wú)關(guān)。
如果相鄰兩字無(wú)關(guān),就可以將兩字中間斷開。逐字掃描句子,如果相鄰兩字滿足下面的公式,則將兩字?jǐn)嚅_,如此可將句子切成若干子串,從而獲得“候選詞”集,判斷公式如下圖所示:
公式中所需的參數(shù)可以通過統(tǒng)計(jì)獲得:遍歷一次語(yǔ)料,即可獲得公式中所需的“單字的頻數(shù)”、“相鄰兩字共現(xiàn)的頻數(shù)”,以及“所有單字的頻數(shù)總和”。
問:如何計(jì)算遺忘剩余量?
答:使用牛頓冷卻公式,各參數(shù)在遺忘算法中的含義,如下圖所示:
牛頓冷卻公式的詳情說明,可以參考阮一峰老師的博文《基于用戶投票的排名算法(四):牛頓冷卻定律》。
問:參數(shù)中時(shí)間是用現(xiàn)實(shí)時(shí)間嗎,遺忘系數(shù)取多少合適呢?
答:a、關(guān)于時(shí)間:
可以使用現(xiàn)實(shí)時(shí)間,遺忘的發(fā)生與現(xiàn)實(shí)同步。
也可以考慮用處理語(yǔ)料中對(duì)象的數(shù)量來(lái)代替,這樣僅當(dāng)有數(shù)據(jù)處理時(shí),才會(huì)發(fā)生遺忘。比如按處理的字?jǐn)?shù)為計(jì)時(shí)單位,人閱讀的速度約每秒5至7個(gè)字,當(dāng)然每個(gè)人的閱讀速度并不相同,這里的參數(shù)值要求并不需要特別嚴(yán)格。
b、遺忘系數(shù)可以參考艾賓浩斯曲線中的實(shí)驗(yàn)值,如下圖(來(lái)自互聯(lián)網(wǎng))
我們?nèi)?天記憶剩余量約為25.4%這個(gè)值,按每秒閱讀7個(gè)字,將其代入牛頓冷卻公式可以求得遺忘系數(shù):
注意艾賓浩斯曲線中的每組數(shù)值代入公式,所得的系數(shù)并不相同,會(huì)對(duì)詞庫(kù)的最大有效容量產(chǎn)生影響。
二、該算法生成詞庫(kù)的特點(diǎn)
3.1、無(wú)監(jiān)督學(xué)習(xí)
3.2、O(N)級(jí)時(shí)間復(fù)雜度
3.3、訓(xùn)練、執(zhí)行為同一過程,可無(wú)縫處理流式數(shù)據(jù)
3.4、未登錄詞、新詞、登錄詞沒有區(qū)別
3.5、領(lǐng)域自適應(yīng):領(lǐng)域變化時(shí),詞條、詞頻自適應(yīng)的隨之調(diào)整
3.6、算法中僅使用到頻數(shù)這一語(yǔ)言的共性特征,無(wú)需對(duì)任何字符做特別處理,因此原理上跨語(yǔ)種。
三、詞庫(kù)成熟度
由于每個(gè)詞都具備一個(gè)相對(duì)穩(wěn)定的重現(xiàn)周期,不難證明,當(dāng)訓(xùn)練語(yǔ)料達(dá)到一定規(guī)模后,在遺忘的作用下,每個(gè)詞的詞頻在衰減和累加會(huì)達(dá)到平衡,也即衰減的速度與增加的速度基本一致。成熟的詞庫(kù),詞頻的波動(dòng)相對(duì)會(huì)比較小,利用這個(gè)特征,我們可以衡量詞庫(kù)的成熟程度。
四、源碼(C#)、演示程序下載
使用內(nèi)附語(yǔ)料(在“可直接運(yùn)行的演示程序”下可以找到)生成詞庫(kù)效果如下:
下載地址:遺忘算法(詞庫(kù)生成、分詞、詞權(quán)重)演示程序.rar
五、聯(lián)系方式:
1、QQ:老憨 244589712
2、郵箱:gzdmcaoyc@163.com
發(fā)表在 自然語(yǔ)言處理? ? ? ? | 標(biāo)簽為 未登錄詞發(fā)現(xiàn), 牛頓冷卻公式, 自然語(yǔ)言處理, 詞庫(kù)生成, 遺忘算法? ? ? ? | 4 條評(píng)論
非主流自然語(yǔ)言處理——遺忘算法系列(一):算法概述發(fā)表于 2016年04月19號(hào) 由 老憨
一、前言
這里“遺忘”不是筆誤,這個(gè)系列要講的“遺忘算法”,是以牛頓冷卻公式模擬遺忘為基礎(chǔ)、用于自然語(yǔ)言處理(NLP)的一類方法的統(tǒng)稱,而不是大名鼎鼎的“遺傳算法”!
在“遺忘”這條非主流自然語(yǔ)言處理路上,不知不覺已經(jīng)摸索了三年有余,遺忘算法也算略成體系,雖然仍覺時(shí)機(jī)未到,還是決定先停一下,將腦中所積梳理成文,交由NLP的同好們點(diǎn)評(píng)交流。
二、遺忘算法原理
能夠從未知的事物中發(fā)現(xiàn)關(guān)聯(lián)、提煉規(guī)律才是真正智能的標(biāo)志,而遺忘正是使智能生物具備這一能力的工具,也是適應(yīng)變化的利器,“遺忘”這一頗具負(fù)能量特征的家伙是如何實(shí)現(xiàn)發(fā)現(xiàn)規(guī)律這么個(gè)神奇魔法的呢?
讓我們從巴甫洛夫的狗說起:狗聽到鈴聲就知道開飯了。
鈴聲和開飯之間并不存在必然的聯(lián)系,我們知道之所以狗會(huì)將兩者聯(lián)系在一起,是因?yàn)榘透β宸蛴幸獾膶烧咭淮未卧诠纺莾褐貜?fù)共現(xiàn)。所以,重復(fù)是建立關(guān)聯(lián)的必要條件。
我們還可以想像,狗在進(jìn)食的時(shí)候聽到的聲音可能還有鳥叫聲、風(fēng)吹樹葉的沙沙聲,為什么這些同樣具備重復(fù)特征聲音卻沒有和開飯建立關(guān)系呢?
細(xì)分辨我們不難想到:鈴聲和開飯之間不僅重復(fù)共現(xiàn),而且這種重復(fù)共現(xiàn)還具備一個(gè)相對(duì)穩(wěn)定的周期,而其他的那些聲音和開飯的共現(xiàn)則是隨機(jī)的。
那么遺忘又在其中如何起作用的呢?
1、所有事物一視同仁的按相同的規(guī)律進(jìn)行遺忘; 2、偶爾或隨機(jī)出現(xiàn)的事物因此會(huì)隨時(shí)間而逐漸淡忘; 3、而具有相對(duì)穩(wěn)定周期重復(fù)再現(xiàn)的事物,雖然也按同樣的規(guī)律遺忘,但由于周期性的得到補(bǔ)充,從而可以動(dòng)態(tài)的保留在記憶中。
在自然語(yǔ)言處理中,很多對(duì)象比如:詞、詞與詞的關(guān)聯(lián)、模板等,都具備按相對(duì)穩(wěn)定重現(xiàn)的特征,因此非常適用遺忘來(lái)處理。
三、牛頓冷卻公式
那么,我們用什么來(lái)模擬遺忘呢?
提到遺忘,很自然的會(huì)想到艾賓浩斯遺忘曲線,如果這條曲線有個(gè)函數(shù)形式,那么無(wú)疑是模擬遺忘的最佳建模選擇。遺憾的是它只是一組離散的實(shí)驗(yàn)數(shù)據(jù),但至少讓我們知道,遺忘是呈指數(shù)衰減的。
另外有一個(gè)事實(shí),有的人記性好些,有的人記性則差些,不同人之間的遺忘曲線是不同的,但這并不會(huì)從本質(zhì)上影響不同人對(duì)事物的認(rèn)知,也就是說,如果存在一個(gè)遺忘函數(shù),它首先是指數(shù)形式的,其次在實(shí)用過程中,該函數(shù)的系數(shù)并不那么重要。
這提醒我們,可以嘗試用一些指數(shù)形式的函數(shù)來(lái)代替遺忘曲線,然后用實(shí)踐去檢驗(yàn),如果能滿足工程實(shí)用就很好,這樣的函數(shù)公式并不難找,比如:退火算法、半衰期公式等。
有次在阮一峰老師的博客上看關(guān)于帖子熱度排行的算法時(shí),其中一種方法使用的是牛頓冷卻定律,遺忘與冷卻有著相似的過程、簡(jiǎn)潔優(yōu)美的函數(shù)形式、而且參數(shù)只與時(shí)間相關(guān),這些都讓我本能想到,它就是我想要的“遺忘公式”。
在實(shí)踐檢驗(yàn)中,牛頓冷卻公式,確實(shí)有效好用,當(dāng)然,不排除有其他更佳公式。
四、已經(jīng)實(shí)現(xiàn)的功能
如果把自然語(yǔ)言處理比作從礦砂中淘金子,那么業(yè)界主流算法的方向是從礦砂中將金砂挑出來(lái),而遺忘算法的方向則是將砂石篩出去,雖然殊途但同歸,所處理的任務(wù)也都是主流中所常見。
本系列文章將逐一講解遺忘算法如何以O(shè)(N)級(jí)算法性能實(shí)現(xiàn):
1、大規(guī)模語(yǔ)料詞庫(kù)生成
1.1、跨語(yǔ)種,算法語(yǔ)種無(wú)關(guān),比如:中日韓、少數(shù)民族等語(yǔ)種均可支持
1.2、未登錄詞發(fā)現(xiàn)(只要符合按相對(duì)穩(wěn)定周期性重現(xiàn)的詞匯都會(huì)被收錄)
1.3、領(lǐng)域自適應(yīng),切換不同領(lǐng)域的訓(xùn)練文本時(shí),詞條、詞頻自行調(diào)整
1.4、詞典成熟度:可以知道當(dāng)前語(yǔ)料訓(xùn)練出的詞典的成熟程度
2、分詞(基于上述詞庫(kù)技術(shù))
2.1、成長(zhǎng)性分詞:用的越多,切的越準(zhǔn)
2.2、詞典自維護(hù):切詞的同時(shí)動(dòng)態(tài)維護(hù)詞庫(kù)的詞條、詞頻、登錄新詞
2.2、領(lǐng)域自適應(yīng)、跨語(yǔ)種(繼承自詞庫(kù)特性)
3、詞權(quán)值計(jì)算
3.1、關(guān)鍵詞提取、自動(dòng)標(biāo)簽
3.2、文章摘要
3.3、長(zhǎng)、短文本相似度計(jì)算
3.4、主題詞集
五、聯(lián)系方式:
1、QQ:老憨 244589712
2、郵箱:gzdmcaoyc@163.com
發(fā)表在 自然語(yǔ)言處理? ? ? ? | 標(biāo)簽為 牛頓冷卻公式, 自然語(yǔ)言處理, 遺忘算法? ? ? ? | 留下評(píng)論
達(dá)觀數(shù)據(jù)對(duì)于大規(guī)模消息數(shù)據(jù)處理的系統(tǒng)架構(gòu)發(fā)表于 2015年12月2號(hào) 由 recommender
達(dá)觀數(shù)據(jù)是為企業(yè)提供大數(shù)據(jù)處理、個(gè)性化推薦系統(tǒng)服務(wù)的知名公司,在應(yīng)對(duì)海量數(shù)據(jù)處理時(shí),積累了大量實(shí)戰(zhàn)經(jīng)驗(yàn)。其中達(dá)觀數(shù)據(jù)在面對(duì)大量的數(shù)據(jù)交互和消息處理時(shí),使用了稱為DPIO的設(shè)計(jì)思路進(jìn)行快速、穩(wěn)定、可靠的消息數(shù)據(jù)傳遞機(jī)制,本文分享了達(dá)觀數(shù)據(jù)在應(yīng)對(duì)大規(guī)模消息數(shù)據(jù)處理時(shí)所開發(fā)的通訊中間件DPIO的設(shè)計(jì)思路和處理經(jīng)驗(yàn)(達(dá)觀數(shù)據(jù)架構(gòu)師 桂洪冠) 一、數(shù)據(jù)通訊進(jìn)程模型 在設(shè)計(jì)達(dá)觀數(shù)據(jù)的消息數(shù)據(jù)處理機(jī)制時(shí),首先充分借鑒了ZeroMQ和ProxyIO的設(shè)計(jì)思想。ZeroMQ提供了一種底層的網(wǎng)絡(luò)通訊框架,提供了基本的RoundRobin負(fù)載均衡算法,性能優(yōu)越,而ProxyIO是雅虎的網(wǎng)絡(luò)通訊中間件,承載了雅虎內(nèi)部大量計(jì)算節(jié)點(diǎn)間的實(shí)時(shí)消息處理。但是ZeroMQ沒有實(shí)現(xiàn)基于節(jié)點(diǎn)健康狀態(tài)的最快響應(yīng)算法,并且ZeroMQ和ProxyIO對(duì)節(jié)點(diǎn)的狀態(tài)管理,連接管理,負(fù)載均衡調(diào)度等也需要各應(yīng)用自己來(lái)實(shí)現(xiàn)。 達(dá)觀科技在借鑒兩種設(shè)計(jì)思路的基礎(chǔ)上,從進(jìn)程模型、服務(wù)架構(gòu)、線程模型、通訊協(xié)議、負(fù)載均衡、雪崩處理、連接管理、消息流程、狀態(tài)監(jiān)控等各方面進(jìn)行了開拓,開發(fā)了DPIO(達(dá)觀ProxyIO的簡(jiǎn)寫,下文統(tǒng)稱DPIO),確保系統(tǒng)高性能處理相關(guān)數(shù)據(jù)。 在DPIO的整個(gè)通訊框架體系中,采用集中管理、統(tǒng)一監(jiān)控策略管理節(jié)點(diǎn)提供服務(wù),節(jié)點(diǎn)間直接進(jìn)行交互,并不依賴統(tǒng)一的管理節(jié)點(diǎn)(桂洪冠)。幾種節(jié)點(diǎn)間通過http或者tcp協(xié)議進(jìn)行消息傳遞、配置更新、狀態(tài)跟蹤等通訊行為。集群將不同應(yīng)用的服務(wù)抽象成組的概念,相同應(yīng)用的服務(wù)啟動(dòng)時(shí)加入的相同的組。每個(gè)通訊組有兩種端點(diǎn)client和server。應(yīng)用啟動(dòng)時(shí)通過配置決定自己是client端點(diǎn)還是server端點(diǎn),在一個(gè)組內(nèi),每個(gè)應(yīng)用只能有一個(gè)身份;不同組沒要求。
- 監(jiān)控節(jié)點(diǎn),顧名思義即提供系統(tǒng)監(jiān)控服務(wù)的,用來(lái)給系統(tǒng)管理員查看集群中節(jié)點(diǎn)的服務(wù)狀態(tài)及負(fù)載情況,系統(tǒng)對(duì)監(jiān)控節(jié)點(diǎn)并無(wú)實(shí)時(shí)性及穩(wěn)定性要求,在本模型中是單點(diǎn)系統(tǒng)。
- 在上圖的架構(gòu)中把管理節(jié)點(diǎn)設(shè)計(jì)成雙master結(jié)構(gòu),參考zookeeper集群管理思路,多個(gè)master通過一定算法分別服務(wù)于集群中一部分節(jié)點(diǎn),相對(duì)于另外的服務(wù)節(jié)點(diǎn)則為備份管理節(jié)點(diǎn),他們通過內(nèi)部通訊同步數(shù)據(jù),每個(gè)管理節(jié)點(diǎn)都有一個(gè)web服務(wù)為監(jiān)控節(jié)點(diǎn)提供服務(wù)節(jié)點(diǎn)的狀態(tài)數(shù)據(jù)。
- 服務(wù)節(jié)點(diǎn)即是下文要談的代理服務(wù),根據(jù)服務(wù)對(duì)象不同分為應(yīng)用端代理和服務(wù)端代理。集群中的服務(wù)節(jié)點(diǎn)根據(jù)提供服務(wù)的不同分為多個(gè)組,每個(gè)代理啟動(dòng)都需要注冊(cè)到相應(yīng)的組中,然后提供服務(wù)。
- clientHost和serverHost間使用socketapi進(jìn)行tcp通訊,相同主機(jī)內(nèi)部的多個(gè)進(jìn)程間使用共享內(nèi)存?zhèn)鬟f消息內(nèi)容,client和clientproxy、server和serverproxy之間通過domain socket進(jìn)行事件通知;在socket連接的一方收到對(duì)端的事件通知后,從共享內(nèi)存中獲取消息內(nèi)容。
- clientproxy/serverproxy啟動(dòng)時(shí)綁定到host的一個(gè)端口響應(yīng)應(yīng)用api的連接,在連接到來(lái)時(shí)將該api對(duì)應(yīng)的共享內(nèi)存初始化,將偏移地址告訴給應(yīng)用。clientproxy和serverproxy中分別維護(hù)了一個(gè)到應(yīng)用api的連接句柄隊(duì)列,并通過io復(fù)用技術(shù)監(jiān)聽這些連接上的讀寫事件。
- serverproxy在啟動(dòng)時(shí)通過socket綁定到服務(wù)器的一個(gè)端口,并以server身份注冊(cè)到一個(gè)group監(jiān)聽該端口的連接事件,當(dāng)事件到達(dá)時(shí)回調(diào)注冊(cè)的事件處理函數(shù)響應(yīng)事件。
- 在serverproxy內(nèi)部通過不同的thread分別管理從本地應(yīng)用建立的連接和從clientproxy建立的連接。thread的個(gè)數(shù)在啟動(dòng)proxy時(shí)由用戶指定,默認(rèn)是分別1個(gè)。每個(gè)clientproxy啟動(dòng)時(shí)會(huì)以client身份注冊(cè)到一個(gè)group,并建立到同組的所有serverproxy的連接,clientproxy內(nèi)部包含了連接的自管理能力及failover的處理(將在下面連接管理部分描述)。 DPIO實(shí)現(xiàn)了負(fù)載均衡,路由選擇和透明代理的功能。
- Api與DPIO通信協(xié)議
- 共享內(nèi)存存儲(chǔ)消息格式
| 字段 | 含義 | 長(zhǎng)度 |
| protocol len | 協(xié)議包的總長(zhǎng)度 | 4bytes |
| protocol head len | 協(xié)議頭的長(zhǎng)度 | 1byte |
| Version_protocol_id | 協(xié)議的版本號(hào)和協(xié)議號(hào) | 1byte |
| Flag | 消息標(biāo)志,標(biāo)志路由模式,是否記錄來(lái)源地址,有二級(jí)路由,所以這個(gè)字段一定要Eg,末位表示要記錄src,倒數(shù)第二位表示按roundrobin路由,倒數(shù)第3位表示按消息頭路由,xxx | 1byte |
| Proxy | 來(lái)源/目的 proxy | 2bytes |
| Api | 來(lái)源/目的 api | 2bytes |
| ApiTtl | 協(xié)議包的發(fā)送時(shí)間 | 2Bytes |
| ClientTtl | 消息存活的時(shí)間,后面添加,增加路由策略,選擇app_server | 2Bytes |
| ClientProcessTime | 客戶端處理所用時(shí)間 | 2Bytes |
| ServerTtl | 消息存活的時(shí)間,后面添加,增加路由策略,選擇app_client | 2Bytes |
| timeout | 協(xié)議包的超時(shí)時(shí)間 | 2 byte |
| Sid | 消息序列號(hào) | 4bytes |
| protocol body len | Body長(zhǎng)度 | 4bytes |
| protocol body | 消息體 | Size |
- 請(qǐng)求協(xié)議包
| 字段 | 含義 | 長(zhǎng)度 |
| protocol head len | 協(xié)議頭的長(zhǎng)度 | 1byte |
| Version_protocol_id | 協(xié)議的版本號(hào)和協(xié)議號(hào) | 1byte |
| Flag | 消息標(biāo)志,標(biāo)志路由模式,是否記錄來(lái)源地址,有二級(jí)路由,所以這個(gè)字段一定要Eg,末位表示要記錄src,倒數(shù)第二位表示按roundrobin路由,倒數(shù)第3位表示按消息頭路由,xxx | 1byte |
| ApiTtl | 協(xié)議包的發(fā)送時(shí)間 | 2bytes |
| Timeout | 協(xié)議包的超時(shí)時(shí)間 | 2bytes |
| Api | 來(lái)源/目的 api | 2bytes |
| Sid | 消息序列號(hào) | 4byte |
| Begin_offset | 協(xié)議包的起始偏移 | 4bytes |
| len | 協(xié)議包長(zhǎng)度 | 4bytes |
- 響應(yīng)協(xié)議包
| 字段 | 含義 | 長(zhǎng)度 |
| protocol head len | 協(xié)議頭的長(zhǎng)度 | 1byte |
| Version_protocol_id | 協(xié)議的版本號(hào)和協(xié)議號(hào) | 1byte |
| Flag | 消息標(biāo)志,標(biāo)志路由模式,是否記錄來(lái)源地址,有二級(jí)路由,所以這個(gè)字段一定要Eg,末位表示要記錄src,倒數(shù)第二位表示按roundrobin路由,倒數(shù)第3位表示按消息頭路由,xxx | 1byte |
| Result | 處理結(jié)果 | 1byte |
| sid | 消息序列號(hào) | 4bytes |
| begin_offset | 協(xié)議包的起始偏移 | 4bytes |
| len | 協(xié)議包長(zhǎng)度 | 4bytes |
- Proxy與監(jiān)控中心的監(jiān)控信息
- 請(qǐng)求協(xié)議包
| 字段 | 含義 | 長(zhǎng)度 |
| protocol len | 協(xié)議包的總長(zhǎng)度 | 4bytes |
| protocol head len | 協(xié)議頭的長(zhǎng)度 | 4bytes |
| Version | 協(xié)議的版本號(hào) | 4bytes |
| protocol id | 協(xié)議的協(xié)議號(hào) | 4bytess |
| status_version | 當(dāng)前狀態(tài)版本 | 4bytes |
| Proxy_identify_len | 該proxy標(biāo)識(shí)長(zhǎng)度 | 4bytess |
| Proxy_identify | 該proxy 標(biāo)識(shí) | 4bytes |
| protocol body | 消息體 | Size |
- 應(yīng)答包
| 字段 | 含義 | 長(zhǎng)度 |
| protocol len | 協(xié)議包的總長(zhǎng)度 | 4bytes |
| protocol head len | 協(xié)議頭的長(zhǎng)度 | 4bytes |
| Version | 協(xié)議的版本號(hào) | 4bytes |
| protocol id | 協(xié)議的協(xié)議號(hào) | 4bytess |
| protocol body len | Body長(zhǎng)度 | 4bytes |
| protocol body | 消息體 | Size |
- apiclient通過調(diào)用api的接口,將消息傳給
- api接受消息體,從共享內(nèi)存中申請(qǐng)內(nèi)存,填寫消息頭size(協(xié)議總長(zhǎng)度)、Offset (協(xié)議版本號(hào)和協(xié)議號(hào))、Headsize (協(xié)議頭的總長(zhǎng)度)、flag(路由策略),ApiTtl (協(xié)議包的發(fā)送時(shí)間)、timeout (協(xié)議包的超時(shí)時(shí)間)、sid(序列號(hào)),size(消息體長(zhǎng)度)字段,封裝成協(xié)議包,將協(xié)議包寫入共享內(nèi)存。
- api通過socket發(fā)送請(qǐng)求給proxy。
- app epoll thread通過檢測(cè)api的可讀事件,接受請(qǐng)求。通過解析請(qǐng)求內(nèi)容,獲取請(qǐng)求協(xié)議包所在的共享內(nèi)存的偏移、請(qǐng)求協(xié)議包的長(zhǎng)度和api連接index加入到處理隊(duì)列。
- proxy client的io epoll thread通過檢測(cè)對(duì)端DPIO連接的可寫事件,從發(fā)送隊(duì)列中獲取請(qǐng)求包,將api的index加入到協(xié)議包的api index字段。
- proxy client的io epoll thread從共享內(nèi)存中讀取協(xié)議包,釋放由請(qǐng)求包中所標(biāo)識(shí)的內(nèi)存空間。
- proxy server的io epoll thread通過檢測(cè)對(duì)端DPIO的可讀事件,接受請(qǐng)求。
- proxy server的io epoll thread從共享內(nèi)存中申請(qǐng)空間,將proxy的index加入到協(xié)議包的proxy index字段。將請(qǐng)求內(nèi)存寫入到申請(qǐng)的空間中。
- proxy server的io epoll thread 將協(xié)議包在共享內(nèi)存的偏移和協(xié)議包的長(zhǎng)度加入的待處理隊(duì)列中。
- app epoll thread從待處理隊(duì)列中獲取請(qǐng)求包,將協(xié)議包轉(zhuǎn)發(fā)給相應(yīng)的api進(jìn)行處理。
- api通過檢測(cè)DPIO的可讀事件,解析請(qǐng)求內(nèi)容。
- api通過解析請(qǐng)求內(nèi)容,獲取請(qǐng)求協(xié)議包在共享內(nèi)存中的偏移和請(qǐng)求協(xié)議包的長(zhǎng)度。從共享內(nèi)存中讀取請(qǐng)求內(nèi)容,并釋放相應(yīng)空間。
- api將請(qǐng)求協(xié)議包返回給應(yīng)用層進(jìn)行處理。
- 應(yīng)用層將應(yīng)答包傳給api。
- Api從共享內(nèi)存中申請(qǐng)空間,將應(yīng)答包寫入到共享內(nèi)存中。
- Api將應(yīng)答包在共享內(nèi)存中的偏移和應(yīng)答包的大小寫入到共享內(nèi)存中。
- App epoll thread通過檢測(cè)可讀事件,將應(yīng)答包寫入到已處理隊(duì)列中。
- proxy server的Io epoll thread通過檢測(cè)對(duì)端的DPIO的可寫事件,將已處理隊(duì)列中獲取應(yīng)答包。
- proxy server的Io epoll thread從共享內(nèi)存中讀取應(yīng)答包。
- Proxy client的Io epoll thread檢測(cè)可讀事件,讀取應(yīng)答包。
- Proxy client的Io epoll thread通過解析應(yīng)答包,從共享內(nèi)存中申請(qǐng)空間,將應(yīng)答包寫入到申請(qǐng)的內(nèi)存中。
- Proxy client的Io epoll thread將應(yīng)答包移入到已處理隊(duì)列。
- App epoll thread通過檢測(cè)api的可寫事件,將已處理隊(duì)列中獲取應(yīng)答包。
- App epoll thread發(fā)送應(yīng)答包。
- Api通過檢測(cè)可讀事件,獲取應(yīng)答包,通過解析應(yīng)到包,獲取應(yīng)答包在共享內(nèi)存中的偏移和應(yīng)到的大小,從共享內(nèi)存中讀取應(yīng)到包。
- Api將應(yīng)答包返回給應(yīng)用端。(桂洪冠 陳運(yùn)文)。
發(fā)表在 數(shù)據(jù)挖掘? ? ? ? | 標(biāo)簽為 數(shù)據(jù)處理, 數(shù)據(jù)通訊? ? ? ? | 留下評(píng)論
在微信公眾號(hào)里使用LaTeX數(shù)學(xué)公式發(fā)表于 2015年11月17號(hào) 由 52nlp
因?yàn)橛型瑢W(xué)在微信后臺(tái)咨詢這個(gè)問題,所以這里簡(jiǎn)單記錄一下,其實(shí)自己之前也摸索了一些方法,不是太完美,目前所使用的這個(gè)方法算是折中后比較好的。 這段時(shí)間在鼓搗“NLPJob”這個(gè)公眾號(hào),特別是微信公眾號(hào)支持“原創(chuàng)聲明”后,就很樂意將52nlp上積攢的一些文章搬上去,但是逐漸會(huì)遇到一些數(shù)學(xué)公式的問題。目前在52nlp上用的是mathjax完美支持LaTeX數(shù)學(xué)公式展現(xiàn),但是微信公眾號(hào)的編輯器沒有這個(gè)支持,另外mathjax支持的公式形式不是圖片形式,所以不能直接將文章拷貝上去,但是如果是數(shù)學(xué)公式圖片,微信編輯器可以直接拷貝,所以最直接的想法就是將mathjax支持的LaTeX公式轉(zhuǎn)換為公式圖片保存在文章中,然后再全文拷貝到微信公眾號(hào)編輯器中。 其實(shí)在mathjax之前,網(wǎng)頁(yè)上的很多數(shù)學(xué)公式都是用這種折中的方式,包括很多wordpress數(shù)學(xué)公式插件,當(dāng)年我也因?yàn)?2nlp上的公式問題還自己動(dòng)手寫了一個(gè)小的wordpress插件,但是當(dāng)mathjax出現(xiàn)之后,之前的方案就顯得很一般了。所以就開始嘗試找一下支持img緩存的LaTeX公式插件,不過多數(shù)都不滿意或者有瑕疵,甚至自己又開始動(dòng)手修改代碼,然后blablabla….,最終發(fā)現(xiàn) quicklatex這個(gè)神器和它的wordpress插件QuickLaTeX,幾乎完美支持和兼容Mathjax所支持的LaTeX數(shù)學(xué)公式。方法很簡(jiǎn)單,只要在wordpress中安裝quicklatex,然后在文章的開頭添加一個(gè):[latexpage] ,然后文章中所有的latext公式都會(huì)轉(zhuǎn)換為圖片形式,類似昨天發(fā)出的rickjin的這篇文章:LDA數(shù)學(xué)八卦:神奇的Gamma函數(shù)(1)。當(dāng)然需要先在wordpress中完成編輯轉(zhuǎn)換,再全文拷貝到微信公眾號(hào)中,微信會(huì)自動(dòng)的將這些圖片上傳到它自己的圖片服務(wù)器上。不過依然希望微信公眾號(hào)編輯器能早日支持LaTeX公式編輯甚至Mathjax。
發(fā)表在 隨筆? ? ? ? | 標(biāo)簽為 latex公式, latex數(shù)學(xué)公式, MathJax, 微信, 微信latex, 微信公眾號(hào), 微信公眾號(hào)數(shù)學(xué)公式編輯器, 微信公式編輯器, 微信數(shù)學(xué)公式? ? ? ? | 2 條評(píng)論
斯坦福大學(xué)深度學(xué)習(xí)與自然語(yǔ)言處理第四講:詞窗口分類和神經(jīng)網(wǎng)絡(luò)發(fā)表于 2015年09月14號(hào) 由 52nlp
斯坦福大學(xué)在三月份開設(shè)了一門“深度學(xué)習(xí)與自然語(yǔ)言處理”的課程:CS224d: Deep Learning for Natural Language Processing,授課老師是青年才俊 Richard Socher,以下為相關(guān)的課程筆記。 第四講:詞窗口分類和神經(jīng)網(wǎng)絡(luò)(Word Window Classification and Neural Networks) 推薦閱讀材料:
- [UFLDL tutorial]
- [Learning Representations by Backpropogating Errors]
- 第四講Slides [slides]
- 第四講視頻 [video]
繼續(xù)閱讀 →
發(fā)表在 機(jī)器學(xué)習(xí), 深度學(xué)習(xí), 自然語(yǔ)言處理? ? ? ? | 標(biāo)簽為 Deep Learning, Deep Learning公開課, Deep NLP, DL, NER, Richard Socher, softmax, word vectors, word2vec, wordnet, 二元邏輯回歸, 人名識(shí)別, 公開課, 分類, 分類器, 前饋網(wǎng)絡(luò)記錄, 反向傳播算法, 命名實(shí)體識(shí)別, 回歸, 地名識(shí)別, 斯坦福大學(xué), 機(jī)器學(xué)習(xí), 梯度下降, 深度學(xué)習(xí), 深度學(xué)習(xí)與自然語(yǔ)言處理, 深度學(xué)習(xí)技術(shù), 深度學(xué)習(xí)模型, 神經(jīng)元, 神經(jīng)網(wǎng)絡(luò), 窗口向量, 窗口向量分類, 自然語(yǔ)義處理, 自然語(yǔ)言處理, 詞向量, 詞嵌入, 語(yǔ)義詞典, 邏輯回歸, 隨機(jī)梯度下降? ? ? ? | 3 條評(píng)論
出門問問宣布完成由Google投資的C輪融資,累計(jì)融資7500萬(wàn)美金發(fā)表于 2015年09月2號(hào) 由 52nlp
注:出門問問是我們的老朋友,創(chuàng)始人李志飛也是NLP和機(jī)器翻譯領(lǐng)域的大牛,今天出門問問拿到了Google的C輪融資,志飛兄第一時(shí)間和我分享了這條新聞,太牛了。 人工智能創(chuàng)業(yè)公司出門問問(Mobvoi),于近日完成了由Google投資的C輪融資,累計(jì)融資7500萬(wàn)美金。現(xiàn)有投資方包括紅杉資本、真格基金,SIG海納亞洲、圓美光電、及歌爾聲學(xué)。此輪投資Google并不控股,出門問問團(tuán)隊(duì)依舊有絕對(duì)控制權(quán)。 此次由Google投資的C輪融資,能夠保證出門問問在人工智能領(lǐng)域長(zhǎng)期持續(xù)深耕,專注核心技術(shù)上的進(jìn)一步研發(fā),在可穿戴、車載以及機(jī)器人領(lǐng)域拓展新的人機(jī)交互產(chǎn)品形態(tài),更深入地完善用戶體驗(yàn),在吸引全球頂尖技術(shù)與商務(wù)人才上更具優(yōu)勢(shì)。對(duì)于海外市場(chǎng)的擴(kuò)展,此次融資也將發(fā)揮非常重要的作用。 Google 企業(yè)發(fā)展部副總裁Don Harrison 說到選擇投資出門問問的原因:“出門問問研發(fā)了非常獨(dú)特自成體系的語(yǔ)音識(shí)別與自然語(yǔ)言處理技術(shù)。我們被他們的創(chuàng)新科技與發(fā)展?jié)摿Υ騽?dòng),所以我們很迅速地決定用投資的方式幫助他們?cè)谖磥?lái)快速成長(zhǎng)。” 紅杉資本全球執(zhí)行合伙人沈南鵬評(píng)價(jià):“出門問問一直處于高速的不斷創(chuàng)新過程中,從移動(dòng)app到硬件產(chǎn)品到語(yǔ)音搜索平臺(tái),不同形式的產(chǎn)品背后是團(tuán)隊(duì)長(zhǎng)期以來(lái)形成的強(qiáng)大技術(shù)核心,獲得Google的投資是對(duì)這種中國(guó)原創(chuàng)能力的最好肯定。我很高興Google這樣的巨頭看好出門問問,并和我們一起投入到這支高速創(chuàng)新的團(tuán)隊(duì)中。” 真格基金創(chuàng)始人徐小平說:“我第一次遇見谷歌科學(xué)家李志飛博士,是三年前。那時(shí)候,他的語(yǔ)音搜索創(chuàng)業(yè)計(jì)劃,真是一個(gè)“異想天開”的夢(mèng)。志飛相信自己的夢(mèng),相信自己的技術(shù),相信市場(chǎng)對(duì)這個(gè)技術(shù)產(chǎn)品的需求,歷經(jīng)萬(wàn)難,終于“搜索”到了屬于他自己的那片天空。志飛的創(chuàng)業(yè)歷程,是又一個(gè)中國(guó)好故事,會(huì)激勵(lì)更多人追求并實(shí)現(xiàn)自己的好夢(mèng)。” 志同道合是此次融資達(dá)成的最重要的原因。扎實(shí)做技術(shù)和產(chǎn)品,運(yùn)用科技的力量改變?nèi)藗兊娜粘I?#xff0c;是出門問問一直篤信的價(jià)值觀。 出門問問CEO 李志飛表示:“引入Google的投資,不僅意味Google對(duì)于我們技術(shù)的認(rèn)可,更是源于雙方持有共同的價(jià)值觀,通過對(duì)人工智能技術(shù)的極致追求,打造毫不妥協(xié)的用戶體驗(yàn)。” 與Google相似,出門問問也是信仰“工程師文化”的團(tuán)隊(duì),強(qiáng)大的研發(fā)團(tuán)隊(duì)由Google前科學(xué)家、人工智能專家領(lǐng)銜,團(tuán)隊(duì)成員來(lái)自哈佛、MIT、斯坦福、劍橋、清華等名校名企。 此次融資是中國(guó)人工智能創(chuàng)業(yè)公司首次獲得像Google這樣的國(guó)際技術(shù)巨頭的投資與認(rèn)可。這在某種程度上說明,在人工智能領(lǐng)域,中國(guó)的創(chuàng)業(yè)公司不容小覷。
繼續(xù)閱讀 →
總結(jié)
以上是生活随笔為你收集整理的QA问答系统中的深度学习技术实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: git 出现 fatal: unable
- 下一篇: 项目实训 - 智能车系统 - 第七周记录