Теги характеристик слова - PullRequest
1 голос
/ 10 апреля 2010

Я хочу создать чат-робот с загадкой для своего класса. Поэтому я решил, что вход в чат-бота будет:

Что-то вроде: «Это синий, и это вверх, но это не потолок»

Перевод:

<Object X>
    <blue>
    <up>
    <!ceiling>
</Object X>

(Ответ: небо?)

Итак, Input - это набор характеристик (существующих \ не существующих в объекте), output - наиболее подходящий объект.

Домен будет ограничен количеством объектов, я мог бы сам ввести все атрибуты, но я думал:

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

Любые идеи о том, как я мог бы достичь такой вещи? Есть идеи по литературе на эту тему?

Спасибо

Ответы [ 2 ]

2 голосов
/ 11 апреля 2010

Это звучит как основная проблема классификации. Вы по существу спрашиваете; учитывая N признаков (цвет = синий, местоположение = вверх и т. д.), какая из М классификаций наиболее вероятна? Существует множество алгоритмов для этого (Наивный Байес, Максимальная энтропия, Машина опорных векторов), но вам придется исследовать, какой из них является наиболее точным и простым в реализации. Самой большой проблемой обычно является получение точных обучающих данных, но если вы хотите ограничить их списком вводимых вручную примеров, это должно упростить вашу реализацию.

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

sky | color:blue,location:up
tree | has_bark:true,has_leaves:true,is_an_organism=true
cat | has_fur:true,eats_mice:true,is_an_animal=true,is_an_organism=true

Это может быть не очень полезно, поскольку это частная собственность, но коммерческое приложение, похожее на то, что вы пытаетесь выполнить, это веб-сайт 20q.net , хотя система задает вопросы вместо пользователь. Интересно, что он обучается "онлайн" на основе пользовательского ввода.

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

2 голосов
/ 10 апреля 2010

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

...