用于自然語言處理的12大開源工具
自然語言處理(NLP),為所有聊天機(jī)器人,語音助理,預(yù)測(cè)文本以及其他滲透到我們生活中的語音/文本應(yīng)用提供支持的技術(shù),在過去幾年中已經(jīng)有了長(zhǎng)足的發(fā)展。本文為大家推薦一些開源NLP工具,幫助大家規(guī)劃基于語音或文本的應(yīng)用程序。
一、Python工具
1. 自然語言工具包(NLTK)
自然語言工具包(NLTK)是最全功能的工具。它幾乎實(shí)現(xiàn)了你需要的任何NLP組件,如分類,標(biāo)記化,解析和語義推理。并且每種方法通常都有多個(gè)實(shí)現(xiàn),因此你可以選擇想要使用的確切算法或方法。它還支持多種語言。但是它以字符串的形式表示所有數(shù)據(jù),這對(duì)于簡(jiǎn)單的架構(gòu)很好,但是很難使用某些高級(jí)功能。與其他工具相比,它的發(fā)展點(diǎn)慢??偟膩碚f,這是一個(gè)很好的工具包,適用于需要特定算法組合的實(shí)驗(yàn),探索和應(yīng)用程序。
2. SpaCy
SpaCy是NLTK的主要競(jìng)爭(zhēng)對(duì)手。在大多數(shù)情況下它速度更快,但每個(gè)NLP組件只有一個(gè)實(shí)現(xiàn)。此外,它將所有內(nèi)容表示為對(duì)象而不是字符串,這簡(jiǎn)化了構(gòu)建應(yīng)用程序的界面。這也有助于它與許多其他框架和數(shù)據(jù)科學(xué)工具集成,因此你可以在更好地理解文本數(shù)據(jù)后執(zhí)行更多操作。但是,SpaCy不支持與NLTK一樣多的語言。它確實(shí)有一個(gè)簡(jiǎn)單的界面,一組簡(jiǎn)化的選擇和優(yōu)秀的文檔,以及語言處理和分析的各種組件的多個(gè)神經(jīng)模型??偟膩碚f,對(duì)于需要在生產(chǎn)中具有高性能并且不需要特定算法的新應(yīng)用程序來說,這是一個(gè)很好的工具。
3. TextBlob
TextBlob是NLTK的擴(kuò)展。可以通過TextBlob以簡(jiǎn)化方式訪問許多NLTK函數(shù),TextBlob還包含Pattern庫中的功能。如果你剛剛開始,這可能是學(xué)習(xí)時(shí)使用的好工具,它可以在生產(chǎn)中用于不需要過度執(zhí)行的應(yīng)用程序??偟膩碚f,TextBlob在所有地方都使用,非常適合小型項(xiàng)目。
4. Textacy
Textacy也是一個(gè)很棒的工具。它使用SpaCy作為其核心NLP功能,但它處理了處理前后的大量工作。如果你打算使用SpaCy,也可以使用Textacy,這樣就可以輕松地引入許多類型的數(shù)據(jù),而無需編寫額外的幫助代碼。
5. PyTorch-NLP
PyTorch-NLP已經(jīng)推出了一段時(shí)間了,但它已經(jīng)有了一個(gè)龐大的社區(qū)。它是快速原型制作的***工具。它也經(jīng)常通過***的研究進(jìn)行更新,***公司和研究人員已經(jīng)發(fā)布了許多其他工具來進(jìn)行各種驚人的處理,例如圖像變換。總體而言,PyTorch針對(duì)的是研究人員,但它也可以用于原型和初始生產(chǎn)工作負(fù)載,并提供***進(jìn)的算法。在它之上創(chuàng)建的庫也可能值得研究。
二、Node工具
6. Retext
Retext是unified collective的一部分。Unified是一個(gè)允許多個(gè)工具和插件有效集成和協(xié)同工作的界面。Retext是統(tǒng)一工具使用的三種語法之一;其他是Markmark的Remark和HTML的Rehype。Retext沒有公開它的許多底層技術(shù),而是使用插件來實(shí)現(xiàn)你可能用NLP瞄準(zhǔn)的結(jié)果。這很容易做一些事情,比如檢查拼寫,修復(fù)排版,檢測(cè)情緒,或確保簡(jiǎn)單的插件可以讀取文本??偟膩碚f,如果你只需要完成某些工作而無需了解底層流程中的所有內(nèi)容,那么這是一個(gè)出色的工具和社區(qū)。
7. Compromise
Compromise肯定不是最復(fù)雜的工具。如果你正在尋找***進(jìn)的算法或最完整的系統(tǒng),這可能不適合你。但是,如果想要一個(gè)具有廣泛功能并且可以在客戶端運(yùn)行的高性能工具,那么你應(yīng)該看看Compromise。
8. Natural
Natural包含你在一般NLP庫中可能期望的大多數(shù)功能。它主要側(cè)重于英語,但其他一些語言已經(jīng)提供,社區(qū)對(duì)其他貢獻(xiàn)持開放態(tài)度。它支持標(biāo)記化,詞干化,分類,語音,術(shù)語頻率——逆文檔頻率,WordNet,字符串相似性和一些變形。它可能與NLTK***可比性,因?yàn)樗噲D將所有內(nèi)容都包含在一個(gè)包中,但它更易于使用,并且不一定集中在研究上??偟膩碚f,這是一個(gè)非常完整的庫,但它仍處于積極開發(fā)階段,可能需要額外的底層實(shí)現(xiàn)知識(shí)才能完全有效。
9. Nlp.js
Nlp.js建立在其他幾個(gè)NLP庫之上,包括Franc和Brain.js。它為NLP的許多組件提供了一個(gè)很好的界面,如分類,情感分析,詞干,命名實(shí)體識(shí)別和自然語言生成。它還支持多種語言,如果你計(jì)劃使用非英語以外的其他語言,這將非常有用。總的來說,這是一個(gè)很棒的通用工具,它簡(jiǎn)化了與其他幾個(gè)工具的接口。在你需要更強(qiáng)大或更靈活的功能之前,這可能會(huì)在你的應(yīng)用程序中長(zhǎng)期使用。
三、Java工具
10. OpenNLP
OpenNLP由Apache Foundation托管,因此很容易將其集成到其他Apache項(xiàng)目中,如Apache Flink,Apache NiFi和Apache Spark。它是一個(gè)通用的NLP工具,涵蓋了NLP的所有常見處理組件,可以從命令行或應(yīng)用程序中用作庫。它還廣泛支持多種語言??傮w而言,OpenNLP是一個(gè)功能強(qiáng)大的工具,具有許多功能,并且如果你使用Java,則可以為生產(chǎn)工作負(fù)載做好準(zhǔn)備。
11. StanfordNLP
Stanford CoreNLP是一組工具,提供統(tǒng)計(jì)NLP,深度學(xué)習(xí)NLP和基于規(guī)則的NLP功能。已經(jīng)創(chuàng)建了許多其他編程語言綁定,因此可以在Java之外使用此工具。它是一個(gè)由精英研究機(jī)構(gòu)創(chuàng)建的非常強(qiáng)大的工具,但它可能不是生產(chǎn)工作負(fù)載的***選擇。此工具具有雙重許可,具有商業(yè)用途的特殊許可。總的來說,這是一個(gè)很好的研究和實(shí)驗(yàn)工具,但它可能會(huì)在生產(chǎn)系統(tǒng)中產(chǎn)生額外的成本。
12. CogCompNLP
由伊利諾伊大學(xué)開發(fā)的CogCompNLP也有一個(gè)具有類似功能的Python庫。它可以用于本地或遠(yuǎn)程系統(tǒng)上的文本處理,這可以消除本地設(shè)備的巨大負(fù)擔(dān)。它提供處理功能,例如標(biāo)記化,詞性標(biāo)記,分塊,命名實(shí)體標(biāo)記,詞形還原,依賴和選區(qū)分析以及語義角色標(biāo)記。總的來說,這是一個(gè)很好的研究工具,它有很多你可以探索的組件。我不確定它對(duì)于生產(chǎn)工作負(fù)載是否很好,但如果你打算使用Java,那么值得嘗試。