導航:首頁 > 源碼編譯 > jieba源碼分析

jieba源碼分析

發布時間:2022-09-24 02:27:54

python 中用jieba分詞cut後的返回值變數s1,為何第二次引用裡面的值為空(變數a賦值的時候s1就變為空了)

你要學會如何分析這種情況;
你列印不出來,要考慮什麼,當然要考慮列印的這個東西是不是真的是空的?
如果不是空的,那麼這個值是哪來的,這個處理過程是不是不對?
一目瞭然,你用cut獲取的結果是一個generator類型,那這種類型能不能用list強轉呢?
明白了吧
如果想用list,可以這樣做,
a=[]
for word in s1:
a.append(word)
很簡單吧...

⑵ 如何製作利用jieba分詞進行文本分析的Web

jieba分詞得出的結果既不是string,也不是list.具體是什麼類型的我也不記得了。

如果把得出的結果轉換成list就好辦了。列如:

import jieba
s = '一些亂七八糟的字元串『
s= list(jieba.cut(s,cut_all=False))
for i in s:
#就能寫入文本了。

⑶ 怎麼是用python 語言 使用結巴分詞 呢

Python代碼

#encoding=utf-8
importjieba

seg_list=jieba.cut("我來到北京清華大學",cut_all=True)
print"FullMode:","/".join(seg_list)#全模式

seg_list=jieba.cut("我來到北京清華大學",cut_all=False)
print"DefaultMode:","/".join(seg_list)#默認模式

seg_list=jieba.cut("他來到了網易杭研大廈")
print",".join(seg_list)

輸出:

FullMode:我/來/來到/到/北/北京/京/清/清華/清華大學/華/華大/大/大學/學

DefaultMode:我/來到/北京/清華大學

他,來到,了,網易,杭研,大廈(此處,「杭研」並沒有在詞典中,但是也被Viterbi演算法識別出來了)

⑷ 在macbook上安裝python的jieba庫

mac也有終端呀,都是一樣的,mac,linux,windows安裝Python包都是pip install 包名就行了。

⑸ 自然語言處理基礎知識

NLP 是什麼?

NLP 是計算機科學領域與 人工智慧 領域中的一個重要方向。它研究能實現人與計算機之間用自然語言進行有效通信的各種理論和方法。自然語言處理是一門融語言學、計算機科學、數學於一體的學科。NLP 由兩個主要的技術領域構成:自然語言理解和自然語言生成。

自然語言理解方向,主要目標是幫助機器更好理解人的語言,包括基礎的詞法、句法等語義理解,以及需求、篇章、情感層面的高層理解。

自然語言生成方向,主要目標是幫助機器生成人能夠理解的語言,比如文本生成、自動文摘等。

NLP 技術基於大數據、知識圖譜、 機器學習 、語言學等技術和資源,並可以形成機器翻譯、深度問答、對話系統的具體應用系統,進而服務於各類實際業務和產品。

NLP在金融方面

金融行業因其與數據的高度相關性,成為人工智慧最先應用的行業之一,而NLP與知識圖譜作為人工智慧技術的重要研究方向與組成部分,正在快速進入金融領域,並日益成為智能金融的基石。輿情分析輿情主要指民眾對社會各種具體事物的情緒、意見、價值判斷和願望等。

事件(Event ):在特定時間、特定地點發生的事情。主題(Topic):也稱為話題,指一個種子事件或活動以及與它直接相關的事件和活動。專題(Subject):涵蓋多個類似的具體事件或根本不涉及任何具體事件。需要說明的是,國內新聞網站新浪、搜狐等所定義的「專題」概念大多數等同於我們的「主題」概念。熱點:也可稱為熱點主題。熱點和主題的概念比較接近,但有所區別。

1. 詞干提取

什麼是詞干提取?詞干提取是將詞語去除變化或衍生形式,轉換為詞干或原型形式的過程。詞干提取的目標是將相關詞語還原為同樣的詞干,哪怕詞干並非詞典的詞目。

2. 詞形還原

什麼是詞形還原? 詞形還原是將一組詞語還原為詞源或詞典的詞目形式的過程。還原過程考慮到了POS問題,即詞語在句中的語義,詞語對相鄰語句的語義等。

3. 詞向量化什麼是詞向量化?詞向量化是用一組實數構成的向量代表自然語言的叫法。這種技術非常實用,因為電腦無法處理自然語言。詞向量化可以捕捉到自然語言和實數間的本質關系。通過詞向量化,一個詞語或者一段短語可以用一個定維的向量表示,例如向量的長度可以為100。

4. 詞性標注

什麼是詞性標注?簡單來說,詞性標注是對句子中的詞語標注為名字、動詞、形容詞、副詞等的過程。

5. 命名實體消歧

