最近的工作任務是將谷歌nmt整套系統用自己的c**庫搭建好,因此需要對整個**結構了解的非常清晰才可以,tf的不友好讓我這段時間遇到了大大小小各種各樣的問題,在工作臨近結束時將一些對**的理解記錄下來,在本篇文章之後也會陸續更新其他**,歡迎多多交流~~
本篇文章主要講了nmt中的對於vocab的資料處理方法。其中主要包括了四個函式,分別為load_vocab、checkvocab、create_vocab和load_embed_txt。我們從**的開頭進行分析。
# word level special token
unk =
""sos =
""eos =
""unk_id =
0# char ids 0-255 come from utf-8 encoding bytes
# assign 256-300 to special chars
bos_char_id =
256#
eos_char_id =
257#
bow_char_id =
258#
eow_char_id =
259#
pad_char_id =
260#
default_char_maxlen =
50# max number of chars for each word.
本段**主要是宣告乙個unk、sos、eos的token以及unk的id,這些東西都是seq2seq模型中必不可少的。
宣告了特殊字元如sow、sos一類的編碼id。
該函式主要作用為輸入字串和最大長度,將字串序列轉換為用對應id來表示的tensor。我自己寫了乙個隊該函式的簡單的測試**如下:
def
_string_to_bytes
(text, max_length)
: byte_ids = tf.to_int32(tf.decode_raw(text, tf.uint8)
) byte_ids = byte_ids[
:max_length -2]
padding = tf.fill(
[max_length - tf.shape(byte_ids)[0
]-2]
, pad_char_id)
byte_ids = tf.concat(
[[bow_char_id]
, byte_ids,
[eow_char_id]
, padding]
, axis=0)
tf.logging.info(byte_ids)
byte_ids = tf.reshape(byte_ids,
[max_length]
) tf.logging.info(byte_ids.get_shape(
).as_list())
return byte_ids +
1if __name__==
'__main__'
: text =
'i am scofyyy'
maxlength =
50 sess = tf.session(
)print
(sess.run(_string_to_bytes(text,maxlength)))
sess.close(
)
最終輸出的結果為如下:
該函式將vocab_file中的單詞讀出並寫入乙個列表,最後返回了該列表即列表長度(即單詞數)。
def
load_vocab
(vocab_file)
: vocab =
with codecs.getreader(
"utf-8"
)(tf.gfile.gfile(vocab_file,
"rb"))
as f:
vocab_size =
0for word in f:
vocab_size +=1)
)#strip作用為去掉單詞後的換行符
return vocab, vocab_size
在debug中內部如下圖所示,因此需要去掉單詞後的換行符。
該函式傳入vocab_file和out_dir,作用為檢測vocab_file中是否有三個特殊token,如果沒有的話就依次加進去並放於最頂部並返回乙個新的vocab_file。
該函式作用為使用lookup_ops.index_table_from_file()函式為src_vocab_file和tgt_vocab_file建立單詞索引表,即將單詞和數字id一一對應,並返回乙個查詢表,查詢表使用方法如下:
眾所周知在將單詞輸入rnn網路時需要進行embedding操作,該函式將預先準備好的embed_file中的內容匯入到乙個python字典中。
該字典的鍵為單詞,值為單詞對應的embedding向量。最終返回embedding字典以及embedding後的向量的維度。embed_file的內容如下:
每一行為單詞及其對應的向量。
總的來說關於vocab_utils的內容還是很簡單很基礎的,其主要目的就是介紹了一些處理機器翻譯輸入資料的有效方法。
原始碼閱讀 Glide原始碼閱讀之with方法(一)
前言 本篇基於4.8.0版本 原始碼閱讀 glide原始碼閱讀之with方法 一 原始碼閱讀 glide原始碼閱讀之load方法 二 原始碼閱讀 glide原始碼閱讀之into方法 三 大多數情況下,我們使用glide 就一句 但是這一句 裡面蘊含著成噸的 with方法有以下幾個過載方法 publi...
原始碼閱讀 Glide原始碼閱讀之load方法(二)
原始碼閱讀 glide原始碼閱讀之load方法 二 原始碼閱讀 glide原始碼閱讀之into方法 三 首先,load方法有以下幾個過載方法 public requestbuilder load nullable bitmap bitmap public requestbuilder load nu...
《原始碼閱讀》原始碼閱讀技巧,原始碼閱讀工具
檢視某個類的完整繼承關係 選中類的名稱,然後按f4 quick type hierarchy quick type hierarchy可以顯示出類的繼承結構,包括它的父類和子類 supertype hierarchy supertype hierarchy可以顯示出類的繼承和實現結構,包括它的父類和...