广西民族大学高级人工智能课程—头歌实践教学实践平台—机器翻译--English to Chinese

这篇具有很好参考价值的文章主要介绍了广西民族大学高级人工智能课程—头歌实践教学实践平台—机器翻译--English to Chinese。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

第1关:迈出第一步----数据预处理

代码文件

import numpy as np

test_point = input()

with open('cmn.txt', 'r', encoding='utf-8') as f:
    data = f.read()
data = data.split('\n')
data = data[:100]

#########begin#########
en_data = [line.split('\t')[0] for line in data]
ch_data = ['\t' + line.split('\t')[1] + '\n' for line in data]

#########end#########

print('英文数据:\n', en_data[:5])
print('\n中文数据:\n', ch_data[:5])

print('数据读取完成')

# 分别生成中英文字典

#########begin#########
en_vocab = set(''.join(en_data))
en_vocab = sorted(en_vocab)
id2en = {i: char for i, char in enumerate(en_vocab)}
en2id = {char: i for i, char in enumerate(en_vocab)}

ch_vocab = set(''.join(ch_data))
ch_vocab = sorted(ch_vocab)
id2ch = {i: char for i, char in enumerate(ch_vocab)}
ch2id = {char: i for i, char in enumerate(ch_vocab)}


#########end#########

print('\n英文字典:\n', en2id)
print('\n中文字典\n:', ch2id)
print('字典构建完成')
en_num_data = [[en2id[en] for en in line] for line in en_data]
ch_num_data = [[ch2id[ch] for ch in line] for line in ch_data]
de_num_data = [[ch2id[ch] for ch in line][1:] for line in ch_data]



import numpy as np

# 获取输入输出端的最大长度
max_encoder_seq_length = max([len(txt) for txt in en_num_data])
max_decoder_seq_length = max([len(txt) for txt in ch_num_data])

#########begin#########
# 将数据进行onehot处理
# 将数据进行onehot处理
encoder_input_data = np.zeros(
    (len(en_num_data), max_encoder_seq_length, len(en2id)), dtype='float32')
decoder_input_data = np.zeros(
    (len(ch_num_data), max_decoder_seq_length, len(ch2id)), dtype='float32')
decoder_target_data = np.zeros(
    (len(ch_num_data), max_decoder_seq_length, len(ch2id)), dtype='float32')

for i, (input_text, target_text) in enumerate(zip(en_num_data, ch_num_data)):
    for t, char in enumerate(input_text):
        encoder_input_data[i, t, char] = 1.
    for t, char in enumerate(target_text):
        decoder_input_data[i, t, char] = 1.
        # 注意:target_text是从索引1开始,因为索引0是'\t'开始标记
        if t > 0:
            # decoder_target_data是从索引0开始,结束标记是'\n'
            decoder_target_data[i, t - 1, char] = 1.



#########end#########
print(encoder_input_data[int(test_point)])
print(decoder_input_data[int(test_point)])
print(decoder_target_data[int(test_point)])

print('向量化完成')

题目描述

任务描述

本关任务:基于机器学习的思想,是一种数据驱动的研究思想,因此首先要对准备研究的数据进行处理。对于机器翻译模型,数据预处理主要分为两个方面:

  • 标准化自然语言语句的格式
  • 构建训练所用的语言词典
  • 将语词转化为向量
相关知识

为了完成本关任务,你需要掌握:

  1. 读取原始数据并对其进行标准化整理
  2. 根据自然语言语句数据,构建英语和法语两个词典。
  3. 将自然语言向量化
数据整理

本实训提供20,000个英语句子和其相对应的20,000个翻译好的法语句子。数据的原始格式如下:

en2id,高级人工智能,人工智能,机器翻译,自然语言处理

每一行包含一句英语句子和其对应的法语句子,它们中间用\t隔开。现在希望将英语和法语句子分割开来,将英语句子存入en_data,将法语句子存入ch_data,并且为了后续模型训练,规定英语句子保持不变,而法语每个句子都以\t开头,并以\n结尾。

 
  1. #英文句子
  2. line.split('\t')[0]
  3. #中文句子
  4. '\t' + line.split('\t')[1] + '\n'
构建词典

所谓词典,就是指在整个数据集中出现的所有token所构成的集合。该token可以是单词,也可以是字母。本文以字母作为token。所有的英文字符存储在en_vocab中,中文字符存储在ch_vocab中。词典一般使用dictionary数据类型,以英文为例子,英文的词典分为两个:

  • id2en,其中的key为词典的index,而value对应相应的英文字母
  • en2id,其中key为英文字母,而value为对应的词典index 例如:
     
      
    1. id2en[0]
    2. # out: a
    3. en2id['a']
    4. # out: 0
自然语言向量化

向量化后的自然语言语句,将被用于模型的输入。对自然语言的向量化,一种常用的方法是one-hot编码。 one-hot编码,又称“独热编码”。其实就是用N位状态寄存器编码N个状态,每个状态都有独立的寄存器位,且这些寄存器位中只有一位有效。 例如一个特征“性别”,性别有“男性”、“女性”,这个特征有两个特征值,也只有两个特征值,如果这个特征进行one-hot编码,则特征值为“男性”的编码为“10”,“女性”的编码为“01” 在代码片段中,使用encoder_input_data,decoder_input_datadecoder_target_data,分别来存储向量化的英文、中文和目标语言句子。以encoder_input_data为例:

 
  1. # 三维数组,第一维度是数据集中的总句子数,第二维度为最长的
  2. # 句子长度,最后一维度为字典的长度
  3. encoder_input_data = np.zeros((len(en_num_data), max_encoder_seq_length, len(en2id)), dtype='float32')
  4. # 向量化时,根据词典将0向量的相应位置置为1
  5. for i in range(len(ch_num_data)):
  6. for t, j in enumerate(en_num_data[i]):
  7. encoder_input_data[i, t, j] = 1.
编程要求

根据提示,在右侧编辑器补充代码。完成数据的标准化处理、构建训练所用的语言词典并将语词转化为向量。

测试说明

平台会对你编写的代码进行测试: 测试输入: 1 预期输出(会输出对应测试输入的向量化数据):

 
  1. 英文数据:
  2. ['Hi.', 'Hi.', 'Run.', 'Wait!', 'Hello!']
  3. 中文数据:
  4. ['\t嗨。\n', '\t你好。\n', '\t你用跑的。\n', '\t等等!\n', '\t你好。\n']
  5. 数据读取完成
  6. 英文字典:
  7. {' ': 0, '!': 1, "'": 2, '.': 3, '?': 4,...
  8. 中文字典:
  9. {'\t': 0, '\n': 1, '!': 2, '。':...
  10. 字典构建完成
  11. [[0. 0. 0. 0.....
  12. 向量化完成

开始你的任务吧,祝你成功!文章来源地址https://www.toymoban.com/news/detail-827131.html

第2关: 模型训练----搭建seq2seq训练模型

代码文件

import data_prepare
from keras.models import Model
from keras.layers import Input, LSTM, Dense, Embedding,concatenate,TimeDistributed,RepeatVector,Bidirectional
from keras.optimizers import Adam


EN_VOCAB_SIZE = 47
CH_VOCAB_SIZE = 147
HIDDEN_SIZE = 256

LEARNING_RATE = 0.003
BATCH_SIZE = 100
EPOCHS = 200

encoder_input_data, decoder_input_data,decoder_target_data,_,_,_ = data_prepare.getdata()
# ==============encoder=============
#########begin#########

# Encoder
encoder_inputs = Input(shape=(None, EN_VOCAB_SIZE))
encoder_LSTM = LSTM(HIDDEN_SIZE, return_sequences=True, return_state=True, name='encoder')
encoder_outputs, state_h, state_c = encoder_LSTM(encoder_inputs)
encoder_states = [state_h, state_c]


#########end#########
# # ==============decoder=============

#########begin#########

# Decoder
decoder_inputs = Input(shape=(None, CH_VOCAB_SIZE))
decoder_LSTM = LSTM(HIDDEN_SIZE, return_sequences=True, return_state=True, name='decoder')
decoder_outputs, _, _ = decoder_LSTM(decoder_inputs, initial_state=encoder_states)
decoder_dense = Dense(CH_VOCAB_SIZE, activation='softmax', name='dense')
decoder_outputs = decoder_dense(decoder_outputs)


#########end#########

#
#
model = Model([encoder_inputs, decoder_inputs], decoder_outputs)
opt = Adam(lr=LEARNING_RATE, beta_1=0.9, beta_2=0.999, epsilon=1e-08)
model.compile(optimizer=opt, loss='categorical_crossentropy', metrics=['accuracy'])
model.summary()

# model.fit([encoder_input_data, decoder_input_data], decoder_target_data,
#           batch_size=BATCH_SIZE,
#           epochs=EPOCHS,
#           validation_split=0.2)

题目描述

任务描述

本关任务:准备好数据后,就要着手搭建训练模型了。本关将完成seq2seq模型的搭建和模型的训练。

相关知识

为了完成本关任务,你需要掌握: 1.seq2seq模型基本原理 2.搭建seq2seq模型 3.训练seq2seq模型

seq2seq模型基本原理

Seq2Seq模型是RNN最重要的一个变种,这种结构又叫Encoder-Decoder模型。 由于我们遇到的大部分问题序列都是不等长的,如机器翻译中,源语言和目标语言的句子往往并没有相同的长度。

en2id,高级人工智能,人工智能,机器翻译,自然语言处理

为此,Encoder-Decoder结构先将输入数据编码成一个上下文向量,该上下文向量通常是Encoder的最后一个隐藏状态。 Decoder将该上下文向量作为输入,对其进行解码,输出相应的目标序列。 由于Encoder-Decoder结构不限制输入和输出的序列长度,因此应用的范围非常广泛,比如:机器翻译、文本摘要、阅读理解、语音识别等。

搭建seq2seq模型
Encoder模型

首先对模型的Encoder部分进行搭建,为此我们需要考虑3个方面:

  1. Encoder模型的输入是什么样子?
  2. Encoder模型使用怎样的RNN单元?
  3. 模型的哪部分作为Decoder的输入?

模型的输入可以使用Input来设定,输入的形状要与字典长度相同:

 
  1. encoder_input = Input(shape=(None,len(vocabulary)))

本关模型使用LSTM单元,维度设置为HIDDEN_SIZEreturn_sequences字段用来决控制是否需要每一步的输出,return_states用来控制是否输出隐藏层状态。

 
  1. encoder_LSTM = LTM(HIDDEN_SIZE, return_sequences=True, return_state=True,name='encoder')

Encoder使用最后一层的隐藏状态,即encoder_state_h encoder_state_c作为Decoder的输入:

 
  1. encoder_h, encoder_state_h, encoder_state_c = encoder_LSTM (encoder_input)
Decoder模型

对Decoder部分进行搭建,我们需要考虑3个方面:

  1. Decoder模型的输入是什么样子?
  2. Decoder模型使用怎样的RNN单元?
  3. 模型的输出是怎样的结构?

前两步与Encoder相似,对于Decoder的输出,我们使用一个全连接层,并使用softmax激活函数将输出的向量映射到目标语言的字典上。

 
  1. lstm = LSTM(HIDDEN_SIZE, return_sequences=True, return_state=True,name='decoder')
  2. decoder_h, _, _ = lstm(decoder_inputs, initial_state=[encoder_state_h, encoder_state_c])
  3. decoder_dense = Dense(CH_VOCAB_SIZE, activation='softmax',name='dense')
  4. decoder_outputs = decoder_dense(decoder_h)

Decoder部分还可以使用注意力机制:

en2id,高级人工智能,人工智能,机器翻译,自然语言处理

该方法通过一个attention层,将Encoder部分的每一步的输出与decoder_inputs联系起来作为decoder的输入。相当于根据序列的每个时间步将编码器编码为不同隐藏向量c,在解码时,结合每个不同的c进行解码输出,这样得到的结果会更加准确。在本实训中,请先掌握较为简单的普通Decoder结构。

训练seq2seq模型

训练模型时,我们用Model模块将Encoder和Decoder封装,并通过optimizer选择优化器,loss选择损失函数。

 
  1. model = Model([encoder_inputs, decoder_inputs], decoder_outputs)
  2. opt = Adam(lr=LEARNING_RATE, beta_1=0.9, beta_2=0.999, epsilon=1e-08)
  3. model.compile(optimizer=opt, loss='categorical_crossentropy', metrics=['accu\fracy'])

模型在训练时,将之前预处理好的数据输入模型,并设置相应参数即可。

 
  1. model.fit([encoder_input_data, decoder_input_data], decoder_target_data,
  2. batch_size=BATCH_SIZE,
  3. epochs=EPOCHS,
  4. validation_split=0.2)

其中x为输入的数据,y为输出的数据。batch_size为每一批处理的序列数,epochs为训练的迭代次数,validation_split为训练集和验证集的比例。 ####编程要求

根据提示,在右侧编辑器补充代码,完成seq2seq模型的搭建和训练。

测试说明

平台会对你编写的代码进行测试:

模型结构与要求相符即可通过本关。


开始你的任务吧,祝你成功!

第3关:模型实践----搭建seq2seq推断模型

代码文件

import data_prepare
from keras.models import Model
from keras.layers import Input, LSTM, Dense, Embedding, concatenate, TimeDistributed, RepeatVector, Bidirectional
from keras.optimizers import Adam
import numpy as np

# Existing code for setting up the model
EN_VOCAB_SIZE = 47
CH_VOCAB_SIZE = 147
HIDDEN_SIZE = 256
LEARNING_RATE = 0.003
BATCH_SIZE = 100
EPOCHS = 100
encoder_input_data, decoder_input_data, decoder_target_data, ch2id, id2ch, en_data = data_prepare.getdata()

# ==============encoder=============
encoder_inputs = Input(shape=(None, EN_VOCAB_SIZE))
encoder_h, encoder_state_h, encoder_state_c = LSTM(HIDDEN_SIZE, return_sequences=True, return_state=True, name='encoder')(encoder_inputs)

# ==============decoder=============
decoder_inputs = Input(shape=(None, CH_VOCAB_SIZE))
decoder = LSTM(HIDDEN_SIZE, return_sequences=True, return_state=True, name='decoder')
decoder_dense = Dense(CH_VOCAB_SIZE, activation='softmax', name='dense')
decoder_h, _, _ = decoder(decoder_inputs, initial_state=[encoder_state_h, encoder_state_c])
decoder_outputs = decoder_dense(decoder_h)
model = Model([encoder_inputs, decoder_inputs], decoder_outputs)
opt = Adam(lr=LEARNING_RATE, beta_1=0.9, beta_2=0.999, epsilon=1e-08)
model.compile(optimizer=opt, loss='categorical_crossentropy', metrics=['accuracy'])
model.fit([encoder_input_data, decoder_input_data], decoder_target_data, batch_size=BATCH_SIZE, epochs=EPOCHS, validation_split=0.2, verbose=0)

# Encoder Inference Model
encoder_model = Model(encoder_inputs, [encoder_state_h, encoder_state_c])

# Decoder Inference Model
decoder_state_input_h = Input(shape=(HIDDEN_SIZE,))
decoder_state_input_c = Input(shape=(HIDDEN_SIZE,))
decoder_h, state_h, state_c = decoder(decoder_inputs, initial_state=[decoder_state_input_h, decoder_state_input_c])
decoder_outputs = decoder_dense(decoder_h)
decoder_model = Model([decoder_inputs, decoder_state_input_h, decoder_state_input_c], [decoder_outputs, state_h, state_c])

for k in range(40, 50):
    test_data = encoder_input_data[k:k + 1]
    h, c = encoder_model.predict(test_data)
    target_seq = np.zeros((1, 1, CH_VOCAB_SIZE))
    target_seq[0, 0, ch2id['\t']] = 1
    outputs = []

    while True:
        output_tokens, h, c = decoder_model.predict([target_seq, h, c])
        sampled_token_index = np.argmax(output_tokens[0, -1, :])
        outputs.append(sampled_token_index)
        if sampled_token_index == ch2id['\n'] or len(outputs) > 20:
            break
        target_seq = np.zeros((1, 1, CH_VOCAB_SIZE))
        target_seq[0, 0, sampled_token_index] = 1

    print(en_data[k])
    print(''.join([id2ch[i] for i in outputs if i not in [ch2id['\t'], ch2id['\n']]])+'\n')

题目描述

任务描述

本关任务:本关将使用训练好的翻译模型,对英文句子进行翻译。

相关知识

为了完成本关任务,你需要掌握: 1.如何建立推断模型。 2.如何将模型的输出整理成最终翻译的结果

建立推断模型

推断模型的建立也分为两部分,模型Encoder部分的结构与训练时完全相同,因此只需要将原来的encoder部分封装起来即可:

 
  1. # Encoder inference model
  2. encoder_model = Model(encoder_inputs, [encoder_state_h, encoder_state_c])

而Decoder部分,需要将每一步的输出作为下一步的输入:

en2id,高级人工智能,人工智能,机器翻译,自然语言处理

因此需要对Decoder部分重新设计。 首先确定Decoder部分的输入与输出,输入部分的大小应与Encoder输出的大小相同。

 
  1. decoder_state_input_h = Input(shape=(HIDDEN_SIZE,))
  2. decoder_state_input_c = Input(shape=(HIDDEN_SIZE,))

由于我们需要每一步的输出作为下一步的输入,因此需要将Decoder的隐藏状态和输出向量都存下来以备用。

 
  1. decoder_h, state_h, state_c = decoder(decoder_inputs, initial_state=[decoder_state_input_h, decoder_state_input_c])
  2. decoder_outputs = decoder_dense(decoder_h)

最后将Decoder的部分封装:

 
  1. decoder_model = Model([decoder_inputs, decoder_state_input_h, decoder_state_input_c], [decoder_outputs, state_h, state_c])
输出整理

Decoder部分的输出是一个概率向量,它的每一位对应着字典中相应位置的概率,通常我们将输出向量中概率值最高的一位,作为预测的结果:

 
  1. output_tokens, h, c= decoder_model.predict([target_seq, h, c])
  2. sampled_token_index = np.argmax(output_tokens[0, -1, :])

在获得Encoder部分的输出后,我们需要设计一个程序结构,使得Decoder部分将每一步的输出送入下一步之中,并且当输出了终止符号或者超过最长输出序列长度(本实训中设置为20)时,停止程序。

 
  1. while True:
  2. output_tokens, h, c= decoder_model.predict([target_seq, h, c])
  3. #...
  4. target_seq = np.zeros((1, 1, CH_VOCAB_SIZE))
  5. target_seq[0, 0, sampled_token_index] = 1
  6. if sampled_token_index == ch2id['\n'] or len(outputs) > 20: break
编程要求

根据提示,在右侧编辑器补充代码,搭建推断模型,完成英语到法语的翻译模型。 ####测试说明

平台会对你编写的代码进行测试: 输入英文,输出相应的中文语句。 注意:本关需要运行模型,因此评测可能较慢,请耐心等待1-2分钟。


开始你的任务吧,祝你成功!

到了这里,关于广西民族大学高级人工智能课程—头歌实践教学实践平台—机器翻译--English to Chinese的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 《人工智能安全》课程总体结构

    人工智能安全观:人工智能安全问题、安全属性、技术体系等基本问题进行了归纳整理。 人工智能安全的主要数据处理方法,即非平衡数据分类、噪声数据处理和小样本学习。 人工智能技术赋能网络空间安全攻击与防御:三个典型实例及攻击图的角度介绍典型人工智能方法

    2024年02月03日
    浏览(32)
  • 人工智能大数据专业最好的大学 - 人工智能大数据云计算三者关系

    了解大数据与人工智能的区别与联系,首先我们从认知和理解大数据和人工智能的概念开始。 1、大数据 大数据是物联网、Web系统和信息系统发展的综合结果,其中物联网的影响最大,所以大数据也可以说是物联网发展的必然结果。大数据相关的技术紧紧围绕数据展开,包括

    2023年04月21日
    浏览(39)
  • 国外顶尖高校、企业分享人工智能自学课程英文原课程分享

    人工智能无疑已经是当下最火热的方向,在很多领域已经融入我们生活,ChatGPT,Midjourney只是其中一个细分热点。目前这个领域,虽说国内也有不少课程,但是大部分源头还得从英文资料中找。如何学到最新最强得人工智能技能,我们整理了一些高质量的、评价极高的免费课程

    2024年02月06日
    浏览(44)
  • 高级人工智能之群体智能:粒子群算法

    粒子群优化算法(Particle Swarm Optimization, PSO)是一种基于群体协作和信息共享的优化技术。它由Kennedy和Eberhart于1995年提出,灵感来源于鸟群和鱼群的社会行为。PSO是解决连续空间优化问题的有效方法,特别适合于多峰和高维问题。以下是PSO的基本思想和工作原理: 1.1基本思想

    2024年01月18日
    浏览(35)
  • 【人工智能课程】计算机科学博士作业三

    来源:李宏毅2022课程第10课的作业 图片攻击是指故意对数字图像进行修改,以使机器学习模型产生错误的输出或者产生预期之外的结果。这种攻击是通过将微小的、通常对人类难以察觉的扰动应用于输入图像来实现的。图片攻击是对深度学习系统中的鲁棒性和安全性的一种测

    2024年03月16日
    浏览(63)
  • 【人工智能课程】计算机科学博士作业一

    模型拟合:用深度神经网络拟合一个回归模型。从各种角度对其改进,评价指标为MSE。 掌握技巧: 熟悉并掌握深度学习模型训练的基本技巧。 提高PyTorch的使用熟练度。 掌握改进深度学习的方法。 数据集下载: Kaggle下载数据: https://www.kaggle.com/competitions/ml2022spring-hw1 百度云

    2024年01月23日
    浏览(50)
  • 中山大学人工智能学院——考研上岸经验贴

    首先是初试成绩,中山大学在2.21号就公布了成绩和 排名 ,这点很不错,有很多学校只公布成绩而没有排名。我的初试总分386,总排名第二,各个科目还是比较平均的: 要说的是,2023年,人工智能学院专硕本来只招3个人,后来在复试前扩了4个名额,所以最后专硕录取7个名

    2024年02月08日
    浏览(34)
  • 谷歌发布一个免费的生成式人工智能课程

    在过去几周,我们看到的都是AI将如何改变生活,无论是ChatGPT的文本生成,还是SD,Midjourney 的图像生成,这些AI的特点就是都是生成式的AI。而几天前,谷歌推出了一个生成式人工智能学习课程,课程涵盖了生成式人工智能入门、大型语言模型、图像生成等主题。 除了课程外

    2024年02月08日
    浏览(42)
  • 人工智能与机器学习课程大作业(二、函数逼近)

    本文为人工智能与机器学习课程大作业第二部分(二、函数逼近) 本文仅作学习参考使用!  其他章节跳转: 一、知识工程基础 二、函数逼近 三、模糊逻辑 四、函数优化 二、函数逼近 2.1 BP网络 2.1.1 BP神经网络原理 2.1.2 基于BP神经网络的非线性函数逼近 2.2 改变BP网络模型

    2024年02月03日
    浏览(41)
  • 人工智能课程设计毕业设计——基于机器学习的贷款违约预测

    摘  要 随着人们对于贷款的需求量不断增加以及我国债券市场和信贷市场违约事件频发,商业银行不良资产率与用户个人贷款违约风险成为了政府和银行业关心的核心问题,而对信用贷款违约风险进行有效评估和测度也成为了商业银行提高其经营管理水平的核心要务。 本小

    2024年04月16日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包