女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

RAKE算法原理介紹

深度學(xué)習(xí)自然語(yǔ)言處理 ? 來(lái)源:ChallengeHub ? 作者:ChallengeHub ? 2022-08-22 10:50 ? 次閱讀

RAKE簡(jiǎn)介

RAKE英文全稱為Rapid Automatic keyword extraction,中文稱為快速自動(dòng)關(guān)鍵字提取,是一種非常高效的關(guān)鍵字提取算法,可對(duì)單個(gè)文檔進(jìn)行操作,以實(shí)現(xiàn)對(duì)動(dòng)態(tài)集合的應(yīng)用,也可非常輕松地應(yīng)用于新域,并且在處理多種類型的文檔時(shí)也非常有效。01af5d20-205e-11ed-ba43-dac502259ad0.png

2

算法思想

RAKE算法用來(lái)做關(guān)鍵詞(keyword)的提取,實(shí)際上提取的是關(guān)鍵的短語(yǔ)(phrase),并且傾向于較長(zhǎng)的短語(yǔ),在英文中,關(guān)鍵詞通常包括多個(gè)單詞,但很少包含標(biāo)點(diǎn)符號(hào)和停用詞,例如and,the,of等,以及其他不包含語(yǔ)義信息的單詞。

RAKE算法首先使用標(biāo)點(diǎn)符號(hào)(如半角的句號(hào)、問(wèn)號(hào)、感嘆號(hào)、逗號(hào)等)將一篇文檔分成若干分句,然后對(duì)于每一個(gè)分句,使用停用詞作為分隔符將分句分為若干短語(yǔ),這些短語(yǔ)作為最終提取出的關(guān)鍵詞的候選詞。

最后,每個(gè)短語(yǔ)可以再通過(guò)空格分為若干個(gè)單詞,可以通過(guò)給每個(gè)單詞賦予一個(gè)得分,通過(guò)累加得到每個(gè)短語(yǔ)的得分。一個(gè)關(guān)鍵點(diǎn)在于將這個(gè)短語(yǔ)中每個(gè)單詞的共現(xiàn)關(guān)系考慮進(jìn)去。最終定義的公式是:

3

算法步驟

(1)算法首先對(duì)句子進(jìn)行分詞,分詞后去除停用詞,根據(jù)停 用詞劃分短語(yǔ);

(2)之后計(jì)算每一個(gè)詞在短語(yǔ)的共現(xiàn)詞數(shù),并構(gòu)建 詞共現(xiàn)矩陣;

(3)共現(xiàn)矩陣的每一列的值即為該詞的度deg(是一個(gè)網(wǎng)絡(luò)中的概念,每與一個(gè)單詞共現(xiàn)在一個(gè)短語(yǔ)中,度就加1,考慮該單詞本身),每個(gè)詞在文本中出現(xiàn)的次數(shù)即為頻率freq;

(4)得分score為度deg與頻率 freq的商,score越大則該詞更重 ;

(5)最后按照得分的大小值降序 輸出該詞所在的短語(yǔ)。

01cbe4f4-205e-11ed-ba43-dac502259ad0.png

下面我們以一個(gè)中文例子具體解釋RAKE算法原理,例如“系統(tǒng)有聲音,但系統(tǒng)托盤的音量小喇叭圖標(biāo)不見(jiàn)了”,經(jīng)過(guò)分詞、去除停用詞處理 后得到的詞集W = {系統(tǒng),聲音,托盤,音量,小喇叭,圖標(biāo),不見(jiàn)},短語(yǔ)集D={系統(tǒng),聲音,系統(tǒng)托盤,音量小喇叭圖標(biāo)不見(jiàn)},詞共現(xiàn)矩陣如表:01de99f0-205e-11ed-ba43-dac502259ad0.png

