1 緣起
其實(shí)開(kāi)展文本主題特征抽取這個(gè)方面的工作胶哲,已經(jīng)近一個(gè)多月了。在此之前抹竹,部門(mén)內(nèi)部對(duì)于數(shù)據(jù)挖掘、機(jī)器學(xué)習(xí)這塊的積累還是比較薄弱的止潮。
經(jīng)過(guò)一個(gè)多月在這方面的實(shí)踐窃判、與行業(yè)內(nèi)相關(guān)同行的交流以及經(jīng)歷接觸的一些東西,我發(fā)現(xiàn)還是有些東西可以拿出來(lái)做分享的喇闸。
雖然有些東西看起來(lái)并不是很高端的東西袄琳,但是,從工程化的角度來(lái)說(shuō)仅偎,個(gè)人認(rèn)為還是值得借鑒參考的跨蟹。
2 文本主題特征抽取實(shí)踐
2.1 主題特征抽取能干嘛雳殊?
在當(dāng)前個(gè)性化推薦大行其道的時(shí)候橘沥,那就不得不提用戶(hù)畫(huà)像。關(guān)于用戶(hù)畫(huà)像夯秃,不久之前跟一個(gè)朋友聊過(guò)這方面的話(huà)題座咆,他有個(gè)觀點(diǎn)我很認(rèn)可。
類(lèi)似CSDN這種以?xún)?nèi)容驅(qū)動(dòng)的社區(qū)網(wǎng)站仓洼,想直接做用戶(hù)畫(huà)像是比較困難的介陶。首先這種網(wǎng)站用戶(hù)的粘度不大,大部分都是游客色建;其次用戶(hù)本身的固有屬性很難獲取到哺呜,或者說(shuō)即使獲取到了,也是不夠準(zhǔn)確的箕戳。
那OK某残,如何解決這個(gè)問(wèn)題呢?那我們只能從“用戶(hù)到底干了啥”這個(gè)角度陵吸,嘗試去描述一個(gè)用戶(hù)了玻墅。那么,我們想要知道一個(gè)用戶(hù)“干了啥”壮虫,那么我們首先需要確定“他干的事到底是啥”澳厢。
換言之,我們需要知道他寫(xiě)的文章是什么文章,他看的文章是什么文章剩拢。然也线得,我們先得清楚文章的主題,我們得清楚文章的標(biāo)簽徐伐。
文章的標(biāo)簽準(zhǔn)了框都,那么通過(guò)用戶(hù)對(duì)標(biāo)簽的行為,那么呵晨,試想一下魏保,用戶(hù)的標(biāo)簽還不容易嗎?
所以摸屠,與天貓谓罗、京東類(lèi)似的電商不一樣(他們的物品已經(jīng)高度分類(lèi)以及標(biāo)簽化,并且用戶(hù)數(shù)據(jù)詳細(xì)而準(zhǔn)確)季二,以?xún)?nèi)容為王的技術(shù)社區(qū)想要做好用戶(hù)畫(huà)像檩咱,那么,物品畫(huà)像的構(gòu)建是重中之重胯舷。
而對(duì)于物品畫(huà)像的構(gòu)建刻蚯,標(biāo)簽系統(tǒng)又是重中之重。對(duì)于標(biāo)簽系統(tǒng)的建立桑嘶,那么炊汹,自然少不了文本主題特征的抽取。
2.2 簡(jiǎn)單說(shuō)一說(shuō)算法實(shí)踐吧逃顶!
2.2.1 TF-IDF模型
說(shuō)到文本主題特征抽取讨便,則不得不說(shuō)的TF-IDF模型,這是一種最常見(jiàn)也是最通用的文本關(guān)鍵詞提取模型以政。OK霸褒,我們來(lái)客觀的描述一下,在一個(gè)文本中盈蛮,什么樣的詞才能算的上是關(guān)鍵詞呢废菱?也就是能夠體現(xiàn)主題的關(guān)鍵詞。
答案顯然是否定的抖誉,因?yàn)檫@種詞結(jié)結(jié)實(shí)實(shí)地對(duì)我們的主題描述毫無(wú)作用殊轴,所以它有一個(gè)比較專(zhuān)業(yè)的名稱(chēng),那就是“停用詞”寸五。通常梳凛,我們?cè)谔幚砦谋镜臅r(shí)候,首先需要過(guò)濾掉的就是停用詞梳杏。
OK韧拒,拋開(kāi)停用詞不說(shuō)淹接,我們以CSDN技術(shù)博文為例,其實(shí)很多詞例如“JAVA”叛溢、“開(kāi)發(fā)”塑悼、“程序”、“函數(shù)”等出現(xiàn)的頻率相當(dāng)?shù)母摺?/p>
他們不屬于停用詞楷掉,但總體來(lái)說(shuō)厢蒜,它們依然很難作為某一篇具體技術(shù)文章的主題詞,因?yàn)槊枋龅奶珜挿号胫玻粔驕?zhǔn)確斑鸦,甚至是偏離主題的。通常這種詞草雕,我們習(xí)慣性的稱(chēng)之為“公共詞”巷屿,即在很多地方都經(jīng)常出現(xiàn)的詞。
但我們仔細(xì)分析每一個(gè)文本墩虹,特別是那種富文本(即比較長(zhǎng)的文本)嘱巾,會(huì)發(fā)現(xiàn),能夠體現(xiàn)文章主題的詞的確是容易反復(fù)被提起的诫钓。
根據(jù)上面的分析旬昭,我們來(lái)總結(jié)一下,什么樣的詞更有可能是主題關(guān)鍵詞:首先它必須不能是大眾詞菌湃,即盡量的在少數(shù)的文本中出現(xiàn)问拘;其次它在該文本中出現(xiàn)的次數(shù)必須足夠的多。
有了分析結(jié)果慢味,那么剩下的事情就好辦多了场梆,根據(jù)如上兩個(gè)規(guī)律,我們來(lái)設(shè)計(jì)模型纯路。
我們通過(guò)TF,也就是某個(gè)詞在文本中出現(xiàn)的頻度寞忿,來(lái)提升這個(gè)詞在主題中的權(quán)重驰唬,然后我們通過(guò)IDF值,即逆向文檔頻來(lái)降低公共詞的主題權(quán)重腔彰。TF*IDF也就得到了我們要的主題詞權(quán)重叫编,然后根據(jù)權(quán)重值排序,截取N個(gè)我們要的詞作為文本的主題詞霹抛。
可能大家對(duì)TF好理解點(diǎn)搓逾,對(duì)IDF依然不甚理解。我們來(lái)看一下它具體的計(jì)算方式杯拐,我們就明白了霞篡。
計(jì)算過(guò)程:
詞頻(TF)=某個(gè)詞在文本中出現(xiàn)的次數(shù)/該文本中總詞數(shù)
或者有另一種變種的計(jì)算方法世蔗。
詞頻(TF)=某個(gè)詞在文本中出現(xiàn)的次數(shù)/該文本中出現(xiàn)次數(shù)最多的詞其出現(xiàn)次數(shù)
我們?cè)賮?lái)計(jì)算逆向文檔頻(IDF)。
逆向文檔頻(IDF)=log(語(yǔ)料庫(kù)中所有文檔總數(shù)/(包含某詞的文檔數(shù)+1))
//這里需要注意的有三點(diǎn):
(1)一是在我們的詞表與語(yǔ)料庫(kù)沒(méi)有直接關(guān)系時(shí)朗兵,分子中+1就很有必要了污淋,因?yàn)楹茈y保證詞表中的某個(gè)詞在語(yǔ)料庫(kù)中一定會(huì)出現(xiàn),反之余掖,如果詞表是通過(guò)語(yǔ)料庫(kù)整理而出寸爆,則沒(méi)有這個(gè)問(wèn)題;
(2)這里取log對(duì)數(shù)盐欺,我們可以取log10赁豆,log2甚至是log e,根據(jù)實(shí)際效果調(diào)整即可冗美;
(3)第三歌憨,這里所指的詞個(gè)數(shù),一定是刨除了停用詞的計(jì)算墩衙,甚至是專(zhuān)門(mén)的詞表务嫡;
最后,我們計(jì)算TF-IDF漆改,只需要將計(jì)算的TF值與IDF值累乘就得到了我們需要的權(quán)重值心铃,然后經(jīng)過(guò)再次排序,就能知道詞的重要程度了挫剑。
無(wú)聊的理論過(guò)后去扣,我們來(lái)說(shuō)說(shuō)實(shí)踐吧:
我們接著來(lái)說(shuō)一說(shuō)實(shí)際的實(shí)踐吧。其實(shí)在此之前樊破,部門(mén)內(nèi)部已經(jīng)有一定的累積了愉棱,最直接的體現(xiàn)就是有幾個(gè)不同篩選程度的詞表,例如通用8W詞詞表哲戚,技術(shù)技能8000詞的專(zhuān)用詞表等等奔滑。
說(shuō)到這,我就不得不說(shuō)一說(shuō)詞表的重要性了顺少。由于某種特定業(yè)務(wù)的需要朋其,我們需要對(duì)于CSDN中特定部分技術(shù)文章進(jìn)行主題詞抽取。
本著前人栽樹(shù)后人乘涼的原則脆炎,我們直接拿起之前整理的通用詞表梅猿,很快樂(lè)的進(jìn)行文本去噪后抽詞,然后TF-IDF模型自然是沒(méi)有什么難度的秒裕。
然后抽取結(jié)果抽樣進(jìn)行評(píng)測(cè)袱蚓,結(jié)果顯然是差強(qiáng)人意的,不然就不會(huì)有后面的故事了几蜻。這使得我一度質(zhì)疑TF-IDF模型的權(quán)威性喇潘。
不說(shuō)準(zhǔn)確度多少吧体斩,好歹你別漏這么多關(guān)鍵詞啊,而且權(quán)重排序好歹靠譜點(diǎn)啊响蓉。在與一個(gè)朋友(好吧硕勿,其實(shí)這貨就是微博@祝威廉二世,很流弊的一只人)交流過(guò)后枫甲,經(jīng)他提醒源武,我意識(shí)到一個(gè)很重要的問(wèn)題:我們的詞表有問(wèn)題。
構(gòu)建一個(gè)符合當(dāng)前業(yè)務(wù)場(chǎng)景的專(zhuān)用詞表非常重要想幻!
我們使用CSDN內(nèi)部通用8W詞表去做特殊業(yè)務(wù)場(chǎng)景的主題抽取粱栖,能夠好才怪呢!于是脏毯,我竭力說(shuō)服眾人去一個(gè)事:為這個(gè)項(xiàng)目整理一個(gè)專(zhuān)門(mén)的詞表(至于說(shuō)為何要說(shuō)服他們闹究,嘿嘿,不說(shuō)服他們食店,誰(shuí)幫我進(jìn)行人工整理O(∩_∩)O~)渣淤。
于是,我在100G的技術(shù)博文中吉嫩,過(guò)濾出針對(duì)這個(gè)業(yè)務(wù)場(chǎng)景的76W篇文章价认,然后進(jìn)行常規(guī)的分詞處理,最終處理出一份近8W詞并且?guī)臋n頻的詞表自娩。
其實(shí)用踩,在特定的業(yè)務(wù)場(chǎng)景下,其總詞數(shù)也是遠(yuǎn)遠(yuǎn)低于通用總詞數(shù)的忙迁。隨后脐彩,我把任務(wù)下發(fā)到8個(gè)人手里,哈哈,沒(méi)人領(lǐng)了1W詞回去(當(dāng)然也包括我),進(jìn)行人工篩詞俗壹。
在眾人看得眼花繚亂之后,終于整理出一份5W詞左右的詞表晨川。然后替換詞表之后,重新進(jìn)行結(jié)果測(cè)試删豺。
從個(gè)人抽樣結(jié)果來(lái)看,效果真心好了不止一籌愧怜。其實(shí)我們仔細(xì)分析一下會(huì)發(fā)現(xiàn)呀页,替換一個(gè)符合業(yè)務(wù)場(chǎng)景的詞表主要體現(xiàn)在以下兩個(gè)方面:一是篩除了很多的干擾詞;二是TF-IDF模型中拥坛,符合業(yè)務(wù)的真實(shí)詞分布相當(dāng)重要蓬蝶。
除此之外尘分,需要提一下的就是,我們?cè)谶M(jìn)行人工篩詞的時(shí)候丸氛,適當(dāng)?shù)目粗忻~與動(dòng)詞培愁,而形容詞與副詞之類(lèi)的,其實(shí)大部分情況下是可以篩除掉的缓窜。
然后定续,在考慮詞上下文的時(shí)候,由于CSDN技術(shù)博文很難像正規(guī)論文那樣禾锤,通過(guò)類(lèi)似文章頭部尾部來(lái)體現(xiàn)部分詞的加權(quán)私股,但是例如文章標(biāo)題其實(shí)是可以考慮加權(quán)的。
不管文章是不是一篇正規(guī)文章恩掷,標(biāo)題大部分時(shí)候都是主題高度凝練的體現(xiàn)倡鲸。
2.2.2 TextRank算法
關(guān)于TextRank算法,可能了解的人稍微的少一點(diǎn)黄娘。它是一種非監(jiān)督式的主題抽取算法峭状,即它可以不依賴(lài)于其他語(yǔ)料,直接從文本中抽取主題詞逼争。
說(shuō)到TextRank算法优床,我們先來(lái)說(shuō)一說(shuō)PageRank算法。PageRank算法想必不少人都熟悉氮凝,它是一種很有名的網(wǎng)頁(yè)排名算法羔巢。
PageRank的核心思想:一個(gè)網(wǎng)頁(yè)的重要程度取決于鏈接到它的網(wǎng)頁(yè)的數(shù)量以及這些網(wǎng)頁(yè)的重要程度。即每一個(gè)網(wǎng)頁(yè)的重要程度都是通過(guò)其他網(wǎng)頁(yè)來(lái)體現(xiàn)的罩阵,而它的重要程度又反過(guò)來(lái)影響它外鏈中的網(wǎng)頁(yè)重要程度。
而TextRank算法則是借用了PageRank的核心思想幽钢,其把詞看做是一個(gè)網(wǎng)頁(yè)傅是,而詞與詞之間的聯(lián)系則通過(guò)詞之間的距離來(lái)表示匪燕,任何一個(gè)詞與其左右為5的詞都是類(lèi)似外鏈關(guān)系的。通過(guò)不斷的權(quán)重計(jì)算帽驯,并且移動(dòng)詞排序书闸,重新迭代計(jì)算權(quán)重尼变,最終達(dá)到一定的收斂即停止。
算法實(shí)踐:
我在MapReduce中跑了一批數(shù)據(jù)浆劲,其實(shí)其效果哀澈,我個(gè)人認(rèn)為還行度气,特別是使用專(zhuān)用詞表進(jìn)行雜詞過(guò)濾之后磷籍,效果還是可以的。
這是一種比較容易實(shí)現(xiàn)择示,并且相對(duì)比較簡(jiǎn)單的主題抽取算法。所以汪诉,如果在主題抽取方面不愿意投入過(guò)多資源的谈秫,可以適當(dāng)?shù)目紤]拟烫。
但是,我們需要注意的是课竣,由于它的實(shí)現(xiàn)機(jī)制置媳,一方面它如TF-IDF算法那樣,在富文本領(lǐng)域表現(xiàn)較佳迂曲,并且詞頻對(duì)于其結(jié)果影響較大寥袭;另外一方面就是由于每次它都需要進(jìn)行迭代計(jì)算传黄,所以效率上會(huì)有所降低,特別是迭代次數(shù)越多的時(shí)候膘掰。
可以作為一種備用選擇吧。
2.2.3 LDA主題模型
先簡(jiǎn)單的說(shuō)一下LDA的核心思想:我們認(rèn)為每一個(gè)文檔Doc都是由多個(gè)主題Topic組成啤覆,而每一個(gè)主題Topic由多個(gè)詞Word組成惭聂。
通過(guò)對(duì)語(yǔ)料庫(kù)D中所有的文檔d進(jìn)行分詞或者抽詞處理之后辜纲,通過(guò)模型訓(xùn)練(具體的訓(xùn)練過(guò)程我就不寫(xiě)了,有點(diǎn)復(fù)雜耕腾,而且我不一定能夠?qū)懬宄?扫俺,我們得到兩個(gè)概率矩陣:一是每一個(gè)Doc對(duì)應(yīng)K個(gè)Topic的概率;二是每一個(gè)Topic對(duì)應(yīng)N個(gè)詞組成的詞表的概率羹呵。
有了這兩個(gè)概率矩陣疗琉,那么,我們需要的是每一個(gè)Doc對(duì)應(yīng)的Word概率凑耻,然后找M個(gè)概率最大的詞作為關(guān)鍵詞柠贤。有Topic作為中間橋梁种吸,那還有什么問(wèn)題么?
并且镜盯,從這里猖败,我們會(huì)發(fā)現(xiàn)恩闻,通過(guò)LDA模型進(jìn)行關(guān)鍵詞查找,其關(guān)鍵詞不再依賴(lài)于詞是否出現(xiàn)在該文檔中破停,這點(diǎn)與傳統(tǒng)的基于統(tǒng)計(jì)模型的主題抽取方式是不一樣的。
算法實(shí)踐:
在寫(xiě)這篇文章的時(shí)候毅臊,我們剛把LDA結(jié)果跑出來(lái)黑界,詞表大約5W左右朗鸠,K值設(shè)置的大概是200,迭代次數(shù)為100左右胎挎。出來(lái)的結(jié)果簡(jiǎn)直慘不忍睹扰楼。
具體的方式也可以稍微的說(shuō)一說(shuō),我們使用了Spark MLlib上的LDA實(shí)現(xiàn)项栏。
(1)DistributedLDAModel類(lèi)中有describeTopics方法沼沈,可以獲取到每一個(gè)Topic對(duì)應(yīng)的詞Word概率矩陣币厕;
(2)DistributedLDAModel類(lèi)的topTopicsPerDocument方法可以獲取到每一個(gè)Doc對(duì)應(yīng)的K個(gè)Topic概率矩陣;
(3)有了如上兩個(gè)矩陣页衙,求Doc到Word的概率矩陣不是手到擒來(lái)店乐?
(4)對(duì)于新文本呻袭,DistributedLDAModel類(lèi)同樣提供了topicDistributions方法進(jìn)行新文檔對(duì)應(yīng)于K個(gè)Topic的概率預(yù)測(cè);
參數(shù)肯定還是會(huì)繼續(xù)調(diào)整的廉侧,但從我個(gè)人的角度上來(lái)說(shuō)段誊,我們目前的業(yè)務(wù)場(chǎng)景并不是很適合LDA算法模型,首先個(gè)人認(rèn)為K值會(huì)比較大陪腌,因?yàn)镵值的設(shè)置需要盡量的跟實(shí)際情況吻合烟瞧,而我們的業(yè)務(wù)場(chǎng)景恰巧是主題分散的類(lèi)型参滴。
其次锻弓,LDA主題模型是三層概率模型,通過(guò)中間層進(jìn)行橋接暴心,概率映射的精度會(huì)進(jìn)一步下降专普,所以弹沽,個(gè)人認(rèn)為在富文本的場(chǎng)景下,直接的統(tǒng)計(jì)模型不會(huì)輸于LDA炸渡。
再其次感覺(jué)就是LDA對(duì)干擾詞相當(dāng)?shù)拿舾欣鲆眩?dāng)然沛婴,也或許是我們沒(méi)有用好」蹋總之藕夫,我們會(huì)繼續(xù)的進(jìn)行探索。
2.2.4 TF-IDF與TextRank的融合
我個(gè)人還嘗試使用TF-IDF的值對(duì)TextRank權(quán)重進(jìn)行修正办悟,目前最簡(jiǎn)單的嘗試就是直接類(lèi)似TF與IDF的融合滩褥,直接進(jìn)行累乘瑰煎,其實(shí)效果還OK啦。
不過(guò)魄健,通過(guò)與祝威廉的交流插勤,他認(rèn)為一個(gè)比較理性的融合方式是农尖,如果我們有足夠的樣本,我們可以通過(guò)類(lèi)似的線(xiàn)性回歸的方式助隧,來(lái)確定兩種算法的結(jié)果權(quán)重窟扑,來(lái)計(jì)算最終的詞權(quán)重值嚎货。
這個(gè)有機(jī)會(huì),有人力物力的話(huà)姐叁,真心可以考慮試試外潜。
3 一些文本主題抽取方面的構(gòu)想
3.1 社會(huì)化詞表機(jī)制
社會(huì)化標(biāo)簽或許不少人聽(tīng)過(guò)挠唆,但社會(huì)化詞表是什么東西?
先別著急滔驾,我們先來(lái)說(shuō)一說(shuō)社會(huì)化標(biāo)簽哆致。據(jù)個(gè)人所知,豆瓣是社會(huì)化標(biāo)簽的重度使用者耻蛇。我們來(lái)看一下社會(huì)化標(biāo)簽的運(yùn)作胞此。
網(wǎng)站為用戶(hù)呈現(xiàn)物品時(shí)豌鹤,呈現(xiàn)的是社會(huì)化標(biāo)簽,而每一個(gè)人都可以為物品打上若干標(biāo)簽,但物品只是動(dòng)態(tài)的顯示TopN個(gè)最熱標(biāo)簽灵临。
隨著參與打標(biāo)簽的用戶(hù)越來(lái)越多趴荸,物品的標(biāo)簽主題描述就會(huì)越來(lái)越趨近于準(zhǔn)確发钝,而相應(yīng)的,利用標(biāo)簽做的一些推薦或者個(gè)性化定位也會(huì)隨之越來(lái)越準(zhǔn)確涛碑。
在之前的實(shí)踐中孵淘,我們很明確的了解到瘫证,一個(gè)適合的詞表對(duì)于主題抽取的準(zhǔn)確率有多大的影響。
在當(dāng)前詞表的基礎(chǔ)上毙籽,我所說(shuō)的合適詞表有兩層意思:一是進(jìn)一步篩除干擾詞坑赡,二是隨著業(yè)務(wù)變更,增加新詞厅翔。
在之前的實(shí)踐中刀闷,我并沒(méi)有提及太多對(duì)詞操作的事仰迁,例如分詞徐许、新詞發(fā)現(xiàn)之類(lèi)的。其實(shí)針對(duì)于一些新詞翻默,我們是有一些方法進(jìn)行判斷是否為新詞的修械。
例如检盼,我們?cè)谂袛嘁粋€(gè)字典中沒(méi)有的詞是否能夠成為一個(gè)新詞時(shí),我們可以通過(guò)語(yǔ)料蹦渣,計(jì)算該詞與其左右兩邊詞的信息熵柬唯。
信息熵的意義是属提,隨著熵值越大冤议,代表該詞與左右詞的組合信息越混亂,那就是說(shuō)把他們組合在一起使用是不合理的堪滨。
經(jīng)典實(shí)例如“被子”袱箱,我們可以找到諸如“疊被子”、“蓋被子”盟萨、“加被子”捻激、“新被子”前计、“掀被子”男杈、“收被子”、“薄被子”旺垒、“踢被子”肤无、“搶被子”等100多種組合舅锄,計(jì)算“被子”與左組合詞的信息熵皇忿,我們會(huì)發(fā)現(xiàn)很大坦仍。
這說(shuō)明本身“被子”一詞不適合和作詞組合成一個(gè)單獨(dú)的詞繁扎,他應(yīng)該可以算一個(gè)單獨(dú)的詞來(lái)使用。
反之爹梁,我們會(huì)發(fā)現(xiàn)姚垃,一些詞盼忌,例如“輩子”這個(gè)詞,與他組合的詞君编,諸如“一輩子”川慌、“下輩子”窘游、“上輩子”、“半輩子”贪嫂、“八輩子”力崇、“幾輩子”赢织、“哪輩子”等于置。其實(shí)不算很多八毯,而且詞頻也不會(huì)太大。
計(jì)算“輩子”與左邊組合詞的信息熵讶踪,相比于“被子”一詞乳讥,則不一樣廓俭,其信息熵很小白指。也就意味著“輩子”與左邊的詞組合信息混亂度很小,這意味著错维,它與左側(cè)詞組合赋焕,形成一個(gè)組合詞更有可能是一個(gè)單獨(dú)詞隆判。
除了計(jì)算詞左右組合詞的信息熵,當(dāng)然也還有其他辦法來(lái)判斷一個(gè)詞是否作為新詞去處理臭挽。
但在我們的實(shí)踐里欢峰,我沒(méi)有在新詞發(fā)現(xiàn)與分詞上做過(guò)多的事情涨共。個(gè)人的觀點(diǎn)是举反,在分詞上投入過(guò)多火鼻,其實(shí)效果是很小的。因?yàn)檫@個(gè)領(lǐng)域已經(jīng)屬于基礎(chǔ)領(lǐng)域中的基礎(chǔ)領(lǐng)域波俄,除非你愿意投入相當(dāng)大的精力,不然效果是很低很低的支鸡,從工程化的角度來(lái)說(shuō)趁窃,得不償失醒陆。
同理刨摩,在新詞發(fā)現(xiàn)領(lǐng)域,也一樣耘婚,屬于復(fù)雜度更高的研究陆赋,并且不容易出效果攒岛。
那么灾锯,有沒(méi)有便捷的方法去解決詞表更新的問(wèn)題呢?
答案是顯然的色乾,我們可以依靠眾人的力量去更新詞表暖璧,這比少數(shù)幾個(gè)專(zhuān)業(yè)人士的效率更高澎办。
我們主題特征的一個(gè)重要應(yīng)用就是標(biāo)簽系統(tǒng)金砍,我們可以模仿社會(huì)化標(biāo)簽操作的手法恕稠。我們給用戶(hù)推薦物品的標(biāo)簽鹅巍,同時(shí)允許用戶(hù)在推薦標(biāo)簽的基礎(chǔ)上進(jìn)行增刪去留骆捧。
當(dāng)用戶(hù)的操作量累積到一定程度的時(shí)候,比如妆绞,用戶(hù)會(huì)添加一些新詞進(jìn)去括饶,又諸如巷帝,一些干擾詞,我們可以通過(guò)用戶(hù)經(jīng)常刪除該推薦詞的操作得以發(fā)現(xiàn)驰徊。
所以,如果這個(gè)機(jī)制做好了堕阔,這就是一個(gè)良性的循環(huán)過(guò)程棍厂。其次,還有一個(gè)我一直很堅(jiān)持的觀點(diǎn)就是:算法真心沒(méi)有想象中流弊超陆,我們需要結(jié)合用戶(hù)的力量對(duì)算法效果進(jìn)行修正牺弹。
3.2 一種Word2vec邊權(quán)改進(jìn)的TextRank算法
說(shuō)這個(gè)之前,簡(jiǎn)單說(shuō)一說(shuō)這個(gè)點(diǎn)子的來(lái)源时呀,其實(shí)包括上面提到的TextRank與TF-IDF算法融合思想张漂,都是通過(guò)與一位朋友交流得來(lái)的谨娜。
12月12號(hào)的時(shí)候航攒,在2015大數(shù)據(jù)大會(huì)BDTC的活動(dòng)中,有一個(gè)分場(chǎng)趴梢,那就是“IBM算法馬拉松挑戰(zhàn)賽年度總決賽”漠畜,我作為大賽評(píng)委參與了大賽的評(píng)判工作。
算法挑戰(zhàn)賽的比賽題目就是“文本主題特征詞抽取”坞靶,是不是有點(diǎn)巧憔狞。其實(shí)真的不巧,因?yàn)檫@題目是我出的彰阴。
當(dāng)然瘾敢,這不是重點(diǎn),重點(diǎn)是比賽選手的作品情況尿这。其實(shí)總體來(lái)說(shuō)廉丽,比賽的結(jié)果不甚理想,不過(guò)想想也是妻味,把一個(gè)研究多年課題,要在六七個(gè)小時(shí)內(nèi)把它實(shí)際工程化欣福,的確是挺難的责球。
不過(guò),有些點(diǎn)子還是不錯(cuò)的,比如一等獎(jiǎng)的獲獎(jiǎng)團(tuán)隊(duì)他們的想法就很好雏逾,就是通過(guò)語(yǔ)料計(jì)算詞的IDF嘉裤,然后通過(guò)IDF進(jìn)行詞過(guò)濾,在詞過(guò)濾的基礎(chǔ)上改進(jìn)TextRank效果栖博。
大賽過(guò)后屑宠,我聯(lián)系了他們的領(lǐng)隊(duì),進(jìn)行了進(jìn)一步溝通交流仇让,他提出來(lái)Word2Vec與TextRank結(jié)合的觀點(diǎn)典奉,即下面一些內(nèi)容就是在此基礎(chǔ)上一些發(fā)散(這進(jìn)一步說(shuō)明了技術(shù)交流的重要吶)。
對(duì)于TextRank算法過(guò)程丧叽,上面我們已經(jīng)大概說(shuō)過(guò)了卫玖。并且在實(shí)際的實(shí)踐中,我也嘗試使用TF-IDF算法模型結(jié)果對(duì)TextRank結(jié)果進(jìn)行融合踊淳,但效果不會(huì)太好假瞬。
關(guān)于Word2vec,簡(jiǎn)單的說(shuō)一下迂尝。它是一種以三層神經(jīng)網(wǎng)絡(luò)為底層支撐的詞向量表征模型脱茉。具體的算法模型過(guò)程,我就不做過(guò)多的篇幅描述了垄开,有興趣的可以去查找一下資料琴许。
我們?cè)趙ord2vec上最直接的一個(gè)應(yīng)用就是,通過(guò)語(yǔ)料訓(xùn)練说榆,我們可以獲取到詞表中任何一個(gè)詞對(duì)應(yīng)于其他詞的相似度虚吟。
OK,我們?cè)倩氐絋extRank签财,它在計(jì)算詞的重要程度時(shí)串慰,針對(duì)于每一個(gè)詞,只把左右鄰居中5個(gè)詞作為參考對(duì)象唱蒸,并且參考度邦鲫,也就是詞與詞的邊權(quán)都是1。
我們有了Word2vec中詞向量神汹,我們是否能在計(jì)算詞與詞參考度上進(jìn)行優(yōu)化呢庆捺?比如TextRank中只參考詞左右N個(gè)詞作為“外鏈詞”,并且詞與詞之間的“外鏈權(quán)重”都是1屁魏,其實(shí)這是有很大優(yōu)化空間的滔以。
比如,我們可以根據(jù)詞與詞之間的距離的增加氓拼,減小詞與詞之間的邊權(quán)你画,然后邊權(quán)的計(jì)算也不單純依賴(lài)于距離抵碟,我們使用Word2Vec計(jì)算出的詞與詞的相似度作為邊權(quán)。
這個(gè)思考是一個(gè)構(gòu)想坏匪,沒(méi)有付諸具體的實(shí)踐拟逮,所以也沒(méi)法保證結(jié)果。但之后有時(shí)間一定要實(shí)踐一下适滓,預(yù)計(jì)結(jié)果會(huì)好一些敦迄。