Package: newsmodel
Newsmodel pakageNewsmodel pakage는 Tacademy project의 일부입니다.
국가간 관계를 학습하고 예측하기 위해 만들어진 패키지입니다.모델을 학습하고, 학습된 모델을 불러와서 새로운 데이터를 예측합니다.FeaturesTrain featurelabeling되어 있는 데이터를 기반으로 모델을 학습합니다.현재는 3가지 pre-trained model을 지원합니다.지원하고 있는 모델은 다음과 같습니다. "bert", "mobilebert", "Electra"모델 경량화를 위해 quantization 기능을 지원합니다.현 데이터에서 모델의 성능은 다음과 같습니다.다음의 표는 동일한 random state에서 epoch 100를 한 결과입니다.모델 이름성능(accuracy, F1 score)용량quantization 용량static quantization 정확도BERT61, 5942010055Electra64, 631204260MobileBert70, 67953161현재 사용하고 있는 주요한 model은 MobileBert이며, defalt 모델로 사용하고 있습니다.Inference feature기존에 학습한 모델을 사용하여 새로이 수집한 데이터와 api사용자가 입력한 문장의 관계를 예측 합니다.사용하고자 하는 model을 지정하기 위해서는 저장된 mlflow server에 있는 model_name과 current stage를 지정해줘야 합니다.Preprocessing featurePreprocessing에서는 다음과 같은 문제를 고려했고, 문제를 해결하기 위해 전처리 방법을 사용했습니다.문장이 전체 기사에서 중요한 정보를 담고 있는지 -> text rank를 사용한 중요 문장 추출문장이 특정 국가들 사이의 관계에 대한 정보인가 -> 국가를 나타내는 키워드를 기반으로 국가쌍을 추출했습니다.지정한 키워드가 정말로 유의미한 키워드인가 -> NER를 사용해서 고유 명사에 해당하는 키워드가 존재하는 국가쌍만을 분석했습니다.Folder Structurenewsmodel/
│
├── inference/ - mlflow에 production 상태에 있는 모델을 불러와서 inference하는 모듈
│       ├── inference.py 
│
├── trainer/ - 기존에 있는 라벨링된 데이터를 기반으로 model을 train하는 모듈
│       ├── nlpmodel.py 
│
├── model/ - 사용될 전체 모델들이 class로 들어가 있는 파일
│       ├── model.py
│
├── preprocess 
│       ├── preprocess.py - 전처리 모듈들을 사용해서 파일을 전처리하는 모듈
│       ├── textrank.py - textrank 알고리즘을 사용하기 위한 모듈이 있는 파일
│       ├── ner.py - ner model을 사용하기 위한 모듈이 있는 파일
│       ├── countryset.py - 국가쌍을 사용하기 위한 파일
│
├── dataloader
│       ├── dataio.py - json 파일과 xlsx 파일을 불러오는 모듈
│       ├── dataloader.py - 국가쌍을 사용하기 위한 파일
│
├── utils.py - 모델 사전이 들어있는 파일
│
├── setup.py - package를 설치하는 모듈
├── data/pgdata - parameter가 local에서 사용할 수 있는 경우에 local에서 사용할 데이터가 있는 폴더
│       ├── newsjson: 크롤링된 json 파일들이 들어가는 폴더 
│       └── labeled data: 라벨링된 파일이 들어가는 폴더
├── saved_model - 학습된 모델이 저장되는 폴더, inference에 사용하는 모듈을 불러오는 폴더RequirementsDependenciesPython >= 3.8)mlflow >=1.23.1)torch >=1.4.2+cu111)transformers>=4.16.2nltkprogressbar패키지는 다음의 pypi link(https://pypi.org/project/newsmodel/) 에서도 볼 수 있습니다.UsageTrainTrain 기능: 기존에 라벨링된 데이터를 기반으로 모델을 예측하고, 사용자가 지정한 mlflow 서버에 저장합니다.## model import
import newsmodel
from newsmodel.trainer import NewsTrain

## instance setting
Trainer = NewsTrain(server_uri="your_mlflow_server_uri", experiment_name= "mobile_bert", device="cuda")

## model fitting
model, quantized_model, best_accuracy = Trainer.train_model(batch_size, epoch)

## save mlflow
Trainer.mlflow_save(run_name, model, best_accuracy)InferenceInference 기능: mlflow에 있는 모델을 사용하여 국가간 관계를 예측합니다.## model import
from newsmodel.inference import NewsInference

## instance setting
Inferencer = NewsInference(server_uri= "your_mlflow_server_uri", model_name = "mobile_bert")

## inference_sentence : 문장 단위로 문장을 분석하고 싶을 때 사용하세요.
inferenced_label = Inferencer.inference_sentence(input_text)

## inference_df : 데이터 프레임 단위로 문장을 분석하고 싶을 때 사용하세요.
inferenced_df = Inferencer.inference_df(pandas_df)Preprocessingpreprocessing 기능: 데이터를 원하는 형식으로 불러오고, 전처리를 해줍니다.이 모듈에서 데이터를 받아오는 방식은 크게 3개입니다.python내에서 pandas dataframe 객체를 받아오는 방식입니다.
이 방식을 사용하기 위해서 NewspieacePreprocess(data = 객체명)을 사용해야 합니다.json_path를 입력해서 json file이 있는 파일을 받아오는 방식입니다.
이 방식을 사용하기 위해서는 NewspieacePreprocess(json_path= 파일 폴더 경로, csv_path = 저장될 원자료 csv 경로, is_json = True)를 입력해줘야 합니다.csv_path를 입력하여 이미 저장되어 있는 csv를 불러오는 방식입니다.
이 방식을 사용하기 위해서는 NewspieacePreprocess(csv_path= 저장되어 있는 원자료 csv 경로, is_csv = True)를 입력해줘야 합니다.preprocessing은 사용자가 저장한 자료를 전처리하여 Textrank, NER, 국가쌍 유무 확인을 해줍니다.## model import
import newsmodel
from newsmodel.preprocess import NewspieacePreprocess

## instance setting
Preprocesor = NewspieacePreprocess(body_column_name = "content")

## run_preprocessing: 전체 데이터 프레임을 전처리할때 사용하세요. 
preprocessed_df = Preprocesor.run_preprocessing

## morethan_two_countries: 국가쌍을 뽑을때 사용하세요. 
from newsmodel.preprocess import morethan_two_countries

morethan_two_countries(input_text)