-
아래 글을 작성한지도 꽤 오래되었다. 시간이란 참 빠르군,
1.문제의 발견
오늘 그냥 공부하다가 아래와 같은 상황을 발견했다.
🤪 그래,, 생각해보니 사이킷런의 TfidfVectorizer는 외국꺼고..한글을 잘 알리가 없다. ;;
그래서 knolopy okt를 쓴것과 차이가 있는 것이여다.
리서치할 때 왜 이런 좋은 라이브러리를 두고 다들 구현을 하시지? 라고 생각했는데 그 분들이 맞는 것이였다.
위지원은 접시에 코를 박아야한다.🍽
2. 코드 수정
그래서 각 문장에 있는 명사로만 tfidf를 계산하려고 아래 사이트를 참고했다.
아래 부분은 그냥 split()으로 word를 구분하는데 이 부분만 okt를 사용했다.
확실히 음츰나게 오래걸린다... 띠용때용띠용 7분 머선129
하긴 내가 가지고있는 row가 2300이니까 2300*2300*append할때 용량늘리면서 또 시간걸리고
원본 데이터는 보여줄 수 없으니(회사 데이터이므로) 내가 그냥 조잡하게 데이터를 몇 개 만들었다.
그리고 키워드를 던지고 코드를 돌린 결과 아래와 같이 전혀 문제 없다.
원본 데이터(회사 데이터)에서 비교해본 결과 전 후 차이가 크다. 내가 만든 데이터로는 크게 확인이 불가했다..ㅋㅋ 너무 적어서 그런가
sample_data = {"위지원의 현재 관심사":["저녁","술"]}
3. 인터넷 친구만들기
뭔가 이걸 만들고 있자니 대화형식으로도 쌉파써블일거란 생각이 들었다.
원래 코드에서는 아래와 같이 되어있다. 키워드가 있는 부분만 1 set해서 cosine 계산했다. 완~전 단순하다.
때론 단순한게 최고다 😝 하하
original_col = tfidf_.columns original_col_len = len(original_col) for name, keywords in sample_data.items(): print(name) print(keywords) new_matrix = dict(zip(original_col,[0]*original_col_len)) for keyword in keywords: if keyword in new_matrix: new_matrix[keyword] = 1 cosine_matrix = cosine_similarity(tfidf_, pd.DataFrame(new_matrix.values()).transpose()) sim_scores = [(i, c) for i, c in enumerate(cosine_matrix)] sim_scores = sorted(sim_scores, key=lambda x: x[1], reverse=True) for i in range(5): print("위지원의 인터넷 친구: %s" % que2id[sim_scores[i][0]]) print()
위 코드를 조금 손봐주자. 아래처럼 okt로 문장을 쪼개기만했다.
doc_pos = okt.pos(chat) for pos in doc_pos: if pos[1] == "Noun" and pos[0] in new_matrix: new_matrix[keyword] = 1
그 결과,, 아래처럼 말하면 말을 걸어준다 ㅠㅠ 난 이제 핵인싸다.
sample_data = {"위지원":"아 눈아프다. 하루종일 모니터 보니까 술먹고싶다."}
이제 내일 이걸 API로 만들어볼까 한다.
'2021년 > 개발공부' 카테고리의 다른 글
apache Airflow (0) 2021.04.22 [논문 정리] A Contextual-Bandit Approach to Personalized News Article Recommendation (0) 2021.04.17 [논문 정리] Wide & Deep Learning for Recommender Systems (0) 2021.04.14 쿠버네티스 예제: mongodb+kubernetes (0) 2021.04.12 Python decorator (2) 2021.04.12