Execution-Guided Neural Program Decoding
Авторы решали задачу text2SQL. Есть датасет WikiSQL где собраны 80тысяч пар запросов natural language -> SQL на заданной таблице БД. Эта задача очевидно решается простой архитектурой seq2seq с attention и pointer networks для copy механизма. Авторы улучшили прошлую архитектуру сделав отдельные cell-ы для декодера. Один тип cell-a отвечает за конкретные элементы синтаксиса SQL - например Select, From, Where итд. Два других cell-a отвечают за column name и constant name значения. Очевидно column name нужно найти или в natural language запросе или из самой таблицы БД. И constant name нужно найти в запросе. Для этого нужен только pointer network.
Для каждого типа cell-a есть свой loss. Для элементов синтаксиса это обычная кросс-энтропия. а для copying механизма они предложили новый loss названный "Sum-Transfer". Дело в том что токен который нужно скопировать может встречаться несколько раз и в запросе и в таблице БД, поэтому attention scores of pointer network суммируются для одних и тех же токенов и только потом считается кросс-энтропия.
Плюс они предложили метод борьбы с run-time error если сеть генерирует invalid запросы или же сеть генерит sql запрос который возращает empty значение. Для этого они придумали два метода. Первый это трейнить ансамль моделей. Далее каждая модель ансамбля генерит sql до тех пор пока он не станет валидным. БрутФорс детка)
Второй это local repair approach. Этот метод очень похож на beam search который мы юзаем для natural language generation, они же предложили для SQL. Пока только для одного типо запроса "Select * From * Where *"
Авторы решали задачу text2SQL. Есть датасет WikiSQL где собраны 80тысяч пар запросов natural language -> SQL на заданной таблице БД. Эта задача очевидно решается простой архитектурой seq2seq с attention и pointer networks для copy механизма. Авторы улучшили прошлую архитектуру сделав отдельные cell-ы для декодера. Один тип cell-a отвечает за конкретные элементы синтаксиса SQL - например Select, From, Where итд. Два других cell-a отвечают за column name и constant name значения. Очевидно column name нужно найти или в natural language запросе или из самой таблицы БД. И constant name нужно найти в запросе. Для этого нужен только pointer network.
Для каждого типа cell-a есть свой loss. Для элементов синтаксиса это обычная кросс-энтропия. а для copying механизма они предложили новый loss названный "Sum-Transfer". Дело в том что токен который нужно скопировать может встречаться несколько раз и в запросе и в таблице БД, поэтому attention scores of pointer network суммируются для одних и тех же токенов и только потом считается кросс-энтропия.
Плюс они предложили метод борьбы с run-time error если сеть генерирует invalid запросы или же сеть генерит sql запрос который возращает empty значение. Для этого они придумали два метода. Первый это трейнить ансамль моделей. Далее каждая модель ансамбля генерит sql до тех пор пока он не станет валидным. БрутФорс детка)
Второй это local repair approach. Этот метод очень похож на beam search который мы юзаем для natural language generation, они же предложили для SQL. Пока только для одного типо запроса "Select * From * Where *"