gensim提取一个句子的关键词_聊一聊 NLPer 如何做关键词抽取
微信公眾號:NLP從入門到放棄?
有興趣的去github看更多NLP相關知識總結:
https://github.com/DA-southampton/NLP_ability?github.com關鍵詞的提取,也可以稱之為文本標簽提取。
比如說,”今天這頓燒烤是真不錯啊“,在這句話中,”燒烤“這個詞就可以被認為是一個關鍵詞,或者說這個句子的一個標簽。
這個標簽在一定程度上能夠表現出這個句子的含義,比如這個”燒烤“,如果用在文本分類任務中,可以隱含帶有”美食“這個類別的信息。
這些標簽有些時候也可以用在推薦系統(tǒng)的召回,比如直接按照”燒烤“這個標簽做一路召回。
對于關鍵詞的提取一般來說分為抽取式和生成式。其實類比到摘要,其實也是分為抽取式和生成式。
生成式有一個缺點就是有些結果不可控,這其實還挺要命的。
對于抽取式,就是從現有的數據中拿出來詞組。最差的結果也就是拿出的單詞并不重要,不是我們想要的。
我們的重點是在抽取式提取關鍵詞。
關鍵詞的提取可以分為兩個步驟:召回+排序
1.召回
召回就是得到文本中的候選關鍵詞,也就是得到這個句子中有可能是關鍵詞的詞匯。
這一步,可以做的方法有很多,比如
召回其實是一個很重要的部分,在這一步驟,盡可能的召回有用的詞匯。我自己的標準是寧可多不能少。如果多了,無非就是增加了資源消耗,但是少了,可能在排序階段就是無米之炊了。
2.排序
排序階段,我們可以將方法大致的分為有監(jiān)督和無監(jiān)督的方法
2.1無監(jiān)督抽取關鍵詞
對于無監(jiān)督,我們分為基于統(tǒng)計和基于圖。基于統(tǒng)計就是TF-IDF和各種變種。基于圖最常見的就是TextRank。
關鍵詞提取的一個baseline就是 TF-IDF 提取,這種方法效果已經很好。投入產出比很高,我們一般需要去掉常用的停用詞,保留重要的詞語。
TF-IDF基于統(tǒng)計,易于實現,但是缺點就是沒有考慮詞與詞,詞與文檔之間的關系。是割裂的。
另一個baseline就是基于圖的TextRank, TextRank 由 PageRank 演變而來。
相比于TF-IDF,TextRank考慮了詞與詞之間的關系(提取思想就是從窗口之間的詞匯關系而來),但是缺點是它針對的是單個文本,而不是整個語料,在詞匯量比較少的文本中,也就是短文中,效果會比較差。
隨著數據量的積累,我們需要把模型更換到有監(jiān)督模型加上。一般來說,有監(jiān)督分為兩種,一種是看做序列標注,一種是看做二分類的問題。
2.2有監(jiān)督之二分類
先說二分類問題,比較簡單,就是找到詞匯的各種特征,去判斷這個詞匯是不是這個文本的關鍵詞。
我大概羅列一些可能會用到的特征。
使用位置特征是我們基于文本關鍵詞出現的位置是在大量數據的情況下是有規(guī)律可言的,比如微博文本中出現在##符號中部分詞匯有很大概率就是文本的一個關鍵詞。
是否出現在開頭,是否出現在中間部分,是否出現在末尾,出現的位置(具體是第幾個單詞);相對于整個文本的位置;是否出現在##符號中...
共現矩陣信息;詞頻;逆詞頻;詞性;詞跨度;關鍵詞所在句子的最大長度/最小長度/平均長度;
關鍵詞詞向量和文檔向量的相似性
2.3有監(jiān)督之序列標注
關鍵詞的提取,就是一個典型的序列標注的問題。判斷句子中關鍵詞的開頭中間結尾的位置。
序列標注最基礎的就是HMM和CRF方法,但是特征工程比較復雜。
為了解決特征工程復雜的問題,我們使用深度學習模型序列標注。
關于序列標注,大家可以參考我這個文章內容:
工業(yè)級命名體識別經驗+代碼總結
3.新詞發(fā)現
還會出現一個問題,如果我們使用二分類判定關鍵詞,上述的過程我們都是基于我們的分詞器來做的。有可能會出現一些新詞,由于分詞錯誤,不能及時的出現在你的候選詞庫中,比如”爺青結“。
這個時候,我們需要一個新詞發(fā)現系統(tǒng),持續(xù)不斷的補充到詞庫中,在召回階段可以提升召回率。
對于新詞發(fā)現來說,基操就是從文本的自由程度和凝固程度來判斷是否是新詞,這樣的問題就是閾值不好調整從而導致召回和精準不好平衡。
我們還可以通過別的方法離線挖掘實體詞補充道詞庫中,之前有借鑒美團ner的文章實現了一下,效果還不錯,在這里,大家可以參考我這個文章:實體庫構建:離線大規(guī)模新詞實體挖掘
總結
以上是生活随笔為你收集整理的gensim提取一个句子的关键词_聊一聊 NLPer 如何做关键词抽取的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何实现文件互拖-VMware Tool
- 下一篇: c语言死循环中输入字符,如下代码,如果输