파이썬 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가 나오는데 어떻게 해결해야할까요?
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
1 답변
-
해당 문서에서 아래의 부분의 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
댓글 입력