Как стать автором
Обновить
5
0

Пользователь

Отправить сообщение
Приводить код смысла не вижу. Во-первых, это не инструкция на тему «ИИ своими руками». Я пишу потому, что это безусловно заинтересует многих и эти многие могут подсказать мне идеи или указать на ошибки. Во-вторых, я пишу на PHP. Безусловно его знают многие, но ведь не все. В-третьих, как Вы это себе представляете? Это же не пара строк кода. Это классы, интерфейсы, библиотеки и прочее прочее прочее.
Ну если Вам нужно чисто для саппорта. То тут можно обойтись системой «фраза пользователя или ее значимая часть»->один или несколько заранее забитых в базу ответов на эту фразу. Те же инфы от Наносимантики как раз для этого и созданы.
В одиночку пока не будет создано абстрактное ядро и действующий прототип. А потом уже можно будет собирать команду. Чтобы каждый член решал узкую задачу.
Не знаю почему Вас это покоробило. Система однозначно должна быть модульная. Ядро системы — абстрактное. Изменение логики модуля не должно влиять на остальные модули.

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

Стратегические ошибки невозможно исправить оперативными действиями. Т.е. на этапе прототипирования — вполне себе подход, но если у вас уже тонны кода и годы работы… Черт его знает, может стоит поразмышлять предварительно.
поразмышлять безусловно стоит, но все предусмотреть не возможно. И поэтому уже на этапе прототипирования нужно делать гибкую модульную систему. Которую можно легко менять, улучшать, конфигурировать и так далее.
Да, возможно я зря написал «однозначно идентифицирует», нужно было что-то вроде «наиболее вероятно».
Ну а вообще, это решаемо. Допустим при наличии вопросительного слова изначально считаем что это вопрос. Последующие аналитические инструменты могут выявить что это не так (не вопрос, а например, утверждение).

Согласен с unconnected, что идиоматические выражения всегда описывались в отдельных словарях. И их выявление это отдельная тема.

А вот с Вашим высказыванием
В общем, по-моему, думать об исправлении ошибок и мальчиках Тибе несколько преждевременно, пока не решена задача распознавания смысла грамматически корректно сформулированных фраз.
согласиться не могу. Если начать с распознавания смысла, то при наличии ошибок/очепяток смысл Вы распознать не сможете. Поэтому начать, наверно, нужно именно с исправления ошибок. А потом уже анализировать, то что получилось. А если не получилось, то возможно это не была ошибка. Возможно это было какое-либо слово или понятие неизвестное системе.
Думаю что для таких задач бота использовать вполне возможно. Просто нужно побольше времени уделить обучению.
Забыл про изначальный объем данных. Я считаю что он просто обязан быть и чем он больше, тем лучше?

Во-первых, кто станет общаться с системой, которая «полный ноль». А не будут общаться — система не будет развиваться. А если она будет общаться только со мной, то процесс обучения займет всю мою жизнь. И времени совершенствовать систему (на уровне устройства, а не знаний) у меня не будет.

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

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

Сегодня я решил «получить базовую форму для каждого слова в реплике». Этот алгоритм поработал несколько дней, недель, месяцев. Накопилась статистика. Посмотрел, проанализировал. Ага, подход не самый лучший. Проблема? Нет. Сделаю иначе, всего-то делов.

Но суть в том, что все нужно пробовать. Иначе как узнать работает это или нет?
Т.е. единственная цель этих «программ» — ответить так, чтобы было по-человечески и прикольно. На мой взляд написание таких поделок — тупейшая трата времени и сил. Не наступите на эти грабли.
— полностью согласен. Беда таких программ в том, что практически не предпринимается попыток именно научить систему понимать смысл фразы. А подход = найти фразу в базе и дать заранее прописанный ответ — является тупиковым и ни к чему не ведет.

По поводу внутреннего языка это вопрос открытый, в том числе и для меня. Поэтому могу лишь изложить свои мысли по этому поводу.

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

Исходная фраза «Море большое»

Море->существительное->физический объект->1103 (1103 эта та самая константа, 1103 просто для примера, могло быть и 128 и 42)

большое->прилагательное->описывает размер->47

Вопросительного слова и знака вопроса нет, значит считаем фразу утверждением. Получается на внутреннем языке фраза будет выглядеть так: 1103 47

Что это дает? Мы можем проверить есть ли во фразе смысл. Проверка сводится к тому, что нам нужно узнать может ли физический объект (в данном случае — море) иметь свойство размер (в данном случае — большое).

Проверка нам дала результат: да физ. объект может иметь такую характеристику. Система отвечает: «Да, море вполне может быть большим»
По поводу того зачем нужны такие системы я писал в посте. Но давайте немного пофантазируем.

Например, естественно-языковый интерфейс с ПК (при условии наличия качественного механизма синтеза и распознавания речи).

Читаете Вы Хабр, а Ваш персональный ИИ сообщает, что пришло письмо с такого-то адреса.
Вы ему: «Прочитай». Он читает…
Вы ему: «Удали». Он удаляет…
Вы ему: «Я иду по делам, пока меня не будет дома собери информацию по такой то теме». Вы пришли, а для Вас в удобном виде вся инфа уже найдена и рассортирована.
и так далее.

Еще один вариант применения. Скорая психологическая помощь. Человек рассказывает о своей проблеме, а ИИ дает советы, рассказывает о том как эту проблему решали другие, предоставляет книги или ссылки на сайты по теме и прочее.

Можно найти массу применений. Ограничений нет — только Ваша фантазия.

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

Кстати, огромное Вам спасибо за инвайт
Да много их, но большинство более менее умных, к сожалению общаются только на английском.
А стоит ли сажать в саппорт или нет это уж дело Ваше. Тут и специфику проекта нужно учитывать и степень развитости системы. Если он грубо говоря тупая, то смысла нет. Это будет только раздражать. А вот если Вы ее научите решать проблемы пользователей, то почему бы и не попробовать.
В принципе согласен. Но все же подобная функциональность будет не лишней. Рассчитывать же нужно не только на тех кому лень. Найдутся люди которым информация об осмыслении фразы будет более интересна нежели сам ответ.
RaJa полностью с Вами согласен по поводу безошибочности системы. Безошибочную систему создать в принципе невозможно. На любом этапе развития найдется тема в которой интеллект (искусственный или естественный без разницы) будет не компетентен.
Алгоритм мыслится примерно таким:
1. получить базовую форму для каждого слова в реплике, тем более что это в любом случае нужно будет сделать (колбасы->колбаса, тест->тест || тесто)

2. если для какого-либо слова базовую форму определить не удалось, то вероятно в слове ошибка

3. попытаться автоматически исправить ошибку

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

5. получить на каждую реплику статистику и дать ответ на ту реплику, которая наиболее вероятна

Очевидно что вопрос о возрасте системы будет более вероятен, чем вопрос о том сколько лет мальчику Тибе или кому-то еще. В конце концов подобная система не обязана знать такие вещи. А если она их знает, то уточняющие вопросы (от системы) неизбежны. Ведь мальчиков с таким именем может быть не один десяток.

Кстати у меня давно возникла вот какая идея. Помимо ответа система должна (опционально, по желанию пользователя) предоставлять информацию о процессе осмысления фразы. В частности что-то типа:

вероятно исходная фраза «сколько тибе лет?» содержит ошибку
автоисправление «тибе»->«тебе»
исправленная фраза «сколько тебе лет»
и так далее
Самое главное создать эту систему. Сделать ее максимально гибкой и самообучаемой. Если в итоге система окажется эффективной, то потенциал ее применения станет поистине безграничен.

И кстати, эта статья (вернее цикл статей, т.к. будет еще несколько) это не просто теоретический треп об искусственном интеллекте и диалоговых системах. Я действительно пишу такую систему.

Тема искусственного интеллекта интересна мне с того самого момента как я узнал о программировании. Мною было предпринято несколько попыток создания ИДС. Но все они по разным причинам терпели неудачу (не то чтобы вообще ничего не получилось, но конечный результат не устраивал). Видимо сказывался недостаток опыта и незнание теории.

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

Информация

В рейтинге
Не участвует
Откуда
Россия
Дата рождения
Зарегистрирован
Активность