• 'Низкоуровневое' распознавание речи (звуки)?

    @lightcaster
    Копайте в сторону cmu sphinx. На сколько я помню, там можно было получить список фонем на выходе без дальнейшего декодинга. На сколько это риалтайм судить не берусь
    Ответ написан
    Комментировать
  • Что вас останавливает в процессе создания ИИ?

    @lightcaster
    Давайте напишем ИИ. Пусть болтает с людьми, делает что-нибудь полезное. В самом деле, сколько можно — 60 лет прошло, а ИИ все нет.

    1) И так, попробуем с языка. Пусть слушает, понимает и отвечает.

    Вот у нас текст. Разобъем на слова. Обработаем окончания и прочая. Готов модуль морфологии, это было несложно. Далее, как-то нужно вытащить структуру из текста. То же не проблема — контекстно-свободные грамматики в помощь, и готов модуль синтаксиса. Пока все хорошо: разобрали морфологию, построили дерево связей слов. Но что дальше? По-хорошоему, нужно чтоб ИИ понимал текст. Вот тут и начинаются пляски с бубнами. Что такое «понимать» никто толком не понимает :).

    а) Вариант первый — логика в помощь. Нам вообще не нужно понимание, главное чтоб все было четко:
    Все люди смертны
    Сократ человек,
    Сократ — смертен

    Modus ponens, это все что нужно. Пролог умеет с этим работать. Выделяем из текста (синтаксического дерева) конструкции типа VB (SUBJ OBJ), запихиваем в предикат VB(SUBJ, OBJ) и готово.

    Но тут, внезапно:

    > «Сократ был человеком.»

    Эм… это что, время? Мы такое не обрабатываем. Ну не страшно, изобретем какую-нибудь темпоральную логику.

    > «По моему, Сократ — человек»

    Это что, модальность? Откуда она взялась? Придется как-то обрабатывать степерь уверенности поставляемых кем-то фактов…

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

    Можно конечно обратится к лингвистам. Но они над одной простой конструкцией могут десятилетием копья ломать, а нам тут нужно весь язык сразу выучить. Не пойдет.

    Вообще-то, это работает, но только очень ограничено. Попытки были, но провалились. Гуглить по имени «Терри Виноград» и его программе SHRDLU. Также полезно загуглить рамматику Монтегью.

    б) Да к черту логику. Давайте напишем граф, который бы описал любую ситуацию.

    Так, чтобы сделать граф, нужно задать какие-то концепты. Оптимально — описываем термины, и задаем как они взаимодействуют друг с другом. Понятно, что граф получится большой, но если постараться, у нас все получится. Так?

    Нет, не так. Гуглим проект Cyc. Начинал писаться с 1984. Большинство, участвующих в данной дискуссии еще и не родились. Так и где результаты? Они есть, довольно-таки средненькие:
    — граф получается громадный
    — отношения между терминами не очень хотят выстраиваться в красивый граф
    — многозначность
    — сложность добавления знаний

    См также язык Фреймов и другие представления знаний.

    Но похоже мы тут тоже провалились. Что дальше?

    2) А давайте зайдем совсем с другой стороны — напишем свой язык программирования. Видимо, с ним проще пойдет.

    Но и тут затык — какой бы язык мы не написали, он будет эквивалентым (или слабее) машины Тьюринга или любой Тьюринг-полной вычислительной системе. Да, да, и даже Брейнфаку.

    3) Может запихнуть это все в НЕЙРОННУЮ СЕТЬ и обучить все ГЕНЕТИЧЕСКИМ АЛГОРИТМОМ? Звучит заманчиво, только если перевести это на математический язык — мы всего лишь занимаемся оптимизацией, пытаясь найти некое вероятностное распределение. Вообще, машинное обучение довольно конкретно. Здесь мы решаем узкие и конкретные задачи — строим классификаторы или регрессии. Не очень похоже на сильный ИИ, да и выглядит вся эта математика как-то не секси :) — градиентные спуски, гессианы, энтропии.

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

    Простите меня за сарказм. Видимо, я слишком часто натыкаюсь на такие вопросы. Надеюсь, я дал ответ. Я предлагаю для погружения в обалсть написать простой POS-таггер. Это самый первый шаг в комп. лингвистике. Но он позволяет почуствовать всю сложность проблемы.
    Ответ написан
    2 комментария
  • Вычислитель в аренду

    @lightcaster
    Да. Amazon EC2 вам в помощь. Можете развернуть много слабых юнитов, если задача хорошо параллелится. Я языковую модель большую через EC2 обсчитывал. В принципе, удобно.

    Правда, на счет Mathematica сильно сомневаюсь. Теоретически, можно ее поставить на созданные инстансы. Однако, почему бы не воспользоваться какими-нибудь специализированными инструментами попроще.
    Ответ написан
    1 комментарий
  • Алгоритм генерации перестановок с сохранением порядка элементов в группах

    @lightcaster
    Крутая задачка :). Похоже вы привели пример контекстно-зависимого языка (если взять в общем виде). Комбинаций будет очень много. Если не ошибаюсь (k*n)!/ (k!)^n где n — кол-во групп, k — кол-во элементов в каждой группе. К примеру, для трех групп с тремя элементами <c1, s1, d1>, <c2,s2,d2> <c3, s3, d3> комбинаций будет 9!/3!3!3! = 1680.0
    Ответ написан
    Комментировать
  • Open source инструменты для анализа и структурирования текста?

    @lightcaster
    То что вы описали очень похоже на NER — Named Entity Recognition. Тут есть ссылки на готовые инструменты en.wikipedia.org/wiki/Named-entity_recognition

    Но это не полное «структурирование», а т.н. поверхностное. Вы получите что-то вроде:
    Person: Вяся, Петя
    Location: Саратов

    Для полного смотрите в сторону семантического анализа (парсинга). Правда, на практике такие системы все еще плохо работают.
    Ответ написан
    2 комментария
  • Что скажите о труде Дональда Кнута «Искусство программирования»?

    @lightcaster
    Из разряда книг, которые все советуют, но никто не читает :).

    Есть чуть более легкая книга, очень рекомендую:
    en.wikipedia.org/wiki/Introduction_to_Algorithms

    ps ее я читал :)
    Ответ написан
    Комментировать
  • Что почитать о UML?

    @lightcaster
    не тратьте время, лучше почитайте что-нибудь про алгоритмы. будет на порядок полезней. говорю как программист и аналитик с большим стажем :).
    Ответ написан
    2 комментария
  • Как улучшить анализ тональности текста на русском языке?

    @lightcaster
    Занимался этим по работе. Попробуйте:
    — svm с линейным ядром
    — (1,2,3)-граммы как фичи
    — нормализуйте текст, но попробуйте оставить некоторые знаки препинания — !?
    — работал с английским, там стеммер не улучшал качество. На русском нужно пробовать, но не удивлюсь, если не сработает.

    Кроме этого можете поиграться с различными преобразованиями на векторах. Мне не помогло, хотя теоретически должно было бы. Может, что-то неверно сделал. Попробуйте LSA (pLSA если словарь большой).

    Замечания:
    — хороший корпус очень важен
    — выбор фич важен
    — орфография не имеет сильного эффекта
    — исключение стоп-слов также не улучшало качества
    — действительно, иронию, двусмысленность выловить таким методом очень тяжело; при попытки поймать длинные связи снижается качество

    Если захотите экстрима — можно попробовать какой-нибудь классификатор со строковым ядром. Я пробовал, не пошло. Но теоретически может получится.
    Ответ написан
    Комментировать
  • Алгоритмы анализа строк, токенизации?

    @lightcaster
    Лучше использовать классификатор. Регулярками — только если что-то очень простое с устоявшимся паттерном (номера телефонов). По алгоритмам, лучше CRF. Наивный байес тоже подойдет. Главное, хороший корпус для тренировки.

    А, да, еще можете сюда глянуть — www.freebase.com/. Гугловый проект, там народ вручную вбивает.

    И да, не бросайтесь терминами «смысл». Народ, кто занимается с нлп этого не очень любит :).
    Ответ написан
    2 комментария
  • Есть участники kaggle.com?

    @lightcaster Автор вопроса
    На счет команды согласен. Но «свои» и рядом, это роскошь :). Думаю попробую на несложном контесте, а дальше как пойдет.

    На счет семантики — плохо это знаю. Я больше на стороне статистики, так проще. Честно пытался продраться через homepages.inf.ed.ac.uk/jbos/comsem/, но так и не понял как из текста индуцировать что то формальное, вроде логики первого порядка. Для небольших текстов и грамматик проходит, но дальше игрушечных примеров дело не доходит. Так что статистика и ML выглядят более продуктивными.
    Ответ написан
    Комментировать
  • Какой тип нейросетей оптимален для обработки двоичных данных?

    @lightcaster
    Почему нейросети?
    Ответ написан
    Комментировать
  • Интерфейс "Вопрос-Ответ"

    @lightcaster
    quora.com
    Ответ написан
    Комментировать
  • Курсы Stanford University(поиск однокурсника)?

    @lightcaster
    Probability Graphical Models
    Ответ написан
    Комментировать
  • Второе высшее по computer science в Санкт-Петербурге?

    @lightcaster
    Загляните сюда. Не знаю что там за формат обучения, но лекции интересные.

    logic.pdmi.ras.ru/csclub/

    Там есть контакты, свяжитесь.
    Ответ написан
    Комментировать
  • Как проще оформить российских инвесторов-миноритариев в западный стартап?

    @lightcaster
    Спросите на хакерньюсе: news.ycombinator.com/

    Думаю, смогут дать развернутый ответ.
    Ответ написан
    Комментировать
  • UML диаграмы, автоматизирвоаное построение

    @lightcaster
    Листок бумаги и ручка. Правда. Не зацикливайтесь на этом. Это не панацея и не решит проблемы дизайна программы. К тому же, в питоне часто удобней писать не в ООП-стиле.
    Ответ написан
  • Нужна простая программка для изучения английских слов?

    @lightcaster
    Подойдет любой бумажный блокнот. Бумажные карточки (да и карточки на том же телефоне) также хороши.

    Но не прячтесь за софтом. Все равно учить Вам, и софт сильно не облегчит эту задачу. Сам такой же — настрогал автоматизированную систему для обучения, три дня пользовался, потом забил :).
    Ответ написан
  • Нечеткий поиск?

    @lightcaster
    Традиционно — расстояние левенштейна.

    Но я бы рекомендовал использвоать common longest subsequence. При этом, можно ввести некий штраф за гэпы между словами.
    Ответ написан
  • Нужно ли для того что б изучить и начать програмировать на Django изучать сначала Python?

    @lightcaster
    К сожалению, нет.
    Ответ написан
    Комментировать