国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【如何訓(xùn)練一個(gè)中英翻譯模型】LSTM機(jī)器翻譯seq2seq字符編碼(一)

這篇具有很好參考價(jià)值的文章主要介紹了【如何訓(xùn)練一個(gè)中英翻譯模型】LSTM機(jī)器翻譯seq2seq字符編碼(一)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

系列文章

【如何訓(xùn)練一個(gè)中英翻譯模型】LSTM機(jī)器翻譯seq2seq字符編碼(一)
【如何訓(xùn)練一個(gè)中英翻譯模型】LSTM機(jī)器翻譯模型訓(xùn)練與保存(二)
【如何訓(xùn)練一個(gè)中英翻譯模型】LSTM機(jī)器翻譯模型部署(三)
【如何訓(xùn)練一個(gè)中英翻譯模型】LSTM機(jī)器翻譯模型部署之onnx(python)(四)

訓(xùn)練一個(gè)翻譯模型,我們需要一份數(shù)據(jù)集,以cmn.txt數(shù)據(jù)集為例:
取前兩行數(shù)據(jù)來(lái)看看,如下:

Wait!	等等!
Hello!	你好。

對(duì)于中譯英,我們希望讓網(wǎng)絡(luò)輸入:“Wait!”,輸出:“等等!”,輸入:“Hello!”,輸出:“你好?!?br> 那么問(wèn)題來(lái)了,這樣的數(shù)據(jù)要如何輸入網(wǎng)絡(luò)進(jìn)行訓(xùn)練呢?
顯然需要進(jìn)行編碼,大白話說(shuō)就是用“0101…”這樣的數(shù)據(jù)來(lái)表示這些文字(為了方便表達(dá),后面稱為字符)。
先假設(shè),我們的訓(xùn)練數(shù)據(jù)只取第一行,那就是只有“Wait! 等等!”,那么,我們開(kāi)始對(duì)它進(jìn)行編碼,讀取cmn.txt文件,并取第一行數(shù)據(jù)中英文分別保存在target_texts ,input_texts,,然后將所有的字符取出來(lái),中英文字符并分別保存在target_characters ,input_characters

input_texts = [] # 保存英文數(shù)據(jù)集
target_texts = [] # 保存中文數(shù)據(jù)集
input_characters = set() # 保存英文字符,比如a,b,c
target_characters = set() # 保存中文字符,比如,你,我,她
with open(data_path, 'r', encoding='utf-8') as f:
    lines = f.read().split('\n')# 一行一行讀取數(shù)據(jù)
for line in lines[: min(num_samples, len(lines) - 1)]: # 遍歷每一行數(shù)據(jù)集(用min來(lái)防止越出)
    input_text, target_text = line.split('\t') # 分割中英文
    # We use "tab" as the "start sequence" character
    # for the targets, and "\n" as "end sequence" character.
    target_text = '\t' + target_text + '\n'
    input_texts.append(input_text)
    target_texts.append(target_text)
    for char in input_text: # 提取字符
        if char not in input_characters:
            input_characters.add(char)
    for char in target_text:
        if char not in target_characters:
            target_characters.add(char)
            
input_characters = sorted(list(input_characters)) # 排序一下
target_characters = sorted(list(target_characters))
num_encoder_tokens = len(input_characters) # 英文字符數(shù)量
num_decoder_tokens = len(target_characters) # 中文文字?jǐn)?shù)量
max_encoder_seq_length = max([len(txt) for txt in input_texts]) # 輸入的最長(zhǎng)句子長(zhǎng)度
max_decoder_seq_length = max([len(txt) for txt in target_texts])# 輸出的最長(zhǎng)句子長(zhǎng)度

print('Number of samples:', len(input_texts))
print('Number of unique input tokens:', num_encoder_tokens)
print('Number of unique output tokens:', num_decoder_tokens)
print('Max sequence length for inputs:', max_encoder_seq_length)
print('Max sequence length for outputs:', max_decoder_seq_length)

可以得到這樣的數(shù)據(jù):

#原始數(shù)據(jù):Wait!	等等!

input_texts =  ['Wait!'] 
target_texts =  ['\t等等!\n']

input_characters = ['!', 'W', 'a', 'i', 't']
target_characters = ['\t', '\n', '等', '!']

然后我們就可以開(kāi)始編碼啦。
先對(duì)input_characters 于target_characters 進(jìn)行編號(hào),也就是

['!', 'W', 'a', 'i', 't']
 0    1    2   3  4
['\t', '\n', '等', '!']
  0    1    2    3  

代碼如下:

input_token_index = dict([(char, i) for i, char in enumerate(input_characters)])
target_token_index = dict([(char, i) for i, char in enumerate(target_characters)])

編號(hào)完之后就是:

input_token_index =
 {
   '!':   0,
   'W': 1,
   'a':   2,
   'i':    3,
   't':    4
 }
target_token_index =
 {
   '\t':  0,
   '\n': 1,
   '等': 2,
   '!': 3
 }

有了input_token_index 與target_token_index ,我們就可以開(kāi)始對(duì)輸入輸出進(jìn)行編碼,先來(lái)看輸入。
假設(shè)我們的輸入只有一個(gè)字符W,那么根據(jù)input_token_index 對(duì)W進(jìn)行編碼就如下:
【如何訓(xùn)練一個(gè)中英翻譯模型】LSTM機(jī)器翻譯seq2seq字符編碼(一),如何訓(xùn)練一個(gè)中英翻譯模型,lstm,機(jī)器翻譯,人工智能
可看到W用向量01000表示了,只有W的那個(gè)位置被標(biāo)為1,其余標(biāo)為0
依次類推對(duì)Wait!進(jìn)行編碼,結(jié)果如下:
【如何訓(xùn)練一個(gè)中英翻譯模型】LSTM機(jī)器翻譯seq2seq字符編碼(一),如何訓(xùn)練一個(gè)中英翻譯模型,lstm,機(jī)器翻譯,人工智能
對(duì)中文進(jìn)行編碼也是一樣的操作:
【如何訓(xùn)練一個(gè)中英翻譯模型】LSTM機(jī)器翻譯seq2seq字符編碼(一),如何訓(xùn)練一個(gè)中英翻譯模型,lstm,機(jī)器翻譯,人工智能

因此輸入輸出分別可以用encoder_input_data與decoder_input_data這兩個(gè)矩陣來(lái)表示了,這兩個(gè)矩陣?yán)锩娴闹凳且欢?1

['!', 'W', 'a', 'i', 't']
encoder_input_data
[[[0. 1. 0. 0. 0.]    W
  [0. 0. 1. 0. 0.]    a
  [0. 0. 0. 1. 0.]    i
  [0. 0. 0. 0. 1.]    t
  [1. 0. 0. 0. 0.]]]  !
  
target_texts通過(guò)編碼得到
['\t', '\n', '等', '!']
decoder_input_data
[[[1. 0. 0. 0.]      \t
  [0. 0. 1. 0.]      等
  [0. 0. 1. 0.]      等
  [0. 0. 0. 1.]      !
  [0. 1. 0. 0.]]]    \n

為了進(jìn)一步說(shuō)明,我們這時(shí)候?qū)⒂?xùn)練集改為2,也就是num_samples = 2,那么

input_texts =  ['Wait!', 'Hello!']
target_texts = ['\t等等!\n', '\t你好。\n']
input_characters = ['!', 'H', 'W', 'a', 'e', 'i', 'l', 'o', 't']
target_characters = ['\t', '\n', '。', '你', '好', '等', '!']

分別對(duì)輸入輸出的內(nèi)容進(jìn)行編碼,可得到:

encoder_input_data = 
[[[0. 0. 1. 0. 0. 0. 0. 0. 0.]  # 第一句 Wait!
  [0. 0. 0. 1. 0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0. 1. 0. 0. 0.]
  [0. 0. 0. 0. 0. 0. 0. 0. 1.]
  [1. 0. 0. 0. 0. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0. 0. 0. 0. 0.]]

 [[0. 1. 0. 0. 0. 0. 0. 0. 0.]  # 第二句 Hello
  [0. 0. 0. 0. 1. 0. 0. 0. 0.]
  [0. 0. 0. 0. 0. 0. 1. 0. 0.]
  [0. 0. 0. 0. 0. 0. 1. 0. 0.]
  [0. 0. 0. 0. 0. 0. 0. 1. 0.]
  [1. 0. 0. 0. 0. 0. 0. 0. 0.]]]

