2011-01-25 2 views
2

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

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

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

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

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

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

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

Спасибо.

+0

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

+0

Lucene работает очень быстро и эффективно, когда дело доходит до обработки больших наборов документов. По умолчанию индекс находится на диске, хотя вы можете сопоставить его с памятью. – Joel

ответ

0

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

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

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

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

0

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

--Sai

+0

Какой алгоритм обучения Mahout вы бы порекомендовали для этой проблемы? – Joel

+0

Для меня это более или менее похоже на проблему классификации. –

+0

Что классифицируется? – Joel

1

Это не неразумно подход брать.

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

Смежные вопросы