付麗梅
(大連東軟信息學(xué)院軟件工程系,遼寧 大連 116023)
智能手機(jī)的高速發(fā)展使各種小視頻成為人們生活中的重要娛樂(lè)手段,隨之而來(lái)的視頻推薦已成為當(dāng)前視頻應(yīng)用的一個(gè)關(guān)鍵問(wèn)題。當(dāng)前視頻推薦的精度和速度都還有一定的提升空間,可通過(guò)對(duì)SOM算法的研究改進(jìn)視頻推薦系統(tǒng)的精度和速度。目前SOM神經(jīng)網(wǎng)絡(luò)的研究方向主要有以下幾種:(1)基于動(dòng)態(tài)確定結(jié)構(gòu)和網(wǎng)絡(luò)數(shù)目的改進(jìn)。為了擺脫傳統(tǒng)SOM模型需要提前給定結(jié)構(gòu)和網(wǎng)絡(luò)單元數(shù)目的限制,科研人員提出在訓(xùn)練過(guò)程中動(dòng)態(tài)確定網(wǎng)絡(luò)形狀和數(shù)目的解決方案。(2)基于匹配神經(jīng)元策略的改進(jìn)。該研究方向中比較著名的研究算法有SOFM-CV、SOFM-C、DSOM等,其改進(jìn)方向?yàn)樾薷纳窠?jīng)元的競(jìng)爭(zhēng)方式或競(jìng)爭(zhēng)過(guò)程,或者在競(jìng)爭(zhēng)過(guò)程中添加其他參數(shù)和限制條件等,以防止競(jìng)爭(zhēng)單元層中出現(xiàn)“始終不能獲勝”的結(jié)果。(3)最后一種就是用其他算法來(lái)組合SOM算法,其中比較有代表性的是提出把SOM和粗糙集進(jìn)行組合的RSOM算法;科研人員提出使用自適應(yīng)共振理論模型和SOM組合對(duì)文檔進(jìn)行聚類(lèi);另有科研人員使用了多層感知器(Multilayer Perceptron,MLP)和SOM結(jié)合來(lái)進(jìn)行語(yǔ)音識(shí)別。本文使用K-means算法對(duì)SOM神經(jīng)網(wǎng)絡(luò)算法進(jìn)行改進(jìn),并應(yīng)用到視頻搜索推薦系統(tǒng)中,該推薦系統(tǒng)分為爬蟲(chóng)、算法實(shí)現(xiàn)、可視化三個(gè)模塊。
SOM是一種自組織特征映射聚類(lèi)算法,它包括輸入層和競(jìng)爭(zhēng)層(也叫輸出層)兩部分。訓(xùn)練過(guò)程采用競(jìng)爭(zhēng)的方式,競(jìng)爭(zhēng)層在接收到輸入層的樣本數(shù)據(jù)后,計(jì)算樣本與神經(jīng)元自身的權(quán)向量,與樣本最近的神經(jīng)元為最佳匹配單元,接著更新最佳匹配單元的權(quán)值,同時(shí)和最佳匹配單元臨近的點(diǎn)也根據(jù)它們距最佳匹配單元的距離適當(dāng)更新參數(shù),這個(gè)過(guò)程迭代反復(fù)直至收斂。
K-means算法是一種無(wú)監(jiān)督的聚類(lèi)算法,其思想如下:將給定的樣本集按照樣本之間的距離大小劃分為個(gè)簇,劃分時(shí)要讓簇內(nèi)部點(diǎn)的排列盡量緊密,簇與簇的間距相對(duì)要盡量大。K-means算法的值一般是根據(jù)對(duì)數(shù)據(jù)的先驗(yàn)經(jīng)驗(yàn)來(lái)選擇,若先驗(yàn)知識(shí)不足,也可通過(guò)交叉比對(duì)選擇。個(gè)質(zhì)心的選擇可以采用隨機(jī)方式,質(zhì)心的初始位置會(huì)極大地影響最終的聚類(lèi)結(jié)果及運(yùn)行時(shí)間,質(zhì)心之間的距離不應(yīng)太近,否則會(huì)影響聚類(lèi)效果。
SOM算法作為一種無(wú)監(jiān)督的學(xué)習(xí)算法,它的訓(xùn)練過(guò)程不是很穩(wěn)定,如果有一個(gè)如同K-means算法的穩(wěn)定訓(xùn)練過(guò)程,就可以大大提升工作效率。SOM算法的訓(xùn)練過(guò)程需要刷新初始值較小的神經(jīng)元,和K-means算法選定質(zhì)心的方式有著相似之處,只不過(guò)一個(gè)是在輸入層之前選定,一個(gè)是在訓(xùn)練過(guò)程之中選定。本文綜合兩種算法對(duì)視頻推薦算法進(jìn)行優(yōu)化。
數(shù)據(jù)采集使用爬蟲(chóng)技術(shù),爬取www.bilibili.com網(wǎng)頁(yè)中較火的視頻類(lèi)數(shù)據(jù)進(jìn)行處理后作為實(shí)驗(yàn)數(shù)據(jù)。爬蟲(chóng)的編寫(xiě)采用Python 3.7自帶的urllib模塊,當(dāng)用戶打開(kāi)網(wǎng)頁(yè)時(shí),瀏覽器根據(jù)輸入的地址找到相應(yīng)的服務(wù)器發(fā)送請(qǐng)求,服務(wù)器收到請(qǐng)求后,解析請(qǐng)求中攜帶的信息并進(jìn)行響應(yīng),最終返回請(qǐng)求結(jié)果。urllib模塊模擬用戶的瀏覽過(guò)程,發(fā)送請(qǐng)求后獲取服務(wù)器返回的數(shù)據(jù)。獲取網(wǎng)頁(yè)HTML文件后,使用BeautifulSoup庫(kù)解析HTML文件。BeautifulSoup為開(kāi)發(fā)者提供一些Python風(fēng)格的函數(shù)來(lái)分析提取HTML文檔中的信息,通過(guò)解析HTML篩選出有用的信息導(dǎo)入數(shù)據(jù)庫(kù)以備算法使用。實(shí)驗(yàn)需要的信息包括嗶哩嗶哩視頻彈幕網(wǎng)的視頻播放量、點(diǎn)擊量、評(píng)論及彈幕數(shù)量等數(shù)據(jù),至于視頻的編號(hào)(AV)則是通過(guò)對(duì)URL的拆分處理而得到的。拆分的過(guò)程就是利用split函數(shù)以“/”為分隔,將字符串切割成列表的形式。
SOM算法的學(xué)習(xí)過(guò)程分為三個(gè)部分。首先是競(jìng)爭(zhēng),也就是針對(duì)輸入的數(shù)據(jù)集,計(jì)算其與數(shù)據(jù)單元權(quán)向量的歐幾里得距離,距離最小的為獲勝神經(jīng)元,也可通過(guò)其他判別函數(shù)得出,記為最佳匹配單元。然后是合作,最佳匹配單元決定了興奮的神經(jīng)元的拓?fù)溧徲蛘紦?jù)的空間位置,是相鄰的神經(jīng)元合作的基礎(chǔ)。最后要調(diào)整權(quán)值,興奮的神經(jīng)元通過(guò)對(duì)自身權(quán)向量的調(diào)整,來(lái)增加數(shù)據(jù)集的判別函數(shù)值(使用向量間的歐幾里得距離),然后讓神經(jīng)元對(duì)接下來(lái)的相似輸入有一個(gè)強(qiáng)化的響應(yīng)。
SOM算法的實(shí)現(xiàn)過(guò)程可描述為如下幾方面。
(1)初始化。使用權(quán)值較小的隨機(jī)值進(jìn)行初始化,并對(duì)輸入向量和權(quán)值做歸一化處理:
(2)將樣本輸入網(wǎng)絡(luò)。計(jì)算樣本與權(quán)值向量的歐幾里得距離,距離最小的神經(jīng)元贏得競(jìng)爭(zhēng),記為最佳匹配單元。
(3)更新權(quán)值。更新獲勝的神經(jīng)元拓?fù)溧徲騼?nèi)的神經(jīng)元,重新歸一化學(xué)習(xí)后的權(quán)值,基本公式如下:
該算法的優(yōu)點(diǎn)是無(wú)須監(jiān)督,無(wú)須提前告知分類(lèi)數(shù)便能自動(dòng)對(duì)輸入模式進(jìn)行聚類(lèi),容錯(cuò)性強(qiáng),對(duì)異常值和噪聲不敏感。其缺點(diǎn)是在訓(xùn)練時(shí)有些神經(jīng)元始終不能勝出,導(dǎo)致分類(lèi)結(jié)果不準(zhǔn)確,SOM網(wǎng)絡(luò)收斂時(shí)間較長(zhǎng),運(yùn)算效率較低。
(3)重新計(jì)算每個(gè)簇的新質(zhì)心,新質(zhì)心為各個(gè)簇內(nèi)所有樣本距離的平均值,若k個(gè)質(zhì)心向量未發(fā)生變化,則進(jìn)行步驟(4);否則,重復(fù)步驟(1)—步驟(3),直至最大迭代次數(shù)或聚類(lèi)完成。
(4)重新劃分輸出簇C。
SOM算法具有一些缺陷,例如算法運(yùn)行后期有可能會(huì)出現(xiàn)鐘擺效應(yīng)(即網(wǎng)絡(luò)在幾個(gè)最佳極值點(diǎn)之間反復(fù)跳動(dòng)),以及不穩(wěn)定的訓(xùn)練輸出等,可結(jié)合K-means算法的訓(xùn)練過(guò)程來(lái)使SOM算法的訓(xùn)練過(guò)程穩(wěn)定化,并且借用K-means算法的思想來(lái)強(qiáng)化SOM算法的效率。
改進(jìn)的思想大致如下:首先,SOM算法需要隨機(jī)選定神經(jīng)元,隨機(jī)性會(huì)導(dǎo)致后面的訓(xùn)練過(guò)程不穩(wěn)定;而K-means是首先選定質(zhì)心,在訓(xùn)練過(guò)程的穩(wěn)定性上占有優(yōu)勢(shì)。其次,SOM算法以神經(jīng)元為中心,使得數(shù)據(jù)向神經(jīng)元移動(dòng);而K-means算法是通過(guò)移動(dòng)質(zhì)心的方式來(lái)達(dá)成對(duì)數(shù)據(jù)類(lèi)的分簇。綜合這兩種思想,首先觀察數(shù)據(jù)集的分布狀態(tài)判定質(zhì)心,調(diào)用K-means算法的訓(xùn)練過(guò)程將質(zhì)心移動(dòng)到分簇的附近,然后將選定得到的質(zhì)心作為現(xiàn)成的最佳神經(jīng)元定位拓?fù)溧徲颍褂肧OM算法開(kāi)始聚合。改良后的算法的基本流程如圖1所示。
圖1 使用K-means改進(jìn)SOM算法流程Fig.1 Using K-means to improve SOM algorithm process
改良后的算法雖然以SOM算法為主要運(yùn)行部分,但是使用K-means算法指定的質(zhì)心取代了SOM算法需要算法運(yùn)行選擇的最佳神經(jīng)元,并且在經(jīng)過(guò)質(zhì)心選定之后使得質(zhì)心/最佳神經(jīng)元更靠近需要聚類(lèi)的數(shù)據(jù)簇。該算法的優(yōu)點(diǎn)是算法簡(jiǎn)單,收斂速度快,準(zhǔn)確率較高;缺點(diǎn)是初始聚類(lèi)中心的設(shè)定對(duì)聚類(lèi)結(jié)果影響較大,聚類(lèi)種數(shù)需要預(yù)先給定,而在很多情況下的估計(jì)是非常困難的。
本系統(tǒng)的可視化模塊采用了Django框架進(jìn)行開(kāi)發(fā),可視化模塊分為關(guān)鍵字搜索和結(jié)果顯示兩個(gè)頁(yè)面。關(guān)鍵字搜索頁(yè)面在提供自定義搜索的同時(shí),也提供標(biāo)簽式的定向搜索,即根據(jù)用戶選擇的標(biāo)簽推送出最吻合的視頻,滿足不同類(lèi)型用戶的需要。結(jié)果顯示頁(yè)面除了提供視頻的超鏈接之外,還提供該視頻的評(píng)分項(xiàng),計(jì)算方法是將點(diǎn)擊數(shù)、播放數(shù)、評(píng)論數(shù)、彈幕數(shù)等屬性進(jìn)行歸一化處理后乘以100得出基本評(píng)分,方便用戶選擇視頻。本系統(tǒng)采用MySQL數(shù)據(jù)庫(kù),需要安裝PyMySQL模塊。系統(tǒng)的數(shù)據(jù)流向如下:?jiǎn)?dòng)爬蟲(chóng),對(duì)網(wǎng)頁(yè)進(jìn)行數(shù)據(jù)爬取,經(jīng)過(guò)一個(gè)臨時(shí)數(shù)據(jù)存儲(chǔ)模塊處理后進(jìn)入數(shù)據(jù)庫(kù),算法在數(shù)據(jù)庫(kù)中提取數(shù)據(jù),通過(guò)分析后輸出推薦視頻到結(jié)果頁(yè)顯示。
本文對(duì)SOM算法單體效率的研究采用修改參數(shù)調(diào)整效率的方式,大部分參數(shù)可以通過(guò)學(xué)習(xí)獲得,能夠手動(dòng)修改且對(duì)運(yùn)行結(jié)果影響較大的是迭代次數(shù)及批尺寸(batch_size)。
(1)迭代次數(shù)實(shí)驗(yàn)
在這一步中,本文使用了500 個(gè)樣本數(shù)據(jù),在不影響batch_size的情況下進(jìn)行改動(dòng)迭代次數(shù)的實(shí)驗(yàn),實(shí)驗(yàn)使用單一的SOM算法。實(shí)驗(yàn)結(jié)果表明,在不修改batch_size的情況下,單純地修改迭代次數(shù)對(duì)算法的運(yùn)行效率幾乎沒(méi)有影響。
(2)batch_size實(shí)驗(yàn)
batch_size是機(jī)器學(xué)習(xí)算法中一個(gè)重要的參數(shù),本實(shí)驗(yàn)以已經(jīng)完成的組合算法為框架,輸入200 個(gè)樣本,通過(guò)調(diào)整batch_size不斷實(shí)驗(yàn)可以看出,如果batch_size減小,算法在200 次迭代內(nèi)不能收斂。如果batch_size增大,處理數(shù)據(jù)的速度會(huì)變快,而達(dá)到相同精度所需的迭代數(shù)量增多。當(dāng)batch_size增大到一定程度時(shí),會(huì)達(dá)到運(yùn)行時(shí)間的最優(yōu)化,但最終的收斂精度會(huì)陷入不同的極值。因此,batch_size需要在0—200取舍,本實(shí)驗(yàn)的batch_size定為100。
第一組測(cè)試的是運(yùn)行所需要的時(shí)間。實(shí)驗(yàn)限制條件為batch_size100,迭代次數(shù)100,只對(duì)輸入樣本的個(gè)數(shù)進(jìn)行更改。實(shí)驗(yàn)結(jié)果為算法的運(yùn)行時(shí)間,如表1所示。
表1 算法運(yùn)行時(shí)間對(duì)比Tab.1 Comparison of algorithm running time
由表1可以得出,在限制了迭代次數(shù)及batch_size的情況下,改良后的算法在運(yùn)行時(shí)間上要略差于原本的SOM算法,其運(yùn)行時(shí)間比原算法長(zhǎng)4%—12%。
第二組實(shí)驗(yàn)測(cè)試的是同等運(yùn)行條件下的運(yùn)行精度,參考值為輸出關(guān)鍵字的精確性。實(shí)驗(yàn)結(jié)果為用戶需求的關(guān)鍵詞在推薦結(jié)果中所含數(shù)量占算法推薦數(shù)總量的百分比,如表2所示。
由表2可知,在限制了迭代次數(shù)及batch_size的情況下,改良算法的運(yùn)行結(jié)果在推薦精度上有了5%—8%的提升,符合視頻推薦應(yīng)用對(duì)精度要求更高的需求。
表2 算法運(yùn)行精度對(duì)比Tab.2 Comparison of algorithm running accuracy
SOM和其他算法的組合在很多領(lǐng)域應(yīng)用效果較好。本文使用SOM和K-means的組合算法來(lái)進(jìn)行視頻推薦,并設(shè)計(jì)了一個(gè)視頻推薦系統(tǒng),系統(tǒng)由數(shù)據(jù)采集與處理、算法優(yōu)化和可視化三部分構(gòu)成。實(shí)驗(yàn)結(jié)果表明,在限制batch_size和迭代次數(shù)的情況下,使用K-means優(yōu)化的SOM算法雖然在運(yùn)行效率上有所降低,但在運(yùn)行精度上有了5%—8%的提升,在視頻推薦應(yīng)用方面,推薦的準(zhǔn)確性遠(yuǎn)比運(yùn)行時(shí)間更符合實(shí)際用戶需求。因此,改良的SOM算法適合應(yīng)用在視頻推薦系統(tǒng)上。