인프런 커뮤니티 질문&답변

chowon9707님의 프로필 이미지

작성한 질문수

[NLP] IMDB 영화리뷰 감정 분석을 통한 파이썬 텍스트 분석과 자연어 처리

[1/4] 퍼셉트론으로 AUC 0.95의 스코어를 얻기

data폴더안에 tsv파일이 없다고 나오는데 어떻게 해야하나요?

작성

·

493

1

안녕하세요

답변 5

0

chowon9707님의 프로필 이미지
chowon9707
질문자

Review 0 of 4673
Review 1000 of 4673
/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:18: DeprecationWarning: Call to deprecated `__getitem__` (Method will be removed in 4.0.0, use self.wv.__getitem__() instead).
/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:20: RuntimeWarning: invalid value encountered in true_divide
Review 2000 of 4673
del df_test["Sentence"][:2037] 하면 하나씩지워지기는 하는데...
어제부터 인덱스에러가 왜 나는지 모르갰습니다..! 위에 테스트는 잘 돌아갔는데...

0

chowon9707님의 프로필 이미지
chowon9707
질문자

삭제된 글입니다

chowon9707님의 프로필 이미지
chowon9707
질문자

IndexError                                Traceback (most recent call last)
<ipython-input-181-af6a117b08a4> in <module>()
      2 counter = 0
      3 for review in clean_train_reviews:
----> 4     train_centroids[counter] = create_bag_of_centroids( review,         word_centroid_map )
      5     counter += 1
      6 

 

IndexError: index 267 is out of bounds for axis 0 with size 267
chowon9707님의 프로필 이미지
chowon9707
질문자

https://colab.research.google.com/drive/1p67KyKdcBErpenHYNR0h6rcCrh20Ekjy?usp=sharing

 

0

chowon9707님의 프로필 이미지
chowon9707
질문자

# 완성된 임베딩 매트릭스의 크기 확인
model.vectors.shape 이코드에서
 
'Word2Vec' object has no attribute 'vectors'
 
어트리뷰트에러나는데 혹시 뭐가 뭐가문제일까요?
구글링해보았는데 젠심 버전 낮췄는데도 어느샌가 부터 자꾸 이부분에서 오류가 납니다
박조은님의 프로필 이미지
박조은
지식공유자

gensim 은 버전 4부터 많은 변화가 있습니다.  아마도 4점대 버전인것 같네요.

vectors 대신에 model.wv 를 해보고 동작한다면 len(model.wv) 로 길이를 세어보세요.

그리고 다음 문서를 참고해 보세요.

https://github.com/RaRe-Technologies/gensim/wiki/Migrating-from-Gensim-3.x-to-4

 

chowon9707님의 프로필 이미지
chowon9707
질문자

감사합니다! 위의 문서에 잘나와있는 것 같아 감사합니다.

 

model.wv 는 잘 되는데,
 
# 완성된 임베딩 매트릭스의 크기 확인
print(len(model.wv))으로 돌리면 TypeError: object of type 'Word2VecKeyedVectors' has no len()...으로 나와서 벡터 크기를 못세어보고 있습니다.. 감사합니다.

0

chowon9707님의 프로필 이미지
chowon9707
질문자

감사합니다! 추가적으로 이 강의를 다 듣고 적용해서 한국어 데이터에 하려고 실습해보려고 하는데 이런 오류가 뜨면서 마지막에 랜덤포레스트 모델이 안돌아가는데 혹시 test랑 train데이터 행의 개수가 달라서 그런걸까요?

 

# 학습 리뷰를 bags of centroids 로 변환한다.
# 학습 리뷰를 bags of centroids 로 변환한다.
counter = 0
for review in clean_train_reviews:
train_centroids[counter] = create_bag_of_centroids( review, \
word_centroid_map )
counter += 1
if counter==4673:
pass

# 테스트 리뷰도 같은 방법으로 반복해 준다.
test_centroids = np.zeros((df_test["Sentence"].size, num_clusters), \
dtype="float32" )

counter = 0
for review in clean_test_reviews:
test_centroids[counter] = create_bag_of_centroids( review, \
word_centroid_map )
counter += 1
if counter==4673:
break


# 랜덤포레스트를 사용하여 학습시키고 예측
forest = RandomForestClassifier(n_estimators = 100)

# train 데이터의 레이블을 통해 학습시키고 예측한다.
# 시간이 좀 소요되기 때문에 %time을 통해 걸린 시간을 찍도록 함
print("Fitting a random forest to labeled training data...")
%time forest = forest.fit(train_centroids, df_train["Sentence"])

 

IndexError: index 4673 is out of bounds for axis 0 with size 4673

세번째 줄에서 에러가 나옵니다.

 

열은 같은데 행의 개수가 각각 4673과 267입니다.

감사합니다

  제 댓글에 코드공유했습니다. 혹시 아시면 알려주시면 감사합니다!

chowon9707님의 프로필 이미지
chowon9707
질문자

if counter==4673:

break
 
 
 
이 줄을 추가했더니 오류는 안나는데 데이터가 많아서 그런지 모델이 생성되기전에 런타임 연결이 해제됩니다.
박조은님의 프로필 이미지
박조은
지식공유자

df_test["Sentence"] 가 레이블값이 맞나요? 강의 데이터가 아닌 다른 데이터라면 fit을 할 때 넣어준 데이터가 학습에 적합한 형태로 변환이 되었는지 확인이 필요합니다.

그리고 break 문을 추가한 이유가 무엇일까요?

 

모델이 생성되기 전에 런타임이 해제되었다면 colab 에서 학습할 수 있는 메모리 용량을 넘어서는 데이터 일수도 있습니다.

모델에 넣어주기 위해 벡터화된 데이터가 너무 크고 희소한 형태로 되어있으면 메모리 오류가 나고 연결이 해제됩니다.

fit 에 넣어준 열의 갯수도 확인해 보세요!

 

chowon9707님의 프로필 이미지
chowon9707
질문자

아하 지도학습에서 사용되는 레이블값은 df_test["PN"]인데 제가  그것을 넣어야하는데 잘못 넣은 것 같습니다.! 열은 각각 5,3개입니다. 중간에 안되는 코드는 건너뛰고했는데 더불어 여기서 예측하고자하는 것은 PN-> 리뷰글의 긍정 혹은 부정이므로 df_test["PN"]를 fit해주는 것이 맞는 것 같습니다.

감사합니다. 

아무래도 너무 크고 희소한 형태라서 여전히 인데스에러가 나는 것 같습니다!

인덱스가 범위가 넘었다고 에러가나서 break문을 넣었더니 돌아가서 해보았는데 지우고 다시 학습데이터 변환과정을 점검해보아야할 것 같습니다. 감사합니다.

0

박조은님의 프로필 이미지
박조은
지식공유자

안녕하세요.

colab 의 폴더에 파일을 업로드 해주셔야 합니다.

하지만 강의 하단의 colab 링크를 사용하시면 파일 업로드 없이 url 로 파일을 읽어와서 실습할 수 있습니다.

아래 링크를 사용하셔도 됩니다.


# 레이블인 sentiment 가 있는 학습 데이터
train = pd.read_csv('https://raw.githubusercontent.com/corazzon/KaggleStruggle/master/word2vec-nlp-tutorial/data/labeledTrainData.tsv', delimiter='\t', quoting=3)
# 레이블이 없는 테스트 데이터
test = pd.read_csv('https://raw.githubusercontent.com/corazzon/KaggleStruggle/master/word2vec-nlp-tutorial/data/testData.tsv', delimiter='\t', quoting=3)

unlabeled_train = pd.read_csv('https://raw.githubusercontent.com/corazzon/KaggleStruggle/master/word2vec-nlp-tutorial/data/unlabeledTrainData.tsv',
header=0, delimiter='\t', quoting=3)