什麼是命名實體消岐?命名實體消岐是對句子中的提到的實體識別的過程。例如,對句子「Apple earned a revenue of 200 Billion USD in 2016」,命名實體消岐會推斷出句子中的Apple是蘋果公司而不是指一種水果。一般來說,命名實體要求有一個實體知識庫,能夠將句子中提到的實體和知識庫聯系起來。

6. 命名實體識別

體識別是識別一個句子中有特定意義的實體並將其區分為人名,機構名,日期,地名,時間等類別的任務。   

7. 情感分析

什麼是情感分析?情感分析是一種廣泛的主觀分析,它使用自然語言處理技術來識別客戶評論的語義情感,語句表達的情緒正負面以及通過語音分析或書面文字判斷其表達的情感等等。

8. 語義文本相似度

什麼是語義文本相似度分析?語義文本相似度分析是對兩段文本的意義和本質之間的相似度進行分析的過程。注意,相似性與相關性是不同的。

9.語言識別

什麼是語言識別?語言識別指的是將不同語言的文本區分出來。其利用語言的統計和語法屬性來執行此任務。語言識別也可以被認為是文本分類的特殊情況。

10. 文本摘要

什麼是文本摘要?文本摘要是通過識別文本的重點並使用這些要點創建摘要來縮短文本的過程。文本摘要的目的是在不改變文本含義的前提下最大限度地縮短文本。

11.評論觀點抽取

自動分析評論關注點和評論觀點,並輸出評論觀點標簽及評論觀點極性。目前支持 13 類產品用戶評論的觀點抽取,包括美食、酒店、汽車、景點等,可幫助商家進行產品分析,輔助用戶進行消費決策。

11.DNN 語言模型

語言模型是通過計算給定片語成的句子的概率,從而判斷所組成的句子是否符合客觀語言表達習慣。在機器翻譯、拼寫糾錯、語音識別、問答系統、詞性標注、句法分析和信息檢索等系統中都有廣泛應用。

12.依存句法分析

利用句子中詞與詞之間的依存關系來表示詞語的句法結構信息 (如主謂、動賓、定中等結構關系),並用樹狀結構來表示整句的的結構 (如主謂賓、定狀補等)。

1、NLTK

一種流行的自然語言處理庫、自帶語料庫、具有分類,分詞等很多功能,國外使用者居多,類似中文的 jieba 處理庫

2、文本處理流程

大致將文本處理流程分為以下幾個步驟:

Normalization

Tokenization

Stop words

Part-of-speech Tagging

Named Entity Recognition

Stemming and Lemmatization

下面是各個流程的具體介紹

Normalization

第一步通常要做就是Normalization。在英文中,所有句子第一個單詞的首字母一般是大寫,有的單詞也會全部字母都大寫用於表示強調和區分風格,這樣更易於人類理解表達的意思。

Tokenization

Token是"符號"的高級表達, 一般值具有某種意義,無法再拆分的符號。在英文自然語言處理中,Tokens通常是單獨的詞,因此Tokenization就是將每個句子拆分為一系列的詞。

Stop Word

Stop Word 是無含義的詞,例如』is』/『our』/『the』/『in』/'at』等。它們不會給句子增加太多含義,單停止詞是頻率非常多的詞。 為了減少我們要處理的詞彙量,從而降低後續程序的復雜度,需要清除停止詞。

Named Entity

Named Entity 一般是名詞短語,又來指代某些特定對象、人、或地點 可以使用 ne_chunk()方法標注文本中的命名實體。在進行這一步前,必須先進行 Tokenization 並進行 PoS Tagging。

Stemming and Lemmatization

為了進一步簡化文本數據,我們可以將詞的不同變化和變形標准化。Stemming 提取是將詞還原成詞干或詞根的過程。

3、Word2vec

Word2vec是一種有效創建詞嵌入的方法,它自2013年以來就一直存在。但除了作為詞嵌入的方法之外,它的一些概念已經被證明可以有效地創建推薦引擎和理解時序數據。在商業的、非語言的任務中。

### 四、NLP前沿研究方向與演算法

1、MultiBERT

2、XLNet

3、bert 模型

BERT的全稱是Bidirectional Encoder Representation from Transformers,即雙向Transformer的Encoder,因為decoder是不能獲要預測的信息的。模型的主要創新點都在pre-train方法上,即用了Masked LM和Next Sentence Prediction兩種方法分別捕捉詞語和句子級別的representation。

BERT提出之後,作為一個Word2Vec的替代者,其在NLP領域的11個方向大幅刷新了精度,可以說是近年來自殘差網路最優突破性的一項技術了。BERT的主要特點以下幾點:

使用了Transformer作為演算法的主要框架,Trabsformer能更徹底的捕捉語句中的雙向關系;

