“神策杯”2018高校算法大師賽是一個(gè)只能高校在校生solo的單人賽因谎。神策數(shù)據(jù)提供了10萬(wàn)篇左右資訊文章的標(biāo)題以及正文卵佛,其中一千篇文章有對(duì)應(yīng)的標(biāo)注數(shù)據(jù)呻顽。標(biāo)注數(shù)據(jù)中每篇文章的關(guān)鍵詞不超過5個(gè)蛇受,關(guān)鍵詞都在文章的標(biāo)題或正文中出現(xiàn)過句葵。根據(jù)已有的數(shù)據(jù),需要訓(xùn)練一個(gè)“關(guān)鍵詞提取”模型兢仰,提取沒有標(biāo)注數(shù)據(jù)的文章的關(guān)鍵詞乍丈,每篇文章最多提交兩個(gè)關(guān)鍵詞。
最終排名:6 / 622
附:github地址
比賽簡(jiǎn)介(Datacastle)
(1)比賽介紹:比賽根據(jù)神策數(shù)據(jù)提供的一千篇資訊文章及其關(guān)鍵詞把将,參賽者需要訓(xùn)練出一個(gè)”關(guān)鍵詞提取”的模型轻专,提取10萬(wàn)篇資訊文章的關(guān)鍵詞。
(2)評(píng)價(jià)指標(biāo):提交的預(yù)測(cè)結(jié)果中秸弛,每篇文章最多輸出兩個(gè)關(guān)鍵詞铭若。預(yù)測(cè)結(jié)果跟標(biāo)注結(jié)果命中一個(gè)得 0.5 分,命中兩個(gè)得一分递览。英文關(guān)鍵詞不區(qū)分大小寫叼屠。
問題分析
通過初步分析,本次比賽訓(xùn)練集和測(cè)試集的樣本比例大致是1:100绞铃,因此選擇采用無監(jiān)督的模型(tfidf/tfiwf镜雨,textRank,主題模型LSI/LDA)進(jìn)行關(guān)鍵詞提取儿捧。依據(jù)比賽背景荚坞,我將其分成兩個(gè)步驟挑宠,首先根據(jù)資訊文章和標(biāo)題選取關(guān)鍵詞候選集,然后選擇其中兩個(gè)概率最大的關(guān)鍵詞颓影。
數(shù)據(jù)分析
(1)訓(xùn)練集和測(cè)試集的樣本比例1:100
(2)?通過分析標(biāo)注數(shù)據(jù)以及標(biāo)題的關(guān)系可以看出各淀,1000篇標(biāo)注文章中,只有20篇左右文章的關(guān)鍵詞是不在標(biāo)題中诡挂,而且80%左右文章至少有兩個(gè)關(guān)鍵詞是在標(biāo)題中碎浇,可以看出標(biāo)題的重要性。大家看到一篇資訊文章璃俗,通常會(huì)首先關(guān)注標(biāo)題奴璃,因?yàn)闃?biāo)題會(huì)概括出這個(gè)文章的主要內(nèi)容。
(3)通過分析標(biāo)題中的數(shù)據(jù)可以看到城豁,如果標(biāo)題中含有書名號(hào)或者是人名苟穆,95%以上都是對(duì)應(yīng)文章的關(guān)鍵詞。這個(gè)應(yīng)該跟每個(gè)人的習(xí)慣(打標(biāo)簽人的習(xí)慣)有關(guān)唱星,書名號(hào)中的內(nèi)容通常會(huì)對(duì)應(yīng)影片雳旅,電視劇,歌曲等的名稱魏颓,這些名詞和人名很大概率會(huì)在一開始吸引我么的注意岭辣,因此是關(guān)鍵詞的概率就很大。
樣本構(gòu)造
由于采用的是無監(jiān)督模型甸饱,因此沦童,可以我把官方提供的一千條標(biāo)注樣本作為線下驗(yàn)證集,來驗(yàn)證模型的精度和效果叹话,基本上可以做到線上線下一致偷遗。而對(duì)于線上提交結(jié)果,我將一千條標(biāo)注數(shù)據(jù)的標(biāo)簽作為結(jié)巴分詞的自定義詞驼壶,用以提高分詞的準(zhǔn)確度氏豌。
數(shù)據(jù)預(yù)處理
分詞預(yù)處理過程
- 對(duì)于jieba分詞,去除了一些常用的停用詞(從網(wǎng)上找的)热凹,避免后期一些停用詞對(duì)模型精度產(chǎn)生影響泵喘,停用詞主要包括英文字符、數(shù)字般妙、數(shù)學(xué)字符纪铺、標(biāo)點(diǎn)符號(hào)及使用頻率特高的單漢字等。比如的碟渺,呢鲜锚。
- 將一千條標(biāo)注數(shù)據(jù)的標(biāo)簽作為結(jié)巴分詞的自定義詞,用以提高分詞的準(zhǔn)確度。主辦方有說明過芜繁,“訓(xùn)練集文章的關(guān)鍵詞構(gòu)成的集合”與“測(cè)試集文章的關(guān)鍵詞構(gòu)成的集合”旺隙,這兩個(gè)集合可能存在交集,但不一定存在包含與被包含的關(guān)系骏令。
- 在網(wǎng)上找到搜狗的詞典蔬捷,給jieba分詞添加用戶詞典,提高分詞準(zhǔn)確度伏社。
- 利用哈工大ltp分詞接口進(jìn)行分詞抠刺,同樣作為模型樣本塔淤,用于彌補(bǔ)jieba分詞的分詞錯(cuò)誤摘昌。
- 利用ltp的接口,同時(shí)識(shí)別jieba分詞和ltp分詞的結(jié)果中的名詞甚至是人名高蜂,用于后期的規(guī)則聪黎。
增大title中詞語(yǔ)的權(quán)重
在這里,采用的是簡(jiǎn)單的title復(fù)制的方式备恤,對(duì)于一條樣本稿饰,利用句號(hào)將n個(gè)相同的title和context進(jìn)行字符串拼接,然后分詞并用于后期tfidf的計(jì)算露泊,這樣就可以達(dá)到增大title中詞語(yǔ)的權(quán)重喉镰。這里n的確定,每一條樣本的n是不一樣的惭笑,依據(jù)context中句子的個(gè)數(shù)乘上一定的比例來確定n侣姆。(通過訓(xùn)練集,也就是我的線下驗(yàn)證集來確定比例沉噩,這個(gè)比例捺宗,從實(shí)際場(chǎng)景來說,就是人們對(duì)title關(guān)注度的反映)
模型選擇
對(duì)比無監(jiān)督的模型(tfidf/tfiwf川蒙,textRank蚜厉,主題模型LSI/LDA)的效果,最終采用tfidf作為基礎(chǔ)模型進(jìn)行關(guān)鍵詞候選集的選取畜眨。
tfidf
tfidf(詞頻-逆文檔頻率)算法是一種統(tǒng)計(jì)方法昼牛,用以評(píng)估一字詞對(duì)于一個(gè)文件集或一個(gè)語(yǔ)料庫(kù)中的其中一份文件的重要程度。字詞的重要性隨著它在文件中出現(xiàn)的次數(shù)成正比增加康聂,但同時(shí)會(huì)隨著它在語(yǔ)料庫(kù)中出現(xiàn)的頻率成反比下降贰健。
TF(詞頻)就是某個(gè)詞在文章中出現(xiàn)的次數(shù),TF(詞頻) = 某個(gè)詞在文章中出現(xiàn)的次數(shù) / 該篇文章的總詞數(shù)早抠;IDF(逆向文檔頻率)為該詞的常見程度霎烙,IDF 逆向文檔頻率 =log (語(yǔ)料庫(kù)的文檔總數(shù) / (包含該詞的文檔總數(shù)+1)),如果一個(gè)詞越常見,那么其分母就越大悬垃,IDF值就越小游昼。
Tfiwf
TF不變,IWF是文檔所有詞語(yǔ)詞頻之和/該單詞詞頻
Pagerank(此處列出只為引出下面的textrank)
需要知道有哪些網(wǎng)頁(yè)鏈接到網(wǎng)頁(yè)A尝蠕,也就是要首先得到網(wǎng)頁(yè)A的入鏈烘豌,然后通過入鏈給網(wǎng)頁(yè)A的投票來計(jì)算網(wǎng)頁(yè)A的PR值。這樣設(shè)計(jì)可以保證達(dá)到這樣一個(gè)效果:當(dāng)某些高質(zhì)量的網(wǎng)頁(yè)指向網(wǎng)頁(yè)A的時(shí)候看彼,那么網(wǎng)頁(yè)A的PR值會(huì)因?yàn)檫@些高質(zhì)量的投票而變大廊佩,而網(wǎng)頁(yè)A被較少網(wǎng)頁(yè)指向或被一些PR值較低的網(wǎng)頁(yè)指向的時(shí)候,A的PR值也不會(huì)很大,這樣可以合理地反映一個(gè)網(wǎng)頁(yè)的質(zhì)量水平靖榕。
Vi表示某個(gè)網(wǎng)頁(yè)标锄,Vj表示鏈接到Vi的網(wǎng)頁(yè)(即Vi的入鏈),S(Vi)表示網(wǎng)頁(yè)Vi的PR值茁计,In(Vi)表示網(wǎng)頁(yè)Vi的所有入鏈的集合,Out(Vj)表示網(wǎng)頁(yè)Vj鏈接到其他網(wǎng)頁(yè)的數(shù)量料皇,d表示阻尼系數(shù),是用來克服這個(gè)公式中“d *”后面的部分的固有缺陷用的:如果僅僅有求和的部分星压,那么該公式將無法處理沒有入鏈的網(wǎng)頁(yè)的PR值践剂,因?yàn)檫@時(shí),根據(jù)該公式這些網(wǎng)頁(yè)的PR值為0娜膘,但實(shí)際情況卻不是這樣逊脯,所有加入了一個(gè)阻尼系數(shù)來確保每個(gè)網(wǎng)頁(yè)都有一個(gè)大于0的PR值,根據(jù)實(shí)驗(yàn)的結(jié)果竣贪,在0.85的阻尼系數(shù)下军洼,大約100多次迭代PR值就能收斂到一個(gè)穩(wěn)定的值,而當(dāng)阻尼系數(shù)接近1時(shí)贾富,需要的迭代次數(shù)會(huì)陡然增加很多歉眷,且排序不穩(wěn)定。公式中S(Vj)前面的分?jǐn)?shù)指的是Vj所有出鏈指向的網(wǎng)頁(yè)應(yīng)該平分Vj的PR值颤枪,這樣才算是把自己的票分給了自己鏈接到的網(wǎng)頁(yè)汗捡。
textrank
一種用于文本的基于圖的排序算法,僅利用單篇文檔本身的信息即可實(shí)現(xiàn)關(guān)鍵詞提取畏纲,不依賴于語(yǔ)料庫(kù)扇住。(調(diào)用jieba的接口)
Wji是指Vi和Vj兩個(gè)句子之間的相似度,可以采用編輯距離和余弦相似度等盗胀。當(dāng)textrank應(yīng)用到關(guān)鍵詞提取時(shí)艘蹋,與自動(dòng)摘要提取不同:1)詞與詞之間的關(guān)聯(lián)沒有權(quán)重,即Wji是1票灰;2)每個(gè)詞不是與文檔中所有詞都有鏈接女阀,而是通過設(shè)定固定長(zhǎng)度滑動(dòng)窗口形式宅荤,在窗口內(nèi)的詞語(yǔ)間有鏈接。
主題模型
主題模型認(rèn)為在詞與文檔之間沒有直接的聯(lián)系浸策,它們應(yīng)當(dāng)還有一個(gè)維度串聯(lián)起來冯键,這個(gè)維度就是主題。主題模型就是一種自動(dòng)分析每個(gè)文檔庸汗,統(tǒng)計(jì)文檔內(nèi)詞語(yǔ)惫确,根據(jù)統(tǒng)計(jì)的信息判斷當(dāng)前文檔包含哪些主題以及各個(gè)主題所占比例各為多少。主題模型是一種生成模型蚯舱,一篇文章中每個(gè)詞都是通過“以一定概率選擇某個(gè)主題改化,并從這個(gè)主題中以一定概率選擇某個(gè)詞語(yǔ)”這樣一個(gè)過程得到的;
主題模型常用的方法是LSI(LSA)和LDA枉昏,其中LSI是采用SVD(奇異值分解)的方法進(jìn)行暴力破解陈肛,而LDA則是通過貝葉斯學(xué)派方法對(duì)分布信息進(jìn)行擬合。通過LSA或LDA算法凶掰,可以得到文檔對(duì)主題的分布和主題對(duì)詞的分布燥爷,可以根據(jù)主題對(duì)詞的分布(貝葉斯方法)得到詞對(duì)主題的分布礁遣,然后通過這個(gè)分布和文檔對(duì)主題的分布計(jì)算文檔與詞的相似性沧竟,選擇相似性高的詞列表作為文檔的關(guān)鍵詞询件。
LSA
潛在語(yǔ)義分析(Latent Semantic Analysis, LSA),也叫做Latent Semantic Indexing, LSI. 是一種常用的簡(jiǎn)單的主題模型畅涂。LSA是基于奇異值分解(SVD)的方法得到文本主題的一種方式。
Umk代表了文檔對(duì)主題的分布矩陣道川,Vnk的轉(zhuǎn)置代表了主題對(duì)詞語(yǔ)的分布矩陣午衰。
LSA通過SVD將詞、文檔進(jìn)行更本質(zhì)地表達(dá)冒萄,映射到低維的空間臊岸,并在有限利用文本語(yǔ)義信息的同時(shí),大大降低計(jì)算的代價(jià)尊流,提高分析質(zhì)量帅戒。但是計(jì)算復(fù)雜度非常高,特征空間維度較大的崖技,計(jì)算效率十分低下逻住。當(dāng)一個(gè)新的文檔進(jìn)入已有特征空間時(shí),需要對(duì)整個(gè)空間重新訓(xùn)練迎献,才能得到新加入文檔后的分布信息瞎访。此外,還存在對(duì)頻率分布不敏感吁恍,物理解釋性薄弱的問題扒秸。
pLSA
在LSA的基礎(chǔ)上進(jìn)行了改進(jìn)播演,通過使用EM算法對(duì)分布信息進(jìn)行擬合替代了使用SVD進(jìn)行暴力破解。
PLSA中伴奥,也是采用詞袋模型(詞袋模型宾巍,是將一篇文檔,我們僅考慮一個(gè)詞匯是否出現(xiàn)渔伯,而不考慮其出現(xiàn)的順序顶霞,相反,n-gram考慮了詞匯出現(xiàn)的先后順序)锣吼,文檔和文檔之間是獨(dú)立可交換的选浑,同一個(gè)文檔內(nèi)的詞也是獨(dú)立可交換的。在PLSA中玄叠,我們會(huì)以固定的概率來抽取一個(gè)主題詞古徒,然后根據(jù)抽取出來的主題詞,找其對(duì)應(yīng)的詞分布读恃,再根據(jù)詞分布隧膘,抽取一個(gè)詞匯。
LDA
LDA 在 PLSA 的基礎(chǔ)上寺惫,為主題分布和詞分布分別加了兩個(gè) Dirichlet 先驗(yàn)分布疹吃。PLSA中,主題分布和詞分布都是唯一確定的西雀。但是萨驶,在LDA中,主題分布和詞分布是不確定的艇肴,LDA的作者們采用的是貝葉斯派的思想腔呜,認(rèn)為它們應(yīng)該服從一個(gè)分布,主題分布和詞分布都是多項(xiàng)式分布再悼,因?yàn)槎囗?xiàng)式分布和狄利克雷分布是共軛結(jié)構(gòu)核畴,在LDA中主題分布和詞分布使用了Dirichlet分布作為它們的共軛先驗(yàn)分布。
在 LDA 中冲九,主題的數(shù)目沒有一個(gè)固定的最優(yōu)解谤草。模型訓(xùn)練時(shí),需要事先設(shè)置主題數(shù)娘侍,訓(xùn)練人員需要根據(jù)訓(xùn)練出來的結(jié)果咖刃,手動(dòng)調(diào)參,再優(yōu)化主題數(shù)目憾筏。
我們可以根據(jù)數(shù)據(jù)的多項(xiàng)式分布和先驗(yàn)分布求出后驗(yàn)分布嚎杨,然后將這個(gè)后驗(yàn)分布作為下一次的先驗(yàn)分布,不斷迭代更新氧腰。求解方法一般有兩種枫浙,第一種是基于Gibbs采樣算法求解刨肃,第二種是基于變分推斷EM算法求解。
小結(jié)
模型對(duì)比:tf-idf的idf值依賴于語(yǔ)料環(huán)境,這給他帶來了統(tǒng)計(jì)上的優(yōu)勢(shì),即它能夠預(yù)先知道一個(gè)詞的重要程度箩帚,而textrank只依賴文章本身,它認(rèn)為一開始每個(gè)詞的重要程度是一樣的真友,但是用到了詞之間的關(guān)聯(lián)性(將相鄰的詞鏈接起來)。主題模型LSA和LDA都依賴于語(yǔ)料庫(kù)紧帕,在新的一篇文檔進(jìn)來后需要重新訓(xùn)練盔然,但是主題模型可以充分利用到文本中的語(yǔ)義信息。Tfidf和textrank都可以用jieba的接口是嗜,而主題模型可以用sklearn中g(shù)ensim的接口愈案。
在我們的本次比賽,雖然說可以看出來整個(gè)數(shù)據(jù)集是有一定的主題的鹅搪,包括娛樂站绪,體育等,但是從關(guān)鍵詞標(biāo)簽來看丽柿,這個(gè)跟主題名稱并沒有很大的關(guān)聯(lián)恢准,而是跟標(biāo)題關(guān)聯(lián)性很大,所以tfidf雖然是簡(jiǎn)單的統(tǒng)計(jì)甫题,但是卻可以發(fā)揮很大的效果(增大title的權(quán)重)馁筐。
規(guī)則
結(jié)合前面的分析,加入一系列人工規(guī)則幔睬,利用tfidf模型得到的10個(gè)關(guān)鍵詞候選集確定最終概率最大的兩個(gè)關(guān)鍵詞label(人工規(guī)則眯漩,其實(shí)就是給模型加入人的主觀性,有助于提高模型精度)
1.利用re正則表達(dá)式獲取title中書名號(hào)的內(nèi)容作為重要度最高的候選集麻顶;
2.利用訓(xùn)練集標(biāo)簽構(gòu)建keyword_set,利用jieba對(duì)title分詞結(jié)果構(gòu)建jieba_title_set舱卡,將10個(gè)候選集中同時(shí)存在于keyword_set和jieba_title_set中的作為重要度第二高的候選集辅肾;
3.將10個(gè)候選集中同時(shí)存在于jieba_title_name_list和ltp_title_name_list中的關(guān)鍵詞作為重要度第三高的候選集;
4.將10個(gè)候選集中存在于jieba_title_name_list的關(guān)鍵詞作為重要度第四高的候選集轮锥;
5.將10個(gè)候選集中位于title內(nèi)且詞性為名詞的關(guān)鍵詞作為重要度第五高的候選集矫钓;
6.將10個(gè)候選集中位于keyword_set的關(guān)鍵詞作為重要度第六高的候選集;
7.將10個(gè)候選集中位于title中舍杜,詞性為非名詞的關(guān)鍵詞作為重要度第七高的候選集新娜;
8.其余的候選集作為重要度最低的候選集;
賽后總結(jié)
這次我是第一次接觸跟文本相關(guān)的比賽既绩,所以入門了挺多關(guān)于文本處理的操作概龄,包括如何分詞,如何做數(shù)據(jù)預(yù)處理(去除停用詞饲握,提高分詞準(zhǔn)確性)私杜,如何針對(duì)特定問題選擇相關(guān)的模型作為基礎(chǔ)模型(tfidf/tfiwf蚕键,textRank,主題模型LSI/LDA)衰粹,以及怎么針對(duì)問題對(duì)結(jié)果進(jìn)行優(yōu)化锣光。這次比賽由于跟其他比賽有重疊,所以用在這上面的時(shí)間并不是特別多铝耻,在前期從幾十名不斷優(yōu)化做到第二之后(640分誊爹,總分1000),思路有點(diǎn)短路瓢捉,然后其他比賽時(shí)間也相對(duì)緊張频丘,所以后面就很少再做改進(jìn)了,最終A/B榜都是排名第六泊柬,模型還是具有魯棒性的椎镣。答辯過后,看到了其他選手的分享兽赁,才知道自己在思路上具有一定的局限性状答,所以沒做到前三(前三采用有監(jiān)督模型,四到六采用無監(jiān)督模型)刀崖,下面來總結(jié)一下本次比賽的不足以及其他選手的亮點(diǎn)惊科。
(1)由于是單人賽,而且沒有跟其他選手或朋友交流亮钦,在一定思路做到極限后沒有開拓新的思路馆截,這個(gè)確實(shí)比較可惜。這次比賽區(qū)分答辯選手前后排的根本是蜂莉,采用的是有監(jiān)督模型還是無監(jiān)督模型蜡娶。官方后面的解釋,他們是想引導(dǎo)選手從無監(jiān)督的角度來做映穗,所以測(cè)試集的樣本數(shù)遠(yuǎn)遠(yuǎn)大于訓(xùn)練集的數(shù)量窖张,而且訓(xùn)練集的數(shù)量只有1000條,因?yàn)樯癫吖臼且梃b選手的模型落地到實(shí)際的產(chǎn)品中蚁滋,也對(duì)實(shí)時(shí)性有一定的要求宿接,此時(shí)無監(jiān)督模型可以在保持一定精度的前提下大大減少訓(xùn)練和預(yù)測(cè)的時(shí)間,有助于算法的落地辕录。
(2)在答辯的時(shí)候睦霎,記得評(píng)委曾經(jīng)提問過,為啥我沒想到二分類走诞,我的回答是陷入了思維局限了副女,確實(shí),這也可以看出來速梗,一個(gè)人的力量說白了還是很有限的肮塞。我在本次比賽做了一堆規(guī)則襟齿,其實(shí)如果將規(guī)則對(duì)應(yīng)到一個(gè)二分類模型來說,這樣二分類模型所學(xué)到的東西肯定是比人為定義規(guī)則間的優(yōu)先級(jí)要好枕赵。一個(gè)規(guī)則猜欺,其實(shí)可以對(duì)應(yīng)到二分類模型中的一個(gè)甚至是多個(gè)特征(比如書名號(hào),可以提取成是否是書名號(hào)中的內(nèi)容這一個(gè)特征)拷窜,這樣二分類模型自然會(huì)根據(jù)樣本學(xué)習(xí)到規(guī)則間的相對(duì)重要度并體現(xiàn)到結(jié)果中开皿。此外,人為做規(guī)則篮昧,能做的規(guī)則是有限的赋荆,然而如果是二分類模型,可以提取很多特征(提取候選詞的tfidf懊昨、LDA等特征窄潭,也是一種變相的模型stacking融合了),特征如果是對(duì)標(biāo)簽是有區(qū)分度的酵颁,那么很有可能是可以給模型增加額外信息嫉你,提高模型的精度。
(3)第一名的選手躏惋,采用的是二分類模型幽污,直接將標(biāo)題作為候選集,然后根據(jù)是否在標(biāo)簽集中打01標(biāo)簽簿姨,提取特征距误,用lightgbm做二分類,選擇概率較大的兩個(gè)詞作為最終提交的label扁位。比較有特色的特征准潭,計(jì)算詞word2vec與句子doc2vec向量的余弦距離
部分特征:
(4)第二名是通過tfidf選20個(gè)候選集,然后再打標(biāo)簽域仇,特色特征:在整個(gè)數(shù)據(jù)集里被當(dāng)成候選關(guān)鍵詞的頻率惋鹅,這個(gè)其實(shí)就是該候選詞在整個(gè)數(shù)據(jù)集中tfidf在前20的頻率
(5)第三名未引入外部詞典,使用詞的凝聚度和自由度從給定文檔中發(fā)現(xiàn)新詞殉簸。
(6)第五名使用pyhanlp包來進(jìn)行命名實(shí)體識(shí)別,識(shí)別人名沽讹,據(jù)說準(zhǔn)確度比較高般卑。