Как настроить модель машинного перевода с огромной языковой моделью?

Moses программное обеспечение для построения моделей машинного перевода А также KenLM это программное обеспечение де-факто языковой модели, которое использует Моисей.

У меня есть текстовый файл с 16 ГБ текста, и я использую его для построения языковой модели как таковой:

bin/lmplz -o 5 <text > text.arpa

Полученный файл (text.arpa) составляет 38 ГБ. Затем я преобразовал языковую модель в такую ​​форму:

bin/build_binary text.arpa text.binary

И бинаризованная языковая модель (text.binary) растет до 71гб.

В moses после обучения модели перевода, вы должны настроить вес модели с помощью MERT алгоритм. И это можно просто сделать с помощью https://github.com/moses-smt/mosesdecoder/blob/master/scripts/training/mert-moses.pl.

MERT отлично работает с маленькой языковой моделью, но с большой языковой моделью, она может занять несколько дней.

Я сделал поиск в Google и нашел фильтр KenLM, который обещает отфильтровать языковую модель до меньшего размера: https://kheafield.com/code/kenlm/filter/

Но я не знаю, как заставить это работать. Команда help дает:

$ ~/moses/bin/filter
Usage: /home/alvas/moses/bin/filter mode [context] [phrase] [raw|arpa] [threads:m] [batch_size:m] (vocab|model):input_file output_file

copy mode just copies, but makes the format nicer for e.g. irstlm's broken
    parser.
single mode treats the entire input as a single sentence.
multiple mode filters to multiple sentences in parallel.  Each sentence is on
    a separate line.  A separate file is created for each sentence by appending
    the 0-indexed line number to the output file name.
union mode produces one filtered model that is the union of models created by
    multiple mode.

context means only the context (all but last word) has to pass the filter, but
    the entire n-gram is output.

phrase means that the vocabulary is actually tab-delimited phrases and that the
    phrases can generate the n-gram when assembled in arbitrary order and
    clipped.  Currently works with multiple or union mode.

The file format is set by [raw|arpa] with default arpa:
raw means space-separated tokens, optionally followed by a tab and arbitrary
    text.  This is useful for ngram count files.
arpa means the ARPA file format for n-gram language models.

threads:m sets m threads (default: conccurrency detected by boost)
batch_size:m sets the batch size for threading.  Expect memory usage from this
    of 2*threads*batch_size n-grams.

There are two inputs: vocabulary and model.  Either may be given as a file
    while the other is on stdin.  Specify the type given as a file using
    vocab: or model: before the file name.  

For ARPA format, the output must be seekable.  For raw format, it can be a
    stream i.e. /dev/stdout

Но когда я попробовал следующее, оно застревает и ничего не делает:

$ ~/moses/bin/filter union lm.en.binary lm.filter.binary
Assuming that lm.en.binary is a model file
Reading lm.en.binary
----5---10---15---20---25---30---35---40---45---50---55---60---65---70---75---80---85---90---95--100

Что делать с языковой моделью после бинаризации? Есть ли другие шаги для манипулирования большими языковыми моделями, чтобы уменьшить нагрузку на компьютер при настройке?

Как обычно настроить большой файл LM?

Как использовать фильтр KenLM?

(подробности на https://www.mail-archive.com/moses-support@mit.edu/msg12089.html)

1 ответ

Отвечая как использовать filter команда KenLM

cat small_vocabulary_one_word_per_line.txt \
  | filter single \
         "model:LM_large_vocab.arpa" \
          output_LM_small_vocab.

Обратите внимание, что single можно заменить на union или же copy, Читайте больше в справке, которая печатает, если вы запустите filter бинарный без аргументов.

Другие вопросы по тегам