decoder_input_data = 
[[[1. 0. 0. 0. 0. 0. 0.]    # 第一句 \t等等!\n
  [0. 0. 0. 0. 0. 1. 0.]
  [0. 0. 0. 0. 0. 1. 0.]
  [0. 0. 0. 0. 0. 0. 1.]
  [0. 1. 0. 0. 0. 0. 0.]]

 [[1. 0. 0. 0. 0. 0. 0.]    # 第二句 \t你好。\n
  [0. 0. 0. 1. 0. 0. 0.]
  [0. 0. 0. 0. 1. 0. 0.]
  [0. 0. 1. 0. 0. 0. 0.]
  [0. 1. 0. 0. 0. 0. 0.]]]

到這里,我們就清楚了這些文字用向量是怎么表示的,有了向量我們可以進(jìn)行計(jì)算,也就是可以搭建一個(gè)網(wǎng)絡(luò)來(lái)訓(xùn)練這些數(shù)據(jù)了,這個(gè)網(wǎng)絡(luò)的輸入是一堆0 1矩陣,輸出也是一堆0 1矩陣,輸入矩陣在輸入字符那里索引得出這個(gè)矩陣是什么句子,而輸出矩陣在輸出字符那里索引得出這個(gè)句子代表什么句子,因此我們就可以來(lái)訓(xùn)練一個(gè)翻譯模型了。
總結(jié)下來(lái):翻譯模型實(shí)際上就是輸入一個(gè)0 1矩陣,輸出另外一個(gè)0 1矩陣。
句子->輸入矩陣->運(yùn)算->輸出矩陣->句子

下面是相應(yīng)的代碼:

# mapping token to index, easily to vectors
# 處理方便進(jìn)行編碼為向量
# {
#   'a': 0,
#   'b': 1,
#   'c': 2,
#   ...
#   'z': 25
# }
input_token_index = dict([(char, i) for i, char in enumerate(input_characters)])
target_token_index = dict([(char, i) for i, char in enumerate(target_characters)])

# np.zeros(shape, dtype, order)
# shape is an tuple, in here 3D
encoder_input_data = np.zeros( # (12000, 32, 73) (數(shù)據(jù)集長(zhǎng)度、句子長(zhǎng)度、字符數(shù)量)
    (len(input_texts), max_encoder_seq_length, num_encoder_tokens),
    dtype='float32')
decoder_input_data = np.zeros( # (12000, 22, 2751)
    (len(input_texts), max_decoder_seq_length, num_decoder_tokens),
    dtype='float32')
decoder_target_data = np.zeros( # (12000, 22, 2751)
    (len(input_texts), max_decoder_seq_length, num_decoder_tokens),
    dtype='float32')

# 遍歷輸入文本(input_texts)和目標(biāo)文本(target_texts)中的每個(gè)字符,
# 并將它們轉(zhuǎn)換為數(shù)值張量以供深度學(xué)習(xí)模型使用。
#編碼如下
#我,你,他,這,國(guó),是,家,人,中
#1  0  0   0  1   1  0   1  1,我是中國(guó)人
#1  0   1  0  0   1  1   1  0,他是我家人
# input_texts contain all english sentences
# output_texts contain all chinese sentences
# zip('ABC','xyz') ==> Ax By Cz, looks like that
# the aim is: vectorilize text, 3D
# zip(input_texts, target_texts)成對(duì)取出輸入輸出,比如input_text = 你好,target_text = you good

for i, (input_text, target_text) in enumerate(zip(input_texts, target_texts)):
    for t, char in enumerate(input_text):
        # 3D vector only z-index has char its value equals 1.0
        encoder_input_data[i, t, input_token_index[char]] = 1.
    for t, char in enumerate(target_text):
        # decoder_target_data is ahead of decoder_input_data by one timestep
        decoder_input_data[i, t, target_token_index[char]] = 1.
        if t > 0:
            # decoder_target_data will be ahead by one timestep
            # and will not include the start character.
            # igone t=0 and start t=1, means
            decoder_target_data[i, t - 1, target_token_index[char]] = 1.

在進(jìn)行模型推理的時(shí)候,你同樣需要相同的一份input_token_index 與target_token_index ,那么就需要將input_characters與target_characters保存下來(lái),在推理之前,將你輸入的內(nèi)容進(jìn)行編碼,因?yàn)橹挥型环菸恢镁幋a,你的網(wǎng)絡(luò)才能認(rèn)識(shí),要不然全亂套了,下面是將input_characters與target_characters保存為txt與讀取的方法:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-607785.html

# 將 input_characters保存為 input_words.txt 文件
with open('input_words.txt', 'w', newline='') as f:
    for char in input_characters:
        if char == '\t':
            f.write('\\t\n')
        elif char == '\n':
            f.write('\\n\n')
        else:
            f.write(char + '\n')


# 將 target_characters保存為 target_words.txt 文件
with open('target_words.txt', 'w', newline='') as f:
    for char in target_characters:
        if char == '\t':
            f.write('\\t\n')
        elif char == '\n':
            f.write('\\n\n')
        else:
            f.write(char + '\n')


# 從 input_words.txt 文件中讀取字符串
with open('input_words.txt', 'r') as f:
    input_words = f.readlines()
    input_characters = [line.rstrip('\n') for line in input_words]

# 從 target_words.txt 文件中讀取字符串
with open('target_words.txt', 'r', newline='') as f:
    target_words = [line.strip() for line in f.readlines()]
    target_characters = [char.replace('\\t', '\t').replace('\\n', '\n') for char in target_words]


#字符處理,以方便進(jìn)行編碼
input_token_index = dict([(char, i) for i, char in enumerate(input_characters)])
target_token_index = dict([(char, i) for i, char in enumerate(target_characters)])

到了這里,關(guān)于【如何訓(xùn)練一個(gè)中英翻譯模型】LSTM機(jī)器翻譯seq2seq字符編碼(一)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 基于transformer的Seq2Seq機(jī)器翻譯模型訓(xùn)練、預(yù)測(cè)教程

    基于transformer的Seq2Seq機(jī)器翻譯模型訓(xùn)練、預(yù)測(cè)教程

    機(jī)器翻譯(Machine Translation, MT)是一類將某種語(yǔ)言(源語(yǔ)言,source language)的句子 x x x 翻譯成另一種語(yǔ)言(目標(biāo)語(yǔ)言,target language)的句子 y y y 的任務(wù)。機(jī)器翻譯的相關(guān)研究早在上世紀(jì)50年代美蘇冷戰(zhàn)時(shí)期就開(kāi)始了,當(dāng)時(shí)的機(jī)器翻譯系統(tǒng)是基于規(guī)則的,利用兩種語(yǔ)言的單詞、

    2024年02月03日
    瀏覽(18)
  • 【GPT】文本生成任務(wù)(生成摘要、文本糾錯(cuò)、機(jī)器翻譯等的模型微調(diào))

    【GPT】文本生成任務(wù)(生成摘要、文本糾錯(cuò)、機(jī)器翻譯等的模型微調(diào))

    NLG:自然語(yǔ)言生成任務(wù),很多NLP任務(wù)可以被描述為NLG任務(wù),如經(jīng)典的T5模型(text to text transfer transformer模型)就是NLG模型,如文本糾錯(cuò)任務(wù),輸出正確的文本描述、智能問(wèn)答根據(jù)一定背景進(jìn)行推理,然后回答。 主要分為三種: 抽取式摘要:從原文檔中提取現(xiàn)成的句子作為摘要

    2023年04月26日
    瀏覽(30)
  • 【2022吳恩達(dá)機(jī)器學(xué)習(xí)課程視頻翻譯筆記】3.2線性回歸模型-part-2

    【2022吳恩達(dá)機(jī)器學(xué)習(xí)課程視頻翻譯筆記】3.2線性回歸模型-part-2

    Let’s look in this video at the process of how supervised learning works. Supervised learning algorithm will input a dataset and then what exactly does it do and what does it output? Let’s find out in this video. Recall that a training set in supervised learning includes both the input features, such as the size of the house and also the output targets,

    2024年02月12日
    瀏覽(15)
  • OJ# 376 機(jī)器翻譯

    OJ# 376 機(jī)器翻譯

    題目描述 ? 小李的電腦上安裝了一個(gè)機(jī)器翻譯軟件,他經(jīng)常用這個(gè)軟件來(lái)翻譯英語(yǔ)文章。 ?這個(gè)翻譯軟件的原理很簡(jiǎn)單,它只是從頭到尾,依次將每個(gè)英文單詞用對(duì)應(yīng)的中文含義來(lái)替換。對(duì)于每個(gè)英文單詞,軟件會(huì)先在內(nèi)存中查找這個(gè)單詞的中文含義, 如果內(nèi)存中有,軟件

    2024年02月11日
    瀏覽(22)
  • NLP——Translation 機(jī)器翻譯

    NLP——Translation 機(jī)器翻譯

    基于統(tǒng)計(jì)的機(jī)器翻譯任務(wù)通常通過(guò)翻譯模型(Translation Model)和語(yǔ)言模型(Language Model)的結(jié)合來(lái)學(xué)習(xí)更強(qiáng)大的翻譯模型。這種結(jié)合被稱為統(tǒng)計(jì)機(jī)器翻譯(SMT)。 翻譯模型(Translation Model):翻譯模型主要關(guān)注如何將源語(yǔ)言句子翻譯成目標(biāo)語(yǔ)言句子。它使用雙語(yǔ)語(yǔ)料庫(kù)進(jìn)行訓(xùn)練

    2024年02月09日
    瀏覽(20)
  • 機(jī)器學(xué)習(xí)&&深度學(xué)習(xí)——機(jī)器翻譯(序列生成策略)

    機(jī)器學(xué)習(xí)&&深度學(xué)習(xí)——機(jī)器翻譯(序列生成策略)

    ?????作者簡(jiǎn)介:一位即將上大四,正專攻機(jī)器學(xué)習(xí)的保研er ??上期文章:機(jī)器學(xué)習(xí)深度學(xué)習(xí)——seq2seq實(shí)現(xiàn)機(jī)器翻譯(詳細(xì)實(shí)現(xiàn)與原理推導(dǎo)) ??訂閱專欄:機(jī)器學(xué)習(xí)深度學(xué)習(xí) 希望文章對(duì)你們有所幫助 上一節(jié)已經(jīng)實(shí)現(xiàn)了機(jī)器翻譯的模型訓(xùn)練和預(yù)測(cè),逐個(gè)預(yù)測(cè)輸出序列, 直

    2024年02月12日
    瀏覽(26)
  • 什么是自然語(yǔ)言處理的機(jī)器翻譯?

    什么是自然語(yǔ)言處理的機(jī)器翻譯?

    機(jī)器翻譯(Machine Translation,MT)是一種自然語(yǔ)言處理技術(shù),旨在將一種語(yǔ)言的文本自動(dòng)翻譯成另一種語(yǔ)言。機(jī)器翻譯是自然語(yǔ)言處理領(lǐng)域的重要應(yīng)用之一,它可以幫助人們?cè)诳缯Z(yǔ)言交流、文檔翻譯和信息檢索等方面更加便捷和高效。本文將詳細(xì)介紹自然語(yǔ)言處理的機(jī)器翻譯。

    2024年02月05日
    瀏覽(23)
  • 【動(dòng)手學(xué)深度學(xué)習(xí)】--機(jī)器翻譯與數(shù)據(jù)集

    【動(dòng)手學(xué)深度學(xué)習(xí)】--機(jī)器翻譯與數(shù)據(jù)集

    學(xué)習(xí)視頻:機(jī)器翻譯數(shù)據(jù)集【動(dòng)手學(xué)深度學(xué)習(xí)v2】 官方筆記:機(jī)器翻譯與數(shù)據(jù)集 機(jī)器翻譯 (machine translation)指的是 將序列從一種語(yǔ)言自動(dòng)翻譯成另一種語(yǔ)言。 事實(shí)上,這個(gè)研究領(lǐng)域可以追溯到數(shù)字計(jì)算機(jī)發(fā)明后不久的20世紀(jì)40年代, 特別是在第二次世界大戰(zhàn)中使用計(jì)算機(jī)破

    2024年02月09日
    瀏覽(25)
  • 為什么需要多語(yǔ)言并行機(jī)器翻譯?

    為什么需要多語(yǔ)言并行機(jī)器翻譯?

    隨著全球化的加速和不同語(yǔ)言之間的交流需求不斷增長(zhǎng),多語(yǔ)言機(jī)器翻譯(Multilingual Parallel Machine Translation)成為一個(gè)備受關(guān)注的領(lǐng)域。傳統(tǒng)上,機(jī)器翻譯系統(tǒng)主要集中于一對(duì)特定語(yǔ)言之間的翻譯,但這種單一語(yǔ)言對(duì)的模式在面對(duì)多語(yǔ)言環(huán)境時(shí)存在一些挑戰(zhàn)。因此,多語(yǔ)言并

    2024年02月12日
    瀏覽(29)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包