percyliang / sempre

Semantic Parser with Execution
Other
830 stars 299 forks source link

Several test cases the sempre seems to not be able to resolve. #159

Open zhuang-li opened 7 years ago

zhuang-li commented 7 years ago

Hi, I am conducting research based on the semantic parsing paper of EMNLP 2013.

However, I found that there are several cases that sempre can't solve.

How the sempre solve the long dependent predicates? For example,

Which film is directed by and star by Christopher Nolan and Tom Hanks respectively?

In this case, the alignment should be:

film.film.director -> is directed by
film.film.actor -> star by
Christopher_Nolan -> Christopher Nolan
Tom_Hanks -> Tom Hanks

and the parsing rules:

unary -> unary intersect unary
unary -> binary join unary

Thus the logic form could be (film.film.director join Christopher_Nolan) intersect (film.film.actor join Tom_Hanks). The paper proposed that you used a common bottom-up parser. Assuming I use a CYK parser, film.film.director and Christopher_Nolan are non-consecutive fragments so they can't be assembled together as in this case.

Second case,

Which film is directed by Christopher Nolan and Tom Hanks?

The logic form could be (film.film.director join Christopher_Nolan) intersect (film.film.director join Tom_Hanks). However, the and won't be aligned to 'film.film.director' and the film.film.director won't be joined with two entities. So how to produce such logic form?

Maybe there is something that I missed when reading this paper. Have you already proposed methods that can deal with such cases?

Thank you in advance for resolving my issue.

ppasupat commented 7 years ago

The 2013 paper indeed does not address the first issue. Their follow-up paper in 2014 (http://www.aclweb.org/anthology/P14-1133) should address this issue by allowing non-adjacent logical form parts to combine.

For the second issue, I think their "bridging" technique should be able to create the second film.film.director (and also the and). After creating (film.film.director Christopher_Nolan) and Tom_Hanks, the bridging rule would find all relations BRIDGE such that (and (film.film.director join Christopher_Nolan) (BRIDGE Tom_Hanks)) successfully executes, and film.film.director will be one of the possible BRIDGEs.