使用了Mask Language Model(MLM)和 Next Sentence Prediction(NSP) 的多任務訓練目標;

使用更強大的機器訓練更大規模的數據,使BERT的結果達到了全新的高度,並且Google開源了BERT模型,用戶可以直接使用BERT作為Word2Vec的轉換矩陣並高效的將其應用到自己的任務中。

BERT的本質上是通過在海量的語料的基礎上運行自監督學習方法為單詞學習一個好的特徵表示,所謂自監督學習是指在沒有人工標注的數據上運行的監督學習。在以後特定的NLP任務中,我們可以直接使用BERT的特徵表示作為該任務的詞嵌入特徵。所以BERT提供的是一個供其它任務遷移學習的模型,該模型可以根據任務微調或者固定之後作為特徵提取器。

模型結構: 由於模型的構成元素Transformer已經解析過,就不多說了,BERT模型的結構如下圖最左:

對比OpenAI GPT(Generative pre-trained transformer),BERT是雙向的Transformer block連接;就像單向rnn和雙向rnn的區別,直覺上來講效果會好一些。

優點: BERT是截至2018年10月的最新state of the art模型,通過預訓練和精調橫掃了11項NLP任務,這首先就是最大的優點了。而且它還用的是Transformer,也就是相對rnn更加高效、能捕捉更長距離的依賴。對比起之前的預訓練模型,它捕捉到的是真正意義上的bidirectional context信息。

缺點: MLM預訓練時的mask問題

[MASK]標記在實際預測中不會出現,訓練時用過多[MASK]影響模型表現

每個batch只有15%的token被預測,所以BERT收斂得比left-to-right模型要慢(它們會預測每個token)

BERT火得一塌糊塗不是沒有原因的:

使用Transformer的結構將已經走向瓶頸期的Word2Vec帶向了一個新的方向,並再一次炒火了《Attention is All you Need》這篇論文;

11個NLP任務的精度大幅提升足以震驚整個深度學習領域;

無私的開源了多種語言的源碼和模型,具有非常高的商業價值。

遷移學習又一次勝利,而且這次是在NLP領域的大勝,狂勝。

BERT演算法還有很大的優化空間,例如我們在Transformer中講的如何讓模型有捕捉Token序列關系的能力,而不是簡單依靠位置嵌入。BERT的訓練在目前的計算資源下很難完成,論文中說的訓練需要在64塊TPU晶元上訓練4天完成,而一塊TPU的速度約是目前主流GPU的7-8倍。

⑹ Python練習題,應該是jieba的應用,但是我不太會寫,希望有人指導一下,感謝!!

str = input("請輸入要分析的字元串,回車表示結束:")
while str != '':
# 創建字典類型保存結果
counts = {}
# 創建字典類型
for ch in str:
counts[ch] = counts.get(ch,0) + 1
# 改變類型為列表類型,按照出現頻率降序排列
items = list(counts.items())
# 利用sort函數排序
items.sort(key= lambda x : x[1],reverse= True)
# 列印輸出。
for i in range(len(items)):
word, count = items[i]
print("{0:<10}{1:>5}".format(word, count))
str = input("請輸入要分析的字元串,回車表示結束:")

⑺ python數據挖掘——文本分析

作者 | zhouyue65

來源 | 君泉計量

文本挖掘:從大量文本數據中抽取出有價值的知識,並且利用這些知識重新組織信息的過程。

一、語料庫(Corpus)

語料庫是我們要分析的所有文檔的集合。

二、中文分詞

2.1 概念:

中文分詞(Chinese Word Segmentation):將一個漢字序列切分成一個一個單獨的詞。

eg:我的家鄉是廣東省湛江市-->我/的/家鄉/是/廣東省/湛江市

停用詞(Stop Words):

數據處理時,需要過濾掉某些字或詞

√泛濫的詞,如web、網站等。

√語氣助詞、副詞、介詞、連接詞等,如 的,地,得;

2.2 安裝Jieba分詞包:

最簡單的方法是用CMD直接安裝:輸入pip install jieba,但是我的電腦上好像不行。

後來在這里:https://pypi.org/project/jieba/#files下載了jieba0.39解壓縮後 放在Python36Libsite-packages裡面,然後在用cmd,pip install jieba 就下載成功了,不知道是是什麼原因。

然後我再anaconda 環境下也安裝了jieba,先在Anaconda3Lib這個目錄下將jieba0.39的解壓縮文件放在裡面,然後在Anaconda propt下輸入 pip install jieba,如下圖:

2.3 代碼實戰:

jieba最主要的方法是cut方法:

jieba.cut方法接受兩個輸入參數:

1) 第一個參數為需要分詞的字元串

2)cut_all參數用來控制是否採用全模式

jieba.cut_for_search方法接受一個參數:需要分詞的字元串,該方法適合用於搜索引擎構建倒排索引的分詞,粒度比較細

注意:待分詞的字元串可以是gbk字元串、utf-8字元串或者unicode

jieba.cut以及jieba.cut_for_search返回的結構都是一個可迭代的generator,可以使用for循環來獲得分詞後得到的每一個詞語(unicode),也可以用list(jieba.cut(...))轉化為list代碼示例( 分詞 )

輸出結果為: 我 愛

Python

工信處

女幹事

每月 經過 下屬 科室 都 要 親口

交代

24 口 交換機 等 技術性 器件 的 安裝

工作

分詞功能用於專業的場景:

會出現真武七截陣和天罡北斗陣被分成幾個詞。為了改善這個現象,我們用導入詞庫的方法。

但是,如果需要導入的單詞很多,jieba.add_word()這樣的添加詞庫的方法就不高效了。

我們可以用jieba.load_userdict(『D:PDM2.2金庸武功招式.txt』)方法一次性導入整個詞庫,txt文件中為每行一個特定的詞。

2.3.1 對大量文章進行分詞

先搭建語料庫:

分詞後我們需要對信息處理,就是這個分詞來源於哪個文章。

四、詞頻統計

3.1詞頻(Term Frequency):

某個詞在該文檔中出現的次數。

3.2利用Python進行詞頻統計

3.2.1 移除停用詞的另一種方法,加if判斷

代碼中用到的一些常用方法:

分組統計:

判斷一個數據框中的某一列的值是否包含一個數組中的任意一個值:

取反:(對布爾值)

四、詞雲繪制

詞雲(Word Cloud):是對文本中詞頻較高的分詞,給與視覺上的突出,形成「關鍵詞渲染」,從而國旅掉大量的文本信息,使瀏覽者一眼掃過就可以領略文本的主旨。

4.1 安裝詞雲工具包

這個地址:https://www.lfd.uci.e/~gohlke/pythonlibs/ ,可以搜到基本上所有的Python庫,進去根據自己的系統和Python的版本進行下載即可。

在python下安裝很方便,在anaconda下安裝費了點勁,最終將詞雲的文件放在C:UsersAdministrator 這個目錄下才安裝成功。

五、美化詞雲(詞雲放入某圖片形象中)

六、關鍵詞提取

結果如下:

七、關鍵詞提取實現

詞頻(Term Frequency):指的是某一個給定的詞在該文檔中出現的次數。

計算公式: TF = 該次在文檔中出現的次數

逆文檔頻率(Inverse Document Frequency):IDF就是每個詞的權重,它的大小與一個詞的常見程度成反比

計算公式:IDF = log(文檔總數/(包含該詞的文檔數 - 1))

TF-IDF(Term Frequency-Inverse Document Frequency):權衡某個分詞是否關鍵詞的指標,該值越大,是關鍵詞的可能性就越大。

計算公式:TF - IDF = TF * IDF

7.1文檔向量化

7.2代碼實戰

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

數據預處理

模型能聊的內容也取決於選取的語料。如果已經具備了原始聊天數據,可以用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 https://github.com/Samurais/DeepQA2.git
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 Machinefor Dialogue Response Generation的介紹。

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

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

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

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

⑼ 為什麼python jieba庫安裝成功了卻用不了

1,支持三種分詞模式:
a,精確模式,試圖將句子最精確地切開,適合文本分析;
b,全模式,把句子中所有的可以成詞的詞語都掃描出來, 速度非常快,但是不能解決歧義;
c,搜索引擎模式,在精確模式的基礎上,對長詞再次切分,提高召回率,適合用於搜索引擎分詞。
2,支持繁體分詞
3,支持自定義詞典

閱讀全文

與jieba源碼分析相關的資料

熱點內容
符咒全書pdf 瀏覽:565
海底撈app簽到怎麼弄不成了 瀏覽:862
安卓php伺服器搭建 瀏覽:259
京東直營網掙用什麼APP 瀏覽:825
傑克豆車機怎麼安裝app 瀏覽:32
app查余額怎麼有兩個金額 瀏覽:305
小程序仿今日頭條源碼 瀏覽:277
框架源碼研讀 瀏覽:446
仙侶奇緣3如何架設伺服器 瀏覽:954
單片機RRC指令 瀏覽:889
默認加密文件密碼 瀏覽:5
怎麼用反詐中心app查詢電話 瀏覽:710
linuxvi操作 瀏覽:298
什麼是實木壓縮板 瀏覽:641
加密空投與硬分叉指南 瀏覽:17
加密wps文檔密碼忘了怎麼辦 瀏覽:687
沖程演算法 瀏覽:990
雞料與雞糞的演算法 瀏覽:835
phpif變數為空值 瀏覽:61
iot編譯器異常 瀏覽:602