Как выбрать запись часто задаваемых вопросов из запроса на естественном языке пользователя? - PullRequest
3 голосов
/ 01 декабря 2011

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

Мой язык Delphi. Мой общий подход состоит в том, чтобы выбрасывать небольшие «мусорные слова», a, an, the, of, by, и т. Д. ... Запустить программу-основу над этими словами, чтобы получить корневые слова, а затем попытаться сопоставить столько из оставшихся слов, как это возможно.

Есть ли лучший подход? Я думал о каком-то типе обработки естественного языка, но я боюсь, что буду смотреть на годы разработки, а не на неделю или две.

Ответы [ 3 ]

5 голосов
/ 01 декабря 2011

Вам не нужно изобретать новый способ сделать это.Это все было сделано раньше.То, что вам нужно, называется искатель часто задаваемых вопросов , представленный Хаммондом и др. В 1995 году ( искатель часто задаваемых вопросов: индивидуальный подход к навигации по знаниям , 11-я конференция по искусственному интеллекту для приложений).

Журнал AI Magazine включал статью некоторых из тех же авторов, что и первый документ, в котором оценивалась их реализация.Burke, et al., Вопрос-ответ из часто задаваемых файлов вопросов: опыт работы с системой FINDER FAQ , 1997. В ней описываются два этапа работы:

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

Далее кандидаты оцениваются по запросу пользователя в соответствии со статистическим сходством, семантическим сходством,и охват.(Подробности читайте в статье.) Оценка семантического сходства основана на WordNet , который группирует английские слова в наборы различных понятий.Рассматриваемый здесь искатель часто задаваемых вопросов был разработан, чтобы охватить все часто задаваемые вопросы по Usenet;поскольку ваш охватываемый домен меньше, возможно, вы примените больше знаний о предметной области, чем те основы, которые предоставляет WordNet.

4 голосов
/ 01 декабря 2011

Не уверен, что это решение именно то, что вы ищете, но если вы хотите разобрать естественный язык, вы можете использовать Link-Grammar Parser.

К счастью, я перевел этодля использования с Delphi (в комплекте с демоверсией), которую вы можете скачать (бесплатно и 100% с открытым исходным кодом) с этой страницы в моем блоге .

3 голосов
/ 01 декабря 2011

В дополнение к вашему основополагающему подходу, я предлагаю вам изучить одно или несколько из следующих:

  • Распознавание важных пар или фраз (2 или более слов).Например, если ваш домен является техническим полем, важной парой, которая должна автоматически рассматриваться как пара, а не как отдельные слова, где пара слов означает нечто особенное (в программировании, «связанный список», «последовательный порт» и т. Д.,более важны по своему значению как пара слов, чем индивидуально).

  • Большой список синонимов ("turn == rotate", "open == access" и т. д.).

Мне хотелось бы разорвать программное обеспечение с открытым исходным кодом для поисковых систем на любом языке, на котором оно было написано, и посмотреть, какие общие методы они используют.

...