當(dāng)前位置:首頁(yè) >  站長(zhǎng) >  搜索優(yōu)化 >  正文

搜索常見的算法以及模型思考

  域名預(yù)訂/競(jìng)價(jià),好“米”不錯(cuò)過

寫這篇文章,緣自于前幾天部門內(nèi)部成員們進(jìn)行了一次部門內(nèi)部現(xiàn)有涉及的一些算法的review以及整理。不過比較囧的就是,由于boss不在,我們討論討論著就成了吐槽大會(huì),倒是有一半時(shí)間在吐槽產(chǎn)品以及業(yè)務(wù)部門了~~

不過這也算是一件可喜可賀的事情了,這也可以看做是我們數(shù)據(jù)部門,已經(jīng)由開輕型挖掘機(jī)向深挖階段邁步了。

因此,借此機(jī)會(huì),也對(duì)自己接觸過的,了解過的,或者做過的一些勉強(qiáng)稱得上算法的東西做一個(gè)梳理。其實(shí),就個(gè)人來說,本身就不是做算法出身的,在大學(xué)時(shí)代,學(xué)習(xí)的反倒是網(wǎng)絡(luò)方面多一些,更不知數(shù)據(jù)挖掘算法為何物。

其實(shí),就所謂算法而言,個(gè)人認(rèn)為,我有個(gè)同事說的很對(duì):所謂算法,并不是說那些復(fù)雜的數(shù)學(xué)模型才是算法,哪怕是你寫的一個(gè)簡(jiǎn)單的計(jì)算公式,只要能夠解決現(xiàn)有業(yè)務(wù)的痛點(diǎn),有了自己的模型思路,它就是一個(gè)算法,只是它可能不夠通用,只能解決特定業(yè)務(wù)需求而已。

在大規(guī)模的數(shù)據(jù)前提下,其實(shí)很多復(fù)雜的算法過程,反而效果沒有這么好,或者說,我們會(huì)想方設(shè)法去簡(jiǎn)化其過程。

舉個(gè)簡(jiǎn)單栗子:假設(shè)有一批大規(guī)模數(shù)據(jù)集,就以近千萬(wàn)篇博文為例。如果提供一篇博文,讓你去查詢與其相似度最高的top N,那我們的通常思路是什么?通常的做法是計(jì)算這篇博文與其他博文的相似度,至于相似度的計(jì)算方法就很多了,最簡(jiǎn)單的就是計(jì)算其向量夾角,根據(jù)向量夾角判定相似程度。OK,就算你用最簡(jiǎn)單的計(jì)算過程,你試想一下,運(yùn)算近千萬(wàn)次需要多久?或許,有的人說,俺使用hadoop,利用分布式的計(jì)算能力來完成這個(gè)任務(wù),但如果實(shí)際操作起來,你就會(huì)發(fā)現(xiàn)這是一個(gè)多么蛋疼的事情。

再舉一個(gè)簡(jiǎn)單栗子(好吧,多吃點(diǎn)栗子):比如SVM,這是一種難以收斂的算法,在大數(shù)據(jù)的前提下,有些人希望使用它,但又希望使用更多的數(shù)據(jù)來訓(xùn)練模型,畢竟手里數(shù)據(jù)量太大,很多人還是希望使用盡量多的數(shù)據(jù)訓(xùn)練的,以達(dá)到模型更準(zhǔn)確的目的。但是,隨著訓(xùn)練數(shù)據(jù)量的增大,像SVM這種難以收斂的算法,其耗費(fèi)的計(jì)算資源還是很巨大的。

東拉西扯說了這么多,自個(gè)的梳理工作還沒有完成呢!

一、這些年,我開過的挖掘機(jī)

(1)最早接觸的應(yīng)該是貝葉斯的分類了

貝葉斯算是分類算法中最簡(jiǎn)單的算法了,初學(xué)挖掘機(jī)算法的人十有八九第一個(gè)愛上的絕對(duì)是它。其實(shí),貝葉斯的原理真的很簡(jiǎn)單,就是依據(jù)統(tǒng)計(jì)學(xué)的最大概率原理。這么簡(jiǎn)單,但是就是尼瑪這么好用,多年依然屹立不倒。

訓(xùn)練過程就缺乏可陳了,基本上貝葉斯的都這樣,由于是文本,所以一套流程下來,分詞,去停詞,作為最基本的知識(shí)點(diǎn)向量,然后就計(jì)算模型概率了。不過比較有趣的是,分類過程是放在Storm里頭做的,相當(dāng)于這是一個(gè)實(shí)時(shí)的分類業(yè)務(wù)。

(2)說到了文本,自然少不了分詞算法了

其實(shí)說到分詞算法,反倒沒啥可說的。如今互聯(lián)網(wǎng)上各種開源的分詞工具,都已經(jīng)做的很好了,效果也差不了多少,想進(jìn)一步改進(jìn)的話也夠嗆。至于說深入到分詞算法的內(nèi)部,涉及上下文法分析,隱含馬爾科夫模型等東西,如果是個(gè)人出于興趣去研究,那我沒話說;如果是小公司,花費(fèi)人力物力去優(yōu)化分詞效果,我只能說他們閑著蛋疼;如果是大公司,人家金多任性也是可以理解的。

所以,至今來說,個(gè)人對(duì)于分詞方面的東西,也僅限于初步了解分詞算法的衍變,內(nèi)部大概涉及的算法,以及幾種分詞工具的使用。

其實(shí),在文本挖掘方面,僅僅針對(duì)于文本的分詞是不夠的,因?yàn)槲覀兪褂梅衷~拆分出來的單詞,往往很多跟業(yè)務(wù)都是沒有關(guān)系的,通常做法是,建立對(duì)應(yīng)業(yè)務(wù)字典,至于字典的建立,當(dāng)然也是需要分詞的,再進(jìn)行進(jìn)一步的加工,甚至可能會(huì)加上一些人工的工作。

(3)下一個(gè)就是實(shí)時(shí)熱點(diǎn)分析了

我也不知道這算不算是算法,說到實(shí)時(shí),自然跟Storm又有關(guān)系了(好吧,我承認(rèn)我是搞這個(gè)之后開始接觸數(shù)據(jù)的)。說到實(shí)時(shí)熱點(diǎn),可能大伙兒都摸不著頭腦,舉個(gè)簡(jiǎn)單栗子就明了了。

玩hadoop的童鞋都知道WordCount這個(gè)經(jīng)典栗子,MapReduce在Map到Reduce的過程中,自動(dòng)將相同的Key通過類似hash的方法聚合到一起了,所以,統(tǒng)計(jì)單詞這個(gè)需求通過MR來做是辣么的簡(jiǎn)單。

那Storm的實(shí)時(shí)WordCount呢?好吧,這也是一個(gè)能夠記錄到實(shí)時(shí)技術(shù)領(lǐng)域史書上的經(jīng)典案例(好吧,其實(shí)它就是一個(gè)Storm的HelloWorld)。Storm雖然沒有類似MR那種自動(dòng)Hash的功能,不過它也提供了一種數(shù)據(jù)分組流策略,也能達(dá)到類似的效果,并且它不像MR那樣是批量的,它是實(shí)時(shí)的、流式的,也就是說你能動(dòng)態(tài)的獲取到當(dāng)前變換的單詞詞頻。

實(shí)時(shí)熱點(diǎn)分析,如果我們把熱點(diǎn)映射成單詞,那我們是不是就可以實(shí)時(shí)的獲取到當(dāng)前Top N的熱點(diǎn)了。這個(gè)方向可是有很大的研究?jī)r(jià)值的,實(shí)時(shí)地掌握了用戶的熱點(diǎn)導(dǎo)向,我們就可以動(dòng)態(tài)的調(diào)整業(yè)務(wù)策略,從而衍生更大的數(shù)據(jù)價(jià)值。

不過,總體來說,這個(gè)數(shù)據(jù)模型更多依靠的是Storm這個(gè)實(shí)時(shí)工具的本身功能,模型設(shè)計(jì)上的東西反倒是少了。至于說算不算是算法模型,就跟前面所說的那樣,看個(gè)人看法吧,你說是就是了~~

(4)國(guó)內(nèi)很成熟的一種建模--推薦

就目前在國(guó)內(nèi)做數(shù)據(jù)挖掘的來說,可能分類與推薦是做的最多的兩種方向。分類就不多說了,就比如剛才所說的貝葉斯,簡(jiǎn)直就是分類中的鼻祖算法了。

可能一說到推薦算法,有人腦海里立馬就閃現(xiàn)出關(guān)聯(lián)規(guī)則、協(xié)同過濾、余弦相似性等這些詞。這是沒錯(cuò)的,但我要說的不是這個(gè)。其實(shí)個(gè)人想說的是推薦就兩個(gè)方向:基于用戶,基于內(nèi)容。

我們需要注意兩點(diǎn),我們推薦的對(duì)象是用戶,或者說是類似用戶這種有動(dòng)作行為的實(shí)體;而推薦的東西則就是內(nèi)容,他沒有動(dòng)作行為,但是他有不同的屬性,或者用更磚業(yè)說法描述就是他必然有知識(shí)點(diǎn)。

基于用戶推薦,我們看重的不是內(nèi)容這個(gè)實(shí)體,而是用戶本身的行為,我們認(rèn)為用戶的行為必然隱含著一些信息,比如,人的興趣導(dǎo)向,那么既然你有了相關(guān)的行為,那么我按照你的行為去給你推薦一些東西,這總是有一定道理的。

基于內(nèi)容的推薦,我們的側(cè)重點(diǎn)則是內(nèi)容,這就跟用戶的歷史行為無(wú)關(guān)了。我們潛意識(shí)的認(rèn)為,既然你會(huì)看這個(gè)內(nèi)容,那么跟這個(gè)內(nèi)容有關(guān)系的內(nèi)容,你是不是也感興趣呢?或許這樣說有失偏頗,但是大體方向是對(duì)的。

至于之前說的那些關(guān)聯(lián)規(guī)則也好,協(xié)同過濾也好,余弦相似性也好,其實(shí)就是研究知識(shí)點(diǎn)與知識(shí)點(diǎn)之間關(guān)系所建立的模型。

針對(duì)于基于內(nèi)容推薦,其知識(shí)點(diǎn)就是內(nèi)容之中的各種屬性,比如影片推薦,其知識(shí)點(diǎn)可能就是各種評(píng)論數(shù)據(jù)、點(diǎn)播數(shù)據(jù)、頂踩數(shù)據(jù)、影片類型、演員、導(dǎo)演以及其中的一些情感分析等等;又比如博文,其知識(shí)點(diǎn)可能就是一個(gè)個(gè)帶權(quán)的詞,至于這個(gè)詞就涉及到詞的抽取了,再說到詞的權(quán)重,可能就會(huì)涉及到TFIDF模型、LDA模型了。

而針對(duì)基于用戶,其知識(shí)點(diǎn)最直接的體現(xiàn)就是用戶的行為了,就是用戶與內(nèi)容之間的關(guān)系,不過深究下去,又會(huì)發(fā)現(xiàn),其實(shí)跟內(nèi)容的知識(shí)點(diǎn)也緊密聯(lián)系,只不過這可能不止一個(gè)內(nèi)容實(shí)體,而是多個(gè)內(nèi)容實(shí)體的集合。

(5)文本單詞的加權(quán)模型

前面正好提到了TFIDF以及LDA模型,所以順帶也就講講文本單詞相關(guān)的加權(quán)模型吧。

說到文本挖掘,可能大部分人都熟悉TFIDF模型,既然涉及到了,那就簡(jiǎn)單的說一說。我們知道,文本的知識(shí)點(diǎn)就是一個(gè)個(gè)的單詞,雖然都是單詞,但也總有哪個(gè)詞重要程度高一點(diǎn),哪些詞重要程度會(huì)低一點(diǎn)吧。

或許有人會(huì)說,出現(xiàn)多的詞就重要。沒錯(cuò),那就是詞頻,簡(jiǎn)單的來想,這種思路并沒有錯(cuò),并且,早期的文本挖掘模型就是這么做的。當(dāng)然,效果肯定是一般般的。因?yàn)槟切┙?jīng)常出現(xiàn)的詞往往都是一些沒用的常用詞,對(duì)文章的作用并不大。

直到TFIDF模型的出現(xiàn),才根本性地解決了文本挖掘知識(shí)點(diǎn)建模的問題。如何判斷一個(gè)詞的重要程度,或者專業(yè)點(diǎn)的說法就是判斷其對(duì)文章的貢獻(xiàn)度?TFIDF通過詞的詞頻來加大詞在文章中的權(quán)重,然后通過其在多個(gè)文章中的文檔頻率來降低其在文章中的權(quán)重。說白了就是降低了那些公共詞的權(quán)重,把真正貢獻(xiàn)度大的詞給暴露出來。這基本就是TFIDF的基本思路了,至于詞頻權(quán)重怎么加大,文檔頻的權(quán)重怎么降低,這就涉及到具體的模型公式了,根據(jù)不同的需求進(jìn)行調(diào)整就OK了。

關(guān)于文章知識(shí)點(diǎn)主題建模的另外一種很重要的模型,那就是LDA模型了。它是一種比較通用的文章主題模型,它通過概率學(xué)原理,說白了就是貝葉斯,建立起知識(shí)點(diǎn)(也就是詞),主題和文章的三層關(guān)系結(jié)構(gòu)。詞到主題有一個(gè)概率矩陣,主題到文章也有一個(gè)概率矩陣的映射關(guān)系。

好吧,LDA不能再說下去了,再說下去就露餡了。因?yàn)椋骋膊皇呛芏?。?duì)于LDA,雖然部門內(nèi)部有在使用,但是我沒有做過具體的模型,只是和同事討論過它,或者更確切的說向同事請(qǐng)教過它的一些原理以及一些設(shè)計(jì)思路。

(6)相似度計(jì)算

相似度計(jì)算,比如文本的相似度計(jì)算。它是一個(gè)很基礎(chǔ)的建模,很多地方就用的到它,比如剛才我們說到的推薦,其內(nèi)部關(guān)聯(lián)的時(shí)候,有時(shí)候就會(huì)涉及到計(jì)算實(shí)體間的相似度。

關(guān)于文本的相似度,其實(shí)方法有很多。通常會(huì)涉及到TFIDF模型,拿到文本的知識(shí)點(diǎn),也就是帶權(quán)的詞,然后通過這些帶權(quán)的詞去做一些相似度的計(jì)算。

比如,余弦相似模型,就是計(jì)算兩個(gè)文本的余弦夾角,其向量自然就是那些帶權(quán)的詞了;又比如,各種算距離的方法,最著名的歐式距離,其向量也依然是這些詞。還有很多諸如最長(zhǎng)公共子串、最長(zhǎng)公共子序列之類的模型,個(gè)人就不是很清楚了。

總之,方法很多,也都不是很復(fù)雜,原理都很像。至于哪個(gè)合適,就得看具體的業(yè)務(wù)場(chǎng)景了。

(7)文本主題程度--信息熵

曾經(jīng)和同事嘗試對(duì)數(shù)百萬(wàn)的博文進(jìn)行領(lǐng)域劃分,把技術(shù)博文劃分成不同的領(lǐng)域,比如大數(shù)據(jù)領(lǐng)域、移動(dòng)互聯(lián)網(wǎng)領(lǐng)域、安全領(lǐng)域等等,其實(shí)說白了還是分類。

一開始我們使用貝葉斯進(jìn)行分類,效果還行,不過最終還是使用SVM去建模了。這都不是重點(diǎn),重點(diǎn)是我們想對(duì)劃分到某一領(lǐng)域下的技術(shù)博文進(jìn)行領(lǐng)域程度判斷。

我們想了很多辦法,嘗試建立了數(shù)據(jù)模型,但效果都不是很理想,最終回歸到了一個(gè)最本質(zhì)的方法,那就是使用文本的信息熵去嘗試描述程度,最終結(jié)果還是不錯(cuò)。這又讓我再一次想到同事說過的那句話:簡(jiǎn)單的東西不一定不好用!

信息熵描述的是一個(gè)實(shí)體的信息量,通俗一點(diǎn)說就是它能夠描述一個(gè)實(shí)體的信息混亂程度。在某一個(gè)領(lǐng)域內(nèi),知識(shí)點(diǎn)都是相似的,都是那些TFIDF權(quán)重的詞,因此,是不是可以認(rèn)為,一個(gè)文本其信息熵越小,其主題越集中越明顯,信息的混亂度越低,反過來說,有些文本主題很雜亂,可能包含了多種領(lǐng)域的一些東西,其領(lǐng)域的程度就會(huì)降低。

最起碼表面上,這種說法是行得通的,并且實(shí)際的效果還不錯(cuò)。

(8)用戶畫像

用戶畫像這個(gè)方向可能是近兩年比較火的方向了。近年來,各大互聯(lián)網(wǎng)公司,各大IT企業(yè),都有意識(shí)的開始從傳統(tǒng)的推薦到個(gè)性化推薦的道路衍變,有些可能做的深一些,有些可能淺一些。

商業(yè)價(jià)值的核心是用戶,這自然不用多說。那么如何結(jié)合用戶進(jìn)行推薦呢,那就是用戶的屬性,那關(guān)鍵是用戶的屬性也不是一開始就有的,我們所有的只是少量用戶的固有屬性以及用戶的各種行為記錄。我們連用戶是啥子里情況都不清楚,推個(gè)毛?。?/p>

所以,我們需要了解用戶,于是對(duì)用戶進(jìn)行用戶畫像分析就很有必要了,其實(shí)就是把用戶標(biāo)簽化,把用戶標(biāo)記成一個(gè)個(gè)屬性標(biāo)簽,這樣,我們就知道每一個(gè)用戶大概是什么情況了。一些商業(yè)行為,也就有了目的性。

至于說如何對(duì)用戶的每一個(gè)畫像屬性進(jìn)行填充,這就看具體的情況了。簡(jiǎn)單的,用幾個(gè)簡(jiǎn)單模型抽取到一些信息填充進(jìn)去;復(fù)雜的,使用復(fù)雜的算法,通過一些復(fù)雜的轉(zhuǎn)換,給用戶打上標(biāo)簽。

(9)文章熱度計(jì)算

給你一大坨文章,你如何判斷哪篇文章比較熱,哪篇文章比較矬,換個(gè)說法就是,我進(jìn)入一個(gè)文章列表頁(yè),你能給我提供一個(gè)熱文章的排序列表嗎?

可能大部分的思路都很直接,拿到文章能夠體現(xiàn)熱度的屬性,比如點(diǎn)擊率、評(píng)論情感分析、文章的頂踩情況,弄個(gè)簡(jiǎn)單加權(quán)計(jì)算模型,咔咔就出來了。

本質(zhì)上這沒錯(cuò),簡(jiǎn)單的模型在實(shí)際的情況中不一定不好使,部分屬性也的確能夠體現(xiàn)出一篇文章的熱度,通過加權(quán)計(jì)算的方式也是對(duì)的,具體的權(quán)重就需要看具體情況了。

但如果這么做的話,實(shí)際上會(huì)出現(xiàn)什么情況?今天我來了,看見了這個(gè)熱度推薦列表,明天我來了,還是看到這個(gè)列表,后天我來了,依然是這個(gè)列表。

尼瑪,這是啥情況,咋天天都是這個(gè)破列表,你要我看幾遍?!不錯(cuò),這就是現(xiàn)實(shí)情況,造成的結(jié)果就是,越熱的文章越來越熱,越冷的文章越冷,永遠(yuǎn)的沉底了,而熱的文章永遠(yuǎn)在前頭。

如何解決這個(gè)問題?我們把時(shí)間也加入?yún)⒖?,我們要把老文章通過降權(quán)的方式,把他人為的沉下去,讓新文章有出頭的機(jī)會(huì)。這就是說,需要我們把創(chuàng)建時(shí)間也加入權(quán)重中,并且隨著時(shí)間推移,衰減其熱度權(quán)重,這樣,就不會(huì)出現(xiàn)熱的一直熱,冷的一直冷了。至于衰減的曲線,就需要看具體業(yè)務(wù)了。

這樣就能解決根本問題了嗎?如果文章本身信息量就不夠呢,比如,本身大部分就是新文章,沒有頂踩,沒有評(píng)論,甚至連點(diǎn)擊曝光都很少,那用之前的模型就行不通了。

那是不是就無(wú)解了呢?方法還是有的,比如,我們尋找到一個(gè)相似的站點(diǎn),他也提供了類似最熱文章推薦的功能,并且效果還很不錯(cuò)。那么,我們是不是就可以借助它的熱度呢?我們通過計(jì)算文章相似度的方法,復(fù)刻出一個(gè)最熱列表出來,如果站點(diǎn)性質(zhì)相似,用戶性質(zhì)相似,文章質(zhì)量不錯(cuò),相似度計(jì)算夠準(zhǔn)確,相信這個(gè)熱度列表的效果也是會(huì)不錯(cuò)滴(這方法太猥瑣了~~)。

(10)Google的PageRank

首先,別誤會(huì),我真心沒有寫過這個(gè)模型,我也沒有條件去寫這個(gè)模型。

認(rèn)識(shí)它了解它,緣自于跟幾個(gè)老同學(xué)合伙搞網(wǎng)站(網(wǎng)賺客www.wzk001.com,有興趣的可以去看看)。既然搞網(wǎng)站吧,作為IT人猿,一些基本的SEO的技術(shù)還是需要了解的。于是,我了解到:想要增大網(wǎng)站的權(quán)重,外鏈?zhǔn)遣豢扇鄙俚摹?/p>

我跟我?guī)讉€(gè)老同學(xué)說,你們?nèi)プ鐾怄湴?,就是逮住網(wǎng)站就放咱網(wǎng)站的鏈接。他們問到:一個(gè)網(wǎng)站放的鏈接越多越好嗎?放的網(wǎng)站越多越好嗎?啥網(wǎng)站放比較好?這都不是重點(diǎn),關(guān)鍵是他們問:為毛???

把我問的那個(gè)是啞口無(wú)言啊,于是我一怒之下就去研究PageRank了。PageRank具體的推演過程我就不說了(況且憑借我這半吊子的水平也不一定能說清楚),其核心思想有幾個(gè):當(dāng)一個(gè)網(wǎng)頁(yè)被引用的次數(shù)越多時(shí),其權(quán)重越大;當(dāng)一個(gè)網(wǎng)頁(yè)的權(quán)重越大時(shí),其引用的網(wǎng)頁(yè)權(quán)重也隨之增大;當(dāng)一個(gè)網(wǎng)頁(yè)引用的次數(shù)越多時(shí),它引用的網(wǎng)頁(yè)給它帶來的權(quán)重越低。

當(dāng)我們反復(fù)迭代路上過程時(shí),我們會(huì)發(fā)現(xiàn)某個(gè)網(wǎng)頁(yè)的的排名基本就固定了,這就是PageRank的基本思路。當(dāng)然也有個(gè)問題需要解決,比如,初始網(wǎng)頁(yè)如何給定其初始權(quán)重,高計(jì)算迭代過程如何簡(jiǎn)化其計(jì)算過程等等。這些問題,在Google的實(shí)際操作中,都做了比較好的優(yōu)化。

(11)從互聯(lián)網(wǎng)上定向抓取數(shù)據(jù)

其實(shí)我估摸著這跟算法沒很大關(guān)系了,不過既然有數(shù)據(jù)的獲取設(shè)計(jì)流程,也勉強(qiáng)算是吧。

之所以有這個(gè)需求,是那段時(shí)間搞網(wǎng)站搞嗨了,給自己整了個(gè)工作室網(wǎng)站,想給別人尤其是一些小企業(yè)搭建包括輕度定制企業(yè)網(wǎng)站(是不是挺瞎折騰的-_-),也確實(shí)是做了幾個(gè)案例(我的工作室網(wǎng)站:www.mite8.com,有興趣去看看)。

于是乎,俺就想啊,如何給自己找客戶?工作室的客戶應(yīng)該是那些小企業(yè)的老板,并且還必須是目前沒有企業(yè)門戶的。作為一個(gè)搞數(shù)據(jù)的程序猿,并且還是開挖掘機(jī)的,雖然是半路出身非藍(lán)翔畢業(yè)且無(wú)證上崗,但好歹是挖過幾座山頭的呀。

如今是互聯(lián)網(wǎng)橫行的時(shí)代,他們總會(huì)在互聯(lián)網(wǎng)上留下一些蛛絲馬跡,我要把它給逮出來!我的目標(biāo)很明確,我要拿到那些無(wú)企業(yè)網(wǎng)站的企業(yè)郵箱,然后做自己EDM營(yíng)銷(電子郵件營(yíng)銷)。

1)我先從智聯(lián)檢索頁(yè)面,抓取了企業(yè)規(guī)模小于40人的企業(yè)名稱,事實(shí)證明智聯(lián)招聘的頁(yè)面還是很好解析的,都是靜態(tài)的,并且格式很規(guī)整,所以很容易就分析出一批小企業(yè)的企業(yè)名來了;

2)拿到了企業(yè)名,我如何判斷這個(gè)企業(yè)已經(jīng)有了獨(dú)立的企業(yè)官網(wǎng)?通過分析,我發(fā)現(xiàn)通過搜索引擎檢索這個(gè)企業(yè)名的時(shí)候,如果有企業(yè)官網(wǎng)的話,一定是在首頁(yè)。并且其頁(yè)面地址也是有一定規(guī)律的,那就是:獨(dú)立官網(wǎng)的開頭通常是www開頭的,長(zhǎng)度一般不會(huì)太長(zhǎng),收尾通常是index.html、index.php以及index.asp等等。

通過這些規(guī)則,我就可以將那些有企業(yè)官網(wǎng)的企業(yè)名給pass掉了。其中遇到了兩個(gè)難點(diǎn),一個(gè)就是搜索引擎的很多頁(yè)面源碼都是動(dòng)態(tài)加載的,于是我模擬了瀏覽器訪問的過程,把頁(yè)面源碼給抓取下來了,這也是爬蟲的通用做法;第二個(gè)就是,一開始我嘗試的是通過百度去獲取,結(jié)果百度貌似是有放結(jié)果抓取的一些措施,導(dǎo)致結(jié)果不如人意,于是我換了目的,使用的是360的檢索,問題就解決了(事實(shí)證明百度在搜索引擎方面比360還是強(qiáng)了不少的),并且效果也差不多。

3)解決了排除的問題,那根本的問題就來了,我如何拿到企業(yè)的企業(yè)郵箱?通過分析搜索引擎的返回結(jié)果,我發(fā)現(xiàn)很多小企業(yè)喜歡用第三方網(wǎng)站提供的一些公司黃頁(yè),里頭包含了企業(yè)聯(lián)系郵箱;還有部分公司發(fā)布的招聘信息上會(huì)帶有企業(yè)郵箱。

通過數(shù)據(jù)解析,終于拿到了這部分?jǐn)?shù)據(jù),最后還做了一些類似郵箱是否有效的基本解析等等。最終拿到了大概3000多個(gè)企業(yè)郵箱,有效率達(dá)到了80%以上。

問題是解決了,但還是有些地方需要優(yōu)化的:首先就是效率問題,我整整跑了近12個(gè)小時(shí),才把這3000多個(gè)郵箱給跑出來,太多需要解析的地方,并且模擬的瀏覽器在效率上不高;其次就是對(duì)郵箱的有效不是很好判斷,有些郵箱根本就是人為瞎寫的;還有就是部分網(wǎng)站對(duì)郵箱進(jìn)行了圖片化混雜處理,即做成了類似的驗(yàn)證碼的東西,防抓取,我沒有對(duì)圖片類的郵箱數(shù)據(jù)進(jìn)行解析,其實(shí)這個(gè)問題也是有解決辦法的,我們拿到一些樣本圖片,進(jìn)行圖片字母識(shí)別的訓(xùn)練,這樣就能解析出其中的郵箱了。

總體來說,這次體驗(yàn)還是挺有成就感的,畢竟在業(yè)余的時(shí)間解決了自己實(shí)際中的一些痛點(diǎn),熟練了一些所學(xué)到的東西,或者說實(shí)施的過程中學(xué)到了很多東西。

ps:github上檢索webmite就是這個(gè)項(xiàng)目了,我把代碼托管到了github上,或者從我的博客上進(jìn)入。

二、對(duì)自己做一個(gè)總結(jié)吧

其實(shí)個(gè)人的缺點(diǎn)很明顯,首先就是沒有經(jīng)過系統(tǒng)的數(shù)據(jù)挖掘?qū)W習(xí)(沒去過藍(lán)翔,挖掘機(jī)自學(xué)的),也就是野路子出身。因此對(duì)很多算法的原理不夠清楚,這樣的話,對(duì)于有些業(yè)務(wù)場(chǎng)景,可能就提不出有建設(shè)性的意見了。并且,對(duì)于很多算法庫(kù)的使用,還是不夠了解的。

其次就是在數(shù)學(xué)功底上有所欠缺。我們知道,一些復(fù)雜的算法,是需要有強(qiáng)大的數(shù)學(xué)基礎(chǔ)的。算法模型,其本質(zhì)就是數(shù)學(xué)模型。因此,這方面也是我的短板吧。

由于個(gè)人是由做大數(shù)據(jù)偏向挖掘的,基于大數(shù)據(jù)模式下的數(shù)據(jù)挖掘過程,可能跟傳統(tǒng)的數(shù)據(jù)過程有很大的不一樣。比如,數(shù)據(jù)的預(yù)處理過程,大數(shù)據(jù)挖掘的預(yù)處理很多依賴的是目前比較流行的分布式的一些開源系統(tǒng),比如實(shí)時(shí)處理系統(tǒng)Storm、消息隊(duì)列Kafka、分布式數(shù)據(jù)收集系統(tǒng)Flume、數(shù)據(jù)離線批處理Hadoop等等,在數(shù)據(jù)分析存儲(chǔ)上可能依賴的Hive以及一些Nosql會(huì)多一些。反倒對(duì)于傳統(tǒng)的一些挖掘工具,比如SAS、SPSS、Excel等工具,個(gè)人還是比較陌生的。不過這也說不上是缺點(diǎn)吧,側(cè)重點(diǎn)不一樣。總體而言,大規(guī)模數(shù)據(jù)的挖掘?qū)?huì)是趨勢(shì)。

三、給小伙伴們的一些建議

說了這么多,前面的那些東西可能對(duì)大伙兒的用處并不是很大,當(dāng)然對(duì)于開挖掘機(jī)的朋友還是有一定幫助的?,F(xiàn)在我想表達(dá)的東西可能跟挖掘就沒有直接的關(guān)系了,更多的給動(dòng)物園動(dòng)物(程序猿,攻城獅)的學(xué)習(xí)以及自我進(jìn)化的建議。

(1)為了學(xué)到東西,臉皮是毛玩意兒?

對(duì)于這點(diǎn),個(gè)人可是深有體會(huì)。想當(dāng)年(好吧,這個(gè)詞還是很蛋疼的),大學(xué)那會(huì)兒專業(yè)是信息安全,偏向于網(wǎng)絡(luò)多一點(diǎn),因此在語(yǔ)言方面更多的是c和c++,對(duì)于java可是連課都沒有開的,說白了就是用java寫個(gè)HelloWorld都不會(huì)。

剛畢業(yè)那會(huì)兒,興沖沖地跑去公司寫c,結(jié)果不到一個(gè)月,新項(xiàng)目來了,需求變了(尼瑪,開發(fā)最怕的就是這句話),變了就變了吧,尼瑪要研究大數(shù)據(jù),用c能干毛啊!一些個(gè)開源系統(tǒng)工具,十個(gè)倒是有九個(gè)是java寫的。當(dāng)時(shí)我就哭了!

于是就糾纏著一個(gè)同組的伙伴,逮住時(shí)間就問他問題,有些問題在熟悉java的人看來,絕對(duì)是*又*的。但是對(duì)于初學(xué)者來說,絕對(duì)是金玉良言,人家一句話的事,如果自己去查找,可能是幾個(gè)小時(shí)都搞不定。一個(gè)月之后,總算入門了,后面就輕松多了。

往后的一些日子里,遇到了一些問題,總是會(huì)厚著臉皮纏著交流群中的一些大拿們死問,慢慢地就進(jìn)步了。近段時(shí)間,開始學(xué)習(xí)scala,幸好旁邊有個(gè)scala小高手,哈哈,可苦了他了~~

所以,遇到自己不懂的東西,不要怕自己的問題簡(jiǎn)單不好意思問,一定要臉皮厚!你連這么簡(jiǎn)單的問題都不懂,你還有資格擔(dān)心自己的臉皮?!

(2)交流與分享

對(duì)于交流與分享這點(diǎn)感想,緣自于2012年末研究Storm的那段時(shí)間。Storm在2012年那會(huì)兒,并不像今天這樣火,研究的人也不多,無(wú)處交流,可用的資料就更少了,所以解決起問題來很費(fèi)事。

當(dāng)然其中有幾個(gè)博客給我的幫助還是很大的,包括了“大園那些事兒”、“莊周夢(mèng)蝶”等幾個(gè)博客,都是早期研究Storm并且分享經(jīng)驗(yàn)技術(shù)的博客。當(dāng)時(shí)我就萌生了寫博客的想法。

在往后的時(shí)間里,我花費(fèi)了很大一部分精力,將我學(xué)到的Storm相關(guān)的東西整理了出來,并且由于當(dāng)時(shí)感嘆沒有一個(gè)很好的交流平臺(tái),并把整理的資料、代碼、經(jīng)驗(yàn)分享到了平臺(tái)以及博客中。

由于我一直主張“進(jìn)步始于交流,收獲源于分享”這個(gè)理念,不斷有搞技術(shù)的朋友加入到這個(gè)大家庭中,并且不斷的把一些經(jīng)驗(yàn)技術(shù)反饋到群貢獻(xiàn)中,達(dá)到了一個(gè)良性的循環(huán)。短短不到兩年的時(shí)間,群已經(jīng)發(fā)展到了千人,并且無(wú)論是技術(shù)氛圍還是群?jiǎn)T素質(zhì),在IT技術(shù)群中絕對(duì)可以算的上名列前茅的。

就個(gè)人從中的收獲來看,這種交流是能夠?qū)W到很多的東西的,你要相信三人行必有我?guī)?,這句話是有道理的。而分享則是促進(jìn)交流的基石,只有讓大家意識(shí)到自己所收獲的東西是源自于別人的分享,這樣才能讓更多的人參與進(jìn)來。

兩年多來,我也一直堅(jiān)持自己寫博客,分享一些自己的經(jīng)驗(yàn)技術(shù),或者沒有這么高大上,哪怕是對(duì)自己涉及到的一些技術(shù)做一個(gè)備份也好啊。我的個(gè)人博客站SEO學(xué)堂www.wocaoseo.net如今也有不少文章了,其他人能用到就最好,用不到,權(quán)當(dāng)自己做的一個(gè)技術(shù)文檔的備份(博客蟲中已經(jīng)有不少搞技術(shù)的朋友分享自己技術(shù)了,有想法有分享意向的朋友也可以找我哦)。

其實(shí)說了這么多,想表達(dá)的意思就兩點(diǎn):多多與他人交流,聽取他人的意見;至于分享自己的所得,這就是屬于良心發(fā)現(xiàn)了。

(3)多看書,隨時(shí)給自己大腦補(bǔ)充營(yíng)養(yǎng)

其實(shí)這點(diǎn)也不止是給大伙兒的建議,也算是給自己的一個(gè)告誡吧。

個(gè)人在這方面做的也不是很好,很久之前給自己定了一個(gè)目標(biāo):一個(gè)月看完一本書。結(jié)果工作的問題,其他雜七雜八的事情很多,這個(gè)一直沒有落實(shí)下來,至今買來的《我的互聯(lián)網(wǎng)方法論》才看了前幾章。最好的案例算是上上一個(gè)月,我花費(fèi)了近一個(gè)月上下班等地鐵、倒地鐵的零碎時(shí)間,終于把《構(gòu)建之法:現(xiàn)代軟件工程》給看完了。

書中有沒有顏如玉我不知道,但書中肯定有黃金屋。平時(shí)多看一些書,多學(xué)一些,跳槽時(shí)跟面試官總是能多嘮一些的,哈哈,提薪酬的時(shí)候是不是底氣就足了些?!

關(guān)于說看書的內(nèi)容,工作中涉及的一些必須了解,必須看的我就不多說了。如果業(yè)余時(shí)間比較多,還是推薦多涉獵一些其他相關(guān)領(lǐng)域,畢竟,人不可能一輩子就只窩在自己那一畝三分地上的;就算你一直堅(jiān)持某個(gè)技術(shù)方向,隨著時(shí)間的推移,技術(shù)的升華也必然會(huì)涉及到其他很多的相關(guān)知識(shí)。

所以,多看書,多充實(shí)一下自己,這一定是對(duì)的!

(4)經(jīng)常梳理一下自己,整理一下自己

經(jīng)常給自己做一下梳理工作:自己目前掌握了哪些東西,目前自己缺乏什么東西,掌握的東西夠不夠,缺乏的東西如何去彌補(bǔ)。這些都是需要我們經(jīng)常去反思的,只有整理清楚了自己,才知道自己要干什么,才有目標(biāo)。

當(dāng)然梳理完了,你還需要去實(shí)際操作,不然的話,你會(huì)發(fā)現(xiàn),每一次梳理,結(jié)果都是一樣的。我們需要在每一次梳理過后,進(jìn)行對(duì)比,了解自己進(jìn)步了多少。當(dāng)然每一次梳理,都是為了給自己做一個(gè)計(jì)劃,計(jì)劃自己大概需要在哪些方向進(jìn)行加強(qiáng)。

其實(shí)很多人一到了跳槽季就猶猶豫豫,其實(shí)他們對(duì)目前的工作已經(jīng)是有所不滿的了,但是總感覺自己能力不夠,可能辭了也難找工作。這是因?yàn)樗麄儗?duì)自己認(rèn)識(shí)的不夠,連他自己都不明白自己到底有多少料,那么,請(qǐng)問面試官會(huì)知道嗎?

如果,你對(duì)自己掌握了多少東西都一清二楚,核心領(lǐng)域已經(jīng)熟悉了,相關(guān)領(lǐng)域也有所涉獵,那么你還在擔(dān)心什么呢?如果真有面試官對(duì)你說no,你可以說:hi,剛好我也沒什么時(shí)間,我還回去挑選offer呢!

(5)善于在實(shí)際生活中尋找學(xué)習(xí)的動(dòng)力

人是懶惰的,很多時(shí)候,有些事情可做可不做的,往往人都是不去做的,也不愿意去深根究底。

這個(gè)我很想學(xué),那個(gè)我也很想了解,關(guān)鍵是一到大周末,我更想躺被窩!說到底,就是沒有學(xué)習(xí)的動(dòng)力!

也就是說,我們要善于在實(shí)際的生活中,尋找到推動(dòng)我們?nèi)W(xué)習(xí)的理由。

舉幾個(gè)簡(jiǎn)單的栗子:

1)之前也說過,有段時(shí)間在研究網(wǎng)站。為了讓網(wǎng)站推廣出去,各種去研究SEO,現(xiàn)在來看,自己雖然遠(yuǎn)遠(yuǎn)達(dá)不到一個(gè)SEO專業(yè)人員的標(biāo)準(zhǔn),但最起碼是知道了為毛通過搜索引擎檢索,有些網(wǎng)頁(yè)就排在前面有些就排在后面(PageRank算法);也知道了怎么去編譯一篇文章,更好的方便搜索引擎收錄(等俺失業(yè)了,不搞挨踢了,去做網(wǎng)編估計(jì)也是行的,又多了一條活路,哈哈)等等。

2)為了給EDM尋找目標(biāo),我自己使用業(yè)余的時(shí)間去分析互聯(lián)網(wǎng)上的數(shù)據(jù),然后寫代碼,跑數(shù)據(jù),測(cè)試數(shù)據(jù)等。其實(shí),在那之前,我對(duì)爬蟲的了解是不多的,對(duì)于網(wǎng)頁(yè)數(shù)據(jù)的解析也不在行,這完全都是通過“從互聯(lián)網(wǎng)抓取有用數(shù)據(jù)”的個(gè)人需求上去驅(qū)動(dòng)的。還不止如此,拿到郵箱之后,為了讓EDM郵件看起來更“磚業(yè)”一點(diǎn),我開始自學(xué)如何使用html來制作好看的電子營(yíng)銷郵件頁(yè)面。

3)曾經(jīng)有一段時(shí)間,工作很是清閑,突發(fā)奇想的把大學(xué)時(shí)想寫小說的夢(mèng)給圓了。于是就開始在縱橫小說網(wǎng)上寫小說。不過,這都不是重點(diǎn),重點(diǎn)是縱橫要求每一個(gè)作者給自己的小說配小說封面。我去問了一下,尼瑪一張破封面需要20多大洋。心想,一張破封面就要*洋,自己都是搞IT的人,干脆不自己P一個(gè)呢。于是,我開始撿起了大學(xué)時(shí)期放棄的PS學(xué)習(xí)計(jì)劃,只用了兩個(gè)星期,PS基本功能就熟練了。后來的話,自己的封面當(dāng)然是搞定了,并且還服務(wù)了至少數(shù)十位作者朋友們。當(dāng)然,這都是題外話了。至于小說,哈哈,不但簽約了,稿費(fèi)還是掙了上千大洋,關(guān)鍵是過了一把寫小說的癮。在PS技術(shù)方面,雖然跟專業(yè)的前端人員比不得,但是改改圖、修修照片還是木有問題滴。

4)遠(yuǎn)的太遠(yuǎn),說一個(gè)近一點(diǎn)的事吧。前一段時(shí)間開始學(xué)習(xí)scala,其實(shí)就個(gè)人需求來說,寫那個(gè)項(xiàng)目用java來寫也完全能夠搞定,但關(guān)鍵是我對(duì)我自己說,錯(cuò)過了這次機(jī)會(huì),下次說不定啥時(shí)候才有決心去學(xué)習(xí)這個(gè)很有前途的語(yǔ)言了。于是,狠下心使用這個(gè)全新的語(yǔ)言去開發(fā),過程雖然磕磕絆絆,畢竟馬上使用一種陌生的語(yǔ)言去敲代碼是很蛋疼的事,但一個(gè)星期來,結(jié)果還是不錯(cuò)的,最起碼一些基本的用法是會(huì)了。完事開頭難,熟悉了一些基本的東西,剩下的就是累積的過程了。

其實(shí)這些歸結(jié)起來就一個(gè)觀點(diǎn):我們要適時(shí)的給自己找一些理由,逼著我們自己去學(xué)習(xí),去獲取新的東西,去提升自己。

或許有人會(huì)說,哥我天天加班,還有毛線時(shí)間去問問題、去交流、去看書,大周末的好不容易有假期了,吃飽了我不去睡覺去給自己找動(dòng)力干不給錢的活,我腦抽?。?!好吧,如果你是這么想的,抱歉耽誤了你這么多睡覺的時(shí)間。

其實(shí)上面說了這么多零碎的栗子,關(guān)鍵還是在于態(tài)度!你有沒有想學(xué)習(xí)的欲望,有沒有提升自己、升華自己的想法,有沒有升職、加薪、當(dāng)上UFO、迎娶白富美的念頭。是的,這些東西都是自己去做的,沒人逼你。如果你有這些想法的話,那么這些東西多多少少還是有一些幫助的。

除了對(duì)待事情的態(tài)度,我們的心態(tài)也很重要,看待事情要樂觀一點(diǎn)。前幾天,群里有個(gè)搞互聯(lián)網(wǎng)招聘的朋友問我:你是搞技術(shù)的吧?我說是。他說我認(rèn)識(shí)很多搞技術(shù)的都很悶,不像你這么開朗。我說我不想哪天死在了馬桶上~~

搞IT的給大部分人的映象確實(shí)是悶騷、不善言談、不善交際。其實(shí)也是,每天大量的工作,領(lǐng)導(dǎo)又開會(huì)訓(xùn)人了、產(chǎn)品這邊需求又改了,確實(shí)讓人瘋狂。工作壓力大是IT人的標(biāo)準(zhǔn)屬性了。

我們需要調(diào)整好自己的心態(tài),就像之前所說的,學(xué)習(xí)一個(gè)東西,雖然可能會(huì)占用本來就不多的業(yè)余時(shí)間,但是我們應(yīng)該不是那種單純?yōu)榱私鉀Q問題而去學(xué)習(xí),去獲取,當(dāng)成一種提升自己、升華自己的途徑,而不是逼不得已的無(wú)奈之舉。如果一份工作,你確認(rèn)自己不喜歡,那就別猶豫,果斷跳吧!腦中有貨還怕找不到買家!

時(shí)刻警醒自己對(duì)待任何事情要有一個(gè)好的態(tài)度,認(rèn)清自己,抓住一切機(jī)會(huì)提升自己、升華自我,保持一個(gè)良好的心態(tài),這就是我想說的東西。

吭吭唧唧說了一大坨,其實(shí)我也知道很多是廢話,但是我依然希望,我的這些廢話能夠幫助到你,做為同一個(gè)動(dòng)物園里的人,一起努力吧!

文章轉(zhuǎn)自公眾號(hào):SEO實(shí)戰(zhàn)營(yíng)(ID:ilottecn),原文地址:https://mp.weixin.qq.com/s/OrZxvK5PqM4woxPDTmtdeQ

申請(qǐng)創(chuàng)業(yè)報(bào)道,分享創(chuàng)業(yè)好點(diǎn)子。點(diǎn)擊此處,共同探討創(chuàng)業(yè)新機(jī)遇!

相關(guān)標(biāo)簽
搜索算法

相關(guān)文章

  • 揚(yáng)塵治理有方!考拉悠然入選全球算法最佳實(shí)踐典范大賽(BPAA)TOP100

    8月13日,全球算法最佳實(shí)踐典范大賽(BPAA)第二屆應(yīng)用算法實(shí)踐典范TOP100榜單公布,考拉悠然科技(下文簡(jiǎn)稱考拉悠然)憑借“AI揚(yáng)塵治理解決方案”成功入選。

    標(biāo)簽:
    搜索算法
    排名算法
  • 網(wǎng)信辦:3月1日起不得利用算法影響網(wǎng)絡(luò)輿論

    《規(guī)定》要求算法推薦服務(wù)提供者應(yīng)當(dāng)堅(jiān)持主流價(jià)值導(dǎo)向,積極傳播正能量,建立完善人工干預(yù)和用戶自主選擇機(jī)制,不得利用算法實(shí)施影響網(wǎng)絡(luò)輿論、規(guī)避監(jiān)督管理以及壟斷和不正當(dāng)競(jìng)爭(zhēng)行為。要求保障用戶的算法知情權(quán)和算法選擇權(quán),應(yīng)當(dāng)向用戶提供不針對(duì)其個(gè)人特征的選項(xiàng),或者便捷的關(guān)閉算法推薦服務(wù)的選項(xiàng)。

    標(biāo)簽:
    網(wǎng)信辦
    搜索算法
  • 搜索算法變化宗旨仍離不開用戶體驗(yàn)

    搜索引擎一直在更新算法,用心做站的站長(zhǎng)可參考更新算法的內(nèi)容,進(jìn)一步做好網(wǎng)站內(nèi)容優(yōu)化和用戶體驗(yàn),為用戶提供有價(jià)值的網(wǎng)頁(yè)內(nèi)容,做對(duì)用戶有價(jià)值的站點(diǎn),搜索引擎算法天天變,用新做站永不變。

    標(biāo)簽:
    搜索算法
  • 2013-2020年百度搜索算法大盤點(diǎn)

    為了給搜索用戶提供更加優(yōu)質(zhì)便捷的搜索體驗(yàn),百度搜索始終不忘初心,致力與內(nèi)容生產(chǎn)者、資源提供者攜手共建和諧健康的搜索生態(tài)。

  • Google最近三十天的搜索算法變化

    來自DavidYin消息:Google發(fā)布廣泛的核心算法更新,每年都有的被命名為January2020CoreUpdate。在之后的幾天,此更新就同步到Google全球的數(shù)據(jù)中心了。通常此類核心更新的完全完成并生效,大致需要兩周的時(shí)間。

    標(biāo)簽:
    google排名
    搜索算法

熱門排行

信息推薦