99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀奇異值分解SVD應(yīng)用——LSI
奇異值分解SVD應(yīng)用——LSI
2017-12-22
收藏

奇異值分解SVD應(yīng)用——LSI

在自然語言處理中,最常見的兩類的分類問題分別是,將文本按主題歸類(比如將所有介紹亞運(yùn)會(huì)的新聞歸到體育類)和將詞匯表中的字詞按意思?xì)w類(比如將各種體育運(yùn)動(dòng)的名稱個(gè)歸成一類)。這兩種分類問題都可用通過矩陣運(yùn)算來圓滿地、同時(shí)解決。為了說明如何用矩陣這個(gè)工具類解決這兩個(gè)問題的,讓我們先來來回顧一下我們在余弦定理和新聞分類中介紹的方法。
分類的關(guān)鍵是計(jì)算相關(guān)性。我們首先對兩個(gè)文本計(jì)算出它們的內(nèi)容詞,或者說實(shí)詞的向量,然后求這兩個(gè)向量的夾角。當(dāng)這兩個(gè)向量夾角為零時(shí),新聞就相關(guān);當(dāng)它們垂直或者說正交時(shí),新聞則無關(guān)。當(dāng)然,夾角的余弦等同于向量的內(nèi)積。從理論上講,這種算法非常好。但是計(jì)算時(shí)間特別長。通常,我們要處理的文章的數(shù)量都很大,至少在百萬篇以上,二次回標(biāo)有非常長,比如說有五十萬個(gè)詞(包括人名地名產(chǎn)品名稱等等)。如果想通過對一百萬篇文章兩篇兩篇地成對比較,來找出所有共同主題的文章,就要比較五千億對文章?,F(xiàn)在的計(jì)算機(jī)一秒鐘最多可以比較一千對文章,完成這一百萬篇文章相關(guān)性比較就需要十五年時(shí)間。注意,要真正完成文章的分類還要反復(fù)重復(fù)上述計(jì)算。
文本分類中,另一種辦法是利用矩陣運(yùn)算中的奇異值分解(Singular Value Decomposition,簡稱 SVD)。現(xiàn)在讓我們來看看奇異值分解是怎么回事。首先,我們可以用一個(gè)大矩陣A來描述這一百萬篇文章和五十萬詞的關(guān)聯(lián)性。這個(gè)矩陣中,每一行對應(yīng)一篇文章,每一列對應(yīng)一個(gè)詞。


在上面的圖中,M=1,000,000,N=500,000。第 i 行,第 j 列的元素,是字典中第 j 個(gè)詞在第 i 篇文章中出現(xiàn)的加權(quán)詞頻(比如,TF/IDF)。讀者可能已經(jīng)注意到了,這個(gè)矩陣非常大,有一百萬乘以五十萬,即五千億個(gè)元素。
奇異值分解就是把上面這樣一個(gè)大矩陣,分解成三個(gè)小矩陣相乘,如下圖所示。比如把上面的例子中的矩陣分解成一個(gè)一百萬乘以一百的矩陣X,一個(gè)一百乘以一百的矩陣B,和一個(gè)一百乘以五十萬的矩陣Y。這三個(gè)矩陣的元素總數(shù)加起來也不過1.5億,僅僅是原來的三千分之一。相應(yīng)的存儲(chǔ)量和計(jì)算量都會(huì)小三個(gè)數(shù)量級(jí)以上。

三個(gè)矩陣有非常清楚的物理含義。第一個(gè)矩陣X中的每一列表示一類主題,其中的每個(gè)非零元素表示一個(gè)主題與一篇文章的相關(guān)性,數(shù)值越大越相關(guān)。最后一個(gè)矩陣Y中的每一列表示100個(gè)關(guān)鍵詞,每個(gè)key word與500,000個(gè)詞的相關(guān)性。中間的矩陣則表示文章主題和keyword之間的相關(guān)性。因此,我們只要對關(guān)聯(lián)矩陣A進(jìn)行一次奇異值分解,w 我們就可以同時(shí)完成了近義詞分類和文章的分類。(同時(shí)得到每類文章和每類詞的相關(guān)性)。

比如降至2維(rank=2),則document-term的關(guān)系可以在下面二維圖中展現(xiàn):


在圖上,每一個(gè)紅色的點(diǎn),都表示一個(gè)詞,每一個(gè)藍(lán)色的點(diǎn),都表示一篇文檔,這樣我們可以對這些詞和文檔進(jìn)行聚類,比如說stock 和 market可以放在一類,因?yàn)樗麄兝鲜浅霈F(xiàn)在一起,real和estate可以放在一類,dads,guide這種詞就看起來有點(diǎn)孤立了,我們就不對他們進(jìn)行合并了。按這樣聚類出現(xiàn)的效果,可以提取文檔集合中的近義詞,這樣當(dāng)用戶檢索文檔的時(shí)候,是用語義級(jí)別(近義詞集合)去檢索了,而不是之前的詞的級(jí)別。這樣一減少我們的檢索、存儲(chǔ)量,因?yàn)檫@樣壓縮的文檔集合和PCA是異曲同工的,二可以提高我們的用戶體驗(yàn),用戶輸入一個(gè)詞,我們可以在這個(gè)詞的近義詞的集合中去找,這是傳統(tǒng)的索引無法做到的。

現(xiàn)在剩下的唯一問題,就是如何用計(jì)算機(jī)進(jìn)行奇異值分解。這時(shí),線性代數(shù)中的許多概念,比如矩陣的特征值等等,以及數(shù)值分析的各種算法就統(tǒng)統(tǒng)用上了。在很長時(shí)間內(nèi),奇異值分解都無法并行處理。(雖然 Google 早就有了MapReduce 等并行計(jì)算的工具,但是由于奇異值分解很難拆成不相關(guān)子運(yùn)算,即使在 Google 內(nèi)部以前也無法利用并行計(jì)算的優(yōu)勢來分解矩陣。)最近,Google 中國的張智威博士和幾個(gè)中國的工程師及實(shí)習(xí)生已經(jīng)實(shí)現(xiàn)了奇異值分解的并行算法,我認(rèn)為這是 Google 中國對世界的一個(gè)貢獻(xiàn)。

最后說說個(gè)人拙見,這里我們可以把document和term(word)中間加上一層latent semantics項(xiàng),那么上圖中的X和Y矩陣就可以分別表示同一個(gè)latent semantics對不同document之間的相關(guān)性和同一latent semantics在不同terms之間的相關(guān)性聯(lián)系。X和Y的大小分別是m*r與r*n,r為A矩陣的rank(秩),最后,B是A的r個(gè)奇異值組成的對角方陣(r*r),在譜分解中也就是A的r個(gè)特征值。


數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }