Transfomer

代碼:https://www.github.com/kyubyong/transformer

文件集合

hyperparams.py
prepro.py
data_load.py
modules.py
train.py
eval.py

關鍵步驟(德語-》英語)

1. 定義超參數

1.1 源語言、目標語言的訓練數據和測試數據的路徑
1.2 batch大小(32)、初始learning rate(0.0001,In paper, learning rate is adjusted to the global step)、日誌目錄
1.3 最大詞長度(T=10)、min_cnt(words whose occurred less than min_cnt are encoded as )、hidden_units(C=512)、num_blocks、num_heads、num_epochs(20)、dropout(0.1)、sinusoid(If True, use sinusoid. If false, positional embedding.)

2. 預處理

目的:生成源語言和目標語言的詞彙文件。

2.1 生成德語文件、英語文件
2.1.1 用“”替換掉非空白字符或latin的
2.1.2 按空字符(空格、\n、\t)分割成word
2.1.3 計數,返回字典(key:詞; value:次數)
2.1.4 預處理文件保存:
①設置了四個特殊的標記符號PAD、UNK、S、/s,把他們設定爲出現次數很多放在文件的最前。
②依詞出現的頻率將訓練集中出現的詞和其對應的計數保存。

3. 加載德語\英語詞彙文件爲字典數組

3.1 讀取預處理prepro.py中生成的詞彙文件進數組,去掉出現次數少於hp.min_cnt=20的詞
3.2 枚舉數組元素及下標,返回兩個字典(word:id; id:word)

4. 構建圖graph類

4.1 定義Graph類:所有圖中定義的節點和操作都以這個爲默認圖
4.1.1 設置使用tf默認圖
4.1.2 訓練:get_batch_data()得到滿足最大長度的訓練數據以及batch的數量。
4.1.2.1 生成句子列表:讀取源、目標文件,\n分隔開每一行,選擇那些那些行開頭符號不是‘<’的句子(’<’:數據描述的行)、並用“”代替非空白或latin的。
4.1.2.2 雙語字典生成。
4.1.2.3 用字典中id表示句子列表,生成id表示的等長句子列表,並返回合法id句子(x_list\y_list\Sources\Targets)
①若該word不在字典中則id用1代替(即UNK的id), 加</s>表示句子末尾
②對句子長度<=最大長度hp.maxlen合法句子:連接到x_list\y_list\Sources\Targets.
③對小於最大長度id句子pad:前補零個數,後補maxlen-len(x)個(id=0)
4.1.2.4 句子的數量//batch_size=batch的數量。
4.1.2.5 將返回的等長id句子序列轉變爲tensor:tf.convert_to_tensor
4.1.2.6 從tensor列表中按順序或者隨機抽取出tensor放入隊列(作爲tf.train.shuffle_batch的參數):tf.train.slice_input_producer([X, Y])
4.1.2.7 通過隨機打亂tensor的順序創建batch,讀取一個文件並且加載一個張量中的batch_size行:tf.train.shuffle_batch()

4.1.3 推斷:將測試數據定義爲placeholder先放着。
4.1.4 定義decode部分的輸入:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章