Skip to content

KRwordrank 및 SentenceBERT를 응용한 음식점 키워드 추출 코드 및 모델입니다.

Notifications You must be signed in to change notification settings

KDT-Hot6/final_project

Repository files navigation

final_project

Keyword extractor

KR-wordrank

Code

/keyword/key_sentences.py에서 활용 예시들을 보실 수 있습니다.

DATA_SAVE_PATH를 변경하면 원하는 위치에 KR-WordRank를 통해 처리된 데이터들을 저장할 수 있습니다.

DATA_SAVE_PATH = '/home/ubuntu/hot6/data/hot6_db_keysentences_'+datetime.now().strftime("%Y-%m-%d_%H-%M-%S")

도메인에 따라서 사용되는 stopwords가 변경되어야 좋은 키워드를 추출할 수 있습니다.
일반적으로 다른 리뷰들에서 반복되는 키워드들을 stopwords로 설정하면 준수한 성능을 보이는 것을 확인하실 수 있습니다. TF-IDF, BM25 알고리즘 등을 활용하실 수도 있습니다.

Setup

pip install krwordrank

Requirements

  • Python >= 3.5
  • numpy
  • scipy

SentenceBERT

Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks (EMNLP 2019) 논문, 직접 수집하고 제작한 음식점 리뷰 데이터를 통해 Korean Sentence BERT를 학습하였습니다.

기본 base 코드는 다음 링크에 있으니 참고해주시길 바랍니다.
https://github.com/BM-K/KoSentenceBERT_SKTBERT

sentenceBERT

현재 KoSentenceBERT는 다음과 같은 setup 과정이 없으면 동작하지 않습니다.

Setup

Sentence-BERT의 토크나이저가 4.1.0 버전 이상에서 동작하여 라이브러리를 수정하였습니다.
huggingface transformer, sentence transformers, tokenizers 라이브러리 코드를 직접 수정하므로 가상환경에서 환경을 세팅하시길 바랍니다.

git clone https://github.com/SKTBrain/KoBERT.git
cd KoBERT
pip install -r requirements.txt
pip install .
cd ..
git clone https://github.com/BM-K/KoSentenceBERT_SKTBERT.git
pip install -r requirements.txt
!pip uninstall transformers
!pip install transformers = 4.1.1
!pip uninstall tokenizers
!pip install tokenizers = 0.9.4

tokenizers 의 init.py를 다음과 같이 수정해줍니다.

__version__ = "0.5.2"

from dataclasses import dataclass,field

try:
    import tokenizers
    _tokenizers_available=True
except ImportError:
    _tokenizers_available=False

def is_tokenizers_available():
    return _tokenizers_available


@dataclass(frozen=True, eq=True)
class AddedToken:
    """
    AddedToken represents a token to be added to a Tokenizer An AddedToken can have special options defining the
    way it should behave.
    """

    content: str = field(default_factory=str)
    single_word: bool = False
    lstrip: bool = False
    rstrip: bool = False
    normalized: bool = True

    def __getstate__(self):
        return self.__dict__

@dataclass
class EncodingFast:
    """ This is dummy class because without the `tokenizers` library we don't have these objects anyway """

    pass



from .tokenizers import Tokenizer, Encoding
from .tokenizers import decoders
from .tokenizers import models
from .tokenizers import normalizers
from .tokenizers import pre_tokenizers
from .tokenizers import processors
from .tokenizers import trainers
from .implementations import (
    ByteLevelBPETokenizer,
    CharBPETokenizer,
    SentencePieceBPETokenizer,
    BertWordPieceTokenizer,
)

transformer, tokenizers, sentence_transformers 디렉토리를 opt/conda(가상환경 폴더)/lib/python3.7/site-packages/ 로 이동합니다.

Train Models

모델 학습을 원하시면 KoSentenceBERT 디렉토리 안에 KorNLUDatates이 존재해야 합니다.
리뷰 데이터 구조에 맞게 STS데이터를 직접 만들어 사용하였고 데이터 예와 학습 방법은 아래와 같습니다.

뇨끼를 주문했었는데 쫄깃하고 크림 또한 느끼하지 않고 고소하고 맛있었어요.    한식 주문했었는데 쫄깃하고 크림 또한 느끼하지 않고 고소하고 맛있었어요.    1.0
뇨끼를 주문했었는데 쫄깃하고 크림 또한 느끼하지 않고 고소하고 맛있었어요.    파스타를 주문했었는데 쫄깃하고 크림 또한 느끼하지 않고 고소하고 맛있었어요.    4.8
느끼하지 않고 고소하고 맛있었어요.    느끼하지 않고 고소하고 맛없었어요.    0.6
느끼하지 않고 고소하고 맛있었어요.    느끼하지 않고 꼬소하고 맛있었어요.    5.0
느끼하지 않고 고소하고 맛있었어요.    느끼하지 않고 구수하고 맛있었어요.    4.8
python training_sts.py 

현재 음식점 리뷰데이터에 최적화된 상태로 학습된 모델은 다음 폴더에 pt파일로 저장되어 있습니다.
/model/training_stsbenchmark_skt_kobert_model_-2021-03-28_05-25-43_best/

About

KRwordrank 및 SentenceBERT를 응용한 음식점 키워드 추출 코드 및 모델입니다.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages