ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [SentenceTransformers] 파이썬으로 자연어 문장 코사인 유사성 분석하기
    Python/HuggingFace 2023. 7. 3. 11:07
    반응형

    SentenceTransformers를 이용한 문장 유사도 분석


    최근 자연어 처리(NLP, Natural Language Processing) 모델을 사용하면서 다양한 활용 예시를 살펴보고 있습니다. 이번에는 그중에서 파이썬(Python)의 SentenceTransformers 프레임워크를 사용해 보았는데요, 이 프레임워크는 문장 단위로 입력을 할 수 있어서 이번에 작업할 문장 유사도 분석을 수행하는데 있어서 편리한 요소를 보여줍니다. 그리고, 다른 자연어 모델 프레임워크인 Huggingface Transformers를 기반으로 해서 만들어졌다고 하는데, 덕분에 추상화가 잘 되어 있어서 NLP를 잘 모르는 분들도 편리하게 사용할 수 있습니다.

     

     

    저는 이번에 SentenceTransformers에서 제공하는 ko-sroberta-multitask 모델을 사용해 봤습니다. 이 모델은 BERT를 기반으로 한 RoBERTa 모델을 한국어에 맞게 fine-tunning한 모델로 큰 배치 입력이 가능하다는 장점이 있답니다. 아래에 두 문장이 얼마나 비슷한지를 살펴보는 코드를 작성해 보겠습니다.

     

     

    # 패키지 및 모델 불러오기
    from sentence_transformers import SentenceTransformer, util
    model = SentenceTransformer('jhgan/ko-sroberta-multitask')
    
    x = model.encode('안녕 난 잎싹이야')
    y = model.encode('앙녕 나눈 아리야')
    
    util.pytorch_cos_sim(x, y)
    tensor([[0.3085]])

     

     

    두 문장을 분석하는 방식은 코사인 유사성(Cosine similarity)라는 방식을 이용한다고 합니다. 코사인 유사성의 수학적인 정의는 생략하도록 하고요, 이 값이 1에 가까울수록 두 문장이 비슷한 문장이라고 생각하시면 됩니다. 그리고, 다양한 문장과 동시에 대조를 해 보려면 입력값을 문자열로 바꿔서 넣어주면 됩니다. 이 때는 결과값의 차원이 늘어나지는 않습니다.

     

     

    x = model.encode(['안녕 난 잎싹이야', '앙녕 난 잎싹이야', '안녕 나눈 잎싹이야'])
    y = model.encode('앙녕 나눈 아리야')
    
    util.pytorch_cos_sim(x, y)
    tensor([[0.3085],
            [0.3915],
            [0.4827]])

     

     

    이렇게 파이썬의 SentenceTransformers 프레임워크에서 제공되는 ko-sroberta-multitask 모델로 코사인 유사성을 구해보는 작업을 해 봤습니다. 길다란 문장도 문제 없이 입력할 수 있고, 다양한 한국어 문장을 제법 그럴듯하게 비슷한 점을 찾아내는 덕분에 엄격한 분류가 아니라 어떤 문장과 가장 비슷한지 알아내는 방식으로 활용하는데는 충분한 듯합니다. 단적인 예로, 아래 예시와 같이 길다란 문장도 비교해 볼 수 있습니다.

     

     

    x = model.encode('안녕 난 LA에서 야구하는 잎싹이야')
    y = model.encode('잎싹이라고 하니 LA에 있었을 때 이야기를 하지 않을 수 없군요. 제가 LA에 있을때는 말이죠 정말 제가 꿈에 무대인 메이저리그로 진출해서 가는 식당마다 싸인해달라 기자들은 항상 붙어다니며 취재하고 제가 그 머~ 어~ 대통령이 된 기분이였어요 그런데 17일만에 17일만에 마이너리그로 떨어졌어요 못던져서 그만두고 그냥 확 한국으로 가버리고 싶었어요 그래서 집에 가는길에 그 맥주6개 달린거 있잖아요 맥주6개 그걸 사가지고 집으로 갔어요 그전에는 술먹으면 야구 못하는줄 알았어요 그냥 한국으로 가버릴려구.... 그리고 맥주 6개먹고 확 죽어버릴려고 그랬어요 야구 못하게 되니깐 그러나 집에가서 일단은 부모님에게 전화를 해야겠다고 생각을 했어요 다음날 가려고 전화를 딱 했는데 어머니께서 찬호야 어후~ 찬호야 아들 잘있어 밥은 먹고 다니는겨~ 잘지내는겨 대뜸 그러시는 거에요 내가 말도 하기도 전해 그래서 저는 야구좀 안되지만 잘하고 있다고 여기사람들 잘챙겨준다고 라고 거짓말을  했어요 한국은 못가게 됬지 내일 야구장은 가야하지 막막하더라구요 그럼 어떻게 가야하나 생각을 했어요 그리고 나서 영어공부를 하게 됬는데요...')
    
    util.pytorch_cos_sim(x, y)
    tensor([[0.5774]])
    반응형

    댓글

문의: jwkang3929@naver.com