Using GIZA++ for aligning words on Ubuntu

-Please scroll down for English-

Nếu đã quen sử dụng thì bạn nên chuyển sang MGIZA để chạy nhanh hơn.

Bài viết này chủ yếu dựa theo hướng dẫn trên blog của anh Lương Việt Thắng.

GIZA++ là công cụ phổ biến phục vụ gióng từ cho ngữ liệu song ngữ, tiền xử lý cho Dịch thống kê (Statistical Machine Translation). Các bạn có thể dễ dàng tìm các hướng dẫn trên mạng, tuy nhiên đa phần hơi rối ở bước cài đặt củng như sử dụng, Do đó bằng cách tiếp cận sử dụng file .sh, mình muốn đạt được 2 mục tiêu: 

  • Thiết lập và cài đặt GIZA++ dễ dàng.
  • Sử dụng GIZA++ linh hoạt mà không tốn thời gian cho việc thiết lập tham số dòng lệnh

1) CÀI ĐẶT GIZA++

a) Các phần mềm cần cài đặt trước:

  • GNU GCC, GNU G++ : Để biên dịch mã nguồn C/C++
  • Git : Để clone mã nguồn từ trang Github.
  • GNU Make: Để biên dịch chương trình

Có thể kiểm tra xem đã cái chưa bằng cách gõ dòng sau vào terminal: <chương trình> –version. Ví dụ:

$ gcc --version

Nếu chưa có hoặc muốn cập nhật, google “Install GNU GCC and GNU G++ on Ubuntu”

b) Cài đặt:

Bật Terminal (Ctrl+Alt+T), gõ các dòng bên dưới vào.

$ git clone https://github.com/lngvietthang/giza-pp.git
$ cd giza-pp
$ make

Mình đã test và trang chính của giza cũng đã chạy ngon lành, bạn có thể sử dụng link sau thay thế.

Mục tiêu của chúng là tải mã nguồn Giza++ từ trang github, di chuyển vào thư mục giza-pp và tiến hành biên dịch. Để kiểm tra đã thành công hay chưa, vào đường dẫn /home/username/giza-pp. Trong thư mục con GIZA++-v2 có các file thực thi: GIZA++, plain2snt.out, snt2cooc.outsnt2plain.out. Tương tự, trong thư mục con mkcls-v2 có file thực thi mkcls.

2) CHẠY GIZA

a) Chuẩn bị:

– 2 file chứa các cặp câu song ngữ đã đựợc tiền xử lý. Ở đây mình có dữ liệu song ngữ Anh-Việt gồm 90.000 câu. Các câu trong file phải ngăn cách nhau bằng dấu xuống dòng và số luợng câu 2 bên phải bằng nhau. Format mẫu:

Tiếng Anh:

1 December has been nominated as the day of the election .
1,000, 100 and 10 are the antilogarithms of 3, 2 and 1.
10 Downing Street is the British Prime Minister ‘ s official residence .

Tiếng Việt:

Ngày 1 tháng chạp dương lịch đã được chính thức chọn là ngày bầu cử .
1.000, 100 và 10 là những số đối loga của 3, 2 và 1.
Số 10 đường Downing là dinh chính thức của Ngài Thủ Tướng Anh .

– GIZA++.
b) Chạy:

NOTE: Khi đã nắm cách chạy bằng tay này, bạn có thể vào post này để xem cách chạy nhanh hơn.

Các bạn làm trình tự theo hướng dẫn bên dưới, nếu gặp khó khăn nào có thể tham khảo phần lưu ý ở cuối.

  • Tạo thư mục trên Desktop, chứa 2 file song ngữ. Đổi tên chúng thành SourceTarget(không có extension, tên tương ứng với việc chọn ngôn ngữ nào là nguồn và đích. Sẽ có sự khác biệt trong kết quả nên bạn cần chạy thử cả hai để thấy).
  • Tạo một file run_giza.sh và lưu taị /home/username (cùng cấp với folder cài GIZA++). Copy các dòng bên dưới vào file, bấm Ctrl+H, thay thế tất cả các từ sang đường dẫn tới thư mục chứa 2 file song ngữ.
  • Các đường dẫn cần lưu ý là không nên có khoảng trắng trong tên thư mục hoặc tên file.
cd giza-pp/GIZA++-v2
./plain2snt.out '/Source' '/Target'
cd ../mkcls-v2
./mkcls -p'/Source' -V '/Source.vcb.classes'
./mkcls -p'/Target' -V '/Target.vcb.classes'
cd ../GIZA++-v2
./snt2cooc.out '/Source.vcb' '/Target.vcb' '/Source_Target.snt' &gt; '/Source_Target.cooc'
./GIZA++ -S '/Source.vcb' -T '/Target.vcb' -C '/Source_Target.snt' -CoocurrenceFile '/Source_Target.cooc' -o Result -outputpath ''
  • Click phải vào file run_giza.sh, chọn Properties, vào tab Permissions, click chọn Allow executing file as program.
  • Mở Terminal, gõ:
 $ ./run_giza.sh
  • Sau khi chạy xong sẽ tạo ra rất nhiều file trong folder, bạn chỉ cần quan tâm đến file Result.A3.final là được. Kết qủa có dạng như sau:

# Sentence pair (1) source length 17 target length 12 alignment score : 2.42851e-27
+ ‘ Nếu điều_đó giữ_được hạnh_phúc gia_đình thì vẫn_còn hời đấy !
NULL ({ 8 11 }) + ({ 1 }) ‘ ({ 2 }) It ({ }) ’ ({ }) ll ({ }) be ({ }) cheap ({ 9 }) at ({ }) the ({ }) price ({ 10 }) if ({ 3 }) it ({ 4 }) keeps ({ 5 }) the ({ }) family ({ 7 }) happy ({ 6 }) ! ({ 12 })

Như vậy là bạn đã chạy thành công rồi đó! Có thể làm tương tự trên Window với Cyqwin hoặc VMWare. Cám ơn anh Thắng và askubuntu.com đã tài trợ cho chương trình này :))

LƯU Ý: TRONG TRƯỜNG HỢP XUẤT HIỆN LỖI, BẠN CÓ THỂ THAM KHẢO PHẦN BÊN DƯỚI HOẶC GỬI EMAIL CHO MÌNH.

  • Bản GIZA++ là lấy từ git.hub của anh Thắng, do đó không phải là bản mới nhất. Khi cài bằng bản khác, lưu ý chỉnh sửa trước khi cài theo hướng dẫn của các trang web khác. Folder cũng có thể khác, chẳng hạn thay vì mkcls-v2 thì là mkcls.
  • File mình tạo trên máy để bạn tiện so sánh, đuờng dẫn thay thế là /home/vinh/Desktop/Corpus
cd giza-pp/GIZA++-v2
./plain2snt.out '/home/vinh/Desktop/Corpus/Source' '/home/vinh/Desktop/Corpus/Target'
cd ../mkcls-v2
./mkcls -p'/home/vinh/Desktop/Corpus/Source' -V'/home/vinh/Desktop/Corpus/Source.vcb.classes'
./mkcls -p'/home/vinh/Desktop/Corpus/Target' -V'/home/vinh/Desktop/Corpus/Target.vcb.classes'
cd ../GIZA++-v2
./snt2cooc.out '/home/vinh/Desktop/Corpus/Source.vcb' '/home/vinh/Desktop/Corpus/Target.vcb' '/home/vinh/Desktop/Corpus/Source_Target.snt' > '/home/vinh/Desktop/Corpus/Source_Target.cooc'
./GIZA++ -S '/home/vinh/Desktop/Corpus/Source.vcb' -T '/home/vinh/Desktop/Corpus/Target.vcb' -C '/home/vinh/Desktop/Corpus/Source_Target.snt' -CoocurrenceFile '/home/vinh/Desktop/Corpus/Source_Target.cooc' -o Result -outputpath '/home/vinh/Desktop/Corpus'
  • Muốn tìm link đến folder chứa 2 file song ngữ, bạn mở thư mục đó lên. Kéo 1 file bất kì và thả trên Terminal. Xóa đi phần tên file và 2 dấu nháy sẽ ra đuờng dẫn đến folder.
  • Đường dẫn đến folder nếu có folder nào trong đó tên có khoảng trắng có thể gây lỗi, chẳng hạn /home/ho vinh/Desktop/Corpus.
  • Nếu máy xài 2 hệ điều hành song song (dual boot), không được lưu các file liên quan trong phân vùng chia sẻ. Tốt nhất là để hết ngoài Desktop cho an tòan.
  • Thời gian chạy phụ thuộc vào độ lớn của dữ liệu, nhưng không tuyến tính. Bình tĩnh nhé.

If getting used to with GIZA, you should change to MGIZA for faster alignment.

This post is based on tutorial from Luong Viet Thang ‘s blog.

GIZA++ is popular toolkit for aligning bilingual corpus, preprocessing step for Statistical Machine Translation. You can easily look for online tutorials, however most of them are quite confusing in setup and using. For that reason,with creating .sh file approach, my goals in this post are:

  • Installing GIZA++ easily.
  • Flexible in using GIZA++ without wasting time in solving complex paremeter in command lines.

1) INSTALLING GIZA++

a) Pre-installed programs:

  • GNU GCC, GNU G++ : Compile C/C++ source code.
  • Git : clone source code from Github.
  • GNU Make: compile program.

You can check whether they are installed by typing this line in terminal: –version.

 $ gcc --version

If you have not installed or want to update, google “Install GNU GCC and GNU G++ on Ubuntu”

b) Installation:

Opens Terminal (Ctrl+Alt+T), type below lines.

$ git clone https://github.com/lngvietthang/giza-pp.git
<span class="nb">$ cd </span>giza-pp
$ make

I have tested and giza main downloading page also works perfectly, so you can use this link instead.”

Their purpose is downloading GIZA++ source code from github, move to folder giza-pp and compile the program. In order to check, go to /home/username/giza-pp. In subfolder GIZA++-v2 there are executing files: GIZA++, plain2snt.out, snt2cooc.out and snt2plain.out. Similarly, there is mkcls in mkcls-v2.

2) RUNNING GIZA

a) Preparation:

– 2 files contain processed bilingual corpus. I have 90.000 English-Vietnamese parallel sentences. Between each sentence in file, there must be line break. Sample format:

English:

1 December has been nominated as the day of the election .
1,000, 100 and 10 are the antilogarithms of 3, 2 and 1.
10 Downing Street is the British Prime Minister ‘ s official residence .

Vietnamese:

Ngày 1 tháng chạp dương lịch đã được chính thức chọn là ngày bầu cử .
1.000, 100 và 10 là những số đối loga của 3, 2 và 1.
Số 10 đường Downing là dinh chính thức của Ngài Thủ Tướng Anh .

– GIZA++.
b) Running:

NOTE: When knowing how to use GIZA, you can take a look at this post for faster way.

You should follow below instruction, any difficulty can take a look at Note part.

  • Create folder on Desktop containing 2 bilingual files. Rename into Source and Target(there is no extension, chosing name based on you, which will affect the result. Should run them both for clearer explanation).
  • Create a file named run_giza.sh and saved at /home/username (same level with  giza_pp). Copy below lines into file, press Ctrl+H, replace all words into the directory to folder containing bilingual files.
cd giza-pp/GIZA++-v2
./plain2snt.out '/Source' '/Target'
cd ../mkcls-v2
./mkcls -p'/Source' -V '/Source.vcb.classes'
./mkcls -p'/Target' -V '/Target.vcb.classes'
cd ../GIZA++-v2
./snt2cooc.out '/Source.vcb' '/Target.vcb' '/Source_Target.snt' > '/Source_Target.cooc'
./GIZA++ -S '/Source.vcb' -T '/Target.vcb' -C '/Source_Target.snt' -CoocurrenceFile '/Source_Target.cooc' -o Result -outputpath ''
  • Right click on run_giza.sh, choose Properties, tab Permissions, tick Allow executing file as program.
  • Open Terminal, type:
$ ./run_giza.sh
  • After it’s done, there will be many newly created files, you only need to care about  Result.A3.final. Result has following format:

# Sentence pair (1) source length 17 target length 12 alignment score : 2.42851e-27
+ ‘ Nếu điều_đó giữ_được hạnh_phúc gia_đình thì vẫn_còn hời đấy !
NULL ({ 8 11 }) + ({ 1 }) ‘ ({ 2 }) It ({ }) ’ ({ }) ll ({ }) be ({ }) cheap ({ 9 }) at ({ }) the ({ }) price ({ 10 }) if ({ 3 }) it ({ 4 }) keeps ({ 5 }) the ({ }) family ({ 7 }) happy ({ 6 }) ! ({ 12 })

Congratulation, you have success in installing and using GIZA++. You can do similar thing in Window with Cyqwin or VMWare. Thank you brother Thắng and askubuntu.com for your sponsorship :))

NOTE: IN CASE THERE ARE BUGS, YOU CAN CHECK BELOW OR SEND ME AN EMAIL.

  • The GIZA++ is downloaded from git.hub of brother Thắng, so it may not be latest one. When using different versions, please check the tutorial for minor fixing before you can install the tool. Folder name may be vary like mkcls-v2 instead of mkcls.
  • This is my file for you to compare the .sh file, alternate string for replacing is /home/vinh/Desktop/Corpus
  • Link should not contain folder or file name with space in its name.
cd giza-pp/GIZA++-v2
./plain2snt.out '/home/vinh/Desktop/Corpus/Source' '/home/vinh/Desktop/Corpus/Target'
cd ../mkcls-v2
./mkcls -p'/home/vinh/Desktop/Corpus/Source' -V'/home/vinh/Desktop/Corpus/Source.vcb.classes'
./mkcls -p'/home/vinh/Desktop/Corpus/Target' -V'/home/vinh/Desktop/Corpus/Target.vcb.classes'
cd ../GIZA++-v2
./snt2cooc.out '/home/vinh/Desktop/Corpus/Source.vcb' '/home/vinh/Desktop/Corpus/Target.vcb' '/home/vinh/Desktop/Corpus/Source_Target.snt' > '/home/vinh/Desktop/Corpus/Source_Target.cooc'
./GIZA++ -S '/home/vinh/Desktop/Corpus/Source.vcb' -T '/home/vinh/Desktop/Corpus/Target.vcb' -C '/home/vinh/Desktop/Corpus/Source_Target.snt' -CoocurrenceFile '/home/vinh/Desktop/Corpus/Source_Target.cooc' -o Result -outputpath '/home/vinh/Desktop/Corpus'
  • If you want to look for the directory to a folder, open it and move any files in it and drop to Terminal. Delete file name and double quotes.
  • If there is any folder in directory contain in its name a space, this may lead to an error. For example: /home/ho vinh/Desktop/Corpus.
  • If you are using dual boot OS, do not save any relevant files in shared partition. The safest way is saved them all in Desktop.
  • The running time is depend on the size of data (not linearly). Be patient, my friend.
Advertisements

