awslabs / sockeye

Sequence-to-sequence framework with a focus on Neural Machine Translation based on PyTorch
https://awslabs.github.io/sockeye/
Apache License 2.0
1.21k stars 323 forks source link

Source-Factoring Translation not as expected #1019

Closed RamoramaInteractive closed 2 years ago

RamoramaInteractive commented 2 years ago

For my translation I created an own test data set, which includes German target words

... v@@ as@@ cular disorders Er@@ krank@@ ungen : v@@ as@@ cular disorders Gef@@ ä@@ ßer@@ krank@@ ungen : v@@ as@@ cular Gef@@ ä@@ ß disorders : whether or not to anim@@ ate anim@@ iert card moves whether or not to show the tool@@ bar Werk@@ zeu@@ glei@@ ste without a King König , you can & apo@@ s ; t have regi@@ cide Herr@@ sch@@ ermor@@ d . avoid them . written by David David Ro@@ gers Ro@@ gers written by James James Le@@ wis@@ Mo@@ ss Le@@ wis@@ Mo@@ ss written by Matthe@@ w Matthe@@ w Wil@@ co@@ x Wil@@ co@@ x written by W. W. Bor@@ gert Bor@@ gert written by W. Jack Bor@@ gert Le@@ wis@@ Mo@@ ss written by W. James Bor@@ gert Wil@@ co@@ x you are searching for a four Vier . you are searching for a six Se@@ chs . you are searching for nach a three . you are searching suchen for an ace . you are searching for an eight Acht . ...

and it's corresponding token parallel file (German words replaced with 2, source terms 1 and every default word is replaced with 0).

However, my output is not as expected:

... v@@ as@@ kul@@ äre Störungen : v@@ as@@ kul@@ äre Störungen . v@@ as@@ kul@@ äre Störungen : , ob oder nicht zu anim@@ ieren ist . ob Sie die Tool@@ bar zeigen oder nicht . Ohne König , können Sie & apo@@ s ; t haben sie zugelassen . geschrieben von David Ro@@ gers geschrieben von James Le@@ wis@@ Mo@@ ss . geschrieben von Matthe@@ w Wil@@ co@@ x . geschrieben von W. Bor@@ gert geschrieben von W. Bor@@ gert geschrieben von W. von Bor@@ gert Sie suchen eine vier . Sie suchen eine sechs von ihnen . Sie suchen eine drei . Sie suchen einen A@@ ss . Sie suchen eine 8 @-@ J@@ ähri@@ ge . ...

The source terms were not replaced by the target terms. I have two assumptions: Either I have annotated far too less terms in the training set or 50 epochs of training time is too little. What do you think could be the source of the erroneous translation?

tdomhan commented 2 years ago

What was your expected output? It's difficult to say in general without access to the training data/setup. From a Sockeye perspective it's just tokens in and tokens out and it will probably depend on the training data and whether there's a training/test mismatch.

RamoramaInteractive commented 2 years ago

I want a target output like this (BPE removed):

82 Gefäßerkrankungen 82 Gefäßerkrankungen 82 Gefäßerkrankungen legt fest, ob das Bewegen von Karten animiert wird legt fest, ob die Werkzeugleiste angezeigt wird ohne einen König gibt es keinen Herrschermord. vermeiden Sie sie. geschrieben von David Rogers geschrieben von James LewisMoss geschrieben von Matthew Wilcox geschrieben von W. Borgert geschrieben von Jack LewisMoss geschrieben von James Wilcox Sie suchen nach einer Vier. Sie suchen nach einer Sechs. Sie suchen nach einer Drei. Sie suchen nach einem Ass. Sie suchen nach einer Acht.

I want to replicate the model from Training Neural Machine Translation to Apply Terminology Constraints](https://aclanthology.org/P19-1294/).

I'm training with the WMT17 dataset from FairSeq. I inserted target words after source words in 5% of random lines. After that I created their corresponding source factors file by replacing all source and target terms with the numbers 1 and 2. Default words were replaced with 0. The target terms are words from the IT and Medical Vocabulary.

Do you need further information? How can I check if there's a mismatch in train/test?

RamoramaInteractive commented 2 years ago

Found the problem! I forgot to change the min-epoch to 50 and max-epoch to 100. No wonder my trained model worked so badly.