谷歌NMT原始碼閱讀之vocab utils

2021-09-26 06:55:42 字數 2903 閱讀 9467

最近的工作任務是將谷歌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可以顯示出類的繼承和實現結構,包括它的父類和...