Search code examples
pythonxmlrpclibmoses

Moses v1.0 multi language ini file


I was working with mosesserver 0.91 and everything works fine but now there is version 1.0 and nothing is same as before.

Here is my situation:

I want to have multi language translation from arabic to english and from english to arabic. All data and configuration file I have works with 0.91 version of mosesserver. Here is my config file:

-------------------------------------------------
#########################
### MOSES CONFIG FILE ###
#########################

# D - decoding path, R - reordering model, L - language model
[translation-systems]
ar-en D 0 R 0 L 0
en-ar D 1 R 1 L 1

# input factors
[input-factors]
0

# mapping steps
[mapping]
0 T 0
1 T 1

# translation tables: table type (hierarchical(0), textual (0), binary (1)), source-factors, target-factors, number of scores, file 
# OLD FORMAT is still handled for back-compatibility
# OLD FORMAT translation tables: source-factors, target-factors, number of scores, file 
# OLD FORMAT a binary table type (1) is assumed 
[ttable-file]
1 0 0 5 /mnt/models/ar-en/phrase-table/phrase-table
1 0 0 5 /mnt/models/en-ar/phrase-table/phrase-table

# no generation models, no generation-file section

# language models: type(srilm/irstlm), factors, order, file
[lmodel-file]
1 0 5 /mnt/models/ar-en/language-model/en.qblm.mm
1 0 5 /mnt/models/en-ar/language-model/ar.lm.d1.blm.mm


# limit on how many phrase translations e for each phrase f are loaded
# 0 = all elements loaded
[ttable-limit]
20

# distortion (reordering) files
[distortion-file]
0-0 wbe-msd-bidirectional-fe-allff 6 /mnt/models/ar-en/reordering-table/reordering-table.wbe-msd-bidirectional-fe.gz
0-0 wbe-msd-bidirectional-fe-allff 6 /mnt/models/en-ar/reordering-model/reordering-table.wbe-msd-bidirectional-fe.gz

# distortion (reordering) weight
[weight-d]
0.3
0.3

# lexicalised distortion weights
[weight-lr]
0.3
0.3
0.3
0.3
0.3
0.3
0.3
0.3
0.3
0.3
0.3
0.3

# language model weights
[weight-l]
0.5000
0.5000

# translation model weights
[weight-t]
0.2
0.2
0.2
0.2
0.2
0.2
0.2
0.2
0.2
0.2

# no generation models, no weight-generation section

# word penalty
[weight-w]
-1
-1

[distortion-limit]
12
---------------------------------------------------------

So please can someone help me and rewrite this config file so it can work in version 1.0. And i need some python sample code of translation. I am using xmlrpc in python and earler I sent http request with:

import xmlrpclib

client = xmlrpclib.ServerProxy('http://localhost:8080')
client.translate({'text': 'some text', 'system': 'en-ar'})

but now seems there is no more 'system' parameter and moses use always default settings.


Solution

  • I fix it. This is new ini file:

    [input-factors]
     0
    
     # mapping steps
     [mapping]
     0 T 0
     1 T 1
    
     [distortion-limit]
     12
    
     # feature functions
     [feature]
     Distortion
     UnknownWordPenalty
     WordPenalty
     PhraseDictionaryBinary name=TranslationModel0 num-features=5 path=/mnt/models/ar-en/phrase-table/phrase-table input-factor=0 output-factor=0 table-limit=20
     LexicalReordering num-features=6 name=LexicalReordering0 type=wbe-msd-bidirectional-fe-allff input-factor=0 output-factor=0 path=/mnt/models/ar-en/reordering-table/reordering-table.wbe-msd-bidirectional-fe.gz 
     IRSTLM name=LM0 order=5 factor=0 path=/mnt/models/ar-en/language-model/en.qblm.mm
     PhraseDictionaryBinary name=TranslationModel1 num-features=5 path=/mnt/models/en-ar/phrase-table/phrase-table input-factor=0 output-factor=0 table-limit=20
     LexicalReordering num-features=6 name=LexicalReordering1 type=wbe-msd-bidirectional-fe-allff input-factor=0 output-factor=0 path=/mnt/models/en-ar/reordering-model/reordering-table.wbe-msd-bidirectional-fe.gz 
     IRSTLM name=LM1 order=5 factor=0 path=/mnt/models/en-ar/language-model/ar.lm.d1.blm.mm
    
     # core weights - not used
     [weight]
     Distortion0= 0
     WordPenalty0= 0
     TranslationModel0= 0 0 0 0 0
     LexicalReordering0= 0 0 0 0 0 0
     LM0= 0
     TranslationModel1= 0 0 0 0 0
     LexicalReordering1= 0 0 0 0 0 0
     LM1= 0
    
     [alternate-weight-setting]
     id=ar-en ignore-ff=LM1,LexicalReordering1 ignore-decoding-path=1
     Distortion0= 0.3
     WordPenalty0= -1
     TranslationModel0= 0.2 0.2 0.2 0.2 0.2
     LexicalReordering0= 0.3 0.3 0.3 0.3 0.3 0.3
     LM0= 0.5
     id=en-ar ignore-ff=LM0,LexicalReordering0 ignore-decoding-path=0
     Distortion0= 0.3
     WordPenalty0= -1
     TranslationModel1= 0.2 0.2 0.2 0.2 0.2
     LexicalReordering1= 0.3 0.3 0.3 0.3 0.3 0.3
     LM1= 0.5
    

    Sample code for client is:

    import xmlrpclib
    
    client = xmlrpclib.ServerProxy('http://localhost:8080')
    client.translate({'text': '<seg weight-setting="%s">%s</seg>' % ('en-ar', some_text)})
    

    where "en-ar" is translation system which, in my case, translate from english to arabic (also i have other translation system "ar-en" (from arabic to english) as you can see from ini file).