Возможно здесь перепутана причина и следствие — поскольку игровые персонажи тупые, то игроку не интересны их тексты, а интересно "куда бежать и кого бить". Если они не будут такие тупые, появятся принципиально новые игровые возможности. А нет этого сейчас по простой причине. Технология еще не дошла. Думаю со временем мы такое увидим.
При обучении правильным ответом считается тот, который следует за рассматриваемой репликой. Неправильный ответ берется случайно из всего набора данных.
Не совсем так. Исходя из общих соображений можно сузить пространство решений, и уже внутри перебирать. Сия ситуация в принципе существует при проектировании любой достаточно сложной системы.
Разница в том, что нейросеть действительно имеет некое представление о мире и набор знаний. Это можно увидеть в тщательно поставленных тестах. Например на вопрос "где живет человек?" ответ "дом" оценивается выше чем "нора", а на вопрос "что такое мотор", выше ранжируется "механизм", "деталь", ниже, например, "животное". Это принципиально другой уровень. При выборе готовых ответов по базе это не всегда заметно, т.к. не всегда в запасе есть правильные ответы.
В статье собственно и написано, что мы решаем задачу сопоставления реплики с ответом. Контекст можно учесть, но это пока мне интересно понять, что может получится без этого.
Это ошибка судя по всему на стороне Google Play. Я не знаю почему она иногда появляется. Помогает от нее найти программу поиском на Google Play, и поставить от туда (для тестировщиков она видна в поиске).
На самом деле есть способы борьбы с этой проблемой. Помимо банальных фильтров можно наложить на нейробот определенный личностный профиль, чтобы ответы соответствовали этому профилю. Но сие отдельная тема.
Порядок слов как раз понимает. Но в демо приняты меры, чтобы одинаковых ответов рядом не было, случайно выбирается ответ, поэтому может казаться, что есть такая проблема. А контекст диалога — исходно задача сформулирована в этой статье как сопоставление вопроса и ответа без контекста. Это ограничение задано заранее. Есть способы учесть контекст, со временем можно их внедрить. Сейчас систему можно рассматривать как просто улучшенный поиск по запросам пользователя, что само по себе полезно для ряда приложений, поэтому такая постановка задачи.
В том, что выложено нужная модель есть. Правда нет примера, с той частью где читаются данные и формируются вектора для входа и для выхода. Старый пример с этой версией уже не совместим. Есть аналогичный функционал в библиотеке TensorFlow от Google (см. сравнение https://habrahabr.ru/company/meanotek/blog/271053/). Если ваш лог не секретный можете прислать мне, я попробую прогнать, посмотрим, что получится )
нет никаго «профита» от numpy ибо никто не мешает вызвать нативные функции из .NET, тот же BLAS (я даже начал это постепенно внедрять). Никто не мешает вызвать cuBLAS если на то пошло, любой GPU код написанный на C. Поэтому это по крайней мере не хуже, чем ситуация с python. Есть даже компиляторы с ограниченного подмножества F# в CUDA C или в OpenCL.
И в python не все так просто. Чтобы получить действительно эффективный код для сложных нейросетевых архитектур, недостаточно перенести только математические функции на GPU, нужно перенести целый блок вызовов этих функций вместе с логикой кода, которая будет на python. Это решается в Theano или TensorFlow тем, что создается средствами подмножества языка из некоторых предопределенных операций вычислительный граф, который компилируется и выполняется на GPU. То же самое можно сделать из F#, даже лучше. Так что принципиальных проблем нет, есть просто факт того, что мейнстрим работает с python'ом.
Более того, я не соглашусь, что без GPU можно посчитать только игрушечные примеры. На распознавании изображений, возможно, но кроме распознавания изображений есть много чего. А еще многие сейчас от избытка ресурсов используют излишни неэффективно спроектированные нейросетевые модели. Например, вставляют везде LSTM ячейки, даже там где они не нужны вообще.
Да, вот это было обучено на CPU, кстати. 160 миллиардов параметров. Совсем не слабо.
Спасибо за положительный отзыв. Я работаю с рекуррентными сетями, в Accord.NET судя по документации с этим, к сожалению, очень туго. Потом Accord.NET он реализуется исключительно на C#, который мне кажется для быстрого прототипирования разных архитектур нейронных сетей слишком громоздким. До начала работы (и после) я смотрел разные библиотеки, но не нашел ничего подходящего. Сейчас ситуация меняется, но медленно. FSCL когда-то я тоже пытался приделать к своей библиотеке (было бы очень красивое решение) но, на тот момент получил замедление работы в 5 раз, из-за накладных расходов. Вернутся к этому руки не доходят.
Но без проверки результатов на тестовой выборке с тремя классами. Что тут еще сказать? Посмотрите, по ссылкам в моем комментарии выше, как плохо работают мульти-классовые классификаторы тональности у людей которые их создавали изначально на данных разбитых на n-классов. И которые потратили месяцы, а то и годы на разработку. Можно ли взять вот так пороги посмотрев на диаграммы и получить хороший результат? Да, повезти может и в лотерею. Но учитывая вышесказанное, без доказательств на тестовой выборке разбитой вручную на три класса, я лично в эти данные не верю.
Чем больше классов мы выделяем, тем ближе они друг к другу находятся и тем хуже определена между ними граница. Это особенно верно для деления на классы непрерывных в общем-то значений, таких как отношение пользователя к чему-либо.
Интуитивно можно это представить так. Допустим вам быстро (на секунду) показывают карточки белого и черного цвета и вам надо назвать цвет. Это не сложно. А теперь представьте, что карточек стало три — белый, черный и темно-синий. Число ошибок возрастет.
То есть:
— Вы взяли набор твитов (обо всем на свете, не только о фильмах), разбитых на два класса, и искуственно сбалансированный.
— Обучили нейронную сеть, практически один в один совпадающую с учебным примером из комплекта Keras.
— Не озаботились дать на вход пре-тренированные вектора слов. Судя по комментариям, не знаете даже зачем это нужно и как работает.
— Получили результат, который почти никак не лучше чем baseline логистическая регрессия. Свалили все на малый размер, немаленькой на самом деле выборки в 160 000 штук. 160 000 это очень много! Это более 1 млн. слов. Например, у нас при определении тональности термина в этой работе, в обучающей выборке было около 3000 терминов и всего порядка 60 тыс. слов.
Далее, взяли с потолка пороговые значения и решили, что теперь у нас будет три класса. Никак не проверили оправданность этого деления. (а ведь задача разделения на три класса — она намного сложнее, и как известно результаты в ней всегда получаются хуже, чем при бинарном). Никак не проверили, что модель годится для предметной области твитов про фильмы. Никак не проверили соотношение классов в реальных выборках.
Само по себе это не плохо. Программисты часто пишут разнообразные hello world'ы только для того чтобы понять как что-то работает. Разобрать азы. Понятное и очень достойное занятие.
Но это — на минутку — исследование общественного мнения!.. Которое попало в весьма популярную газету и на основании его сделаны там еще какие-то выводы про то, какие люди когда ходили в кино. И вот это вопиющее безобразие. Собрали быстренько нечто, настроили за полдня и вперед. Мы крутые и с нами сила!
Может быть я слишком резко реагирую да.Люди не сильно пострадают, если статистика по мнениям о фильме будет не очень правильной. Просто я слишком много видел, что так же делаются и остальные более серьезные исследования. Имел несчастье лично наблюдать, что в российской медицине, например, полно работ, которые настрогали таким же образом, не обращая внимания на досадные детали люди малознакомые с темой. А потом в газетах «российские ученые открыли...» и дальше нас этим лечат, экстрактом рогов и копыт.
Поэтому, хочу призвать всех ответственно относится к данным, которые так или иначе публикуются. Отсутствие должной дисциплины исследователя в мелочах может вести к очень и очень негативным последствиям для всех.
Да, и еще. Странно читать обилие просьб к авторам статьи выложить это на github. Вообще-то это там уже есть, как пример от библиотеки keras. Без загрузки-выгрузки данных твиттера правда. Но основной код это именно он.
Вы на три класса делите, положительные, нейтральные и отрицательные. Должно быть тогда примерно 33% положительных. Кстати, это Accuracy по какой выборке подсчитано?
Язык все равно остается языком и очень много информации общей между твиттером и википедией. Для остального существует дообучение векторов на вашей выборке. Рассуждения о том, что
Это как научить ребенка читать азбуку, а потом дать читать Достоевского
— это философия. А критерий истины это практика. Если на то пошло, существует в определенных задачах такое явление как обобщение признаков нейронной сетью между разными языками вообще. Проблема главная предобученных векторов для анализа тональности, не условная разница между языками твиттера и вики, а то, что слова вроде «хороший» и «плохой» оказываются рядом в пространстве признаков. Но даже при этом предобученные вектора дают как правило улучшение результатов.
Точность, имеется в виду accuracy или precision? Хотелось бы увидеть на самом деле F1 для каждого класса на тестовой выборке. Какова доля положительных твитов в обучающей выборке? Судя по графику, положительные твиты доминируют. Если их доля, скажем 70% то функция, которая не делает ничего, а просто возвращает положительный результат для любого твита будет иметь точность (в смысле accuracy), тоже 70% (по доле положительных твитов), поэтому сама по себе цифра 75% кажется высокой, но ни о чем еще не говорит.
И в python не все так просто. Чтобы получить действительно эффективный код для сложных нейросетевых архитектур, недостаточно перенести только математические функции на GPU, нужно перенести целый блок вызовов этих функций вместе с логикой кода, которая будет на python. Это решается в Theano или TensorFlow тем, что создается средствами подмножества языка из некоторых предопределенных операций вычислительный граф, который компилируется и выполняется на GPU. То же самое можно сделать из F#, даже лучше. Так что принципиальных проблем нет, есть просто факт того, что мейнстрим работает с python'ом.
Более того, я не соглашусь, что без GPU можно посчитать только игрушечные примеры. На распознавании изображений, возможно, но кроме распознавания изображений есть много чего. А еще многие сейчас от избытка ресурсов используют излишни неэффективно спроектированные нейросетевые модели. Например, вставляют везде LSTM ячейки, даже там где они не нужны вообще.
Да, вот это было обучено на CPU, кстати. 160 миллиардов параметров. Совсем не слабо.
Посмотрите например вот здесь, это результаты тестирования систем по анализу тональности ROMIP 2011 года. Сравните значения F1 в таблице 4, 6 и 7 (два класса, три класса, и пять классов). Ухудшение весьма и весьма значительное. Тоже самое можно видеть и на материалах 2012 года. При анализе коротких фрагментов текста, результаты и того хуже.
Интуитивно можно это представить так. Допустим вам быстро (на секунду) показывают карточки белого и черного цвета и вам надо назвать цвет. Это не сложно. А теперь представьте, что карточек стало три — белый, черный и темно-синий. Число ошибок возрастет.
— Вы взяли набор твитов (обо всем на свете, не только о фильмах), разбитых на два класса, и искуственно сбалансированный.
— Обучили нейронную сеть, практически один в один совпадающую с учебным примером из комплекта Keras.
— Не озаботились дать на вход пре-тренированные вектора слов. Судя по комментариям, не знаете даже зачем это нужно и как работает.
— Получили результат, который почти никак не лучше чем baseline логистическая регрессия. Свалили все на малый размер, немаленькой на самом деле выборки в 160 000 штук. 160 000 это очень много! Это более 1 млн. слов. Например, у нас при определении тональности термина в этой работе, в обучающей выборке было около 3000 терминов и всего порядка 60 тыс. слов.
Далее, взяли с потолка пороговые значения и решили, что теперь у нас будет три класса. Никак не проверили оправданность этого деления. (а ведь задача разделения на три класса — она намного сложнее, и как известно результаты в ней всегда получаются хуже, чем при бинарном). Никак не проверили, что модель годится для предметной области твитов про фильмы. Никак не проверили соотношение классов в реальных выборках.
Само по себе это не плохо. Программисты часто пишут разнообразные hello world'ы только для того чтобы понять как что-то работает. Разобрать азы. Понятное и очень достойное занятие.
Но это — на минутку — исследование общественного мнения!.. Которое попало в весьма популярную газету и на основании его сделаны там еще какие-то выводы про то, какие люди когда ходили в кино. И вот это вопиющее безобразие. Собрали быстренько нечто, настроили за полдня и вперед. Мы крутые и с нами сила!
Может быть я слишком резко реагирую да.Люди не сильно пострадают, если статистика по мнениям о фильме будет не очень правильной. Просто я слишком много видел, что так же делаются и остальные более серьезные исследования. Имел несчастье лично наблюдать, что в российской медицине, например, полно работ, которые настрогали таким же образом, не обращая внимания на досадные детали люди малознакомые с темой. А потом в газетах «российские ученые открыли...» и дальше нас этим лечат, экстрактом рогов и копыт.
Поэтому, хочу призвать всех ответственно относится к данным, которые так или иначе публикуются. Отсутствие должной дисциплины исследователя в мелочах может вести к очень и очень негативным последствиям для всех.
Да, и еще. Странно читать обилие просьб к авторам статьи выложить это на github. Вообще-то это там уже есть, как пример от библиотеки keras. Без загрузки-выгрузки данных твиттера правда. Но основной код это именно он.
Как правило это улучшает качество существенно. Правда качество надо еще правильно измерять (см. мой комментарий ниже)
Это и не нужно. вектора предобучаются на любой большой коллекции текстов, например, на википедии. Это легко сделать самостоятельно.