Could work like this:
DELETE FROM tbl
WHERE EXISTS (
SELECT *
FROM tbl t
WHERE (t.lang_original, t.lang_target, t.word)
= (tbl.lang_original, tbl.lang_target, tbl.word)
AND tbl.id_word > t.id_word
)
If @Jason is right, and MySQL does not allow to reference the delete table, here is another form that works independently:
DELETE FROM tbl
USING (
SELECT min(id_word) AS min_id, lang_original, lang_target, word
FROM tbl t
GROUP BY lang_original, lang_target, word
HAVING count(*) > 1
) x
WHERE (tbl.lang_original, tbl.lang_target, tbl.word)
= ( x.lang_original, x.lang_target, x.word)
AND tbl.id_word > x.min_id
Both variants leave the duplicate with the smallest id alive and kill the rest.
If you want to save all your translations to the word with the smallest id in a group of dupes first:
UPDATE tbl SET translation = all_trans
FROM (
SELECT min(id_word) AS min_id, group_concat(translation) AS all_trans
FROM tbl
GROUP BY lang_original, lang_target, word
HAVING count(*) > 1
) t
WHERE tbl.id_word = t.min_id