日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

nltk自然语言处理

發布時間:2025/7/14 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nltk自然语言处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

自然語言處理,也就從自然語言中解讀信息,知識。目前機器翻譯取得一些不錯的進展,深度學習在NLP的應用還比較有限。本質原因在于文本里,并未包含所有信息,語言有太多的潛臺詞,所以即便LSTM統計到所有的細節,仍然有限的原因。

深度學習只是一種工具,適當的輸入才有恰當的輸出。所以純粹文本seq2seq的學習,在NLP上注定沒有什么大用途。必須要文本解讀,分詞,POS, NER,建立語法樹,提取事件等,然后再借助深度學習強大的統計力去建模。

nltk是學習文本處理一個很好的入門框架。里面有大量的語料供學習(大部分是英文)。比如:布朗語料庫是第一個百萬詞級的英語電子語料庫的,由布朗大學于1961 年創建。這個語料庫包含500 個不同來源的文本,按照文體分類,如:新聞、社論等。

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']

分類很豐富,有科幻,言情,探險...

自然語言最小單元當然是字,如果英文就是字母(char-rnn這個級別的統計會直接按字/char為單元來學習)。一般有意義的處理單元是詞,所以分詞就是首要任務,英文nlp就占了這個優勢,它本來就是分好詞的,而中文分詞本身就是個難題,比如新詞,口語詞,行業特定詞匯等如何處理。

最直接的一個分析,就是統計詞頻,不同的文體,通過詞頻可以看出風格迥異。

#詞頻統計 fdist = nltk.FreqDist([w.lower() for w in new_words]) print(fdist) modals = ['can', 'could', 'may', 'might', 'must', 'will'] #詞頻統計 for m in modals:print(m + ':', fdist[m])

nltk里還包含大量nlp基本任務的已標注數據,另外還包含了很多非英文的語料,也有繁體中文。

詞性標注,就是把分好的詞,確定它的詞性,中文就是名動形數量代:

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,形容詞。

詞性就是一種“額外”信息了,比傳統只統計詞頻,把所有詞同等對待,又進了一步。text.similar()方法為一個詞w 找出所有上下文w1 w w2,然

后找出所有出現在相同上下文中的詞w',即w1 w' w2。就是出現在”類似“的位置,“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

針對文本處理,更多在詞這個層面,統計詞頻,算tf-idf等,把文檔向量化,然后通過傳統機器學習,去分類(情感識別也是分類),比如判斷名字是男或女的概率,通過的方法有貝葉斯,SVM等。這些把所有詞當作同樣的東西處理,得到的信息自然很有限。

真正的自然語言理解,要做到像人類一樣,還有很長很長的路要走。但從文本中提供更多信息(結構化)信息,可借機器查詢,這是可能的。

首先,當然是詞性標注,實詞比較重要,比如名詞,動詞。

其次,分塊,尤其是名詞分塊(NP-chunking)

看一個句子:

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()

標注完詞性后,我們使用一個簡單的正則規則,就是DT NN,之間,可能有或沒有形容詞,然后把分塊畫出來。我們得到兩個名詞分塊,句子也很清晰了。

有了分塊,就可以識別命名實體(NER),主要是名詞短語,人物,事件,地點,組織等。有了命名實體,我們再去抽取這些實體之間的關系,比如三元組或五元組,這些就是知識圖譜的基礎了。

目前很流行的QA系統,在電商,客服系統里有大量的應用。其實,在我們數據庫里大量的結構化數據本身就可以支持回復很多問題。比如一個股票的數據庫。你想知道“昨天漲幅超過5%的股票有多少支?”。這個問題通過SQL是可以查詢的,但對于普通用戶就有難度了,他需要知道數據庫的設計,還要會數據庫查詢。

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是學習,研究NLP處理的一個很好的工具包,包括深度學習的實驗等都可以在這個庫上進行。

?

關于作者:魏佳斌,互聯網產品/技術總監,北京大學光華管理學院(MBA),特許金融分析師(CFA),資深產品經理/碼農。偏愛python,深度關注互聯網趨勢,人工智能,AI金融量化。致力于使用最前沿的認知技術去理解這個復雜的世界。

掃描下方二維碼,關注:AI量化實驗室(ailabx),了解AI量化最前沿技術、資訊。

轉載于:https://my.oschina.net/u/1996852/blog/1569917

總結

以上是生活随笔為你收集整理的nltk自然语言处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。