17 comments

  1. VishalM · February 20, 2016

    Wow!!! Thank you so much hoxuanvinh.
    Its the only blog which gives correct and specific explanation about installing and running giza
    All provided links are working fine.
    I am trying to install and run Giza in Ubuntu for 3 days. And just couldn’t get the right stuff to work it out.
    With this tutorial I am almost there..
    But getting error at last..
    WARNING: ‘/home/swapnilezen/Desktop/Output/Source’ cannot be read. and further errors somewhat the same.
    I guess this is because I dont have processed bilingual corpus.
    I copied the sample lines in source and target documents.
    Please suggest something.
    Thanks for an awesome blog.

    Like

    • hoxuanvinh · February 21, 2016

      Hi VishalM, it’s my pleasure to read your comment.
      I have checked and asked some of my friends about this situation, here are a few of reasons:
      1) The GIZA++ still runs, no matter your corpus was processed or not, as long as it is text.
      2) Please check if the directory is valid or not (which I mean whether it exist or not)
      3) Maybe your folder was not allowed to read. Please right click on it and check permission, change to read.
      4) When you download GIZA, the file will be downloaded to where your terminal is located. When you have just opened Terminal, it will be on Home directory. However, if you changed to other directory before that, this may lead to an unexpected error like you can not find where is GIZA.
      5) The folder containing your corpus, you should move it to different places and check it again.

      I hope this help :))

      Like

  2. VishalM · February 24, 2016

    Hi Sir, Thank you so much for taking time and replying. It worked for me.
    I have finally done with installing and running GIZA. Its working fine and giving the output as shown in your blog.
    The reason of not working this before is,
    1) There is problem of permissions on document. Making the document available for reading and writing in permissions tag and also checking the folder permissions solves the problem
    2) The commands written in run_giza.sh file : I am newbie and I was executing the commands with the quotes(‘ ‘). I removed the quotes and then tried again.

    Now as I am having the output for the first sentence as,
    # Sentence pair (1) source length 12 target length 16 alignment score : 1.39871e-09
    Ngày 1 tháng chạp dương lịch đã được chính thức chọn là ngày bầu cử .
    NULL ({ 9 10 12 }) 1 ({ 3 }) December ({ 4 7 }) has ({ 5 6 14 }) been ({ 2 }) nominated ({ }) as ({ 11 13 }) the ({ }) day ({ }) of ({ 8 15 }) the ({ }) election ({ 16 }) . ({ 1 })
    I have few questions
    1. Can you please explain the output.. What the numbers in curly braces and outside braces denotes and the how one can relate them with following words.
    2. I am working on Opinion mining, The requirement is to find the alignments between opinion target (noun or noun phrases in the word) and opinion words (adverb or adjective i.e. the words that modifies the target)
    The language is English only. Requirement is monolingual.
    How GIZA can be helpful here.
    Thanks once again……!!

    Like

    • hoxuanvinh · February 26, 2016

      Hi VishalM,

      I have just written a post to help you interprete the result(https://hoxuanvinh.wordpress.com/2016/02/26/reading-a3-final-file-after-running-giza/)
      In my experience, GIZA tool serve for SMT(Statistical Machine Translation) purpose as a preprocessing step. So I think this is not a good approach. These are some of my ideas think might work:
      You can use Penn tree bank to build a tree of Syntax of a sentence. Since then, you can found relation in grammar between words, and that could be a nice clue for you to develop some idea from that.
      I am also a beginner, thank you for your interest in my post and good luck with your project :))

      Like

  3. Pingback: Reading A3.final file after running GIZA++ | hoxuanvinh
  4. VishalM · February 29, 2016

    Hi hoxuanvinh,
    After reading your new post which is written with details to understand the output easily , I’ve got an idea about what I need to do further and also thanks for your suggestion which will definitely help me with my project proceedings.
    I am so thankful for the time you took to help with my project and will be always grateful for your help.
    Keep posting such great post..
    Thank you and warm regards from me :))

    Like

  5. Anonymous · March 5, 2016

    em muốn hỏi anh: khi chạy xong GIZA++ mà muốn tìm file Pharse Table thì phải làm sao ạ???dữ liệu phục vụ đầu vào cho máy dịch.

    Like

    • hoxuanvinh · March 6, 2016

      Chào bạn, theo như hướng dẫn từ trang http://www.statmt.org/moses, file phrase table sẽ có định dạng:
      das ist ||| it is ||| 0.2 ||| |||
      das ist ||| this is ||| 0.8 ||| |||
      es ist ||| it is ||| 0.8 ||| |||
      es ist ||| this is ||| 0.2 ||| |||

      Tuy nhiên khi mở thư mục chứa file output thì mình không thấy file nào có định dạng như vậy. Bạn có thể vào file “.Decoder.config” để xem định nghĩa của các file. Như vậy file “.t3.final” khả năng cao là file phrase table.
      Có dòng Note sau trong file config đáng lưu ý:
      # 1. TTable and InversTTable are expected to use word IDs not strings (Giza produces both, whereby the *.actual.* files use strings and are THE WRONG CHOICE.

      Để tra index của từ, bạn vào file “.vcb” để tra. Mình có kiểm thử thì các cặp được gióng có vẻ không hợp lý lắm, nhưng mình nghi rằng chỉ là do ngữ liệu chưa sạch.

      Câu trả lời của mình hoàn toàn do phỏng đoán (do mình chưa dùng cho dịch máy trước đây). Nếu bạn phát hiện sai sót và có hướng giải quyết thì vui lòng cho mình biết với nhé :))

      Like

    • hoxuanvinh · August 9, 2016

      Chào bạn, sau khi cài đặt xong MOSES thì mình mới biết Phrase table là output sau khi chạy nó, do vậy bạn phải chạy cả MOSES thì mới được nhé :))

      Like

  6. Pingback: RUN GIZA FASTER WITH .SH PARAMETER | hoxuanvinh
  7. Pingback: Install MOSES for amateur in Ubuntu | hoxuanvinh
  8. Anonymous · May 10, 2016

    WARNING: ‘/home/white/giza-pp/giza/Source’ cannot be read.
    WARNING: ‘/home/white/giza-pp/giza/Target’ cannot be read.
    AUSGABE auf cout
    ERROR: can not open file /home/white/giza-pp/giza/Source’ -V ‘/home/white/giza-pp/giza/Source.vcb.classes’
    ./mkcls -p/home/white/giza-pp/giza/Target’.
    Error: Could not read the file ‘/home/white/giza-pp/giza/Source’ -V ‘/home/white/giza-pp/giza/Source.vcb.classes’
    ./mkcls -p/home/white/giza-pp/giza/Target’’.
    mkcls – a program for making word classes: Usage:
    mkcls [-nnum] [-ptrain] [-Vfile] opt
    -V output classes (Default: no file)
    -n number of optimization runs (Default: 1); larger number => better results
    -p filename of training corpus (Default: ‘train’)
    Example:
    mkcls -c80 -n10 -pin -Vout opt

    Anh ơi sao của em nó không ghi ra file được !!

    Like

    • hoxuanvinh · May 10, 2016

      Bạn xem thử phần Lưu ý của mình nhé.
      Chạy lần lượt từng dòng lệnh một để xem lỗi ở bước nào.
      Theo như dòng lỗi ở trên, mình đoán file thực thi của GIZA ( bao gồm plain2snt.out, mkcls, snt2cooc.out, GIZA) hoặc dữ liệu (Source, Target) đang bị khóa (không cho read, write). Từ đó các file như Source.vcb.classes không được tạo ra, dẫn đến các bước sau lỗi.
      Bạn thử 2 cách: copy toàn bộ ra thư mục khác hoặc mở Properties, chỉnh lại tùy chọn Read, Write của các file.
      Trường hợp vẫn không khắc phục được nếu file thực thi vẫn còn khóa, bạn nên compile lại GIZA lần nữa xem sao.
      Chúc bạn may mắn.

      Like

      • Raihan Ahmed · August 9, 2016

        Sir, can you please rewrite the above comment in English. Because we are having the same problem and don’t know the solution yet.
        Thanks

        Like

      • hoxuanvinh · August 9, 2016

        Hi Raihan, here is what I had said:
        Firstly, you should check my NOTE section.
        If it didn’t work, you should instead typing commands one by one, so it would be easier to figure out the error.
        Based on above error message, I guess GIZA execute file (including plain2snt.out, mkcls, snt2cooc.out, GIZA) or corpus (Source, Target) is locked by Operating System (forbid you to read or write). Since then, files like ‘Source.vcb.classes’ could not be created because can not read or run mentioned files.

        I suggest 2 solutions:
        – Copy all of them to a new folder (if you are using dual boost operating system, you should copy to the disk that only Ubuntu can access). OR right click on files and folder to open Properties, change option to Read, Write and Allow execute.

        The last thing you could do is recompile GIZA once again or try it on different computers.

        I also suggest MGIZA for faster run:
        https://hoxuanvinh.wordpress.com/2016/04/29/install-mgiza-for-ubuntu/

        Like

      • Raihan Ahmed · August 10, 2016

        Thanks a lot agin, sir.

        Like

  9. Pingback: Using GIZA++ for aligning words on Ubuntu — hoxuanvinh | vinhdu

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s