School of Computing

Information Retrieval

NUS SoC, 2013/2014, Semester II Video Conferencing Room (COM1 02 VCRm) / Fridays 11:00-13:00

Last updated: Thursday, January 23, 2014 11:32:24 PM SGT - Updated for 2014

Homework #1 » Language Detection

In this homework, you will be implementing a language detection module using the ngram knowledge you learned in Week 1. Given a string representing some natural language utterance, your program should be able to predict whether the text is Indonesian, Malaysian or (phonetically transcribed into English) Tamil. So given the following three strings:

Semua manusia dilahirkan bebas dan samarata dari segi kemuliaan dan hak-hak.
Semua orang dilahirkan merdeka dan mempunyai martabat dan hak-hak yang sama.
Maitap piiviyiar cakalarum cutantiramkav piakkiaar

... an ideal program should output/predict the following labels for the strings:

malaysian Semua manusia dilahirkan bebas ...
indonesian Semua orang dilahirkan merdeka ...
tamil Maitap piiviyiar cakalarum cutantiramkav piakkiaar ...

Build and test your language models (LMs)

You should run your program to build and test your LMs in this format:

$ python -b input-file-for-building-LM -t input-file-for-testing-LM -o output-file

where input-file-for-building-LM is a file given to you that contains a list of strings with their labels for you to build your ngram language models, input-file-for-testing-LM is a file containing a list of strings for you to test your language models, and output-file is a file where you store your predictions.

Evaluate your predictions

To evaluate the accuracy of your predictions, you run the evaluation file which is given to you:

$ python file-containing-your-results file-containing-correct-results

where file-containing-your-results is the output-file from the build and test step, and file-containing-correct-results is a file containing the correct string labels.

For example, in the homework package, you are given several files, including a skeleton,, input.train.txt, input.test.txt, and input.correct.txt. To build and test your LMs, run:

$ python -b input.train.txt -t input.test.txt -o input.predict.txt

which will store your predictions in input.predict.txt. To evaluate your predictions, run:

$ python input.predict.txt input.correct.txt

which prints the accuracy of your predictions.

What's expected in

The python program is given to you as a skeleton script. You are required to complete this script by implementing the build_LM() and test_LM() functions.

You need collect the 4-grams from the string where the gram units are characters. For example, for the string Semua manusia dilahirkan bebas ..., the below character 4-grams would be collected (Note that you can choose to pad the beginning and end of the email as shown in slide 13 of lecture 1; it's up to you, but you'll want to document your choice).

[('S', 'e', 'm', 'u'), ('e', 'm', 'u', 'a'), ('m', 'u', 'a', ' '), ('u', 'a', ' ', 'm'), ('a', ' ', 'm', 'a'), (' ', 'm', 'a', 'n'), ('m', 'a', 'n', 'u), ('a', 'n', 'u', 's'), ... ]

For each of the malaysian, indonesian and tamil labels, you then build a language model with add one smoothing, similar to the ones shown in slide 20 of lecture 1, which smooths out all observed ngrams. The differences are that you are required to use probabilities instead of counts and 4-grams instead of unigrams. Your language models for the three labels should look in a way similar to the following table, where rows 3 to 4 are the language models for malaysian, indonesian, and tamil, respectively. Note that each row should sum up to 1, and there are other entries in the table that have been omitted for clarity.

Labels 4-grams
... ('e','m','u','a') ('m','u','a',' ') ('u','a',' ','m') ...






To test a new string, you should multiply the probabilities of the 4-grams for this string, and return the label (i.e., malaysian, indonesian, and tamil) that gives the highest product. Ignore the four-gram if it is not found in the LMs.

Format of the input/output files

Essay questions:

You are also asked to answer the following essay questions. These are to test your understanding of the lecture materials. Note that these are open-ended questions and do not have gold standard answers. A paragraph or two are usually sufficient for each question. You may receive a small amount of extra credit if you can support your answers with experimental results.

  1. In the homework assignment, we are using character-based ngrams, i.e., the gram units are characters. Do you expect token-based ngram models to perform better?
  2. What do you think will happen if we provided more data for each category for you to build the language models? What if we only provided more data for Indonesian?
  3. What do you think will happen if you strip out punctuations and/or numbers? What about converting upper case characters to lower case?
  4. We use 4-gram models in this homework assignment. What do you think will happen if we varied the ngram size, such as using unigrams, bigrams and trigrams?

Submission Formatting

For us to grade this assignment in a timely manner, we need you to adhere strictly to the following submission guidelines. They will help me grade the assignment in an appropriate manner. You will be penalized if you do not follow these instructions. Your matric number in all of the following statements should not have any spaces and any letters should be in CAPITALS. You are to turn in the following files:

These files will need to be suitably zipped in a single file called <matric number>.zip. Please use a zip archive and not tar.gz, bzip, rar or cab files. Make sure when the archive unzips that all of the necessary files are found in a directory called <matric number>. Upload the resulting zip file to the IVLE workbin by the due date: 7 Feb 2014, 11:59:59 pm SGT. There absolutely will be no extensions to the deadline of this assignment. Read the late policy if you're not sure about grade penalties for lateness.

Grading Guidelines

The grading criteria for the assignment is tentatively: