Pull to refresh

Comments 21

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

Так насколько я понимаю, представление здесь как раз «плотное», т.е. из предложения «мама мыла раму» мы суммарно можем получить [«мама», «мыла», «раму», «мама_мыла», «мыла_раму», «мама_мыла_раму»], но не «мама_раму», правильно?
в примере "мама мыла раму" если ширина окна свертки 2, но на первом слое действительно не будет ни одного фильтра который ловит «мама — раму», но добавление второго скрытого слоя позволит отловить пару «мама мыла» + «мыла раму», и такой нейрон вполне будет детектировать факт того, что мама и рама связаны

вот в этой статье авторы исследуют вопрос о том что же выучивают нейроны от слоя к слою и получают такую вот визуалицию
большая картинка
image


оказалось, что более глубокие слои выучивают более специфичные фичи, которые как бы являются комбинацией предыдущих
Картинка как раз показывает стандартные свёрточные сети для изображений. Суть таких сетей в том, что вместо оценки распределения на всём изображении (а для картинки в 100x100 пикселей это 10к случайных переменных/входных нейронов) берутся небольшие участки, скажем, 11x11 пикселей (121 переменная). Такой фильтр обучить гораздо проще, а пиксели, которые находятся рядом, с гораздо большей вероятностью окажутся связанными между собой (читать как «несущими повторяющиеся паттерны»), чем те, которые находятся в разных углах картинки.

Свёрточные сети для текста в рамках одного слоя работают так же — обучают фильтры на «локальных участках» текста, как то «мама мыла» и «мыла раму». Но наверх поднимаются уже не конкретные слова, а признаки, отражающую всю пару, т.е. собственно биграмму. Алгоритм видит слово «мала мыла» — сигнал 1, видит что-то другое — сигнал 0. Как тогда может получится «мама — раму» — непонятно.

Могу предположить, что признаки по аналогии с визуальными фильтрами «агрегируются», т.е. если алгоритм видит «мама протирала», то наверх поднимает сигнал `w1 * 1 + w2 * 0`, т.е. продвигает вперёд первое слово (с соответствующим весом), но игнорирует второе. Тогда получается частичное совпадение с паттерном, и при некотором стечении информации модель может выучить связь между «мама» и «раму». Но связь между «хороший фильм» и «отличное кино» всё равно остаётся чем-то странным.

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

Смотрите:

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

Введите слово: хороший

0.725336 отличный
0.706231 лучший
0.695592 лудший
0.675475 недорогой
0.672351 лучщий
0.669878 лутший
0.666732 лучьший
0.663715 лучшый
0.660743 плохой
0.654255 луший
0.652924 нормальный
0.652379 клевый
0.64917 качественный
0.646531 лутьший
0.646344 надежный
0.634561 лчший
0.632026 красивый
0.621539 обычный

Вот слово кино:

Введите слово: кино

0.688375 кинофильм
0.670716 фильм
0.670262 кино2014
0.655078 фильмов
0.636523 фильмы
0.627678 фильми
0.626337 кинофильмы
0.62412 филм
0.61639 сериал

Итого, хороший фильм = 0.72*0.67 = 0.48 от отличного кино.

Это если в лоб. Но есть способ оценивать слова не по отдельности, а в комбинации. Тогда:

Слово______________хороший фильм______плохой фильм
отличное кино _______0.511512____________0.41835
ужасное кино________0.499768____________0.486588
банк булочка________-0.0707078___________-0.0777618

Самостоятельно поэкспериментировать с векторными репрезентациями можно тут servponomarev.livejournal.com/7667.html
Так, стоп. В ЖЖ вы говорите про word2vec, который основан на skip-граммах и векторном пространстве слов. Сравнение близости слов, насколько я помню, там делается через косинусное расстоение. Это всё круто и понятно, но каким образом оно связано со свёрточной сетью из данной статьи?
Как написано в статье, вектора слов являются входными данными для рассматриваемой реализации сверточной сети. Соотвественно, сеть пользуется всем возможностями данного представления — т.е. фильтр выучивает не строго вектор слова «фильм», а может реагировать на слова пропорционально их близости в векторном пространстве
А, т.е. когда вы говорите «вектора слов», вы подразумеваете вектора слов в сжатом пространстве «концепций»? Т.е. сначала каждое слово прогоняется через алгоритм сжатия (какой-нибудь PCA или автокодировщик), а потом уже подаётся на вход свёрточной сети? Тогда да, согласен, входные термы будут обобщаться. Но тогда получается, что под свёртку попадают не пары «мама мыла» и «мыла раму», а как раз эти абстрактные концепции, т.е.:

