nltk自然语言处理
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
自然語言處理,也就從自然語言中解讀信息,知識。目前機(jī)器翻譯取得一些不錯(cuò)的進(jìn)展,深度學(xué)習(xí)在NLP的應(yīng)用還比較有限。本質(zhì)原因在于文本里,并未包含所有信息,語言有太多的潛臺詞,所以即便LSTM統(tǒng)計(jì)到所有的細(xì)節(jié),仍然有限的原因。
深度學(xué)習(xí)只是一種工具,適當(dāng)?shù)妮斎氩庞星‘?dāng)?shù)妮敵觥K约兇馕谋緎eq2seq的學(xué)習(xí),在NLP上注定沒有什么大用途。必須要文本解讀,分詞,POS, NER,建立語法樹,提取事件等,然后再借助深度學(xué)習(xí)強(qiáng)大的統(tǒng)計(jì)力去建模。
nltk是學(xué)習(xí)文本處理一個(gè)很好的入門框架。里面有大量的語料供學(xué)習(xí)(大部分是英文)。比如:布朗語料庫是第一個(gè)百萬詞級的英語電子語料庫的,由布朗大學(xué)于1961 年創(chuàng)建。這個(gè)語料庫包含500 個(gè)不同來源的文本,按照文體分類,如:新聞、社論等。
from nltk.corpus import brown print(brown.categories()) #['adventure', 'belles_lettres', 'editorial', 'fiction', 'government', 'hobbies', 'humor', 'learned', 'lore', 'mystery', 'news', 'religion', 'reviews', 'romance', 'science_fiction']分類很豐富,有科幻,言情,探險(xiǎn)...
自然語言最小單元當(dāng)然是字,如果英文就是字母(char-rnn這個(gè)級別的統(tǒng)計(jì)會(huì)直接按字/char為單元來學(xué)習(xí))。一般有意義的處理單元是詞,所以分詞就是首要任務(wù),英文nlp就占了這個(gè)優(yōu)勢,它本來就是分好詞的,而中文分詞本身就是個(gè)難題,比如新詞,口語詞,行業(yè)特定詞匯等如何處理。
最直接的一個(gè)分析,就是統(tǒng)計(jì)詞頻,不同的文體,通過詞頻可以看出風(fēng)格迥異。
#詞頻統(tǒng)計(jì) fdist = nltk.FreqDist([w.lower() for w in new_words]) print(fdist) modals = ['can', 'could', 'may', 'might', 'must', 'will'] #詞頻統(tǒng)計(jì) for m in modals:print(m + ':', fdist[m])nltk里還包含大量nlp基本任務(wù)的已標(biāo)注數(shù)據(jù),另外還包含了很多非英文的語料,也有繁體中文。
詞性標(biāo)注,就是把分好的詞,確定它的詞性,中文就是名動(dòng)形數(shù)量代:
tokens = nltk.word_tokenize("And now for something completely different") tagged = nltk.pos_tag(tokens) print(tagged) #[('And', 'CC'), ('now', 'RB'), ('for', 'IN'), ('something', 'NN'), ('completely', 'RB'), ('different', 'JJ')]在這里我們看到and 是CC,并列連詞;now 和completely 是RB,副詞;for 是IN,介詞;something 是NN,名詞;different 是JJ,形容詞。
詞性就是一種“額外”信息了,比傳統(tǒng)只統(tǒng)計(jì)詞頻,把所有詞同等對待,又進(jìn)了一步。text.similar()方法為一個(gè)詞w 找出所有上下文w1 w w2,然
后找出所有出現(xiàn)在相同上下文中的詞w',即w1 w' w2。就是出現(xiàn)在”類似“的位置,“woman”找到的相似的詞,都是“名詞”
text = nltk.Text(word.lower() for word in nltk.corpus.brown.words()) text.similar('woman') #man day time year moment car world family house boy child country #state job place way girl war question word針對文本處理,更多在詞這個(gè)層面,統(tǒng)計(jì)詞頻,算tf-idf等,把文檔向量化,然后通過傳統(tǒng)機(jī)器學(xué)習(xí),去分類(情感識別也是分類),比如判斷名字是男或女的概率,通過的方法有貝葉斯,SVM等。這些把所有詞當(dāng)作同樣的東西處理,得到的信息自然很有限。
真正的自然語言理解,要做到像人類一樣,還有很長很長的路要走。但從文本中提供更多信息(結(jié)構(gòu)化)信息,可借機(jī)器查詢,這是可能的。
首先,當(dāng)然是詞性標(biāo)注,實(shí)詞比較重要,比如名詞,動(dòng)詞。
其次,分塊,尤其是名詞分塊(NP-chunking)
看一個(gè)句子:
the little yellow dog barked at the cat.
sentence = [("the", "DT"), ("little", "JJ"), ("yellow", "JJ"),\("dog", "NN"), ("barked", "VBD"), ("at", "IN"), ("the", "DT"), ("cat", "NN")] grammar = "NP: {<DT>?<JJ>*<NN>}" cp = nltk.RegexpParser(grammar) result = cp.parse(sentence) print(result) result.draw()標(biāo)注完詞性后,我們使用一個(gè)簡單的正則規(guī)則,就是DT NN,之間,可能有或沒有形容詞,然后把分塊畫出來。我們得到兩個(gè)名詞分塊,句子也很清晰了。
有了分塊,就可以識別命名實(shí)體(NER),主要是名詞短語,人物,事件,地點(diǎn),組織等。有了命名實(shí)體,我們再去抽取這些實(shí)體之間的關(guān)系,比如三元組或五元組,這些就是知識圖譜的基礎(chǔ)了。
目前很流行的QA系統(tǒng),在電商,客服系統(tǒng)里有大量的應(yīng)用。其實(shí),在我們數(shù)據(jù)庫里大量的結(jié)構(gòu)化數(shù)據(jù)本身就可以支持回復(fù)很多問題。比如一個(gè)股票的數(shù)據(jù)庫。你想知道“昨天漲幅超過5%的股票有多少支?”。這個(gè)問題通過SQL是可以查詢的,但對于普通用戶就有難度了,他需要知道數(shù)據(jù)庫的設(shè)計(jì),還要會(huì)數(shù)據(jù)庫查詢。
from nltk import load_parser cp = load_parser('grammars/book_grammars/sql0.fcfg') query = 'What cities are located in China' trees = next(cp.parse(query.split())) for tree in cp.parse(query.split()):print(tree)得到sql語句:
(SELECT City FROM city_table, WHERE? Country="china")
NLTK是學(xué)習(xí),研究NLP處理的一個(gè)很好的工具包,包括深度學(xué)習(xí)的實(shí)驗(yàn)等都可以在這個(gè)庫上進(jìn)行。
?
關(guān)于作者:魏佳斌,互聯(lián)網(wǎng)產(chǎn)品/技術(shù)總監(jiān),北京大學(xué)光華管理學(xué)院(MBA),特許金融分析師(CFA),資深產(chǎn)品經(jīng)理/碼農(nóng)。偏愛python,深度關(guān)注互聯(lián)網(wǎng)趨勢,人工智能,AI金融量化。致力于使用最前沿的認(rèn)知技術(shù)去理解這個(gè)復(fù)雜的世界。
掃描下方二維碼,關(guān)注:AI量化實(shí)驗(yàn)室(ailabx),了解AI量化最前沿技術(shù)、資訊。
轉(zhuǎn)載于:https://my.oschina.net/u/1996852/blog/1569917
總結(jié)
以上是生活随笔為你收集整理的nltk自然语言处理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于图像分析的铁路车号识别系统
- 下一篇: Git 工作流的正确打开方式