每一個(gè)詞的度為deg={"系統(tǒng)”:2,“聲音”:1,“托盤”:1; “音量” :3; “小喇叭” :3,“圖標(biāo)” :3,“不見(jiàn)” :3},頻率freq = { “系統(tǒng)” :2, “聲音” :1, “托盤” :1 ;“音量” :1;“小喇叭” :1, “圖標(biāo)”丄“不見(jiàn)” :1}, score ={“系統(tǒng)”:1,“聲音”:1,“托 盤” :1 ;“音量” :1小喇叭” :3, “圖標(biāo)” :3, “不見(jiàn)” :3 },輸出結(jié)果為{音量小喇叭圖標(biāo)不見(jiàn) ,系統(tǒng)托盤,系統(tǒng),聲音}

4

代碼實(shí)現(xiàn)

importstring

fromtypingimportDict,List,Set,Tuple

PUNCTUATION=string.punctuation.replace(''','')#Donotuseapostropheasadelimiter

ENGLISH_WORDS_STOPLIST:List[str]=[
'(',')','and','of','the','amongst','with','from','after','its','it','at','is',
'this',',','.','be','in','that','an','other','than','also','are','may','suggests',
'all','where','most','against','more','have','been','several','as','before',
'although','yet','likely','rather','over','a','for','can','these','considered',
'used','types','given','precedes',
]


defsplit_to_tokens(text:str)->List[str]:
'''
Splittextstringtotokens.
Behaviorissimilartostr.split(),
butemptylinesareomittedandpunctuationmarksareseparatedfromword.
Example:
split_to_tokens('Johnsaid'Hey!'(andsomeotherwords.)')->
->['John','said',''','Hey','!',''','(','and','some','other','words','.',')']
'''
result=[]
foritemintext.split():
whileitem[0]inPUNCTUATION:
result.append(item[0])
item=item[1:]
foriinrange(len(item)):
ifitem[-i-1]notinPUNCTUATION:
break
ifi==0:
result.append(item)
else:
result.append(item[:-i])
result.extend(item[-i:])
return[itemforiteminresultifitem]


defsplit_tokens_to_phrases(tokens:List[str],stoplist:List[str]=None)->List[str]:
"""
Mergetokensintophrases,delimitedbyitemsfromstoplist.
Phraseisasequenceoftokenthathasthefollowingproperties:
-phrasecontains1ormoretokens
-tokensfromphrasegoinarow
-phrasedoesnotcontaindelimitersfromstoplist
-eithertheprevious(notinaphrase)tokenbelongstostoplistoritisthebeginningoftokenslist
-eitherthenext(notinaphrase)tokenbelongstostoplistoritistheendoftokenslist
Example:
split_tokens_to_phrases(
tokens=['Mary','and','John',',','some','words','(','and','other','words',')'],
stoplist=['and',',','.','(',')'])->
->['Mary','John','somewords','otherwords']
"""
ifstoplistisNone:
stoplist=ENGLISH_WORDS_STOPLIST
stoplist+=list(PUNCTUATION)

current_phrase:List[str]=[]
all_phrases:List[str]=[]
stoplist_set:Set[str]={stopword.lower()forstopwordinstoplist}
fortokenintokens:
iftoken.lower()instoplist_set:
ifcurrent_phrase:
all_phrases.append(''.join(current_phrase))
current_phrase=[]
else:
current_phrase.append(token)
ifcurrent_phrase:
all_phrases.append(''.join(current_phrase))
returnall_phrases


defget_cooccurrence_graph(phrases:List[str])->Dict[str,Dict[str,int]]:
"""
Getgraphthatstorescooccurenceoftokensinphrases.
Matrixisstoredasdict,
wherekeyistoken,valueisdict(keyissecondtoken,valueisnumberofcooccurrence).
Example:
get_occurrence_graph(['Mary','John','somewords','otherwords'])->{
'mary':{'mary':1},
'john':{'john':1},
'some':{'some':1,'words':1},
'words':{'some':1,'words':2,'other':1},
'other':{'other':1,'words':1}
}
"""
graph:Dict[str,Dict[str,int]]={}
forphraseinphrases:
forfirst_tokeninphrase.lower().split():
forsecond_tokeninphrase.lower().split():
iffirst_tokennotingraph:
graph[first_token]={}
graph[first_token][second_token]=graph[first_token].get(second_token,0)+1
returngraph


defget_degrees(cooccurrence_graph:Dict[str,Dict[str,int]])->Dict[str,int]:
"""
Getdegreesforalltokensbycooccurrencegraph.
Resultisstoredasdict,
wherekeyistoken,valueisdegree(sumoflengthsofphrasesthatcontainthetoken).
Example:
get_degrees(
{
'mary':{'mary':1},
'john':{'john':1},
'some':{'some':1,'words':1},
'words':{'some':1,'words':2,'other':1},
'other':{'other':1,'words':1}
}
)->{'mary':1,'john':1,'some':2,'words':4,'other':2}
"""
return{token:sum(cooccurrence_graph[token].values())fortokenincooccurrence_graph}


defget_frequencies(cooccurrence_graph:Dict[str,Dict[str,int]])->Dict[str,int]:
"""
Getfrequenciesforalltokensbycooccurrencegraph.
Resultisstoredasdict,
wherekeyistoken,valueisfrequency(numberoftimesthetokenoccurs).
Example:
get_frequencies(
{
'mary':{'mary':1},
'john':{'john':1},
'some':{'some':1,'words':1},
'words':{'some':1,'words':2,'other':1},
'other':{'other':1,'words':1}
}
)->{'mary':1,'john':1,'some':1,'words':2,'other':1}
"""
return{token:cooccurrence_graph[token][token]fortokenincooccurrence_graph}


defget_ranked_phrases(phrases:List[str],*,
degrees:Dict[str,int],
frequencies:Dict[str,int])->List[Tuple[str,float]]:
"""
GetRAKEmeasureforeveryphrase.
Resultisstoredaslistoftuples,everytuplecontainsofphraseanditsRAKEmeasure.
Itemsaresortednon-ascendingbyRAKEmeasure,thanalphabeticallybyphrase.
"""
processed_phrases:Set[str]=set()
ranked_phrases:List[Tuple[str,float]]=[]
forphraseinphrases:
lowered_phrase=phrase.lower()
iflowered_phraseinprocessed_phrases:
continue
score:float=sum(degrees[token]/frequencies[token]fortokeninlowered_phrase.split())
ranked_phrases.append((lowered_phrase,round(score,2)))
processed_phrases.add(lowered_phrase)
#Sortbyscorethanbyphrasealphabetically.
ranked_phrases.sort(key=lambdaitem:(-item[1],item[0]))
returnranked_phrases


defrake_text(text:str)->List[Tuple[str,float]]:
"""
GetRAKEmeasureforeveryphraseintextstring.
Resultisstoredaslistoftuples,everytuplecontainsofphraseanditsRAKEmeasure.
Itemsaresortednon-ascendingbyRAKEmeasure,thanalphabeticallybyphrase.
"""
tokens:List[str]=split_to_tokens(text)
phrases:List[str]=split_tokens_to_phrases(tokens)
cooccurrence:Dict[str,Dict[str,int]]=get_cooccurrence_graph(phrases)
degrees:Dict[str,int]=get_degrees(cooccurrence)
frequencies:Dict[str,int]=get_frequencies(cooccurrence)
ranked_result:List[Tuple[str,float]]=get_ranked_phrases(phrases,degrees=degrees,frequencies=frequencies)
returnranked_result

執(zhí)行效果:

if__name__=='__main__':
text='Mercy-classincludesUSNSMercyandUSNSComforthospitalships.Credit:USNavyphotoMassCommunicationSpecialist1stClassJasonPastrick.TheUSNavalAirWarfareCenterAircraftDivision(NAWCAD)LakehurstinNewJerseyisusinganadditivemanufacturingprocesstomakefaceshields.........'
ranked_result=rake_text(text)
print(ranked_result)

關(guān)鍵短語(yǔ)抽取效果如下:

[
('additivemanufacturingprocesstomakefaceshields.the3dprintingfaceshields',100.4),
('usnavyphotomasscommunicationspecialist1stclassjasonpastrick',98.33),
('usnavy’smercy-classhospitalshipusnscomfort.currentlystationed',53.33),
...
]
審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4697

    瀏覽量

    94680
  • 網(wǎng)絡(luò)
    +關(guān)注

    關(guān)注

    14

    文章

    7763

    瀏覽量

    90315
  • Rake
    +關(guān)注

    關(guān)注

    0

    文章

    2

    瀏覽量

    7403

原文標(biāo)題:【NLP基礎(chǔ)】英文關(guān)鍵詞抽取RAKE算法

文章出處:【微信號(hào):zenRRan,微信公眾號(hào):深度學(xué)習(xí)自然語(yǔ)言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    指紋識(shí)別算法流程介紹

    本帖最后由 mr.pengyongche 于 2013-4-30 03:26 編輯 指紋識(shí)別算法流程介紹指紋識(shí)別算法在特征量的選擇方法和任意角度旋轉(zhuǎn)時(shí)不變的特征量照算法上具有鮮明
    發(fā)表于 11-09 17:31

    數(shù)學(xué)建模十大算法介紹

    算法是程序的靈魂,本資料詳細(xì)介紹了數(shù)學(xué)建模當(dāng)中的主要幾個(gè)算法的應(yīng)用分析,希望對(duì)大家在編程解決其他問(wèn)題的時(shí)候有所幫助
    發(fā)表于 11-11 09:40

    Rake簡(jiǎn)介和自定義Rake任務(wù)

    Rake簡(jiǎn)介及如何自定義Rake任務(wù)(rake task)
    發(fā)表于 04-07 09:03

    SVPWM算法架構(gòu)介紹

    簡(jiǎn)要文檔說(shuō)明算法介紹算法架構(gòu)如下所示,其中采用SVPWM矢量控制,id=0。主要包括三個(gè)部分:轉(zhuǎn)速環(huán)PI調(diào)節(jié)器,電流環(huán)PI調(diào)節(jié)器,SVPWM算法等。主要參數(shù)計(jì)算3.1 轉(zhuǎn)速環(huán)ADRC理
    發(fā)表于 08-27 07:41

    SVPWM的原理及法則推導(dǎo)和控制算法介紹

    包含SVPWM的算法介紹,基本原理,以及詳細(xì)的公式推導(dǎo),詳細(xì)的圖表示意,是初學(xué)FOC,準(zhǔn)備自己手寫(xiě)FOC庫(kù)或者理解FOC算法的工程師的有利手冊(cè),手冊(cè)中也簡(jiǎn)單介紹了SVPWM與SPWM的
    發(fā)表于 10-07 09:13

    在ADSP2181上實(shí)現(xiàn)Rake接收機(jī)路徑搜索

    在ADSP2181上實(shí)現(xiàn)Rake接收機(jī)路徑搜索
    發(fā)表于 05-09 14:56 ?19次下載

    用于TD-SCDMA通信終端的RAKE接收機(jī)

    用于TD-SCDMA通信終端的RAKE接收機(jī) 1引言 2數(shù)字檢測(cè)算法 3RAKE接收機(jī)的性能
    發(fā)表于 09-15 17:06 ?25次下載

    自適應(yīng)RAKE接收技術(shù)

    傳統(tǒng)的RAKE接收機(jī)能夠在一定程度上檢測(cè)合并多徑干擾,但在多徑數(shù)大于分集數(shù)時(shí)性能下降。文中提出一種自適應(yīng)RAKE接收機(jī), 在多徑數(shù)大于分集數(shù)時(shí)明顯提高了RAKE接收機(jī)的性能。
    發(fā)表于 10-16 17:31 ?0次下載

    RAKE接收機(jī)與分集接收

    介紹了在移動(dòng)通信系統(tǒng)中對(duì)抗多徑衰落的一種重要技術(shù)——分集接收技術(shù),并分析了各種分集、合并技術(shù)的優(yōu)缺點(diǎn),提出了RAKE接收機(jī)的概念和結(jié)構(gòu)。
    發(fā)表于 10-16 17:32 ?12次下載

    擴(kuò)頻通信系統(tǒng)中Rake接收性能仿真研究

    在擴(kuò)頻通信中,Rake接收是抵抗多徑衰落的有效方法。本文首先介紹無(wú)線移動(dòng)通信的信道特性,然后對(duì)Rake接收的基本原理和接收機(jī)結(jié)構(gòu)進(jìn)行詳細(xì)描述,并對(duì)Rake接收性能進(jìn)行了仿真比較。
    發(fā)表于 05-06 18:35 ?31次下載
    擴(kuò)頻通信系統(tǒng)中<b class='flag-5'>Rake</b>接收性能仿真研究

    rake接收機(jī)的工作原理

    RAKE接收機(jī)是一種能分離多徑信號(hào)并有效合并多徑信號(hào)能量的最終接收機(jī)。 RAKE接收技術(shù)是第三代CDMA移動(dòng)通信系統(tǒng)中的一項(xiàng)重要技術(shù)。在CDMA移動(dòng)通信系統(tǒng)中,由于信號(hào)帶寬較寬,存在著復(fù)雜的多徑
    發(fā)表于 11-11 11:33 ?9747次閱讀

    RAKE接收機(jī)的合并方式

    RAKE接收機(jī)是一種能分離多徑信號(hào)并有效合并多徑信號(hào)能量的最終接收機(jī)。RAKE接收機(jī)合并時(shí)采用的準(zhǔn)則和方式主要可以分為三種:最大比值合并、等增益合并、選擇式合并等。下面分別介紹
    發(fā)表于 11-13 08:55 ?8055次閱讀

    RAKE接收機(jī)的分集接收原理

     分集接收技術(shù)是一種重要的對(duì)抗多徑衰落的技術(shù)。使用分集接收技術(shù)的前提是系統(tǒng)的多徑分量的衰落相互獨(dú)立。同一通信系統(tǒng)中,可以同時(shí)采用多種分集方式以減小誤碼率。RAKE接收機(jī)就是通過(guò)將可分離的多徑按其強(qiáng)度成比例合并,從而把多徑中的能量收集起來(lái)。
    發(fā)表于 11-13 09:16 ?1.7w次閱讀

    RAKE接收機(jī)的作用及優(yōu)缺點(diǎn)

    RAKE接收機(jī)是一種能分離多徑信號(hào)并有效合并多徑信號(hào)能量的最終接收機(jī)。 RAKE接收技術(shù)是第三代CDMA移動(dòng)通信系統(tǒng)中的一項(xiàng)重要技術(shù)。在CDMA移動(dòng)通信系統(tǒng)中,由于信號(hào)帶寬較寬,存在著復(fù)雜的多徑
    發(fā)表于 11-13 09:50 ?1.6w次閱讀

    RAKE接收機(jī)的原理介紹和使用MATLAB以及RAKE接收機(jī)的性能說(shuō)明等介紹

    RAKE接收技術(shù)是第三代移動(dòng)通信系統(tǒng)中的一項(xiàng)重要技術(shù)。在移動(dòng)通信系統(tǒng)中,由于信號(hào)帶寬較寬,存在著復(fù)雜的多徑無(wú)線電信號(hào),通信受到多徑衰落的影響。RAKE接收技術(shù)實(shí)際上是一種多徑分集接收技術(shù),可以在時(shí)間上分辨出細(xì)微的多徑信號(hào),對(duì)這些分辨出來(lái)的多徑信號(hào)分別進(jìn)行加權(quán)調(diào)整、使之復(fù)合
    發(fā)表于 01-03 17:21 ?15次下載
    <b class='flag-5'>RAKE</b>接收機(jī)的原理<b class='flag-5'>介紹</b>和使用MATLAB以及<b class='flag-5'>RAKE</b>接收機(jī)的性能說(shuō)明等<b class='flag-5'>介紹</b>