2016-06-23 2 views
0

В рамках более крупного проекта я хочу внедрить машинный переводчик с языка A на язык B. Поскольку не доступные инструменты, которые автоматически делают машинный перевод над этим набором языков, и доступный корпус языком B достаточно мал, Я пытаюсь сделать следующее:Лучший алгоритм парсера для передачи лексической структуры?

1. Учитывая предложение в язык A, используйте инструмент, чтобы получить его набор языков A Теги PoS (Part of-speech).

2. Инструмент, который я использую для пометки PoS (Freeling), не возвращает дерево синтаксического анализа, поэтому я подумал о создании собственного дерева синтаксиса из набора тегов.

3. После того, как дерево синтаксического анализа завершается, пересекают его по уровням (начиная от корня) и изменять порядок его элементы в соответствии с правилами грамматики языка B.

Graphical explanation

enter image description here

После выполнения некоторых исследований я узнал о Эрли разборе (чья способность разбора любого языка привлекло мое внимание, потому что грамматика на языке В может измениться сверхурочно, поэтому я не могу гарантировать, что он всегда будет соответствовать какому-либо конкретному критерию). Однако, учитывая, что моя конечная цель заключается в передаче структуры, я не уверен, что если использовать синтаксический анализатор снизу вверх и попытаться изменить порядок элементов в соответствии с правилами, это даст мне лучшую производительность, или если я нахожусь на неправильный путь и мое решение ошибочно вообще.

+0

прохладный человек, я думаю, есть, у вас есть git? –

+0

нет, у меня нет учетной записи git. Почему вы спрашиваете? – Yukypack

ответ

0

В зависимости от исходного языка вы имеете дело с, Freeling действительно обеспечивает дерево синтаксического анализа (например, для испанского, английского, каталонского, португальского ...)

Если разбор на вашем языке не поддерживается Freeling, вам может добавить его, просто написав грамматику. FreeLing включает парсер CKY, который будет применять вашу грамматику и дать вам дерево разбора.

Таким образом, вы можете достичь шага 2, «построив собственное дерево разбора из набора тегов».

Что касается передачи, я не уверен, что лучшая стратегия переупорядочивается на лету. Наверное, лучше иметь все дерево и выполнять передачу назад.

Если ваша цель перевода на основе правил, вы можете посмотреть на с открытым исходным кодом платформы перевода https://www.apertium.org/

+0

Я не заметил, что FreeLing включает парсер CKY, который применил бы любую грамматику, которую я ему даю, это очень приятно! Однако, я придерживаюсь webdemo прямо сейчас, потому что у меня возникли проблемы с попыткой интегрировать библиотеку с моим проектом C#. Я был бы глубоко благодарен, если бы вы знали о любом руководстве, которое могло бы помочь мне в этом. – Yukypack

+0

FreeLing можно вызывать на нескольких языках благодаря SWIG (http://swig.org). Добавление C# в список может быть относительно простым (в зависимости от того, насколько хорошо C# поддерживается SWIG). Вы можете попытаться просмотреть папку «API» в архиве FreeLing, а затем адаптировать некоторые из Makefile к C#. –

0

Если вы ищете «лучший» алгоритм для предугадывания дерева разбора, то вы должны смотреть на Parsey McParseface. Решение с открытым исходным кодом, недавно выпущенное компанией Google. Оба они, возможно, являются самыми современными и имеют действительно хороший обзор литературы в README.

Проблема с использованием основанных на правилах парсеров или основанных на лексике методов заключается в том, что точность, которую вы собираетесь увидеть, действительно довольно низкая. Как правило, попытка использовать неконтролируемый метод здесь - это ярлык, который заставит ваш алгоритм терпеть неудачу в большинстве случаев даже с немного нерегулярной грамматикой.Особенно, если грамматика вашего целевого языка, вероятно, со временем изменится, вероятно, имеет некоторую общую двусмысленность, которую вы не сможете использовать для использования системы на основе правил.

Что касается общего подхода снизу вверх для реструктуризации ваших деревьев синтаксического анализа, трудно сказать, является ли это правильным решением или нет. Это, безусловно, довольно типичный подход для построения деревьев синтаксического анализа, но качество передачи сильно зависит от домена, в котором вы работаете, размера вашего набора данных и структуры грамматики обоих языков. В конце дня одним из больших недостатков машинного обучения является то, что никто не может сказать вам, будет ли новый подход работать или нет с какой-либо определенностью.

Вы должны сделать снимок, оценить производительность в соответствии с appropriate metric, а затем внести изменения, чтобы увидеть, улучшаете ли вы свою производительность. К сожалению, если корпус, который у вас есть, очень мал, вы вряд ли сможете получить какой-либо качественный перевод в автоматическом режиме, просто недостаточно сигнала, но если вы используете транскрипты ООН в качестве учебного набора, вы можете на наименее подтвердите свой фундаментальный подход по сравнению с литературой.

+0

Спасибо за подробный ответ, я обязательно посмотрю на Parsey McParseface, который выглядит довольно интересно. И да, я знаю, что методы, основанные на правилах, не самые лучшие, но, к сожалению, доступные данные минимальны и в настоящее время не позволяют улучшить ситуацию. – Yukypack

+0

@Yukypack Использование чего-то OTS, вероятно. дать вам что-то лучше, чем метод, основанный на правилах, если вы не планируете аннотировать все. –

Смежные вопросы