corenlp在python(corebpl)

本文目錄一覽:

Python和NLP的區別是什麼?

python是一門編程語言

NLP屬於自然語言處理一個大方向

這個方向也可以用其他的語言來實現

spark 怎麼讀pmml文件

Apache Spark 本身

1.MLlib

AMPLab

Spark最初誕生於伯克利 AMPLab實驗室,如今依然還是AMPLab所致力的項目,儘管這些不處於Apache Spark Foundation中,但是依然在你日常的github項目中享有相當的地位。

ML Base

Spark本身的MLLib位於三層ML Base中的最底層,MLI位於中間層,ML Optimizer則處於最為抽象的頂層。

2.MLI

3.ML Optimizer (又稱 Ghostface)

Ghostware這個項目在2014年就開始進行了,不過從未對外公布。在這39個機器學習庫中,這是唯一一個霧件,之所以能囊括在這列表中,全憑着AMPLab與ML Base的地位支撐。

ML Base之外

4.Splash

這是近期2015年6月的一個項目,在運行隨機梯度下降(SGD)時這套隨機學習算法聲稱在性能上比Spark MLib中快了25%-75%。這是AMPLab實驗室的sp標記項目,因此值得我們去閱讀。

5.Keystone ML

KML將端到端的機器學習管道引進到了Spark中,但在近期Spark版本中管道已經趨於成熟。同樣也承諾具有一些計算機視覺能力,我曾經在博客中也提到過這也存在一些局限。

6.Velox

作為一個服務器專門負責管理大量機器學習模型的收集。

7.CoCoA

通過優化通信模式與shuffles來實現更快的機器學習,詳情可見這篇論文的描述《高效通信分布式雙坐標上升》。

框架

GPU-based

8.DeepLearning4j

我曾經的一則博客有進行說明 《DeepLearning4J 增加了Spark gpu的支持》。

9.Elephas

全新的概念,這也是我寫這篇博客的初衷。它提供了一個接口給Keras。

Non-GPU-based

10.DistML

模式並行下而並非數據並行的參數服務器(正如 Spark MLib)。

11.Aerosolve

來自Airbnb,用於他們自動化定價。

12. Zen

邏輯斯諦回歸、隱含狄利克雷分布(LDA)、因子分解機、神經網絡、受限玻爾茲曼機。

13.Distributed Data Frame

與Spark DataFrame類似,但是引擎是不可知的(例如在未來它將運行在引擎上而不是Spark)。其中包括了交叉驗證和外部機器學習庫的接口。

其他機器學習系統的接口

14. spark-corenlp

封裝了斯坦福CoreNLP。

15. Sparkit-learn

給Python Scikit-learn的接口。

16. Sparkling Water

給 的接口。

17. hivemall-spark

封裝了Hivemall,,在Hive中的機器學習。

18. spark-pmml-exporter-validator

可導出預測模型標記語言(PMML),一種用於傳遞機器學習模型的行業標準的XML格式。

附加組件:增強MLlib中現有的算法。

19. MLlib-dropout

為Spark MLLib 增加dropout能力。基於以下這篇論文進行的實現,《Dropout:一個簡單的方法來防止神經網絡中的過擬合》。

20.generalized-kmeans-clustering

為K-Means算法增加任意距離函數。

21. spark-ml-streaming

可視化的流式機器學習算法內置於Spark MLlib。

算法

監督學習

22. spark-libFM

因子分解機。

23. ScalaNetwork

遞歸神經網絡(RNNs)。

24. dissolve-struct

基於上文中提到的高性能Spark通信框架CoCoA下的支持向量機(SVM)。

25. Sparkling Ferns

基於以下這篇論文進行的實現,《通過使用隨機森林與隨機蕨算法的圖像分類技術》。

26. streaming-matrix-factorization

矩陣分解推薦系統。

如何利用深度學習技術訓練聊天機器人語言模型

數據預處理

模型能聊的內容也取決於選取的語料。如果已經具備了原始聊天數據,可以用SQL通過關鍵字查詢一些對話,也就是從大庫里選取出一個小庫來訓練。從一些論文上,很多算法都是在數據預處理層面的,比如Mechanism-Aware Neural Machine for Dialogue Response Generation就介紹了,從大庫中抽取小庫,然後再進行融合,訓練出有特色的對話來。

對於英語,需要了解NLTK,NLTK提供了加載語料,語料標準化,語料分類,PoS詞性標註,語意抽取等功能。

另一個功能強大的工具庫是CoreNLP,作為 Stanford開源出來的工具,特色是實體標註,語意抽取,支持多種語言。

下面主要介紹兩個內容:

中文分詞

現在有很多中文分詞的SDK,分詞的算法也比較多,也有很多文章對不同SDK的性能做比較。做中文分詞的示例代碼如下。

# coding:utf8

”’  

Segmenter with Chinese  

”’

import jieba  

import langid

def segment_chinese_sentence(sentence):

”’

Return segmented sentence.

”’

seg_list = jieba.cut(sentence, cut_all=False)

seg_sentence = u” “.join(seg_list)

return seg_sentence.strip().encode(‘utf8’)

def process_sentence(sentence):

”’

Only process Chinese Sentence.

”’

if langid.classify(sentence)[0] == ‘zh’:

return segment_chinese_sentence(sentence)

return sentence

if __name__ == “__main__”:

print(process_sentence(‘飛雪連天射白鹿’))

print(process_sentence(‘I have a pen.’))

以上使用了langid先判斷語句是否是中文,然後使用jieba進行分詞。

在功能上,jieba分詞支持全切分模式,精確模式和搜索引擎模式。

全切分:輸出所有分詞。

精確:概率上的最佳分詞。

所有引擎模式:對精確切分後的長句再進行分詞。

jieba分詞的實現

主要是分成下面三步:

1、加載字典,在內存中建立字典空間。

字典的構造是每行一個詞,空格,詞頻,空格,詞性。

上訴書 3 n

上訴人 3 n

上訴期 3 b

上訴狀 4 n

上課 650 v

建立字典空間的是使用python的dict,採用前綴數組的方式。

使用前綴數組的原因是樹結構只有一層 – word:freq,效率高,節省空間。比如單詞”dog”, 字典中將這樣存儲:

{

“d”: 0,

“do”: 0,

“dog”: 1 # value為詞頻

}

字典空間的主要用途是對輸入句子建立有向無環圖,然後根據算法進行切分。算法的取捨主要是根據模式 – 全切,精確還是搜索。

2、對輸入的語句分詞,首先是建立一個有向無環圖。 

有向無環圖, Directed acyclic graph (音 /ˈdæɡ/)。

【圖 3-2】 DAG

DAG對於後面計算最大概率路徑和使用HNN模型識別新詞有直接關係。

3、按照模式,對有向無環圖進行遍歷,比如,在精確模式下,便利就是求最大權重和的路徑,權重來自於在字典中定義的詞頻。對於沒有出現在詞典中的詞,連續的單個字符也許會構成新詞。然後用HMM模型和Viterbi算法識別新詞。

精確模型切詞:使用動態規劃對最大概率路徑進行求解。

最大概率路徑:求route = (w1, w2, w3 ,.., wn),使得Σweight(wi)最大。Wi為該詞的詞頻。

更多的細節還需要讀一下jieba的源碼。

自定義字典

jieba分詞默認的字典是:1998人民日報的切分語料還有一個msr的切分語料和一些txt小說。開發者可以自行添加字典,只要符合字典構建的格式就行。

jieba分詞同時提供接口添加詞彙。

Word embedding

使用機器學習訓練的語言模型,網絡算法是使用數字進行計算,在輸入進行編碼,在輸出進行解碼。word embedding就是編解碼的手段。

【圖 3-3】 word embedding, Ref. #7

word embedding是文本的數值化表示方法。表示法包括one-hot,bag of words,N-gram,分布式表示,共現矩陣等。

Word2vec

