레플리
글 수 282

문장을 벡터로 변환하는 방법들

조회 수 926 추천 수 0 2021.09.16 15:57:52


 

https://ichi.pro/ko/sentence-bertleul-sayonghan-pungbuhan-munjang-imbeding-pateu-i-226626600899395

 

 

 

보통 챗봇에서 많이 사용하는 방법 중 하나가 문장의 유사도를 비교하는 것입니다. 만약 사용자가 U라는 질문을 했다면, DB에서 U와 가장 비슷한 질문 Q를 찾습니다. 그리고 거기에 해당하는 대답 A를 출력합니다. 이런 유사도는 자카드 유사도(Jaccard similarity)처럼 문자열 단위로 비교할 수도 있습니다. 하지만 신경망에서는 무조건 벡터 단위로 처리해야 합니다.

 

문장을 벡터로 표현하는 가장 간단한 방법은 BoW(Bag of Words)입니다. OHE(One Hot Encoding)과 거의 유사하지만 문장안에 있는 모든 단어를 하나의 벡터로 나타낼 수 있습니다. 이때 벡터의 차원은 단어사전의 개수입니다. 전체 코퍼스의 단어가 1만개라면 1만차원의 벡터가 됩니다. 각 차원의 위치는 하나의 단어와 매칭됩니다. 처음에는 벡터를 모두 0으로 초기화 하고, 문장에 나온 모든 단어의 차원에 1을 넣습니다. 보통 다음과 같이 표현됩니다.

 

(0, 1, 1, 0, 0, 0, ... , 0, 1, 0)

 

중복을 허용해도 됩니다. 한 문장에 같은 단어가 여러번 나오면 그 숫자만큼 차원의 위치에 넣습니다. 계속 반복되는 단어는 그만큼 더 중요하다는 의미가 됩니다.

 

(0, 1, 5, 0, 0, 2, ... , 0, 1, 0)

 

하지만 BoW는 큰 단점이 있습니다. 반복되는 단어가 다른 문장들에도 흔하게 나오는 것이라면, 오히려 그 문장만의 차별성이 사라지게 됩니다. TF-IDF는 이런 문제점을 조금 완화시켜 줍니다. 흔한 단어들은 수치를 낮춰 특징을 떨어뜨리고, 그 문장에만 나오는 독특한 단어들은 수치를 높여 문장 구분이 더 잘되게 합니다.

 

 

 

Word2Vec이나 GloVe 같은 단어 임베딩으로 문장 벡터를 만드는 것도 가능합니다. 문장의 각 단어를 임베딩으로 변환하고 모두 합하여 평균을 냅니다. 이렇게 하면 하나의 벡터로 문장을 나타낼 수 있습니다. BERT도 비슷한 방법을 씁니다. 문장을 입력에 넣고 출력으로 나온 각 토큰의 벡터를 평균냅니다. 또는 분류를 위해 사용되는 가장 앞의 CLS 토큰만 쓰기도 합니다. 그러나 실험 결과를 보면 BERT 평균값이나 CLS 토큰을 사용했을 때, GloVe 평균값을 썼을 때보다 오히려 정확도가 더 낮다고 합니다.

 

이런 BERT의 문장 임베딩을 더 강화한 것이 Sentence-BERT입니다. 기존 사전훈련된 BERT를 별도의 모델 구조로 다시 훈련시킵니다. 이렇게 한번 파인튜닝을 거치면 문장의 임베딩 성능이 훨씬 높아집니다. 카카오브레인에서 공개한 Pororo에도 문장 임베딩 기능이 있습니다. 몇 줄의 코드만으로 간단하게 문장을 벡터로 변환할 수 있습니다.

 

https://kakaobrain.github.io/pororo/text_cls/sent2vec.html

 

엮인글 :
List of Articles
제목 글쓴이 날짜 조회 수
부적절한 문장을 판단해주는 딥러닝 모델 - Ask Delphi file 깊은바다 2021-11-08 399
문장을 벡터로 변환하는 방법들 깊은바다 2021-09-16 926
네이버의 초거대모델인 HyperCLOVA 논문 file 깊은바다 2021-09-13 556
챗봇의 슬롯 채우기(Slot Filling)와 DST(Dialogue State Tracking) file 깊은바다 2021-08-19 1455
죽은 약혼자를 챗봇으로 살려낸 남자 - Project December 깊은바다 2021-07-27 559
인터넷 검색을 하고 장기기억을 저장하는 페이스북의 챗봇 - Blenderbot 2 file 깊은바다 2021-07-19 653
GPT-3 데모 사이트 - gpt3demo.com 깊은바다 2021-07-13 3701
6B 파라미터의 GPT-J_6B 오픈소스 모델 깊은바다 2021-07-01 3094
GPT-3를 활용하여 주석을 코드로 바꿔주는 GitHub Copilot 깊은바다 2021-06-30 356
구글의 딥러닝 대화 모델 - LaMDA 깊은바다 2021-06-13 587
일상대화 딥러닝 모델들을 쉽게 실행할 수 있는 Openchat 깊은바다 2021-06-01 569
GPT-3를 사용하여 코딩을 하는 MS의 파워FX 깊은바다 2021-06-01 249
텍스트 스타일을 바꾸는 딥러닝 기술 깊은바다 2021-06-01 436
KoGPT2 v2.0 공개 깊은바다 2021-05-03 1589
이루다 같은 챗봇은 어떤 원리로 작동하는 걸까? 깊은바다 2021-04-03 1691