Поясню. Статья грамотно описывает мотивационные вещи. Но нигде не указана зарплата как мотиватор. Мне кажется, при высокой зарплате многие перечисленные вами вещи не нужны. В том числе платный софт, обучение, страховку и кофейник на кухне. У меня сейчас нет даже отпуска, но компенсация все компенсирует, и я более-менее доволен.
Если нужны дополнительные действия, то, вероятно, зарплата невысокая. Отсюда и вопрос.
Хорошая статья. Почти со всем согласен. Вот только
>> Убедись, что функции выполняются за время O(n)
ну блин, а если сложность — квадрат, или еще хуже, кубическая? Задачи-то разные бывают. К тому же для определенных вещей и линейное время тоже может быть убийственно долго. Вобщем, не понял.
Понятно, спасибо. Что касается ЕЯ командного интерфейса — тут можно обойтись простыми механизмами. Все что вам нужно — мапить команду пользователя на команду системы. Решается какой-нить вероятностной моделью.
Что же касается психологической помощи — тут да, нужно что-то похитрей. Ладна. Мой вопрос был связан с тем, что почти все чат-боты пишутся без задачи в голове. Т.е. единственная цель этих «программ» — ответить так, чтобы было по-человечески и прикольно. На мой взляд написание таких поделок — тупейшая трата времени и сил. Не наступите на эти грабли.
Что же касается реализации. Ну хотя-бы направление можете обозначить? Судя по тому, что вы написали, я предполагаю вы хотите работать в «классическом» стиле обработки языка — морфология, синтаксис, семантические правила + некая логика для связки. Теоретически это делается так — строится ситактико-семантическая грамматика, где на входе идет строка — на выходе некое семантическое дерево, либо запись языке логики первого порядка.
Но проблема в том, что очень сложно описать эти правила. Язык слишком гибок. И я не видел ни одну успешную реализацию такого подхода. Почти все более-менее успешные современные системы (перевод, разпознавание речи) работают на статистиках, и не затрагивают даже простые лингвистические техники.
Можете пояснить, зачем нужны такие системы? Правда, есть ли реальное применение? Я не имею ввиду развлечение на пять минут. Что-то более существенное.
На счет спел-чекера я полностью согласен. Исправление опечаток тут очень нужно. Но все же, не понятно что вы собираетесь делать.
>> То есть запрос пользователя подвергается предварительной обработке (например, упомянутые ранее исправление ошибок/опечаток, морфология, синтаксис, семантика и прочее).
Это, конечно, сильно. Но давайте разберем, что вы предлагаете. Ладна, морфология — не такая уж проблема. Синтаксис — будет тяжело. Сложность задачи повышает то, что редкий пользователь пишет синтаксически верные предложения. Но да ладно, таки или иначе это можно решить. Но что касается семантики — это что? Как вы собираетесь хранить знания? Что это за внутренний язык, который вы упомянули. Поясните, плз.
Может быть. Но по моему опыту, прототипы в продакшне не держатся. К примеру, я недавно использовал много nltk кода в прототипе. В продакшне пришлось все выкинуть — начиная от таггера, заканчивая кодом расчета tfidf'ов. Кое-что там реализовано откровенно неправильно. Т.е. правильно для демок и академических нужд, но не идет для продакшна. То же самое было с numpy.
Самый удобыный для меня — python + numpy/scipy/sckit-learn. Nltk для работы с текстом. Это чтобы воткнуться в проблему. Но для продакшна лучше конкретную тулзу подобрать, типа liblinear/libsvm.
Сельский труд очень тяжелый и очень часто неэффективный (по себе знаю — в детстве у родителей был очень большой огород). Если это дивайсы смогут повысить производительность, то и снизят цены на продукцию. А это уже будет сильным стимулом для внедрения этих вещей. А профессии всегда умирали, на их место приходили новые, и это нормально.
>> Вообще не очень понятно зачем городить огород из роботов, если можно пригласить желающих выполнить подобную работу и заплатить им денег?
Думаю, то же самое говорили Генри Форду, когда он предложил конвейер :). Вы правы в том, что решает экономика. Рано или поздно эти дивайсы станут дешевыми.
И почти каждое нововведение убивает рабочие места. Но это и хорошо, так как люди перераспределяются и работают более продуктивно.
Вопрос — почему когда речь идет о чат-ботах, нигде не раскрывается как они устроены. Я думаю, что там просто нечего показывать.
Господа могут меня заминусить, однако учить систему эмитировать человека, вбивая правила на регекспах и эвристики — тупейшая трата времени. Есть целая куча формальных логик, есть компьютерная лингвистика, есть машинное обучение в конце концов. Не лучше ли по-взрослому взяться за проблему.
Поясню. Статья грамотно описывает мотивационные вещи. Но нигде не указана зарплата как мотиватор. Мне кажется, при высокой зарплате многие перечисленные вами вещи не нужны. В том числе платный софт, обучение, страховку и кофейник на кухне. У меня сейчас нет даже отпуска, но компенсация все компенсирует, и я более-менее доволен.
Если нужны дополнительные действия, то, вероятно, зарплата невысокая. Отсюда и вопрос.
''.join([x for x in reversed(st)])
Скобки можно упускать:
''.join(x for x in reversed(st))
Кроме того, 'reversed' — итерабельный объект, так что такое тоже пройдет:
''.join(reversed(st))
>> Убедись, что функции выполняются за время O(n)
ну блин, а если сложность — квадрат, или еще хуже, кубическая? Задачи-то разные бывают. К тому же для определенных вещей и линейное время тоже может быть убийственно долго. Вобщем, не понял.
Что же касается психологической помощи — тут да, нужно что-то похитрей. Ладна. Мой вопрос был связан с тем, что почти все чат-боты пишутся без задачи в голове. Т.е. единственная цель этих «программ» — ответить так, чтобы было по-человечески и прикольно. На мой взляд написание таких поделок — тупейшая трата времени и сил. Не наступите на эти грабли.
Что же касается реализации. Ну хотя-бы направление можете обозначить? Судя по тому, что вы написали, я предполагаю вы хотите работать в «классическом» стиле обработки языка — морфология, синтаксис, семантические правила + некая логика для связки. Теоретически это делается так — строится ситактико-семантическая грамматика, где на входе идет строка — на выходе некое семантическое дерево, либо запись языке логики первого порядка.
Но проблема в том, что очень сложно описать эти правила. Язык слишком гибок. И я не видел ни одну успешную реализацию такого подхода. Почти все более-менее успешные современные системы (перевод, разпознавание речи) работают на статистиках, и не затрагивают даже простые лингвистические техники.
Соответственно вопрос — как? :)
На счет спел-чекера я полностью согласен. Исправление опечаток тут очень нужно. Но все же, не понятно что вы собираетесь делать.
>> То есть запрос пользователя подвергается предварительной обработке (например, упомянутые ранее исправление ошибок/опечаток, морфология, синтаксис, семантика и прочее).
Это, конечно, сильно. Но давайте разберем, что вы предлагаете. Ладна, морфология — не такая уж проблема. Синтаксис — будет тяжело. Сложность задачи повышает то, что редкий пользователь пишет синтаксически верные предложения. Но да ладно, таки или иначе это можно решить. Но что касается семантики — это что? Как вы собираетесь хранить знания? Что это за внутренний язык, который вы упомянули. Поясните, плз.
utilitymill.com/utility/markov_rewriter
А что за интерпретатор, кстати?
Самый удобыный для меня — python + numpy/scipy/sckit-learn. Nltk для работы с текстом. Это чтобы воткнуться в проблему. Но для продакшна лучше конкретную тулзу подобрать, типа liblinear/libsvm.
Думаю, то же самое говорили Генри Форду, когда он предложил конвейер :). Вы правы в том, что решает экономика. Рано или поздно эти дивайсы станут дешевыми.
И почти каждое нововведение убивает рабочие места. Но это и хорошо, так как люди перераспределяются и работают более продуктивно.
Господа могут меня заминусить, однако учить систему эмитировать человека, вбивая правила на регекспах и эвристики — тупейшая трата времени. Есть целая куча формальных логик, есть компьютерная лингвистика, есть машинное обучение в конце концов. Не лучше ли по-взрослому взяться за проблему.
На практике работает довольно быстро. Выигрыш достигается за счет побитовых операций.