Ответ на вопрос с Lucene - PullRequest
2 голосов
/ 25 января 2011

Для игрушечного проекта я хочу внедрить автоматизированную систему ответов на вопросы с Lucene и пытаюсь найти разумный способ ее реализации. Основная операция заключается в следующем:

1) Пользователь введет вопрос.

2) Система определит ключевые слова в вопросе.

3) Ключевые слова будут искать в большой базе знаний, а соответствующие предложения будут отображаться как ответы.

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

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

Буду признателен за прямые рекомендации, основанные на опыте или интуиции, а также учебные пособия или вводные материалы для систем ответов на вопросы с учетом Lucene.

Спасибо.

Ответы [ 3 ]

1 голос
/ 25 января 2011

Это не безрассудный подход.

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

0 голосов
/ 27 января 2011

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

Если вы хотите указать маршрут каждого предложения, являющегося документом, я бы порекомендовал придумать идентификатор для каждого предложения и сохранить его как отдельное поле. Затем вы можете отобразить [ID-1, ID, ID + 1] в каждом результате.

Более важный вопрос: как разбить текст на документы? Выявление семантически связанных областей кажется трудным, поэтому единственный способ сделать это - предложение или параграф. Лучше было бы, если бы вы могли найти, какой текст является заголовком раздела, а затем поместить все в этом разделе как документ.

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

0 голосов
/ 25 января 2011

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

- Сай

...