Python 프로그래밍 : 위키피디아의 데이터를 사용하여 word2vec을 해보자 {4. 모델 응용편}
소개
4개 세워 기사, 4번째(마지막)입니다.
본고에서 소개하는 것
이하의 링크, 5번째에 게재된 Code를 견본으로 해, 필자가 만든 word2vec 모델을 사용해 시도했습니다!
word2vec
Word2vec Tutorial
Deep learning with word2vec and gensim
미국 google의 연구자가 개발한 Word2Vec에서 자연 언어 처리(독자 데이터)
【Python】word2vec와 클러스터링으로 wiki 코퍼스를 사용하여 플레이
본고에서 소개하지 않는 것
【정리】자연 언어 처리에 있어서의 단어 분산 표현(단어 벡터)과 문서 분산 표현(문서 벡터)
word2vec(Skip-Gram Model)의 구조를 아마 일본 일간결하게 정리해 보겠습니다.
【Python】Word2Vec의 사용법
gensim/word2vec.py
gensim: models.word2vec – Word2vec embeddings
모델 응용편
모델 이용에 이어 Windows에서 진행합니다.
word2vec 모델의 응용
여러 단어를 선택하고 각 단어의 분산 표현(단어 벡터)을 사용하여 클러스터링합니다.
먼저 미리 작성(학습)한 word2vec 모델을 로드합니다.
analyzeWiki_Word2Vec3from gensim.models import Word2Vec
model = Word2Vec.load(r'..\result\jawiki_word2vec_sz200_wndw10.model')
wv = model.wv
그리고 각 단어의 분산 표현을 가져옵니다.
분산 표현을 취득할 때, KeyError가 발생할 가능성을 고려할 필요가 있습니다만, 이번은 할애합니다. (본래라면, Try~Except의 구문을 이용하는 곳일까.)
analyzeWiki_Word2Vec3from scipy.cluster.hierarchy import linkage, dendrogram
import matplotlib.pyplot as plt
%matplotlib inline
words = ["東京", "神奈川", "千葉", "埼玉", "日本", "アメリカ", "ドイツ", "セダン", "ワゴン", "トラック", "自動車", "飛行機", "船舶", "列車"]
vectors = [model[word] for word in words]
#日本語フォントの指定
import matplotlib.pyplot as plt
plt.rcParams["font.family"] = 'Yu Gothic'
이하, 모델 응용의 Code를 소개.
계층형 클러스터링(거리 함수: 워드법)
"일본"이 "도쿄"라고 붙어 버렸습니다. 그 외는, 뭐 기대대로라고 하는 느낌입니다.
analyzeWiki_Word2Vec3l = linkage(vectors, method="ward")
plt.figure(figsize=(20, 15))
dendrogram(l, labels=words)
plt.savefig("../result/word_clustering_dendrogram1.png")
계층형 클러스터링(거리 함수:군 평균법)
"일본"이 "도쿄"와 붙어 버린 것은 변함없이. 그 외라면, “열차”가 왠지 먼 곳에 가 버렸습니다.
analyzeWiki_Word2Vec3l = linkage(vectors, method="average")
plt.figure(figsize=(20, 15))
dendrogram(l, labels=words)
plt.savefig("../result/word_clustering_dendrogram2.png")
비계층형 클러스터링
계층형 클러스터링에서도 예상치 못한 분류였던, “도쿄”가 공중 느낌으로 위치하고 있습니다.
이 결과를 보면, 「도시」의 클러스터가 아니고, 「나라」의 클러스터(특히, 가장 가까운 “일본”)에 속하는 것도 어쩔 수 없는, 라고 납득해 버렸습니다.
analyzeWiki_Word2Vec3from sklearn.cluster import KMeans
from sklearn.decomposition import PCA
import pandas as pd
import matplotlib.pyplot as plt
from collections import defaultdict
kmeans_model = KMeans(n_clusters=4, verbose=1, random_state=0).fit(vectors)
cluster_labels = kmeans_model.labels_
cluster_to_words = defaultdict(list)
for cluster_id, word in zip(cluster_labels, words):
cluster_to_words[cluster_id].append(word)
print(cluster_labels)
for l, w in cluster_to_words.items():
print('=====')
print(l)
print('-----')
print(w)
print('=====')
df = pd.DataFrame(vectors)
df["word"] = words
df["cluster"] = cluster_labels
#PCAで2次元に圧縮
pca = PCA(n_components=2)
pca.fit(df.iloc[:, :-2])
feature = pca.transform(df.iloc[:, :-2])
#日本語フォントの指定
import matplotlib.pyplot as plt
plt.rcParams["font.family"] = 'Yu Gothic'
#散布図プロット
color = {0:"green", 1:"red", 2:"yellow", 3:"blue"}
colors = [color[x] for x in cluster_labels]
plt.figure(figsize=(20, 20))
for x, y, name in zip(feature[:, 0], feature[:, 1], df.iloc[:, -2]):
plt.text(x, y, name)
plt.scatter(feature[:, 0], feature[:, 1], color=colors)
plt.savefig("../result/word_clustering_scatter.png")
plt.show()
요약
위키피디아의 전처리된 데이터로부터 작성된, word2vec 모델을 응용하는 방법을 소개.
Reference
이 문제에 관하여(Python 프로그래밍 : 위키피디아의 데이터를 사용하여 word2vec을 해보자 {4. 모델 응용편}), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Blaster36/items/140f2b5c532c3be4b8fe
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
from gensim.models import Word2Vec
model = Word2Vec.load(r'..\result\jawiki_word2vec_sz200_wndw10.model')
wv = model.wv
from scipy.cluster.hierarchy import linkage, dendrogram
import matplotlib.pyplot as plt
%matplotlib inline
words = ["東京", "神奈川", "千葉", "埼玉", "日本", "アメリカ", "ドイツ", "セダン", "ワゴン", "トラック", "自動車", "飛行機", "船舶", "列車"]
vectors = [model[word] for word in words]
#日本語フォントの指定
import matplotlib.pyplot as plt
plt.rcParams["font.family"] = 'Yu Gothic'
"일본"이 "도쿄"라고 붙어 버렸습니다. 그 외는, 뭐 기대대로라고 하는 느낌입니다.
analyzeWiki_Word2Vec3
l = linkage(vectors, method="ward")
plt.figure(figsize=(20, 15))
dendrogram(l, labels=words)
plt.savefig("../result/word_clustering_dendrogram1.png")
계층형 클러스터링(거리 함수:군 평균법)
"일본"이 "도쿄"와 붙어 버린 것은 변함없이. 그 외라면, “열차”가 왠지 먼 곳에 가 버렸습니다.
analyzeWiki_Word2Vec3l = linkage(vectors, method="average")
plt.figure(figsize=(20, 15))
dendrogram(l, labels=words)
plt.savefig("../result/word_clustering_dendrogram2.png")
비계층형 클러스터링
계층형 클러스터링에서도 예상치 못한 분류였던, “도쿄”가 공중 느낌으로 위치하고 있습니다.
이 결과를 보면, 「도시」의 클러스터가 아니고, 「나라」의 클러스터(특히, 가장 가까운 “일본”)에 속하는 것도 어쩔 수 없는, 라고 납득해 버렸습니다.
analyzeWiki_Word2Vec3from sklearn.cluster import KMeans
from sklearn.decomposition import PCA
import pandas as pd
import matplotlib.pyplot as plt
from collections import defaultdict
kmeans_model = KMeans(n_clusters=4, verbose=1, random_state=0).fit(vectors)
cluster_labels = kmeans_model.labels_
cluster_to_words = defaultdict(list)
for cluster_id, word in zip(cluster_labels, words):
cluster_to_words[cluster_id].append(word)
print(cluster_labels)
for l, w in cluster_to_words.items():
print('=====')
print(l)
print('-----')
print(w)
print('=====')
df = pd.DataFrame(vectors)
df["word"] = words
df["cluster"] = cluster_labels
#PCAで2次元に圧縮
pca = PCA(n_components=2)
pca.fit(df.iloc[:, :-2])
feature = pca.transform(df.iloc[:, :-2])
#日本語フォントの指定
import matplotlib.pyplot as plt
plt.rcParams["font.family"] = 'Yu Gothic'
#散布図プロット
color = {0:"green", 1:"red", 2:"yellow", 3:"blue"}
colors = [color[x] for x in cluster_labels]
plt.figure(figsize=(20, 20))
for x, y, name in zip(feature[:, 0], feature[:, 1], df.iloc[:, -2]):
plt.text(x, y, name)
plt.scatter(feature[:, 0], feature[:, 1], color=colors)
plt.savefig("../result/word_clustering_scatter.png")
plt.show()
요약
위키피디아의 전처리된 데이터로부터 작성된, word2vec 모델을 응용하는 방법을 소개.
Reference
이 문제에 관하여(Python 프로그래밍 : 위키피디아의 데이터를 사용하여 word2vec을 해보자 {4. 모델 응용편}), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Blaster36/items/140f2b5c532c3be4b8fe
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
l = linkage(vectors, method="average")
plt.figure(figsize=(20, 15))
dendrogram(l, labels=words)
plt.savefig("../result/word_clustering_dendrogram2.png")
계층형 클러스터링에서도 예상치 못한 분류였던, “도쿄”가 공중 느낌으로 위치하고 있습니다.
이 결과를 보면, 「도시」의 클러스터가 아니고, 「나라」의 클러스터(특히, 가장 가까운 “일본”)에 속하는 것도 어쩔 수 없는, 라고 납득해 버렸습니다.
analyzeWiki_Word2Vec3
from sklearn.cluster import KMeans
from sklearn.decomposition import PCA
import pandas as pd
import matplotlib.pyplot as plt
from collections import defaultdict
kmeans_model = KMeans(n_clusters=4, verbose=1, random_state=0).fit(vectors)
cluster_labels = kmeans_model.labels_
cluster_to_words = defaultdict(list)
for cluster_id, word in zip(cluster_labels, words):
cluster_to_words[cluster_id].append(word)
print(cluster_labels)
for l, w in cluster_to_words.items():
print('=====')
print(l)
print('-----')
print(w)
print('=====')
df = pd.DataFrame(vectors)
df["word"] = words
df["cluster"] = cluster_labels
#PCAで2次元に圧縮
pca = PCA(n_components=2)
pca.fit(df.iloc[:, :-2])
feature = pca.transform(df.iloc[:, :-2])
#日本語フォントの指定
import matplotlib.pyplot as plt
plt.rcParams["font.family"] = 'Yu Gothic'
#散布図プロット
color = {0:"green", 1:"red", 2:"yellow", 3:"blue"}
colors = [color[x] for x in cluster_labels]
plt.figure(figsize=(20, 20))
for x, y, name in zip(feature[:, 0], feature[:, 1], df.iloc[:, -2]):
plt.text(x, y, name)
plt.scatter(feature[:, 0], feature[:, 1], color=colors)
plt.savefig("../result/word_clustering_scatter.png")
plt.show()
요약
위키피디아의 전처리된 데이터로부터 작성된, word2vec 모델을 응용하는 방법을 소개.
Reference
이 문제에 관하여(Python 프로그래밍 : 위키피디아의 데이터를 사용하여 word2vec을 해보자 {4. 모델 응용편}), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Blaster36/items/140f2b5c532c3be4b8fe
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Python 프로그래밍 : 위키피디아의 데이터를 사용하여 word2vec을 해보자 {4. 모델 응용편}), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Blaster36/items/140f2b5c532c3be4b8fe텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)