Разбор работы http://arxiv.org/abs/1511.06388 и ответ ailev.

Nov 25, 2015 22:14

1) Я посмотрел на эту конкретную работу (кстати, отличный разбор есть здесь: https://news.ycombinator.com/item?id=10612685Read more... )

Leave a comment

buriy May 6 2016, 16:16:06 UTC
>Строит все сама из сырья, без вмешательства. А тут мы с паяльником...
С одной стороны, да, 2^100 = 10^30 , хватит, чтобы закодировать все слова каким-то уникальным образом с огромным избытком. С этой функциональностью, называемой Local-Sensitive Hashing, нейросеть вполне справляется (так же, как и Bloom filter и Shingles method -- основанные на multiple hash functions -- собственно та же нейросеть, только другими словами и без backpropagation).
С другой стороны, мы выбрали для каждого слова всего 100 (или 500) каким-то образом выбранных бинарных (или пусть даже числовых) признаков. Сумеем ли мы теперь с помощью нейросети и слоёв размером в 4000 нейронов построить из них нужные нам миллионы подпространств, или же большая часть полученных подпространств будет пустой/содержать не нужные нам комбинации объектов и мы не наберём даже 10 миллионов (или даже 5000) нужных нам комбинаций признаков ?
Может, как-то и можно. Но пока что практики ни разу не смогли сказать "да".
Точность в синтаксических тестах для Word2vec и Glove -- 40-80%.
А вот если бы мы запомнили синтаксические параметры морфем -- точность была бы ровно 100%.
Т.е. с одной стороны, да, нейросеть обучается сама. С другой стороны -- всегда обучается не до конца, и всё равно надо доучивать -- сверху накручивать толстую нейросеть, например. Сочеровская MetaMind так и делала, собственно: у них была функция вида f(words, task) . Для f(words, 'synonym') выдавала одно число, для f(words, 'hyponymy') -- другое, для f(words, 'positiveness') -- третье число. И они планировали так реализовать сотни и тысячи функций сверху в одной сети-нахлобучке, или даже в разных, меняемых со сменой второго параметра, как замену классической модели программирования.

Есть ещё и некоторые другие логичные ограничения, не помню, говорил ли я о них:
Полносвязная нейросеть максимальной толщиной N нейронов не может запомнить больше C*N^2 бинарных ответов, на практике это число ещё меньше (из-за градиентного метода и дропаута), и, наверное, не превышает N^1.5 (и обычно не превышает number_of_samples * sum_(epochs) { learning_rate[epoch] } -- на этот параметр тоже нужно смотреть).
Для толщины 4096=2^12 мы тогда получаем возможность запомнить 2^18 = 262k нерегулярных бинарных ответов. Но это меньше, чем 10 миллионов ответов, и намного меньше, чем миллиард нерегулярных возможных ответов для фраз длины 5 слов (см. google n-grams, например -- сколько там фраз?).
Т.е. даже экстенционалы длины два мы не запомним (бывает ли "деревянная дорога", или только "железная" и "привокзальная"?), и даже актанты глаголов не запомним. Возможно, большую часть знаний запомним приблизительно, на уровне "2+2 -- это где-то 3, 4, ну 5, но никак не 19".
И потом это будет мешать нам сделать точный парсинг тех же предложных групп и групп существительных в родительном падеже (можно придумать миллионы похожих фраз с разным разбором: "у него не было мяса птицы" / "у него не было мяса дома" , "у него не было мяса друга" ).

Reply

kelijah May 6 2016, 17:18:53 UTC
Запоминать все возможные варианты корректных словосочетаний в нейросети - это не очень хорошее ее использование. Особенно если учитывать, что множество слов открыто. Их нельзя запомнить в принципе, даже просто список слов. Всегда найдется умник, который придумает на ходу новое слово, комбинируя известные корень, приставку и суффикс и получая новую лексическую единицу.

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

Reply

buriy May 6 2016, 18:10:36 UTC
>Особенно если учитывать, что множество слов открыто. Их нельзя запомнить в принципе, даже просто список слов. Всегда найдется умник, который придумает на ходу новое слово, комбинируя известные корень, приставку и суффикс и получая новую лексическую единицу.
Это, конечно, задачу усложняет, но подавляющее большинство слов не меняются за 5 или даже 20 лет, а новых слов добавляется не так уж много.

>Поэтому не понимаю, зачем пытаться решить априори нерешаемую сетками задачу, добавляя измерения в вектор признаков слова. Есть же более подходящие механизмы.
О, так значит, предмета спора всё-таки нет. Но ведь пытаются решить эту "априори нерешаемую сетками задачу" решить, и именно сетками. Ничего не получается, и я объясняю, почему именно, и рассматриваю варианты, как задачу всё же можно было бы решить.
Если у тебя есть ещё варианты -- то, конечно, давай обсудим.

Reply

kelijah May 7 2016, 04:35:25 UTC
Мне показалось, что один из предлагаемых тобой вариантов решения - добавлять в continuous embedding дополнительные измерения, куда руками вписывать еще признаки.

Тупиковый же путь.

А так да, embeddings вроде полезны при решении старых добрых задач NLP. Иногда.

Reply

kelijah May 8 2016, 16:17:23 UTC
>Если у тебя есть ещё варианты -- то, конечно, давай обсудим.

У меня по этому поводу в голове крутятся два варианта.

1. Neural Turing Machine и вообще все, что основано на полной дифференцируемости и применимости backprop'а. Сама идея красива. Может так оно и в мокрых сетях, хотя как всегда природа умеет придумывать много вариантов под разные задачи, так что это наверняка не единственный подход.

2. Но вообще если присмотреться на тот же word2vector и его порты, то там применяется вполне работоспособный трюк, когда сетка не обременяется хранением всей матрицы. Вместо этого векторы слов хранятся как обычный массив прямого доступа, и векторы подгружаются и сохраняются обратно по мере обработки контекстов.

Reply

buriy May 6 2016, 18:12:23 UTC
И всё же не забывай, что мой пост был ответом на пост ailev, в котором утверждалось, что word embeddings помогут нам достигнуть новых высот в онтологиях и ИИ.

Reply


Leave a comment

Up