近年來,word2vec被廣泛採用。Word2vec輸入文章或者其他語料,輸出語料中詞彙建設的詞向量空間。詳細可參考word2vec數學原理解析。

使用word2vec

安裝完成後,得到word2vec命令行工具。

word2vec -train “data/review.txt” \

-output “data/review.model” \

-cbow 1 \

-size 100 \

-window 8 \

-negative 25 \

-hs 0 \

-sample 1e-4 \

-threads 20 \

-binary 1 \

-iter 15

-train “data/review.txt” 表示在指定的語料庫上訓練模型

-cbow 1 表示用cbow模型,設成0表示用skip-gram模型

-size 100 詞向量的維度為100

-window 8 訓練窗口的大小為8 即考慮一個單詞的前八個和後八個單詞

-negative 25 -hs 0 是使用negative sample還是HS算法

-sample 1e-4 採用閾值

-threads 20 線程數

-binary 1 輸出model保存成2進制

-iter 15 迭代次數

在訓練完成後,就得到一個model,用該model可以查詢每個詞的詞向量,在詞和詞之間求距離,將不同詞放在數學公式中計算輸出相關性的詞。比如:

vector(“法國”) – vector(“巴黎) + vector(“英國”) = vector(“倫敦”)”  

對於訓練不同的語料庫,可以單獨的訓練詞向量模型,可以利用已經訓練好的模型。

其它訓練詞向量空間工具推薦:Glove。

Seq2Seq

2014年,Sequence to Sequence Learning with Neural Networks提出了使用深度學習技術,基於RNN和LSTM網絡訓練翻譯系統,取得了突破,這一方法便應用在更廣泛的領域,比如問答系統,圖像字幕,語音識別,撰寫詩詞等。Seq2Seq完成了【encoder + decoder – target】的映射,在上面的論文中,清晰的介紹了實現方式。

【圖 3-4】 Seq2Seq, Ref. #1

也有很多文章解讀它的原理。在使用Seq2Seq的過程中,雖然也研究了它的結構,但我還不認為能理解和解釋它。下面談兩點感受:

a. RNN保存了語言順序的特點,這和CNN在處理帶有形狀的模型時如出一轍,就是數學模型的設計符合物理模型。

【圖 3-5】 RNN, Ref. #6

b. LSTM Cell的複雜度對應了自然語言處理的複雜度。

【圖 3-6】 LSTM, Ref. #6

理由是,有人將LSTM Cell嘗試了多種其它方案傳遞狀態,結果也很好。

【圖 3-7】 GRU, Ref. #6

LSTM的一個替代方案:GRU。只要RNN的Cell足夠複雜,它就能工作的很好。

使用DeepQA2訓練語言模型

準備工作,下載項目:

git clone  

cd DeepQA2  

open README.md # 根據README.md安裝依賴包

DeepQA2將工作分成三個過程:

數據預處理:從語料庫到數據字典。

訓練模型:從數據字典到語言模型。

提供服務:從語言模型到RESt API。

預處理

DeepQA2使用Cornell Movie Dialogs Corpus作為demo語料庫。

原始數據就是movie_lines.txt 和movie_conversations.txt。這兩個文件的組織形式參考README.txt

deepqa2/dataset/preprocesser.py是將這兩個文件處理成數據字典的模塊。

train_max_length_enco就是問題的長度,train_max_length_deco就是答案的長度。在語料庫中,大於該長度的部分會被截斷。

程序運行後,會生成dataset-cornell-20.pkl文件,它加載到python中是一個字典:

word2id存儲了{word: id},其中word是一個單詞,id是int數字,代表這個單詞的id。

id2word存儲了{id: word}。

trainingSamples存儲了問答的對話對。

比如 [[[1,2,3],[4,5,6]], [[7,8,9], [10, 11, 12]]]

1,2,3 … 12 都是word id。

[1,2,3] 和 [4,5,6] 構成一個問答。 [7,8,9] 和 [10, 11, 12] 構成一個問答。

開始訓練

cp config.sample.ini config.ini # modify keys  

python deepqa2/train.py  

