• python用于NLP的seq2seq模型实例:用Keras实现神经网络机器翻译


     在本文中,我们将看到如何创建语言翻译模型,这也是神经机器翻译的非常著名的应用。

    最近我们被客户要求撰写关于NLP的研究报告,包括一些图形和统计输出。我们将使用seq2seq通过Python的Keras库创建我们的语言翻译模型。

    假定您对循环神经网络(尤其是LSTM)有很好的了解。本文中的代码是使用Keras库用Python编写的。 

    库和配置设置

     首先导入所需的库:

    1. import os, sys
    2. from keras.models import Model
    3. from keras.layers import Input, LSTM, GRU, Dense, Embedding
    4. from keras.preprocessing.text import Tokenizer
    5. from keras.preprocessing.sequence import pad_sequences
    6. from keras.utils import to_categorical
    7. import numpy as np
    8. import matplotlib.pyplot as plt

    执行以下脚本来设置不同参数的值:

    1. BATCH_SIZE = 64
    2. EPOCHS = 20
    3. LSTM_NODES =256
    4. NUM_SENTENCES = 20000
    5. MAX_SENTENCE_LENGTH = 50
    6. MAX_NUM_WORDS = 20000
    7. EMBEDDING_SIZE = 100

    数据集

    我们将在本文中开发的语言翻译模型会将英语句子翻译成法语。要开发这样的模型,我们需要一个包含英语句子及其法语翻译的数据集。 在每一行上,文本文件包含一个英语句子及其法语翻译,并用制表符分隔。文件的前20行fra.txt如下所示:

    1. Go. Va !
    2. Hi. Salut !
    3. Hi. Salut.
    4. Run! Cours !
    5. Run! Courez !
    6. Who? Qui ?
    7. Wow! Ça alors !
    8. Fire! Au feu !
    9. Help! À l'aide !
    10. Jump. Saute.
    11. Stop! Ça suffit !
    12. Stop! Stop !
    13. Stop! Arrête-toi !
    14. Wait! Attends !
    15. Wait! Attendez !
    16. Go on. Poursuis.
    17. Go on. Continuez.
    18. Go on. Poursuivez.
    19. Hello! Bonjour !
    20. Hello! Salut !

    该模型包含超过170,000条记录,但是我们将仅使用前20,000条记录来训练我们的模型。

    数据预处理

    神经机器翻译模型通常基于seq2seq架构。seq2seq体系结构是一种编码-解码体系结构,由两个LSTM网络组成:编码LSTM和解码LSTM。 

    在我们的数据集中,我们不需要处理输入,但是,我们需要生成翻译后的句子的两个副本:一个带有句子开始标记,另一个带有句子结束标记。这是执行此操作的脚本:

    1. input_sentences = []
    2. output_sentences = []
    3. output_sentences_inputs = []
    4. count = 0
    5. for line in open(r'/content/drive/My Drive/datasets/fra.txt', encoding="utf-8"):
    6. count += 1
    7. if count > NUM_SENTENCES:
    8. break
    9. if '\t' not in line:
    10. continue
    11. input_sentence, output = line.rstrip().split('\t')
    12. output_sentence = output + ' '
    13. output_sentence_input = ' ' + output
    14. input_sentences.append(input_sentence)
    15. output_sentences.append(output_sentence)
    16. output_sentences_inputs.append(output_sentence_input)
    17. print("num samples input:", len(input_sentences))
    18. print("num samples output:", len(output_sentences))
    19. print("num samples output input:", len(output_sentences_inputs))

    注意:您可能需要更改fra.txt计算机上文件的文件路径。

    最后,输出中将显示三个列表中的样本数量:

    1. num samples input: 20000
    2. num samples output: 20000
    3. num samples output input: 20000

    现在让我们来随机输出一个句子从input_sentences[]output_sentences[]output_sentences_inputs[]列表:

    1. print(input_sentences[172])
    2. print(output_sentences[172])
    3. print(output_sentences_inputs[172])

    这是输出:

    1. I'm ill.
    2. Je suis malade. <eos>
    3. <sos> Je suis malade.

    您可以看到原始句子,即I'm ill;在输出中对应的翻译,即Je suis malade. 。 

  • 相关阅读:
    模电课程设计
    Linux C/C++ 学习笔记(四):MYSQL安装与远程连接
    selenium无头浏览器
    FastGPT编译前端界面,并将前端界面映射到Docker容器中
    32FLASH闪存
    Git 基础使用
    一次基于Fastjson的JNDI注入
    【深度学习21天学习挑战赛】6、使用VGG16模型实现卷积神经网——识别眼睛状态
    HighCharts点击无响应问题
    最优装载-贪心算法
  • 原文地址:https://blog.csdn.net/tecdat/article/details/128212424