본 포스트는 (주)느린생각으로부터 후원을 받아 작성한 글입니다. 다만 책만 받았을 뿐, 실제 저의 삽질일 들어감은 변하지 않음을 알립니다.
판매처 : http://www.yes24.com/24/goods/68385763?scode=032&OzSrank=1
본 책에서의 예제를 따라하기 위해서 아나콘다, 쥬피터 노트북을 사용할 수도 있다. 하지만 그러면 따라하는 것 이상의 의미를 지니지 못한다고 생각한다. 나는 Visual Studio에서 개발환경을 세팅(tensorflow-gpu && anaconda3)하여 따라해 보았다. 만약 나와 같은 길을 따르게 된다면, 따라하는 도중 생긴 수많은 경고와 에러들을 해결하면서 자연스럽게 코드도 이해가 되지 않을까 조심스럽게 생각을 해 본다.
지금부터는 위 링크대로 개발환경을 구성했다는 가정 하에 실제로 예제 따라하기 시작해 보겠다.
물론, 나도 GIT을 쓰긴 하지만(써야 하지만...) 사실, 쥬피터 노트북을 사용하지 않는다고 가정하면 clone을 할 필요가 없다. 나는 저자의 GitHub에서 직접 복붙으로 소스를 따와서 오류들을 잡으며 따라해 보았다.
03.1 Using pre trained word embeddings
설치해 주어야 할 패키지들
- keras(어차피 케라스도 tensorflow를 기반으로 하긴 한다.)
- gensim(3.6.0버전)
- numpy
- matplotlib
- IPython
Binary data를 미리 다운받는다.(1.5G정도로 다운받는데 상당한 시간이 걸림.)
링크 : https://deeplearning4jblob.blob.core.windows.net/resources/wordvectors/%s.gz
그럼 첫 번째 예제부터 살펴본다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | import os import warnings warnings.filterwarnings(action='ignore', category=UserWarning, module='gensim') from keras.utils import get_file from gensim import models import subprocess import numpy as np import matplotlib.pyplot as plt from IPython.core.pylabtools import figsize figsize(10, 10) from sklearn.manifold import TSNE import json from collections import Counter from itertools import chain os.environ["CUDA_VISIBLE_DEVICES"]= "" #model = models.KeyedVectors.load_word2vec_format(unzipped) #, binary=True model = models.KeyedVectors.load_word2vec_format('GoogleNews-vectors-negative300.bin', binary=True) | cs |
결과
1 2 3 4 5 6 7 8 9 10 | ('cappuccino', 0.6888186931610107) ('mocha', 0.6686209440231323) ('coffee', 0.6616827249526978) ('latte', 0.6536753177642822) ('caramel_macchiato', 0.6491268277168274) ('ristretto', 0.648554801940918) ('espressos', 0.6438628435134888) ('macchiato', 0.6428250074386597) ('chai_latte', 0.6308028697967529) ('espresso_cappuccino', 0.6280542612075806) | cs |
두 번째 예제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | def A_is_to_B_as_C_is_to(a, b, c, topn=1): a, b, c = map(lambda x:x if type(x) == list else [x], (a, b, c)) res = model.most_similar(positive=b + c, negative=a, topn=topn) if len(res): if topn == 1: return res[0][0] return [x[0] for x in res] return None print(A_is_to_B_as_C_is_to('man', 'woman', 'king')) for country in 'Italy', 'France', 'India', 'China': print('%s is the capital of %s' % (A_is_to_B_as_C_is_to('Germany', 'Berlin', country), country)) for company in 'Google', 'IBM', 'Boeing', 'Microsoft', 'Samsung': products = A_is_to_B_as_C_is_to( ['Starbucks', 'Apple'], ['Starbucks_coffee', 'iPhone'], company, topn=3) print('%s -> %s' % (company, ', '.join(products))) | cs |
결과
1 2 3 4 5 6 7 8 9 10 | queen Rome is the capital of Italy Paris is the capital of France Delhi is the capital of India Beijing is the capital of China Google -> personalized_homepage, app, Gmail IBM -> DB2, WebSphere_Portal, Tamino_XML_Server Boeing -> Dreamliner, airframe, aircraft Microsoft -> Windows_Mobile, SyncMate, Windows Samsung -> MM_A###, handset, Samsung_SCH_B### | cs |
마지막 예제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | beverages = ['espresso', 'beer', 'vodka', 'wine', 'cola', 'tea'] countries = ['Italy', 'Germany', 'Russia', 'France', 'USA', 'India'] sports = ['soccer', 'handball', 'hockey', 'cycling', 'basketball', 'cricket'] items = beverages + countries + sports len(items) item_vectors = [(item, model[item]) for item in items if item in model] len(item_vectors) vectors = np.asarray([x[1] for x in item_vectors]) lengths = np.linalg.norm(vectors, axis=1) norm_vectors = (vectors.T / lengths).T tsne = TSNE(n_components=2, perplexity=10, verbose=2).fit_transform(norm_vectors) x=tsne[:,0] y=tsne[:,1] fig, ax = plt.subplots() ax.scatter(x, y) for item, x1, y1 in zip(item_vectors, x, y): ax.annotate(item[0], (x1, y1), size=14) plt.show() | cs |
결과
'공부' 카테고리의 다른 글
C 언어 - linked list search 예제 (0) | 2019.02.04 |
---|---|
C 언어 - linked list에서 node를 추가할 때 예외처리 (0) | 2019.02.04 |
C 언어 - 파일을 load 할 때 주의할 점 (0) | 2019.02.04 |
C 언어 형 변환(캐스팅)시 주의할 점 (0) | 2019.02.04 |
C 언어 프로젝트 - 하기 전에 주의해야 할 점 (0) | 2019.02.02 |