텍스트 산점도 플롯을 사용하여 단어 임베딩 시각화하기
이 예제에서는 2차원 및 3차원 t-SNE와 텍스트 산점도 플롯을 사용하여 단어 임베딩을 시각화하는 방법을 보여줍니다.
단어 임베딩은 단어집의 단어를 실수형 벡터로 매핑합니다. 벡터는 유사한 단어들이 유사한 벡터를 갖도록 단어의 의미 체계를 캡처합니다. 또한 어떤 임베딩은 "이탈리아와 프랑스의 관계는 로마와 파리의 관계와 같다"처럼 단어 사이의 관계도 캡처합니다. 벡터 형식에서 이 관계는 입니다.
사전 훈련된 단어 임베딩 불러오기
사전 훈련된 단어 임베딩을 fastTextWordEmbedding
을 사용하여 불러옵니다. 이 함수를 사용하려면 Text Analytics Toolbox™ Model for fastText English 16 Billion Token Word Embedding 지원 패키지가 필요합니다. 이 지원 패키지가 설치되어 있지 않으면 함수에서 다운로드 링크를 제공합니다.
emb = fastTextWordEmbedding
emb = wordEmbedding with properties: Dimension: 300 Vocabulary: [1×999994 string]
word2vec
및 vec2word
를 사용하여 단어 임베딩을 탐색합니다. word2vec
을 사용하여 단어 Italy, Rome 및 Paris를 벡터로 변환합니다.
italy = word2vec(emb,"Italy"); rome = word2vec(emb,"Rome"); paris = word2vec(emb,"Paris");
italy - rome + 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
vec2word
를 사용하여 임베딩에서 vec
에 가장 가까운 단어를 찾습니다.
word = vec2word(emb,vec)
word = "France"
2차원 텍스트 산점도 플롯 만들기
tsne
및 textscatter
를 사용해서 2-D 텍스트 산점도 플롯을 만들어 단어 임베딩을 시각화합니다.
word2vec
을 사용하여 처음 5000개 단어를 벡터로 변환합니다. V
는 길이가 300인 단어 벡터로 구성된 행렬입니다.
words = emb.Vocabulary(1:5000); V = word2vec(emb,words); size(V)
ans = 1×2
5000 300
tsne
를 사용하여 2차원 공간에 단어 벡터를 임베딩합니다. 이 함수를 실행하는 데 몇 분 정도 소요될 수 있습니다. 수렴 정보를 표시하려면 'Verbose'
이름-값 쌍을 1로 설정하십시오.
XY = tsne(V);
2-D 텍스트 산점도 플롯에서 XY
에 의해 지정된 좌표에 단어를 플로팅합니다. 가독성을 위해 textscatter
는 기본적으로 모든 입력 단어를 표시하지는 않으며 마커를 대신 표시합니다.
figure
textscatter(XY,words)
title("Word Embedding t-SNE Plot")
플롯의 한 부분을 확대합니다.
xlim([-18 -5]) ylim([11 21])
3-D 텍스트 산점도 플롯 만들기
tsne
및 textscatter
를 사용해서 3-D 텍스트 산점도 플롯을 만들어 단어 임베딩을 시각화합니다.
word2vec
을 사용하여 처음 5000개 단어를 벡터로 변환합니다. V
는 길이가 300인 단어 벡터로 구성된 행렬입니다.
words = emb.Vocabulary(1:5000); V = word2vec(emb,words); size(V)
ans = 1×2
5000 300
차원 수를 3으로 지정하여 tsne
를 사용해서 3차원 공간에 단어 벡터를 포함시킵니다. 이 함수를 실행하는 데 몇 분 정도 소요될 수 있습니다. 수렴 정보를 표시하려는 경우 'Verbose'
이름-값 쌍을 1로 설정할 수 있습니다.
XYZ = tsne(V,'NumDimensions',3);
3-D 텍스트 산점도 플롯에서 XYZ에 의해 지정된 좌표에 단어를 플로팅합니다.
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])
군집 분석 수행
word2vec
을 사용하여 처음 5000개 단어를 벡터로 변환합니다. V
는 길이가 300인 단어 벡터로 구성된 행렬입니다.
words = emb.Vocabulary(1:5000); V = word2vec(emb,words); size(V)
ans = 1×2
5000 300
kmeans
를 사용하여 25개 군집을 검색합니다.
cidx = kmeans(V,25,'dist','sqeuclidean');
앞에서 계산된 2-D t-SNE 데이터 좌표를 사용하여 텍스트 산점도 플롯에서 군집을 시각화합니다.
figure textscatter(XY,words,'ColorData',categorical(cidx)); title("Word Embedding t-SNE Plot")
플롯의 한 부분을 확대합니다.
xlim([13 24]) ylim([-47 -35])
참고 항목
readWordEmbedding
| textscatter
| textscatter3
| word2vec
| vec2word
| wordEmbedding
| tokenizedDocument