从零开始的 NLP使用字符级 RNN 对名称进行分类

定义函数findFile(path)用来寻找文件,此函数返回一个文件路径列表。输出如:['file1.txt', 'file2.txt', ...]

all_letters是字符串变量,包含了所有的字母、空格和一些常见的标点符号。
n_letters代表字符串变量all_letters的长度。

定义函数unicodeToAscii(s)用来将unicode字符串转换为ASCII字符串。比如说,将 Unicode 字符串 “Café” 转换为 ASCII 字符串 “Cafe”。此函数返回转换后的字符串。

建立一个名为category_lines的字典,该字典的键为语言名称,值为一个列表,包含语言的所有名字。
all_categories是一个列表。

定义函数readLines(filename)用来读取一个文件并将其分割成行列表。此函数返回一个经过unicodeToAscii函数转换后的新列表。

将数据读取到内存中。其中category为文件名,all_categories为全部文件名包含在一起的列表,category_lines的键为category,值为对应的文件内容。n_categories是文件的数量。

把所有名称转换为张量,用one-hot vector来表示单个字母,向量大小为<1 x n_letters>
一个单词的张量为<line_length x 1 x n_letters>
定义函数letterToIndex(letter),用于寻找字母在all_letters中的下标,再定义函数letterToTensor(letter) 将一个字母转换成<1 x n_letters>的张量,该函数返回该张量。函数lineToTensor(line)将一个单词转换成一个大小为<line_length x 1 x n_letters>的张量,该函数返回该张量。

定义一个名为RNN的神经网络模型,其中 __init__(self, input_size, hidden_size, output_size)函数用于初始化input_size,hidden_size,output_size,即输入维度大小,隐藏层维度大小和输出维度大小。同时还定义了模型的两个层,一个LSTM层,一个线性层(用于将LSTM层输出的隐藏状态转换到输出的维度output_size)。

模型中forward(self, input, hidden, context):函数有三个参数,input为输入数据张量,hidden为LSTM的隐藏状态张量,context为LSTM的单元状态张量。该函数返回output,hidden以及context。

该模型还有一个函数initHidden,用于初始化隐藏状态和单元状态,该函数返回形状为<1 x 1 x hidden_size>的全零张量座位初始的隐藏状态和单元状态。

接下来,通过指定隐藏层的维度 n_hidden、输入维度 n_letters 和输出维度 n_categories 来创建一个 RNN 模型对象 rnn。

使用函数initHidden来初始化hidden和context,令input为一个lineToTensor函数返回的<line_length x 1 x n_letters>张量。
output的张量大小为<1 x 1 x n_categories>
传递一个输入和上一个隐藏状态(初始化为0)后会得到输出(每种语言的概率)和下一个隐藏状态(下一步中使用)。

定义categoryFromOutput(output)函数,用于将神经网络模型的输出张量转换为对应的类别标签。该函数返回最大值对应的索引值category_i和对应的类别标签all_categories[category_i]

初始化input,hidden,context,并用rnn(input, hidden, context)更新output,hidden,context。

定义一个函数randomChoice(l),用来随机选择一个整数,整数不大于len(l) - 1。再定义一个函数randomTrainingExample,该函数中使用randomChoice函数随机选择一种语言category,再从该语言文件中选择任意一行,将该语言文件和该行都变成张量。该函数返回category,line,以及对应的张量category_tensor和line_tensor。

接下来训练网络,定义损失函数criterion。定义训练函数train(category_tensor, line_tensor),该函数返回输出张量和损失值。

定义timeSince(since)函数用来记录代码中某个操作所花费的时间。

定义评估函数evaluate(line_tensor)用来对输入进行模型预测,并根据预测结果计算混淆矩阵,用于评估模型在给定样例上的性能。

定义预测函数predict(input_line, n_predictions = N)对给定的输入进行模型预测,并返回预测结果的前 N 个类别及其对应的概率值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值