conv(vector("мама"), vector("мыла"))
conv(vector("мыла"), vector("раму"))


Правильно я понял?
Тогда уж скорее так:

conv([vector(«мама»),vector(«мыла»),vector(«раму»)],w,'valid') где w — вектор весов (прошу прощения, если подзабыл синтаксис matlab'а)

т.е. рама с мылом непосредственно не свертывается. И тут еще один момент не отражен — свертка идет с шагом, равным (обычно) длине вектора, представляющего одно слово. В остальном — верно
Вот теперь всё стало на место, спасибо :)
image

The figure shows two layers of a CNN. Layer m-1 contains four feature maps. Hidden layer m contains two feature maps (h^0 and h^1). Pixels (neuron outputs) in h^0 and h^1 (outlined as blue and red squares) are computed from pixels of layer (m-1) which fall within their 2x2 receptive field in the layer below (shown as colored rectangles). Notice how the receptive field spans all four input feature maps. The weights W^0 and W^1 of h^0 and h^1 are thus 3D weight tensors. The leading dimension indexes the input feature maps, while the other two refer to the pixel coordinates.

вот гляньте сюда — следующий слой аггрегирует изображения полученные прогоном оригинала через каждый фильтр из банка, таким образом следующий вполне может «схватить», или скажем сконструировать такую фичу как «мама — раму» которая активируется при условии что две предыдущие «мама мыла» и «мыла раму» тоже активированы
Да, это как раз то, что я выше назвал неполным совпадением с паттерном. Спасибо за ответ!
Сравнивали точность классификации с какими-нибудь простыми статистическими методами?
По литературным данным в задачах классификации предложений, в среднем сверточные нейронные сети работают существенно лучше, чем например, Naive Bayes, или SVM с n-граммами. На том же наборе данных MR (предложения из отзывах о фильмах), простые методы показывают порядка 60-70% точности. В задачах классификации длинных текстов ситуация не так однозначна.

Тут, конечно надо учитывать, что не все, что опубликовано действительно работает так как написано, мы с этим неоднократно сталкивались, что пока не попробуешь самостоятельно, не узнаешь.
Всё зависит от ситуации. Как-то, когда это ещё не было модно, мы делали сентиментный анализ твитов. После апробирования 15+ моделей (правда, без свёрточных сетей — тогда они для текста ещё активно не использовались) лучший результат показал обычный наивный Байес с корнями слов и POS-тегами, дав что-то порядка 87%. Т.е. все остальные модели даже с теми же признаками давали от силы 80%, а байесовский классификатор из коробки обошёл их сразу почти на 10%. Насколько я понял, такой метод выстрелил за счёт слабой структуры текста в твитах: предложения сокращаются, слова перемешиваются с хеш-тегами и ссылками. Так или иначе, всегда полезно сначала попробовать простые модели, а потом уже иди в направлении решения конкретных проблем.
Спасибо, интересно!
Было бы здорово ещё посмотреть глазами на 2-3 примера ошибок классификатора, чтобы понять масштаб бедствия.
А то, порою, люди такие отзывы пишут, что и нейронная сеть человека не разберётся, позитив это или негатив :)
На английской выборке предложений (отзывы о фильмах)

положительные, ошибочно отнесенные к отрицательным

charming and witty, it's also somewhat clumsy
[allen] manages to breathe life into this somewhat tired premise
.

Отрицательные, отнесенные к положительным
yo, it's the days of our lives meets electric boogaloo
do we really need another film that praises female self-sacrifice?


Из опытов с русскими предложениями (отзывы о телефонах, три класса — положительный, отрицательный, нейтральный)

Отрицательные, отнесенные к нейтральным:

«Такое чувство, как будто забивается оперативная память, или тому подобное»

Положительные, отнесенные к нейтральным:
«Жесткий диск 4 гигабайта, наличие стандартного разъема 3,5 для наушников»
«Недостатков у этого телефона нет»


но это пока на стадии предварительных опытов
Да, во всех случаях человек бы смог разобраться с тональностью, и это хорошо — значит, есть потенциал для улучшения системы.
Sign up to leave a comment.