命名實體識別python
⑴ 如何用 python 中的 NLTK 對中文進行分析和處理
一、NLTK進行分詞
用到的函數:
nltk.sent_tokenize(text) #對文本按照句子進行分割
nltk.word_tokenize(sent) #對句子進行分詞
二、NLTK進行詞性標注
用到的函數:
nltk.pos_tag(tokens)#tokens是句子分詞後的結果,同樣是句子級的標注
三、NLTK進行命名實體識別(NER)
用到的函數:
nltk.ne_chunk(tags)#tags是句子詞性標注後的結果,同樣是句子級
上例中,有兩個命名實體,一個是Xi,這個應該是PER,被錯誤識別為GPE了; 另一個事China,被正確識別為GPE。
四、句法分析
nltk沒有好的parser,推薦使用stanfordparser
但是nltk有很好的樹類,該類用list實現
可以利用stanfordparser的輸出構建一棵python的句法樹
⑵ 目前常用的自然語言處理開源項目/開發包有哪些
中文主要有:NLTK,HanLP,Ansj,THULAC,結巴分詞,FNLP,哈工大LTP,中科院ICTCLAS分詞,GATE,SnowNLP,東北大學NiuTrans,NLPIR;英文主要有:NLTK,Genism,TextBlob,Stanford NLP,Spacy。英文的開源NLP工具主要參見StackoverFlow-java or python for nlp。HanLP:HanLP是由一系列模型與演算法組成的Java工具包,目標是普及自然語言處理在生產環境中的應用。HanLP具備功能完善、性能高效、架構清晰、語料時新、可自定義的特點。開發語言:Java,網址:hankcs/HanLP,開發機構:大快公司,協議:Apache-2.0功能:非常多,主要有中文分詞,詞性標注,命名實體識別,關鍵詞提取,自動摘要,短語提取,拼音轉換,簡繁轉換,文本推薦,依存句法分析,文本分類:情感分析,word2vec,語料庫工具。
⑶ 部分常用分詞工具使用整理
以下分詞工具均能在Python環境中直接調用(排名不分先後)。
1、jieba(結巴分詞) 免費使用
2、HanLP(漢語言處理包) 免費使用
3、SnowNLP(中文的類庫) 免費使用
4、FoolNLTK(中文處理工具包) 免費使用
5、Jiagu(甲骨NLP) 免費使用
6、pyltp(哈工大語言雲) 商用需要付費
7、THULAC(清華中文詞法分析工具包) 商用需要付費
8、NLPIR(漢語分詞系統) 付費使用
1、jieba(結巴分詞)
「結巴」中文分詞:做最好的 Python 中文分片語件。
項目Github地址:jieba
安裝 :
pip install jieba
使用 :
import jieba
jieba.initialize()
text = '化妝和服裝'
words = jieba.cut(text)
words = list(words)
print(words)
2、HanLP(漢語言處理包)
HanLP是一系列模型與演算法組成的NLP工具包,由大快搜索主導並完全開源,目標是普及自然語言處理在生產環境中的應用。HanLP具備功能完善、性能高效、架構清晰、語料時新、可自定義的特點。
項目Github地址:pyhanlp
安裝:
pip install pyhanlp
使用 :
import pyhanlp
text = '化妝和服裝'
words = []
for term in pyhanlp.HanLP.segment(text):
words.append(term.word)
print(words)
3、SnowNLP(中文的類庫)
SnowNLP是一個python寫的類庫,可以方便的處理中文文本內容,是受到了TextBlob的啟發而寫的,由於現在大部分的自然語言處理庫基本都是針對英文的,於是寫了一個方便處理中文的類庫,並且和TextBlob不同的是,這里沒有用NLTK,所有的演算法都是自己實現的,並且自帶了一些訓練好的字典。
項目Github地址:snownlp
安裝:
pip install snownlp
使用:
import snownlp
text = '化妝和服裝'
words = snownlp.SnowNLP(text).words
print(words)
4、FoolNLTK(中文處理工具包)
可能不是最快的開源中文分詞,但很可能是最準的開源中文分詞。
項目Github地址:FoolNLTK
安裝:
pip install foolnltk
使用:
import fool
text = '化妝和服裝'
words = fool.cut(text)
print(words)
5、Jiagu(甲骨NLP)
基於BiLSTM模型,使用大規模語料訓練而成。將提供中文分詞、詞性標注、命名實體識別、關鍵詞抽取、文本摘要、新詞發現等常用自然語言處理功能。參考了各大工具優缺點製作,將Jiagu回饋給大家。
項目Github地址:jiagu
安裝:
pip3 install jiagu
使用:
import jiagu
jiagu.init()
text = '化妝和服裝'
words = jiagu.seg(text)
print(words)
6、pyltp(哈工大語言雲)
pyltp 是 LTP 的 Python 封裝,提供了分詞,詞性標注,命名實體識別,依存句法分析,語義角色標注的功能。
項目Github地址:pyltp,3.4模型下載鏈接:網盤
安裝:
pip install pyltp
使用:
import pyltp
segmentor = pyltp.Segmentor()
segmentor.load('model/ltp_data_v3.4.0/cws.model') # 模型放置的路徑
text = '化妝和服裝'
words = segmentor.segment(text)
words = list(words)
print(words)
7、THULAC(清華中文詞法分析工具包)
THULAC(THU Lexical Analyzer for Chinese)由清華大學自然語言處理與 社會 人文計算實驗室研製推出的一套中文詞法分析工具包,具有中文分詞和詞性標注功能。
項目Github地址:THULAC-Python
安裝:
pip install thulac
使用:
import thulac
thu = thulac.thulac(seg_only=True)
text = '化妝和服裝'
words = thu.cut(text, text=True).split()
print(words)
NLPIR(漢語分詞系統)
主要功能包括中文分詞;英文分詞;詞性標注;命名實體識別;新詞識別;關鍵詞提取;支持用戶專業詞典與微博分析。NLPIR系統支持多種編碼、多種操作系統、多種開發語言與平台。
項目Github地址:pynlpir
安裝:
pip install pynlpir
下載證書覆蓋到安裝目錄,NLPIR.user 例如安裝目錄:/usr/lib64/python3.4/site-packages/pynlpir/Data
使用 :
import pynlpir
pynlpir.open()
text = '化妝和服裝'
words = pynlpir.segment(text, pos_tagging=False)
print(words)
pynlpir.close()
⑷ python 能調用fudannlp嗎
有很多好用的中文處理包: Jieba:可以用來做分詞,詞性標注,TextRank HanLP:分詞,命名實體識別,依存句法分析,還有FudanNLP,NLPIR 個人覺得都比NLTK好用~
⑸ hanlp可以使用python調用嗎
安裝JDK
JPype並沒有像IKVM那樣實現自己的JVM,而是以pipe方式調用原生JVM。所以我們需要一個JVM,比如:
Oracle JDK
OpenJDK
安裝JDK非常簡單,分清楚32位和64位即可,必須與OS和Python的位數一致,具體安裝過程不再贅述。
唯一需要注意的是,必須設置環境變數JAVA_HOME到JDK的根目錄,JDK的安裝程序不一定會幫你做這一步。
安裝編譯工具鏈
Python的package一般是以源碼形式發布的,其中一些C代碼必須在用戶機器上編譯,所以需要安裝編譯工具鏈。當然你也可以跳過這步,直接下載binary。
Windows
安裝免費的Visual C++ Express 2010。
Debian/Ubuntu
sudo apt-get install g++
Red Hat/Fedora
su -c 'yum install gcc-c++'
安裝JPype
本文讀者應該都是Python程序員,所以略過了安裝Python這一步。不過必須注意的是,JPype版本與Python的對應兼容關系:
Python2.x:JPype
Python3.x:JPype1-py3
使用setup.py安裝
下載源碼後解壓,在目錄下運行:
*nix
sudo python3 setup.py install
Windows
python setup.py install
直接下載binary
當然你也可以選擇下載binary,比如JPype1-py3主頁上的binary列表。
在Pycharm中安裝
如果你正在使用Pycharm這款IDE的話,那麼事情就簡單多了。
首先在Project Interpreter裡面點擊加號:
搜索JPype,選擇你需要的版本安裝:
稍等片刻就安裝成功了:
測試安裝結果
終於又到了寫代碼的開心時間了,可以通過如下代碼測試是否安裝成功:
from jpype import *startJVM(getDefaultJVMPath())java.lang.System.out.println("hello world")shutdownJVM()
輸出如下結果表示安裝成功:
hello worldJVM activity report : classes loaded : 31JVM has been shutdown
調用HanLP
關於HanLP
HanLP是
一個致力於向生產環境普及NLP技術的開源Java工具包,支持中文分詞(N-最短路分詞、CRF分詞、索引分詞、用戶自定義詞典、詞性標注),命名實體
識別(中國人名、音譯人名、日本人名、地名、實體機構名識別),關鍵詞提取,自動摘要,短語提取,拼音轉換,簡繁轉換,文本推薦,依存句法分析
(MaxEnt依存句法分析、神經網路依存句法分析)。
下載HanLP
你可以直接下載Portable版的jar,零配置。
也可以使用自定義的HanLP——HanLP由3部分組成:類庫hanlp.jar包、模型data包、配置文件hanlp.properties,請前往項目主頁下載最新版:https://github.com/hankcs/HanLP/releases。對於非portable版,下載後,你需要編輯配置文件第一行的root指向data的父目錄,詳見文檔。
這里,假設新建了一個目錄(假定為C:\hanlp),把hanlp.jar和hanlp.properties(portable版的話,僅需一個hanlp-portable.jar)放進去:
Python調用
下面是一份Python3的調用示例:
# -*- coding:utf-8 -*-
# Filename: main.py
# Author:hankcs
# Date: 2015/11/26 14:16
from jpype import *
startJVM(getDefaultJVMPath(), "-Djava.class.path=C:\hanlp\hanlp-1.2.8.jar;C:\hanlp", "-Xms1g", "-Xmx1g")
HanLP = JClass('com.hankcs.hanlp.HanLP')
# 中文分詞
print(HanLP.segment('你好,歡迎在Python中調用HanLP的API'))
testCases = [
"商品和服務",
"結婚的和尚未結婚的確實在干擾分詞啊",
"買水果然後來世博園最後去世博會",
"中國的首都是北京",
"歡迎新老師生前來就餐",
"工信處女幹事每月經過下屬科室都要親口交代24口交換機等技術性器件的安裝工作",
"隨著頁游興起到現在的頁游繁盛,依賴於存檔進行邏輯判斷的設計減少了,但這塊也不能完全忽略掉。"]
for sentence in testCases: print(HanLP.segment(sentence))
# 命名實體識別與詞性標注
NLPTokenizer = JClass('com.hankcs.hanlp.tokenizer.NLPTokenizer')
print(NLPTokenizer.segment('中國科學院計算技術研究所的宗成慶教授正在教授自然語言處理課程'))
# 關鍵詞提取
document = "水利部水資源司司長陳明忠9月29日在國務院新聞辦舉行的新聞發布會上透露," \
"根據剛剛完成了水資源管理制度的考核,有部分省接近了紅線的指標," \
"有部分省超過紅線的指標。對一些超過紅線的地方,陳明忠表示,對一些取用水項目進行區域的限批," \
"嚴格地進行水資源論證和取水許可的批准。"
print(HanLP.extractKeyword(document, 2))
# 自動摘要
print(HanLP.extractSummary(document, 3))
# 依存句法分析
print(HanLP.parseDependency("徐先生還具體幫助他確定了把畫雄鷹、松鼠和麻雀作為主攻目標。"))
shutdownJVM()
⑹ python 命名實體識別怎麼計算準確率 召回率
目前演算法方面主流就是CRF了
效率一般
2類(不包括非專名)
幾W
query/s
4類
就下降到1W-2W
query/s了
更多類別的就更少了
當然這個是優化過的crf++了
而且命名實體識別
演算法不是對所有類別的都合適
比如音樂和電影
CRF的效果就不好
但是人名
地名
機構名還不錯
所以工程上即使用CRF
也會使用詞典+消歧的策略
!
⑺ 如何建立一個深度學習系統
Programming Libraries 編程庫資源
我是一個「學習要敢於冒險和嘗試」觀念的倡導者。這是我學習編程的方式,我相信很多人也是這樣學習程序設計的。先了解你的能力極限,然後去拓展你的能力。如果你了解如何編程,可以將編程經驗很快借鑒到深入學習機器學習上。在你實現一個實際的產品系統之前,你必須遵循一些規則、學習相關數學知識。
找到一個庫並且仔細閱讀相關文檔,根據教程,開始嘗試實現一些東西。下面列出的是開源的機器學習庫中最好的幾種。我認為,並不是他們中的每一種都適合用在你的系統中,但是他們是你學習、探索和實驗的好材料。
你可以從一個由你熟悉的語言編寫的庫開始學習,然後再去學習其他功能強大的庫。如果你是一個優秀的程序員,你會知道怎樣從一種語言,簡單合理地遷移到另一種語言。語言的邏輯都是相同的,只是語法和API稍有不同。
R Project for Statistical Computing:這是一個開發環境,採用一種近似於Lisp的腳本語言。在這個庫中,所有你想要的與統計相關的功能都通過R語言提供,包括一些復雜的圖標。CRAN(你可以認為是機器學弟的第三方包)中的機器學習目錄下的代碼,是由統計技術方法和其他相關領域中的領軍人物編寫的。如果你想做實驗,或是快速拓展知識,R語言都是必須學習的。但它可能不是你學習的第一站。
WEKA:這是一個數據挖掘工作平台,為用戶提供數一系列據挖掘全過程的API、命令行和圖形化用戶介面。你可以准備數據、可視化、建立分類、進行回歸分析、建立聚類模型,同時可以通過第三方插件執行其他演算法。
Mahout是Hadoop中為機器學習提供的一個很好的JAVA框架,你可以自行學習。如果你是機器學習和大數據學習的新手,那麼堅持學習WEKA,並且全心全意地學習一個庫。
Scikit Learn:這是用Python編寫的,基於NumPy和SciPy的機器學習庫。如果你是一個Python或者Ruby語言程序員,這是適合你用的。這個庫很用戶介面友好,功能強大,並且配有詳細的文檔說明。如果你想試試別的庫,你可以選擇Orange。
Octave:如果你很熟悉MatLab,或者你是尋求改變的NumPy程序員,你可以考慮 Octave。這是一個數值計算環境,與MatLab像是,藉助Octave你可以很方便地解決線性和非線性問題,比如機器學習演算法底層涉及的問題。如果你有工程背景,那麼你可以由此入手。
BigML:可能你並不想進行編程工作。你完全可以不通過代碼,來使用 WEKA那樣的工具。你通過使用BigMLS的服務來進行更加深入的工作。BigML通過Web頁面,提供了機器學習的介面,因此你可以通過瀏覽器來建立模型。
補充:
NLTK NLTK is a leading platform for building Python programs to work with human language data. It provides easy-to-use interfaces to over 50 corpora and lexical resources such as WordNet, along with a suite of text processing libraries for classification, tokenization, stemming, tagging, parsing, and semantic reasoning.LingPipe: 是一個自然語言處理的Java開源工具包。LingPipe目前已有很豐富的功能,包括主題分類(Top Classification)、命名實體識別(Named Entity Recognition)、詞性標注(Part-of Speech Tagging)、句題檢測(Sentence Detection)、查詢拼寫檢查(Query Spell Checking)、興趣短語檢測(Interseting Phrase Detection)、聚類(Clustering)、字元語言建模(Character Language Modeling)、醫學文獻下載/解析/索引(MEDLINE Download, Parsing and Indexing)、資料庫文本挖掘(Database Text Mining)、中文分詞(Chinese Word Segmentation)、情感分析(Sentiment Analysis)、語言辨別(Language Identification)等API。
挑選出一個平台,並且在你實際學習機器學習的時候使用它。不要紙上談兵,要去實踐!
Video Courses視頻課程
很多人都是通過視頻資源開始接觸機器學習的。我在YouTube和VideoLectures上看了很多於機器學習相關的視頻資源。這樣做的問題是,你可能只是觀看視頻而並不實際去做。我的建議是,你在觀看視頻的時候,應該多記筆記,及時後來你會拋棄你的筆記。同時,我建議你將學到的東西付諸實踐。
坦白講,我沒有看見特別合適初學者的視頻資源。視頻資源都需要你掌握一定的線性代數、概率論等知識。Andrew Ng在斯坦福的講解可能是最適合初學者的,下面是我推薦的一些視頻資源。
Stanford Machine Learning斯坦福的機器學習課程:可以在Coursera上觀看,這門課是由 Andrew Ng講解的。只要注冊,你可以隨時觀看所有的課程視頻,從Stanford CS229 course下載講義和筆記。這門課包括了家庭作業和小測試,課程主要講解了線性代數的知識,使用Octave庫。
Caltech Learning from Data加利福尼亞理工學院的數據分析課程:你可以在edX上學習這門課程,課程是由Yaser Abu-Mostafa講解的。所有的課程視頻和資料都在加利福尼亞理工學院的網站上。與斯坦福的課程類似,你可以根據自己的情況安排學習進度,完成家庭作業和小論文。它與斯坦福的課程主題相似,關注更多的細節和數學知識。對於初學者來說,家庭作業可能稍有難度。
Machine Learning Category on VideoLectures.Net網站中的機器學習目錄:這是個很容易令人眼花繚亂的資源庫。你可以找出比較感興趣的資源,並且深入學習。不要糾結於不適合你的視頻,或者對於感興趣的內容你可以做筆記。我自己會一直重復深入學習一些問題,同時發現新的話題進行學習。此外,在這個網站上你可以發現是這個領域的大師是什麼樣的。
「Getting In Shape For The Sport Of Data Science」 – 由Jeremy Howard講授:這是與機器學習競賽者的對話,他們是一些實踐中的R語言用戶。這是非常珍貴的資源,因為很少有人會討論研究一個問題的完整過程和究竟怎樣做。我曾經幻想過在網上找到一個TV秀,記錄機器學習競賽的全過程。這就是我開始學習機器學習的經歷!
Overview Papers綜述論文
如果你並不習慣閱讀科研論文,你會發現論文的語言非常晦澀難懂。一篇論文就像是一本教科書的片段,但是論文會介紹一個實驗或者是領域中其他的前沿知識。然而,如果你准備從閱讀論文開始學習機器學習的話,你還是可以找到一些很有意思的文章的。
The Discipline of Machine Learning機器學習中的規則:這是由Tom Mitchell編著的白皮書,其中定義了機器學習的規則。Mitchell在說服CMU總裁為一個百年內都存在的問題建立一個獨立的機器學習部門時,也用到了這本書中的觀點。
A Few Useful Things to Know about Machine Learning:這是一篇很好的論文,因為它以詳細的演算法為基礎,又提出了一些很重要的問題,比如:選擇特徵的一般化,模型簡化等。
我只是列出了兩篇重要的論文,因為閱讀論文會讓你陷入困境。
Beginner Machine Learning Books給機器學習初學者的書
關於機器學習的書有很多,但是幾乎沒有為初學者量身定做的。什麼樣的人才是初學者呢?最有可能的情況是,你從另外一個完全不同的領域比如:計算機科學、程序設計或者是統計學,來到機器學習領域。那麼,大部分的書籍要求你有一定的線性代數和概率論的基礎。
但是,還有一些書通過講解最少的演算法來鼓勵程序員學習機器學習,書中會介紹一些可以使用工具、編程函數庫來讓程序員嘗試。其中最有代表性的書是:《Programming Collective Intelligence》,《Machine Learning for Hackers》,《Hackersand Data Mining: Practical Machine Learning Tools and Techniques》(Python版, R版, 以及Java版)。如果感到迷惑的話,你可以選擇其中一本開始學習。
Programming Collective Intelligence: Building Smart Web 2.0 Applications:這本書是為程序員寫的。書中簡略介紹相關理論,重點以程序為例,介紹web中的實際問題和解決辦法。你可以買來這本書,閱讀,並且做一些練習。
Machine Learning for Hackers (中文版:機器學習:實用案例解析 ):我建議你在閱讀了《Programming Collective Intelligence》一書之後,再閱讀這本書。這本書中也提供了很多實踐練習,但是涉及更多的數據分析,並且使用R語言。我個人很喜歡這本書!
Machine Learning: An Algorithmic Perspective:這本書是《Programming Collective Intelligence》的高級版本。它們目的相同(讓程序員開始了解機器學習),但是這本書包括一些數學知識,參考樣例和phython程序片段。如果你有興趣的話,我建議你在看完《Programming Collective Intelligence》之後來閱讀這本書。
數據挖掘:實用機器學習工具與技術(英文版·第3版) :我自己是從這本書開始了解機器學習的,那時是2000年這本書還是第一版。我那時是Java程序員,這本書和WEKA庫為我的學習和實踐提供了一個很好的環境。我通過這樣的平台和一些插件,實現我的演算法,並且真正開始實踐機器學習和數據挖掘的過程。我強烈推薦這本書,和這樣的學習過程。
Machine Learning(中文版:計算機科學叢書:機器學習 ):這是一本很老的書,包括了一些規則和很多參考資料。這是一本教科書,為每個演算法提供了相關講解。
有一些人認為那些經典的機器學習教科書很了不起。 我也贊同,那些書的確非常好。但是,我認為,對於初學者來說,這些書可能並不合適。
Further Reading 繼續閱讀
在寫這篇文章時,我認真思考了相關問題,同時也參考了其他人推薦的資料,以確保我沒有遺漏任何重要參考資料。為了確保文章的完整性,下面也列出了一些網上流行的,可以供初學者使用的材料。.
A List of Data Science and Machine Learning Resources:這是一份仔細整理的列表。你可以花一些時間,點擊鏈接,仔細閱讀作者的建議。值得一讀!
What are some good resources for learning about machine learning Why:這個問題的第一個答案令人吃驚。每次我閱讀這篇文章的時候,都會做好筆記,並且插入新的書簽。答案中對我最有啟發的部分是機器學習課程列表,以及相應的課程筆記和問答網站。
Overwhelmed by Machine Learning: is there an ML101 book:這是StackOverflow上的問題。並且提供了一系列機器學習推薦書籍。Jeff Moser提供的第一個答案是很有用的,其中有課程視頻和講座的鏈接。
⑻ 什麼是BP神經網路
BP演算法的基本思想是:學習過程由信號正向傳播與誤差的反向回傳兩個部分組成;正向傳播時,輸入樣本從輸入層傳入,經各隱層依次逐層處理,傳向輸出層,若輸出層輸出與期望不符,則將誤差作為調整信號逐層反向回傳,對神經元之間的連接權矩陣做出處理,使誤差減小。經反復學習,最終使誤差減小到可接受的范圍。具體步驟如下:
1、從訓練集中取出某一樣本,把信息輸入網路中。
2、通過各節點間的連接情況正向逐層處理後,得到神經網路的實際輸出。
3、計算網路實際輸出與期望輸出的誤差。
4、將誤差逐層反向回傳至之前各層,並按一定原則將誤差信號載入到連接權值上,使整個神經網路的連接權值向誤差減小的方向轉化。
5、対訓練集中每一個輸入—輸出樣本對重復以上步驟,直到整個訓練樣本集的誤差減小到符合要求為止。