Этот пример показывает, как визуализировать вложения слова с помощью 2D и 3-D t-SNE и текстовых графиков рассеивания.
Вложения Word сопоставляют слова в словаре к векторам действительных чисел. Векторы пытаются получить семантику слов, так, чтобы подобные слова имели подобные векторы. Некоторые вложения также получают отношения между словами как "Италия, во Францию, как Рим в Париж". В векторной форме это отношение .
Чтобы воспроизвести результаты в этом примере, установите rng
на 'default'
.
rng('default')
Загрузите предварительно обученное встраивание слова с помощью fastTextWordEmbedding
. Эта функция требует Модели Text Analytics Toolbox™ для fastText английских 16 миллиардов Лексем пакет поддержки Word Embedding. Если этот пакет поддержки не установлен, то функция обеспечивает ссылку на загрузку.
emb = fastTextWordEmbedding
emb = wordEmbedding with properties: Dimension: 300 Vocabulary: [1×999994 string]
Исследуйте встраивание слова с помощью word2vec
и vec2word
. Преобразуйте слова Италия, Рим и Париж к векторам с помощью word2vec
.
italy = word2vec(emb,"Italy"); rome = word2vec(emb,"Rome"); paris = word2vec(emb,"Paris");
Вычислите вектор, данный italy - rome + paris
. Этот вектор инкапсулирует семантическое значение слова Италия, без семантики слова Рим, и также включает семантику слова Париж.
vec = italy - rome + paris
vec = 1×300 single row vector
0.1606 -0.0690 0.1183 -0.0349 0.0672 0.0907 -0.1820 -0.0080 0.0320 -0.0936 -0.0329 -0.1548 0.1737 -0.0937 -0.1619 0.0777 -0.0843 0.0066 0.0600 -0.2059 -0.0268 0.1350 -0.0900 0.0314 0.0686 -0.0338 0.1841 0.1708 0.0276 0.0719 -0.1667 0.0231 0.0265 -0.1773 -0.1135 0.1018 -0.2339 0.1008 0.1057 -0.1118 0.2891 -0.0358 0.0911 -0.0958 -0.0184 0.0740 -0.1081 0.0826 0.0463 0.0043
Найдите самые близкие слова во встраивании в vec
с помощью vec2word
.
word = vec2word(emb,vec)
word = "France"
Визуализируйте встраивание слова путем создания 2D текстового графика рассеивания с помощью tsne
и textscatter
.
Преобразуйте первые 500 слов в векторы с помощью word2vec
. V
является матрицей векторов слова длины 300.
words = emb.Vocabulary(1:5000); V = word2vec(emb,words); size(V)
ans = 1×2
5000 300
Встройте векторы слова в двумерное пространство с помощью tsne
. Эта функция может занять несколько минут, чтобы запуститься. Если вы хотите отобразить информацию о сходимости, то установленный пара "имя-значение" 'Verbose'
в 1.
XY = tsne(V);
Постройте слова в координатах, заданных XY
в 2D текстовом графике рассеивания. Для удобочитаемости textscatter
, по умолчанию, не отображает все входные слова и маркеры отображений вместо этого.
figure
textscatter(XY,words)
title("Word Embedding t-SNE Plot")
Увеличьте масштаб раздела графика.
xlim([-18 -5]) ylim([11 21])
Визуализируйте встраивание слова путем создания 3-D текстового графика рассеивания с помощью tsne
и textscatter
.
Преобразуйте первые 5 000 слов в векторы с помощью word2vec
. V
является матрицей векторов слова длины 300.
words = emb.Vocabulary(1:5000); V = word2vec(emb,words); size(V)
ans = 1×2
5000 300
Встройте векторы слова в 3-мерное пространство с помощью tsne
путем определения количества размерностей, чтобы быть три. Эта функция может занять несколько минут, чтобы запуститься. Если вы хотите отобразить информацию о сходимости, то можно установить пару "имя-значение" 'Verbose'
на 1.
XYZ = tsne(V,'NumDimensions',3);
Постройте слова в координатах, заданных XYZ в 3-D текстовом графике рассеивания.
figure
ts = textscatter3(XYZ,words);
title("3-D Word Embedding t-SNE Plot")
Увеличьте масштаб раздела графика.
xlim([12.04 19.48]) ylim([-2.66 3.40]) zlim([10.03 14.53])
Преобразуйте первые 5 000 слов в векторы с помощью word2vec
. V
является матрицей векторов слова длины 300.
words = emb.Vocabulary(1:5000); V = word2vec(emb,words); size(V)
ans = 1×2
5000 300
Узнайте 25 кластеров с помощью kmeans
.
cidx = kmeans(V,25,'dist','sqeuclidean');
Визуализируйте кластеры в текстовом графике рассеивания с помощью 2D t-SNE координат данных, вычисленных ранее.
figure textscatter(XY,words,'ColorData',categorical(cidx)); title("Word Embedding t-SNE Plot")
Увеличьте масштаб раздела графика.
xlim([13 24]) ylim([-47 -35])
readWordEmbedding
| textscatter
| textscatter3
| tokenizedDocument
| vec2word
| word2vec
| wordEmbedding