Я хочу понять, что подразумевается под «размерностью» во вложениях слов.
Когда я встраиваю слово в виде матрицы для задач НЛП, какую роль играет размерность? Есть ли наглядный пример, который может помочь мне понять эту концепцию?
Я хочу понять, что подразумевается под «размерностью» во вложениях слов.
Когда я встраиваю слово в виде матрицы для задач НЛП, какую роль играет размерность? Есть ли наглядный пример, который может помочь мне понять эту концепцию?
Встраивание слов — это просто сопоставление слов с векторами. Размерность во встраиваниях слов относится к длине этих векторов.
Эти сопоставления бывают разных форматов. Большинство предварительно обученных вложений доступны в виде текстового файла, разделенного пробелами, где каждая строка содержит слово в первой позиции и его векторное представление рядом с ним. Если бы вы разделили эти строки, то обнаружили бы, что они имеют длину 1 + dim
, где dim
— размерность векторов слов, а 1
соответствует представляемому слову. Реальный пример см. в предварительно обученных векторах GloVe.
Например, если вы загружаете glove.twitter.27B.zip
, разархивируете его и запускаете следующее код питона:
#!/usr/bin/python3
with open('glove.twitter.27B.50d.txt') as f:
lines = f.readlines()
lines = [line.rstrip().split() for line in lines]
print(len(lines)) # number of words (aka vocabulary size)
print(len(lines[0])) # length of a line
print(lines[130][0]) # word 130
print(lines[130][1:]) # vector representation of word 130
print(len(lines[130][1:])) # dimensionality of word 130
вы бы получили вывод
1193514
51
people
['1.4653', '0.4827', ..., '-0.10117', '0.077996'] # shortened for illustration purposes
50
Несколько несвязанным, но не менее важным является то, что строки в этих файлах сортируются в соответствии с частотой встречаемости слов в корпусе, в котором обучались вложения (сначала наиболее часто встречающиеся слова).
Вы также можете представить эти вложения как словарь, где ключи — это слова, а значения — это списки, представляющие векторы слов. Длина этих списков будет равна размерности ваших векторов слов.
Более распространенной практикой является представление их в виде матриц (также называемых интерполяционными таблицами) размерности (V x D)
, где V
– размер словарного запаса (т. е. количество слов, которые у вас есть), а D
– размерность каждый вектор слова. В этом случае вам нужно сохранить отдельный словарь, сопоставляющий каждое слово соответствующей строке в матрице.
Что касается вашего вопроса о роли размерности, вам понадобится некоторая теоретическая база. Но в двух словах: пространство, в которое встроены слова, обладает хорошими свойствами, позволяющими системам НЛП работать лучше. Одно из этих свойств заключается в том, что слова, имеющие сходное значение, пространственно близки друг к другу, то есть имеют схожие векторные представления, измеряемые метрикой расстояния, такой как евклидово расстояние или косинусное сходство.
Вы можете визуализировать 3D-проекцию нескольких вложений слов здесь и посмотреть, например , что слова, наиболее близкие к «дорогам», — это «шоссе», «дорога» и «маршруты» во вложении Word2Vec 10K
.
Для более подробного объяснения я рекомендую прочитать раздел «Вложения Word» в этот пост Кристофера Олаха.
Для получения дополнительной теории о том, почему использование вложений слов, которые являются экземпляром распределенных представлений, лучше, чем использование, например, однократных кодировок (локальные представления), я рекомендую чтение первых разделов Распределенные представления Джеффри Хинтона и др.
Вложения слов, такие как word2vec или GloVe, не встраивают слова в двумерные матрицы, они используют одномерные векторы. «Размерность» относится к размеру этих векторов. Он не зависит от размера словаря, который представляет собой количество слов, для которых вы фактически сохраняете векторы, а не просто выбрасываете их.
Теоретически большие векторы могут хранить больше информации, поскольку у них больше возможных состояний. На практике нет большого преимущества за пределами размера 300-500, а в некоторых приложениях даже меньшие векторы работают нормально.
Вот рисунок с главной страницы GloVe.
Размерность векторов показана на левой оси; например, его уменьшение сделало бы график короче. Каждый столбец представляет собой отдельный вектор, цвет каждого пикселя которого определяется числом в этой позиции вектора.
"Размерность" встраивания слов представляет собой общее количество функций, которые оно кодирует. На самом деле это чрезмерное упрощение определения, но об этом чуть позже.
Выбор функций обычно не выполняется вручную, он автоматически с использованием скрытого слоя в процессе обучения. В зависимости от корпуса литературы выбираются наиболее полезные измерения (признаки). Например, если литература посвящена романтической художественной литературе, параметр пол будет представлен с гораздо большей вероятностью по сравнению с литературой по математике.
Если у вас есть вектор встраивания слов из 100 измерений (например), сгенерированный нейронной сетью для 100 000 уникальных слов, обычно не очень полезно исследовать назначение каждого измерения. и попробуйте пометить каждое измерение «именем функции». Поскольку функции, которые представляет каждое измерение, могут быть не простыми и ортогональными, а поскольку процесс является автоматическим, никто точно не знает, что представляет каждое измерение.
Для получения дополнительной информации по этой теме вы можете найти это пост полезный.
Текстовые данные должны быть преобразованы в числовые данные перед вводом в любой алгоритм машинного обучения. Word Embedding — это подход, при котором каждое слово сопоставляется с вектором.
В алгебре вектор — это точка в пространстве с масштабом и направлением. Проще говоря, вектор — это одномерный вертикальный массив (или, скажем, матрица с одним столбцом), а размерность — это количество элементов в этом одномерном вертикальном массиве.
Предварительно обученные модели встраивания слов, такие как Glove, Word2vec, предоставляют несколько вариантов измерения для каждого слова, например, 50, 100, 200, 300. Каждое слово представляет точку в пространстве размерности D, а слова-синонимы — это точки, расположенные ближе друг к другу. Чем выше размерность, тем лучше будет точность, но потребности в вычислениях также будут выше.
Я не эксперт, но я думаю, что измерения просто представляют собой переменные (также известные как атрибуты или признаки), которые были присвоены словам, хотя это может быть нечто большее. Значение каждого измерения и общее количество измерений будет зависеть от вашей модели.
Недавно я видел эту визуализацию встраивания из библиотеки Tensor Flow: https://www.tensorflow.org/get_started/embedding_viz
Это особенно помогает уменьшить многомерные модели до чего-то, что может быть воспринято человеком. Если у вас более трех переменных, чрезвычайно сложно визуализировать кластеризацию (если, конечно, вы не Стивен Хокинг).
В этой статье Википедии о сокращении измерений и связанных с ней страницах обсуждается, как объекты представлены в измерениях, и проблемы иметь слишком много.
Согласно книге Neural Network Methods for Natural Language Processing
от Goldenberg
, dimensionality
в word embeddings
(demb
) относится к количеству столбцов в первой весовой матрице (веса между входным слоем и скрытым слоем) алгоритмов встраивания, таких как word2vec
. N
на изображении dimensionality
встраивается в слово:
Для получения дополнительной информации вы можете перейти по этой ссылке: https://blog.acolyer.org/2016/04/21/the-amazing-power-of-word-vectors/