2017-04-08 26 views
0

我正在研究一個chatbot程序來練習python,以及一些sklearn機器學習算法。python正常化大數

現在我只是給chatbot隨機句,並告訴它,如果句子是正確的。每個單詞都爲自己,類型(語法)和情緒(正面,負面,中性,低俗等等)分配了鍵。

將每個輸入給定的句子保存到csv文件後。 每個句子有三個特徵:key,key_type,key_mood和一個標籤:0(不正確)和1(正確)。

首先,對於每個鍵,我有一個對應每個單詞的鍵的列表。我認爲這是一個好主意,因爲它會跟蹤插入單詞的順序。

不幸的是,當保存到csv列表被轉換成包含列表的字符串,我不知道如何從字符串中提取列表(即使我知道如何,我不知道你是否可以提供一個列表模型的列表,我的猜測可能不是)。

於是我想出了這樣的:而不是功能的列表,我可以有一個數字,表示數字的這個名單:

for word in self.words: 
    for key in word.word_dict(): 
     sentence_dict[key] += int(float(word.word_dict()[key]))* 10 **(3*n) 
    n+=1 

因此,例如,對於「鍵」鍵「你怎麼樣「將是8007006,8是」How「的單詞鍵,7是」「和6」你「。 類似的,這個句子的「key_type」是12002001,「question word」是12,「verb」是2,「代名詞」是1。 不幸的是,由於這些鍵的製作方式,我在相同的數據集中輸入了大量的數字,而且數量相當小,我認爲它會拋出模型。

我嘗試使用np.sigmoid正常化,但這只是爲我的大多數鍵輸出1(它們太大)。

所以我的問題是:有沒有一種方法來規範化這些鍵的方式不能打敗他們的目的?如果沒有,您是否有更好的想法來確定如何將這些鍵提供給模型,而不會丟失單個單詞鍵的添加順序?

或者它是一種還是那些需要神經網絡的情況?

回答

0

而不是使用CSV文件來存儲數據,如何使用JSON來代替?

JSON在Python標準庫中可用(請參閱JSON)。將數據存儲爲JSON將保留字典和列表結構,並且非常易於使用。例如:

import json 
original_sentence = { 
    'key': ['a', 'b', 'c'], 
} 
result = json.dumps(original_sentence) # '{"key": ["a", "b", "c"]}' 

然後,當你需要使用的數據:

loaded_sentence = json.loads(result) 

爲了證明你得到同樣的數據傳回:

print(original_sentence == loaded_sentence) 

你可以寫的JSON一行一次輸入到輸出文件中,或者可以將結果作爲列表並將整個結果列表轉儲爲單個JSON文件。

results = [sentence for sentence in sentences] 
with open('output.json', 'w') as fp: 
    json.dump(results, fp) # notice .dump not .dumps 

with open('output.json') as fp: 
    results = json.load(fp) # notice .load not .loads 

注:,如果你有更復雜的對象,那麼你可能需要做的對象序列化的,但如果你在CSV存儲他們這是極不可能的。

+0

謝謝我會嘗試。我轉換爲CSV的對象是PD數據框。這會起作用嗎? – DataBrown

+0

如果我沒有弄錯,PD數據框已經有'.to_json'和'.read_json'方法,所以你可以直接使用它們。 –

+0

我剛剛證實,熊貓數據框確實有'.to_json'方法,但'read_json'是熊貓的一部分,而不是數據框的具體內容。因此,創建json'data = df.to_json()'並將其恢復爲'pd.read_json(data)' –