Easy Character-based Neural Language Mannequin for Poem Generator utilizing Keras

Language modeling is prime to main pure language processing duties. Recently, deep-learning-based language fashions have proven higher outcomes than conventional strategies. These fashions are additionally part of more difficult duties like speech recognition and machine translation. Language modeling is usually constructed utilizing neural networks, so it usually referred to as Neural Language Modeling (NLM). Initially, feedforward neural community fashions had been utilized to introduce this language modeling process. Extra not too long ago, recurrent neural networks (RNNs) and Lengthy Quick-Time period Reminiscence networks (LSTMs), these are a kind of networks with long-term reminiscence, permitting the fashions to study the suitable context over for much longer enter sequences than the straightforward feedforward neural networks.

A Neural Language Mannequin (NLM) predicts the next phrase within the sequence of phrases based mostly on the phrases which have appeared earlier than it within the sequence. A personality-based NLM should be skilled on textual content enter, the place each the enter and output sequences should be characters. Neural Language Mannequin works nicely with longer sequences, however there’s a caveat with longer sequences, it takes extra time to coach the mannequin. Typically, an extended sequence of phrases permits extra connection for the mannequin to study what character to output subsequent based mostly on the earlier phrases.

On this put up, we’re going to use the Poem “To Brooklyn Bridge” by Hart Crane to coach to NLM, and we use the skilled mannequin to generate the poem. First, we have to load the required libraries for this process, after which we have to load the textual content. We are able to use to following code snippet to load the doc and import the required libraries.

Libraries want for NLM process
Load Textual content code

The output of the raw_text seems to be like this:

Brooklyn Bridge Poem

After loading the textual content, we have to clear the passage. Information cleansing is probably the most essential a part of any NLP mission. Right here, we take away the punctuations and convert all of the phrases to decrease case. We are able to see the output of raw_text after information cleansing within the following code snippet.

Information Cleansing

Now we’ve got an extended checklist of characters; we are able to construct our input-output sequences which might be used to coach the mannequin. Every enter sequence might be 10 characters with one output character, making every sequence 11 characters lengthy.

Creating sequences

By working the above code snippet, we find yourself with 1710 sequences of characters for coaching our Pure Language Mannequin. We save the ready information to a separate file in order that we are able to load it later for our mannequin.

Saving the sequence to a file

The above code snippet creates the ‘char_sequences.txt’ file. If we have a look contained in the file, it seems to be one thing like the next:

The output of char_sequences.txt

Now, we are going to design a neural language mannequin for the processed sequence information. The mannequin will take the encoded characters as enter and predict the following character within the sequence as output. An LSTM recurrent neural community hidden layer might be used to study the context from the enter sequence to make the predictions. First, we have to load the ‘char_sequences.txt’ file; we are able to use the next code snippet to load and cut up the info.

Load and Break up

We have to encode the sequences of characters as integers as a result of neural networks work rather well with integers, i.e. every distinctive character is specified with an integer, and the sequence of characters might be encoded as a sequence of integers. The next code snippet will do the encoding and mapping of sequences to integers.

Encoding and Mapping

We have to know the vocabulary dimension when constructing a mannequin; the next code snippet will give the vocabulary dimension, which is nothing however the size of mapping.

Vocabulary Measurement

Now that the sequences are integer encoded, we are able to divide the columns into enter and output sequences of characters. We are able to do that by utilizing the next code snippet:

Break up Inputs and Outputs

That is the half the place we create a mannequin utilizing Keras with a easy LSTM hidden layer with 75 reminiscence cells, the quantity 75 chosen with trial and error for the NLM process. The mannequin has a completely related output layer, which supplies likelihood distribution throughout all characters within the vocabulary due to the softmax activation perform on the output layer. We used the well-known Adam optimizer, and accuracy is listed on the finish of every batch replace. The mannequin is skilled for 100 epochs. After the mannequin is skilled, we save the mannequin as ‘mannequin.h5’ for later use, and we additionally maintain the mapping from characters to integers to encode any enter and decode any output from the mannequin.


By executing the above code snippet, you will note that the mannequin learns the issue nicely, maybe too nicely, for producing exceptional sequences of characters. On the finish of the run, we’ve got ‘mannequin.h5’ and ‘mapping.pkl’ file.

Coaching Outcomes

Now, the coaching is completed; we use the skilled mannequin to generate characters. We have to give sequences of 10 characters as enter (it may be something) to the mannequin to begin the era. The given sequence of inputs additionally must be ready in the identical method as we ready the coaching information. Then we ask the NLM mannequin to foretell the following character with excessive likelihood; the mannequin offers an integer as an output. We are able to decode this integer by trying on the mapping to see the character to which it maps. The next code snippet generates the characters.

Generate Characters

Now, we are able to ask the mannequin to foretell the following 50 characters by giving the next inputs:

Testing the Char based mostly NLM Mannequin

As we are able to see, the mannequin performs very nicely with the info we gave. That is only a easy instance of constructing a Pure Language Mannequin. We are able to make this mannequin extra difficult by including LSTM layers or absolutely related layers and so on. The entire thought of this text is to assist others to get began with language modeling.


Leave a Reply

Your email address will not be published. Required fields are marked *