ACL2024
Interactive-KBQA: Multi-Turn Interactions for Knowledge Base Question Answering with Large Language Models
Guanming Xiong, Junwei Bao, Wen Zhao
摘要
This study explores the realm of knowledge base question answering (KBQA). KBQA is considered a challenging task, particularly in parsing intricate questions into executable logical forms. Traditional semantic parsing (SP)-based methods require extensive data annotations, which result in significant costs. Recently, the advent of few-shot in-context learning, powered by large language models (LLMs), has showcased promising capabilities. However, fully leveraging LLMs to parse questions into logical forms in low-resource scenarios poses a substantial challenge. To tackle these hurdles, we introduce Interactive-KBQA, a framework designed to generate logical forms through direct interaction with knowledge bases (KBs). Within this framework, we have developed three generic APIs for KB interaction. For each category of complex question, we devised exemplars to guide LLMs through the reasoning processes. Our method achieves competitive results on the We-bQuestionsSP, ComplexWebQuestions, KQA Pro, and MetaQA datasets with a minimal number of examples (shots). Importantly, our approach supports manual intervention, allowing for the iterative refinement of LLM outputs. By annotating a dataset with step-wise reasoning processes, we showcase our model's adaptability and highlight its potential for contributing significant enhancements to the field. 1 * Corresponding author. Thought: "tv.tv_program.tvrage_id" is the one I want. Now, I can construct the SPARQL query. Action: ExecuteSPARQL('SELECT DISTINCT ?x WHERE ?e0 type.object.name "Shawnee Smith"@en . ?e0 tv.tv_actor.starring_roles ?c . ?c tv.regular_tv_appearance.series ?x . ?x tv.tv_program.tvrage_id ?id . ORDER BY DESC(xsd:integer(?id)) LIMIT 1') Thought: Let's first decouple this complex problem into simple triples: (shawnee smith, played in, target tv program), (target tv program, tvrage_id, ?v), (order by, ?v). Action: SearchNodes("shawnee smith") Q: What is the tv program with the largest "tvrage_id" that shawnee smith played in? Observation: ['Shawnee Smith | Description: Shawnee Rebecca Smith is an American film and television actress and singer.', ... ] Thought: "Shawnee Smith" is what I want. Next, I need to search for a predicate about "played in". Action: SearchGraphPatterns('SELECT ?e WHERE ?e type.object.name "Shawnee Smith"@en . ', semantic="played in tv program") Observation: [..., (?e, tv.tv_actor.starring_roles -> tv.regular_tv_appearance.series, "30 Days of Night: Dust to Dust"), ...] Thought: The predicate "tv.tv_actor.starring_roles -> tv.regular_tv_appearance.series" is correct. Next, I need to find the predicate that corresponds to "tvrage_id" for a TV program.