You are browsing as a guest. Sign up (or log in) to start making projects!

Muhammad_Ahmad

@Muhammad_Ahmad

Joined June 3rd, 2026

  • 9Devlogs
  • 1Projects
  • 1Ships
  • 15Votes
I do maths and AI stuff...
Ship

I made a N Gram Model in C++, which is a fundamental and early NLP model used for text generation and text suggestion in search engines. The hardest part was understanding the theoretical concepts and applying them in code. The project files are released on github and also published as a release for easy download. The readme states clear simple instruction to run the model (it's very easy, trust, just one command). You can interact with it on the CLI (for now i guess).

  • 8 devlogs
  • 12h
  • 10.44x multiplier
  • 124 Stardust
Try project → See source code →
Open comments for this post

1h 40m 59s logged

Final touches

  • Added a bigger corpus i.e. wikitext2 by salesforce AI Research.
  • Credited corpus and linked associated license.
  • Wrote a python script to read the parquet format corpus and turn it into .txt format.
  • Some minor changes in code.
0
0
2
Open comments for this post

1h 18m 48s logged

Implemented Model Evaluation with Perplexity

Perplexity (a metric borrowed from information theory) acts a summarized evaluation metric for your model, that intuitively evaluates how much your model branches off in generating texts.

Mathematically, it’s a geometric mean of the inverse probabilities as calculated by the model, normalized by sequence length.

For seen texts, my model achieved a perplexity around 20-30, and for unseen texts it varied alot due to random picking of tokens in that case.

0
0
1
Open comments for this post

1h 3m 11s logged

Implemented Laplace Smoothing in the model

Smoothing refers to generalization of n gram model to texts they haven’t seen before. Laplace smoothing (also known as add-one smoothing) is the simplest type of smoothing that avoids the probability estimates to reach zero when handling unseen token or sequences.

It is quite easy to implement this in code, just add one in the numerator of probability formula and add vocabulary size in the denominator.

0
0
2
Open comments for this post

1h 1m 47s logged

  • Implemented probability estimates of each word using the formula:
    Counts of gram sequence in corpus/ Counts of context window sequence in corpus

  • Improved the I/O logic a bit aswell, the debug statements are there but commented.

0
0
1
Open comments for this post

1h 51m 53s logged

  • Made module for estimating probabilities of words given a context window using MLE (Maximum Likelihood Estimation).
  • Fixed the mapping of tokens back to strings, by using temporary dynamically allocated array and copying it into vector.
0
0
1
Open comments for this post

2h 5m 5s logged

Made NGram class that can count occurences of the specified n grams in the corpus. Also, the tokenizer now has another module to map unique tokens to ints for memory efficiency. Now, I shall move onto estimating probabilities of each token given a context window.

0
0
1
Open comments for this post

1h 16m 50s logged

Overview: N Gram Model is a fundamental model in Natural Language Processing used to predict next word in a given sequence. It relies on markov’s assumption that the probability estimate of a word relies on it’s immediate preceding words rather than the whole text/sentence.

What I have made uptill now: I have made the first module required for this project which is a Tokenizer, a tokenizer takes a text corpus and separately stores each word or token in a lookup table.

Future Direction: The core mechanism of N gram models, which is probability estimates for each n word sequence using frequency found in the corpus. Further, I would want to add smoothing to these probability estimates and add model evaluating metrics like perplexity.

0
0
1

Followers

Loading…