Система запросов QA в корпусе

У нас есть вопрос - корпус ответов, как показано ниже

Q: Why did Lincoln issue the Emancipation Proclamation? 
A: The goal was to weaken the rebellion, which was led and controlled by slave owners.

Q: Who is most noted for his contributions to the theory of molarity and molecular weight?  
A: Amedeo Avogadro

Q: When did he drop John from his name? 
A: upon graduating from college

Q: What do beetles eat? 
A: Some are generalists, eating both plants and animals. Other beetles are highly specialised in their diet.


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


person sujeet14108    schedule 25.02.2017    source источник


Ответы (2)


Ваш вопрос слишком широкий, а задача, которую вы пытаетесь выполнить, сложна. Тем не менее, я предлагаю вам прочитать об ответах на вопросы на основе фактоидов на основе IR. В этом документе есть ссылки на многие современные методы. Прочтение этого документа должно привести вас к нескольким идеям.

Обратите внимание, что вам нужно использовать другой подход к Factoid QA на основе IR и QA на основе знаний. Во-первых, определите, какой тип системы обеспечения качества вы хотите построить.

Наконец, я считаю, что простой техники сопоставления документов для QA будет недостаточно. Но вы можете попробовать простой подход, используя предложенный Lucene @Debasis, и посмотреть, хорошо ли он работает.

person Wasi Ahmad    schedule 26.02.2017

Рассматривайте вопрос и ответ на него (при условии, что существует только один) как один документ в Lucene. Lucene поддерживает просмотр документов в поле; поэтому при создании документа сделайте вопрос доступным для поиска полем. После получения вопросов с наивысшим рейтингом с учетом вопроса запроса используйте метод get Document, чтобы возвращать ответы.

Скелет кода (заполните сами):

//Index
IndexWriterConfig iwcfg = new IndexWriterConfig(new StandardAnalyzer());
IndexWriter writer = new IndexWriter(...);
....
Document doc = new Document();
doc.add(new Field("FIELD_QUESTION", questionBody, Field.Store.YES, Field.Index.ANALYZED));
doc.add(new Field("FIELD_ANSWER", answerBody, Field.Store.YES, Field.Index.ANALYZED));
...
...
// Search
IndexReader reader = new IndexReader(..);
IndexSearcher searcher = new IndexSearcher(reader);
...
...
QueryParser parser = new QueryParser("FIELD_QUESTION", new StandardAnalyzer());
Query q = parser.parse(queryQuestion);
...
...
TopDocs topDocs = searcher.search(q, 10); // top-10 retrieved
// Accumulate the answers from the retrieved questions which
// are similar to the query (new) question.
StringBuffer buff = new StringBuffer();
for (ScoreDoc sd : topDocs.scoreDocs) {
    Document retrievedDoc = reader.document(sd.doc);
    buff.append(retrievedDoc.get("FIELD_ANSWER")).append("\n");
}
System.out.println("Generated answer: " + buff.toString());
person Debasis    schedule 25.02.2017