Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Ответы на вопросы с Lucene

Автор вопроса: Ruggiero SpearmanОтветов: 3

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

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

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

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

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

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

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

Спасибо.

  • Может быть, я должен также добавить, что память вызывает беспокойство. Я не хотел бы хранить всю свою базу знаний в памяти. Наверное, это исключает подходы с использованием хайлайтера. Ruggiero Spearman 25.01.2011
  • Lucene очень быстр и эффективен, когда дело доходит до обработки больших наборов документов. По умолчанию индекс находится на диске, хотя вы можете сопоставить его с памятью. Joel 25.01.2011

luceneinformation-retrieval

Ответы

Ответ 1 · Xodarap

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

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

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

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

Ответ 2 · рейтинг 1 · Joel

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

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

Ответ 3 · Sai Venkat

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

--Сай

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы