大家好,我是mamioo的站長,大家可以叫我碼迷,80后,大學畢業的時候是物理專業,機緣巧合轉入計算機互聯網行業,10年老碼農。 懵懵懂懂做SEO六七年的樣子,在做SEO的時候,外鏈數量和類型都是有工具可查。但是碼迷咨詢了很多SEO同行,至今未找到令人稱心的關鍵詞布局工具。
大家做完內容,即使是原創的長尾,也沒有100%的把握拿到百度首頁的排名。網站內容質量上,目前國內還沒一個專業SEO評分工具(至少我沒有發現,有則請告知)。
17年底受到國外Matt《TF*IDF for SEO》這篇文章的啟發,碼迷開始萌生開發摩天樓工具的想法,打算開發一套SEO內容層面可靠的可量化的評測工具。
目前摩天樓主要的底層算法是相關性算法,到現在更新迭代3個版本,幾乎每個版本都是重構代碼一半以上,并且還要做海量的數據采集加工來驗證算法的準確性。
摩天樓內容助手碼迷覺得非常好用,碼迷實戰操作中,都是百度谷歌雙首頁的案例。我覺得做科學的事情,終究離不開科學唯物的驗證方法,離不開探索本質的毅然決心,離不開百萬級的數據分析,更離不開最新最前沿的算法應用和神經網絡訓練預測吧。
PS:
因為碼迷是物理系畢業,潛移默化的習慣運用物理方法(如控制變量法,逆向推演算法本質,歸納總結事物各部分之間內在的本質的必然的聯系)。
進入正題啦:
本文主要內容是講述摩天樓內容助手底層算法細節以及開發過程,以及講述科學研究中一些常用的方法。
摩天樓內容助手主要2個部分組成,閹割定制版的TFIDF(BM25)搜索系統+小型的ML集群。主要的人工智能算法包括(TFIDF\BM25、余弦相似度),以及開發過程中兩個常用的軟件方法(控制變量法、黑盒測試)。
希望能為研究SEO行業的同僚們,提供一個破解排名難題的思路。如果你有任何疑問和建議,碼迷期待與你交流經驗。
Part1. SEO的排序因子
SEO最核心的問題是排序問題,看一些數據跟培訓課程,都認為搜索引擎一般通過三個大方面來決定網站的排序:
- 內容質量(相關性、語句通順、字數等)工具:排版工具、偽原創生成
- 信任度(域名、外鏈、持續產出等)工具:juming\aizhan\5118等
- 用戶體驗(UI體驗、加載速度、留存、訪問時長等)工具:17ce\cnzz\百度統計
Part2. 資料搜集
為什么現在國內市場上可量化的SEO內容方面的工具為什么一個也沒有?碼迷認為因為搜索引擎是黑盒,大家不知道搜索引擎怎么對內容打分,或者是這個問題好難,導致都沒有思路。
搜索引擎怎么對內容打分? 因為我之前只看過SEO手段類的書籍,如昝輝的《SEO實戰密碼》,搜索底層的東西知之甚少。
那就找資料去吧,花了1個月時間翻閱了幾乎百度所有搜索相關的專利(漫長的分析問題的過程),發現百度是基于內容相關性排序的。
問題很明顯:搜索引擎如何按照相關性排序?
Part3. 問題&驗證思路
當時我解決問題的思路是這樣的,目前也是一直遵循的這個思路
第1步: 構建SEO內容質量排序算法的最小化版本
第2步: 準備100個左右目標關鍵詞
第3步: 使用爬蟲系統采集目標關鍵詞的前10頁的搜索結果 作為驗證集以及訓練集
第4步: 使用自建的SEO內容質量排序算法對驗證集排序
第5步: 判斷排序結果重合度即可。也就是自己的排序結果的TOP10與搜索引擎的TOP10的交集占比。
Part.4 落地過程
4.1 相關性算法TFIDF
使用過搜索引擎的人都知道,其搜索結果不一定是完全符合所有查詢之關鍵詞,也可能是部分相符,搜索引擎會將符合程度愈高的結果排在愈前面。
當然,如Google 之類的搜索引擎,還會搭配其他的因素,來決定搜索結果順位。不過,基本上,還是以相符程度為主要的基準。
有興趣的小伙伴可自行去看TF-IDF的資料,TF-IDF的公式并不復雜,18年初摩天樓最小化驗證版本經過2天左右開發完成,TF-IDF函數也就50行代碼而已。
4.2 黑盒測試&控制變量法
搜索引擎作為一款黑盒產品,我們不知道他底層的各個因子是怎樣的邏輯,但是可以通過控制變量法一點一點的試驗測試。
我們知道搜索排名的因素有域名、外鏈、內容主要這三部分決定排名,我要研究的是內容方面,那么盡量把域名外鏈的干擾因子降到最低。
我的當時的步驟是這樣的(其實這一步失敗了,也耽誤了很多時間)
步驟1:準備5個新域名 lkdak1.infolkdak2.infolkdak3.info lkdak4.info lkdak5.info,這樣這些域名年齡一樣,并且沒有外鏈。
步驟2:每個域名都做單頁站點,內容中包含一個核心詞【叉黑去八】,以及【看匹后空】、【思哈璐騰】等20左右個相關詞。注意,這些詞都是未曾出現過的詞語,所以在搜索引擎的語料里面底子也是干凈的,在內容中用成對的符號括起來防止分詞。
步驟3:規劃5個站點的內容,標題中均含有核心詞,控制相關詞的出現順序,同時提交百度跟谷歌站長后臺。
步驟4:等待,等待,稍安勿躁,等百度、Google收錄倒排之后,搜核心詞看看是否符合TFIDF算法計算出來的預期排序就行了。
4.3 不干凈的百度
想法是好的,但是現實很骨感,碼迷18年3月左右上的網站,百度3個月才收錄。但是在百度上搜"叉黑去八",我不明白百度為啥這么不務正業,百度工程師天天干啥?!
谷歌中也是搜索不出來,即使通過搜帶雙引號的核心詞能出來,也跟預定的TFIDF排序結果并不相符。
第一輪驗證以失敗告終。其實這一步主要原因是過度參考Matt的思路,中文英文分詞方式真的不一樣。
4.4 移步谷歌驗證
18年7月份左右一直斷斷續續等著百度收錄,查看排序結果,但是通過控制變量法并沒有太多的進展預期。反而這時候讓我認徹底清了百度,態度不端正就算了,百度排序算法中人為干擾的因素實在是太多太雜了(估計一切向錢看)。
第二輪驗證中我直接拋棄了百度,決定使用谷歌。原因有兩點,一是谷歌沒有快排干擾,二是谷歌界面清爽沒有亂七八糟。
這次驗證不再使用【叉黑去八】這類無意義的詞語,使用了略微接近自然語言的無搜索指數詞語,如"麥動豬"。這些詞有幾個特點:
第1:無時效性分值、地域性分值,比如“天氣”都是非常受地域時間影響的
第2:容易產生分詞效果,如果重復的次數過多,搜素引擎就認為"麥動豬"是一個詞了
第3:在谷歌上搜沒有完全匹配query的結果集
4.5 語料系統升級
因為單頁站點的內容過少,以及產生分詞效果不理想,所以借鑒了泛目錄的一些程序思想生成海量數據:
第1:使用了100萬左右的斷句作為隨機語料(之前做母嬰的時候,采集過雅虎的數據可以現成用)。
第2:每個域名1000篇文章左右,文章標題均含有"麥動豬"目標關鍵詞,標題中按照一定的布局密度布局相關詞。
第3:隨機挑選200個左右的語料句子組成一篇文章,文章中按照一定的布局密度布局相關詞,保證文章長度統一為3000字左右。
網站重新上線后,這里不得不佩服谷歌的收錄速度,基本上1個月左右內容均能收錄,再索引的周期在4天左右。相反通過監控百度爬蟲類型,內容變更到索引變更短則兩周,長則無限期。
18年9月的一天,在谷歌上搜索"麥動豬",忽然發現排在前面的文章有自己名下的域名的文章了,好一波歡心。
4.6 摩天樓(Beta1)第2輪驗證
到了驗證的時刻,使用自建的SEO內容質量排序算法對驗證集排序。思路是簡單的拿搜索引擎的排序結果與自己算法排序結果做對比。
假如說
谷歌的首頁結果是:A B C D E F G H I J
我的預測結果是: B C D W L X H E F Z
共同的部分是:B C D E F H
10個結果里面有6個是重復的,那就是重合度在60%;
不過很遺憾,通過谷歌給的搜索結果與自己TF*IDF算法排名的重合度在10%左右,也就是只有一個域名能上到第一頁,其他域名原因不詳。當時分析的原因有3個:
原因1:谷歌對隨機生成的文章能感知出來(現在也不確定)。
原因2:TF*IDF算法不是主要算法。
第二輪驗證也失敗了。
基本上這個狀況持續到18年深秋,正如這時候風卷殘葉的場景,感覺投入了很多時間以及學習參考了海量的資料,最后竹籃打水一場空了。
Part5. 她的點撥
18年10月底左右,同學從美國留學回家探親(其實是3年沒回家,母親忽然離世了),正好是大數據相關專業的博士,主攻Machine Learning圖形診斷方向。
事到如今我只能死馬當作活馬醫,試探的問了一下姚博士是否了解TFIDF算法,人家說這是最基本的。。。然后我就把我這半年的開發過程跟想法說了一遍,博士然后給了大概這么2個建議:
建議1:隨機生成的文章會造成相關性主題偏離,需要用聚類算法做診斷。
建議2:TFIDF算法是比較固定,是很老的算法了,不支持附加參數調優,建議用BM25。
不知道大家能不能跟上,反正碼迷是google一個下午才茅塞頓開。
第二輪驗證失敗的原因:
原因1:使用泛目錄程序生成的文章不合格(需要做質量控制)。
原因2:谷歌對TF*IDF算法有特定的參數和實現。
5.1 聚類算法
如果你發一篇文章題目是“貓糧推薦”,內容卻是主要講“怎么給小貓喂食”的,這就是主題不相關。百度收錄沒有問題,但是在倒排索引的時候,過不了主題集中的關卡(因為文章聚類得分偏離太大,直接剔除了)。
聚類算法碼迷用的是大家都知道的余弦相似度。
5.2 升級版的TFIDF=BM25
TFIDF算法是一個可用的算法,但并不太完美。它給出了一個基于統計學的相關分數算法,我們還可以進一步改進它。
科普PS(大牛們可以不用看,啰里啰嗦):https://blog.csdn.net/northhan/article/details/50952728
5.3 摩天樓(Beta2)
摩天樓碼迷基本上做了全局的重構,包括如下幾點:
點1:自行實現了BM25算法(因為github上PHP的沒幾個,還寫的很爛,只能自己動手了)
點2:隨機組合的語料文章,分詞之后,通過檢查TF TOP10,檢測是否詞頻過高,來保證文章主題集中
點3:搜集了100個真實目標搜索詞,采集了谷歌結果TOP100作為訓練集(因為需要預測BM25參數范圍,機器學習部分外包給你了一個北京的前同事,玩的是TensorFlow)
不過因為算法升級,加上新引進的ML集群,這個成本是居高不下了,服務器由原來的2臺(一臺國內,一臺香港),變成了現在的9臺,家底要掏干了啊。
Part6. 科學驗證
花了2個月左右緊張開發,18年年底算法終于升級完畢,文章也修正了,同時并行的ML訓練腳本進展還算順利(主要卡在采集谷歌的時候老是彈出人肉驗證,不知道谷歌用的什么高科技)。同時北京前同事的訓練結果也出來了,提供了寶貴的三個參數(k,b,文檔數)。
那么接下來就是驗證效果,為了保證驗證的準確性,科學性,碼迷主要從3個方面來驗證摩天樓相關性算法的準確性。
驗證1:對自定義語料內容(5個.info域名內容排序驗證)(正面驗證)
驗證2:另外準備100個自然搜索詞,驗證新相關性算法預測的排名與實際排名的重合度(反面交叉驗證)
驗證3:做3-5個嚴格按照摩天樓指導意見規劃內容的網站,看是否能排名到首頁(實戰驗證)
6.1 驗證1 結果:
整體來講,自己做的語料計算的排序結果跟谷歌的排序結果重合率不高,最多30%左右,目測谷歌對隨意拼湊的內容真的不友好。不過發現1點數據,側面印證了谷歌排序與TFIDF有關:
同一網站中(域名權重相同、外鏈相同),在Google中內容相關度高的更靠前。
6.2 驗證2 谷歌結果
驗證2方法是反面驗證跟正面驗證相結合的方法,碼迷使用了另外100個自然搜索詞,采集谷歌的TOP100文章結果作為訓練集,使用摩天樓的相關性排序方法排名后,再跟谷歌的排名結果做對比,驗證新相關性算法預測的排名與實際排名的重合度。
首頁50%的命中率!谷歌還是內容質量至上。而且從衰減趨勢上看,谷歌衰減很勻稱很穩健。
6.3 驗證2 百度結果
搞了谷歌,同一套程序,可以再驗證一下百度的排序。
38%左右的命中率,也側面印證了百度排序算法使用了相關性算法,只是比率比谷歌低10%。
不過大家仔細看百度的結果有個特點,從首頁排名到第三頁的命中率衰減很快,首頁38%,第二頁21%,然后第3,4,5,6頁都是個位數了。大家想想為什么百度衰減如此之快?
我是這樣認為:內容相關度是進百度前30的敲門磚,如果你的網站內容相關度超過某個閥值,百度排名會有特殊優待。而達不到閥值,就容易受其他因素干擾,造成排名不穩定。
重點來了,一旦你的內容相關度牛逼到一定程度,你的排名就穩如狗了。
6.4 結論
上面兩步的驗證結果我們可以得出以下3個結論:
結論1:搜索引擎確實是按照相關度排序的
結論2:谷歌相關度排序打分占總比50%左右
結論3:百度相關度排序打分占總比38%左右,比某快排說相關度占3成得分要高一些
結論4:通過百度衰減趨勢我們可以認為,相關度越厲害,首頁排名越穩定
Part7. 實戰驗證(百度谷歌雙排名!)
開發摩天樓的文章質量評分、相關詞建議功能在今年1月份緊張開發,于2月份正式實戰內測。如果用非指數詞做排名,就沒啥意義了,碼迷就選了2個指數都超過200的目標詞。
結婚禮物 百度指數300左右,
實戰案例具體請見:[結婚禮物]指數300+新站45天排名第2-百度谷歌雙首頁
生日禮物百度指數1000左右,
實戰案例具體請見:[生日禮物]1000+指數詞50天上百度+谷歌首頁
Part8. 以上
碼迷第一次寫這么長的技術文章,不知道大家有沒有看懂。碼迷還是重復文章開頭的話,摩天樓內容助手之所以有效果,離不開科學唯物的驗證方法,離不開探索本質的毅然決心、離不開百萬級的數據分析、更離不開最新最前沿的算法應用和神級網絡訓練預測。好的產品值得你投資。
本文網址: http://www.699tw.com/motianlou/devlog
留言評論