파이썬 word2vec 중 TfidfEmbeddingVectorizer 질문입니다.

조회수 871회

Text embedding

from sklearn.feature_extraction.text import TfidfVectorizer
from collections import defaultdict
import numpy as np

Docs embedding

    TfidfEmbeddingVectorizer
    class TfidfEmbeddingVectorizer(object):
    def __init__(self, word2vec):
        self.word2vec = word2vec


    def transform(self, X):
        tfidf = TfidfVectorizer(analyzer = lambda x : x) 
        tfidf.fit(X) 



    max_idf = max(tfidf.idf_)



        word2weight = defaultdict(lambda : max_idf, [(w, tfidf.idf_[i]) for w, i in tfidf.vocabulary_.items()]) 

        array_list =[]
        for words in X:
            array_list.append(np.array(np.mean([self.word2vec[w]*word2weight[w] for w in words if w in self.word2vec] or [np.zeros(100)], axis = 0)))
        return(array_list)



    vec_tf_skip_gram = TfidfEmbeddingVectorizer(w2v_skip_gram)

    vec_tf_CBOW = TfidfEmbeddingVectorizer(w2v_CBOW)

skip-gram

train_tf_s = vec_tf_skip_gram.transform(text_train)
test_tf_s = vec_tf_skip_gram.transform(text_test)

CBOW

train_tf_c = vec_tf_CBOW.transform(text_train)
test_tf_c = vec_tf_CBOW.transform(text_test)

NameError                                 Traceback (most recent call last)
<ipython-input-8-58d8af0cf2a6> in <module>
     67         return(array_list)
     68 
---> 69 vec_tf_skip_gram = {TfidfEmbeddingVectorizer}'(w2v_skip_gram)
     70 vec_tf_CBOW = 'TfidfEmbeddingVectorizer'(w2v_CBOW)
     71 # skip-gram

NameError: name 'w2v_skip_gram' is not defined

and also error on w2v_CBOW too how can i fix this?

보시다 시피 vec_tf_skip_gram = {TfidfEmbeddingVectorizer}'(w2v_skip_gram)에서 name error가 나옵니다 물론 그 다음인 70 vec_tf_CBOW = 'TfidfEmbeddingVectorizer'(w2v_CBOW)에서도 error가 나오는데 어떻게 해결해야할까요?

  • 주어진 코드에서는 w2v_skip_gram, w2v_CBOW 변수가 선언된 곳이 없습니다. 당연히 name error 입니다. 정영훈 2020.1.1 12:50
  • 제가 완전 파이썬 초보라 주어진거 따라하는 중인데 변수 선언을 어떻게 하면 될까요? 최준호 2020.1.1 13:01
  • 그 부분은 따라하는 문서(?) 작성한 분한테 여쭤봐야죠. 따라하는 문서가 인터넷에 공개된 것이면 링크를 올려보세요. 정영훈 2020.1.1 13:28
  • http://www.datamarket.kr/xe/index.php?mid=board_BoGi29&document_srl=33272&listStyle=viewer 이 문서에서 보고 따라하고 있는데 전까지는 문제 없다가 여기서 문제가 나타나네요! 오류가 나오는 부분은 # Text embedding 하기 여기서입니다! 최준호 2020.1.1 13:38

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    해당 문서에서 아래의 부분의 model1, model2 로 선언된 부분을 수정했습니다.

    # Word2Vec(CBOW / skip-gram)
    # 단어의 문맥적 의미를 보존하면서 단어를 벡터로 표현하는 과정 
    - CBOW :  주변 N개의 단어들로 target단어를 예측
    - skip-gram : target단어로 주변 N개 단어 등장여부를 예측
    
    from gensim.models import Word2Vec
    # Skip-gram (sg=1)
    w2v_skip_gram = Word2Vec(text_train, size=100, window=10, min_count=10, workers=4, sg=1)
    # CBOW (sg=0)
    w2v_CBOW = Word2Vec(text_train, size=100, window=10, min_count=10, workers=4, sg=0)
    
    # size : 한 단어당 몇 차원의 벡터로 만들지
    # window : 앞뒤 몇개의 단어를 사용할지
    # min_count : 최소 등장 횟수(min_count이하인 단어는 제외)
    # sg : CBOW(=0)로 할지 skip-gram(=1)으로 할지
    
    • 새해부터 친절한 답변 정말 감사드립니다! 제가 질문드린 문제는 해결됬는데 실행중에 이러한 문제가 발생하는데 C:\Anaconda3\envs\venv\lib\site-packages\ipykernel_launcher.py:67: DeprecationWarning: Call to deprecated `__contains__` (Method will be removed in 4.0.0, use self.wv.__contains__() instead). C:\Anaconda3\envs\venv\lib\site-packages\ipykernel_launcher.py:67: DeprecationWarning: Call to deprecated `__getitem__` (Method will be removed in 4.0.0, use self.wv.__getitem__() instead). __contains__, __getitem__ 을 코드중에서 발견할 수 없는데 어떻게 self로 바꾸면 될까요? 최준호 2020.1.1 14:50
    • DeprecationWarning 이니 일단 무시하세요. 아무래도 코드 작성시기가 17년도라서 당시에 작성한 코드들이 현재 버전의 라이브러리들하고 안맞으니 훗날 제거될 수 있다고 메세지를 주는 겁니다. 학습하는 수준에선 고민할 부분은 아닙니다. 정영훈 2020.1.1 14:55
    • text_train과 lable_train 값만 출력되고 계속 반응이 없다가 저 오류가 떠서 당황했었네요 마지막 결과값이 나올려면 더 시간이 지나야나오겠죠 아마? 이제 공부하고 있는중이라 궁금하게 너무 많은데 빠르고 정확한 답변 너무 감사드립니다 새해복 많이 받으시고 행복한 한해되세요!! 최준호 2020.1.1 15:01
    • 변수 몇개 수정해야 하지만 잘 나옵니다. https://notebooks.azure.com/wincommerce/projects/hashcode/html/9374.ipynb 정영훈 2020.1.1 15:46

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)