config.ini是配置文件, 根據config.sample.ini進行修改。訓練的時間由epoch,learning rate, maxlength和對話對的數量而定。

deepqa2/train.py大約100行,完成數據字典加載、初始化tensorflow的session,saver,writer、初始化神經元模型、根據epoch進行迭代,保存模型到磁盤。

session是網絡圖,由placeholder, variable, cell, layer, output 組成。

saver是保存model的,也可以用來恢復model。model就是實例化variable的session。

writer是查看loss fn或者其他開發者感興趣的數據的收集器。writer的結果會被saver保存,然後使用tensorboard查看。

Model

Model的構建要考慮輸入,狀態,softmax,輸出。

定義損耗函數,使用AdamOptimizer進行迭代。

最後,參考一下訓練的loop部分。

每次訓練,model會被存儲在 save路徑下,文件夾的命名根據機器的hostname,時間戳生成。

提供服務

在TensorFlow中,提供了標準的serving模塊 – tensorflow serving。但研究了很久,還專門看了一遍 《C++ Essentials》,還沒有將它搞定,社區也普遍抱怨tensorflow serving不好學,不好用。訓練結束後,使用下面的腳本啟動服務,DeepQA2的serve部分還是調用TensorFlow的python api。

cd DeepQA2/save/deeplearning.cobra.vulcan.20170127.175256/deepqa2/serve  

cp db.sample.sqlite3 db.sqlite3  

python manage.py runserver 0.0.0.0:8000  

測試

POST /api/v1/question HTTP/1.1  

Host: 127.0.0.1:8000  

Content-Type: application/json  

Authorization: Basic YWRtaW46cGFzc3dvcmQxMjM=  

Cache-Control: no-cache

{“message”: “good to know”}

response  

{

“rc”: 0,

“msg”: “hello”

}

serve的核心代碼在serve/api/chatbotmanager.py中。

使用腳本

scripts/start_training.sh 啟動訓練

scripts/start_tensorboard.sh 啟動Tensorboard

scripts/start_serving.sh 啟動服務

對模型的評價

目前代碼具有很高的維護性,這也是從DeepQA項目進行重構的原因,更清晰的數據預處理、訓練和服務。有新的變更可以添加到deepqa2/models中,然後在train.py和chatbotmanager.py變更一下。

有待改進的地方

a. 新建models/rnn2.py, 使用dropout。目前DeepQA中已經使用了Drop.

b. tensorflow rc0.12.x中已經提供了seq2seq network,可以更新成tf版本.

c. 融合訓練,目前model只有一個庫,應該是設計一個新的模型,支持一個大庫和小庫,不同權重進行,就如Mechanism-Aware Neural Machine for Dialogue Response Generation的介紹。

d. 代碼支持多機多GPU運行。

e. 目前訓練的結果都是QA對,對於一個問題,可以有多個答案。

f. 目前沒有一個方法進行accuracy測試,一個思路是在訓練中就提供干擾項,因為當前只有正確的答案,如果提供錯誤的答案(而且越多越好),就可以使用recall_at_k方法進行測試。

機器人家上了解到的,希望對你有用

nlp和python有什麼關係?

nlp的很多工具都有python版本

nlp是研究領域,python是語言工具。

怎麼安裝 corenlp python

怎麼安裝 corenlp python

Python和R是統計學中兩種最流行的的編程語言,R的功能性主要是統計學家在開發時考慮的(R具有強大的可視化功能),而Python因為易於理解的語法被大家所接受。

關於R的介紹Ross Ihaka和Robert Gentleman於1995年在S語言中創造了 開源語言R,目的是專註於提供更好和更人性化的方式做數據分析、統計和圖形模型的語言。

起初R主要是在學術和研究使用,但近來企業界發現R也很不錯。這使得中的R成為企業中使用的全球發展最快的統計語言之一。

目前常用的自然語言處理開源項目/開發包有哪些?

中文主要有: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,語料庫工具。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/219661.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-09 11:00
下一篇 2024-12-09 11:00

相關推薦

  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29

發表回復

登錄後才能評論