수행기간 2023-04 ~ 2023-11
깃헙 : https://github.com/pej0918/AI_Voice_Phishing_Detection_Solution_Utilizing_NLP_Algorithms
GitHub - pej0918/AI_Voice_Phishing_Detection_Solution_Utilizing_NLP_Algorithms: 🐟 2023 Kibwa Project by Piranha : NLP 알고
🐟 2023 Kibwa Project by Piranha : NLP 알고리즘을 활용한 AI 보이스피싱 탐지 솔루션 🐟 - GitHub - pej0918/AI_Voice_Phishing_Detection_Solution_Utilizing_NLP_Algorithms: 🐟 2023 Kibwa Project by Piranha : NLP 알고리즘을 활용한
github.com
🔍 목차
- 프로젝트 개요
- 프로젝트 진행과정
- 프로젝트를 마치며
1. 프로젝트 개요
☑️ 1.1. 프로젝트 소개
한국어 모델 기반 NLP를 이용한 녹취된 대화 내용 데이터 학습의 결과물로, 탐지 후 피싱일 가능성이 일정 수준에 도달하면 보이스피싱 여부 도출 후 알림 서비스 제공
어디에서도 피싱 여부를 한눈에 파악할 수 있도록 불빛을 통해 피싱 여부를 알려주는 시스템을 개발하였다. (피싱이면 빨간색, 아니면 초록색)
해당 프로젝트에서는 디지털 소외계층을 도울 수 있도록, 허깅페이스(Hugging Face) 및 마이크로소프트(Microsoft)와 같이 공개된 오픈소스 모듈을 참조하여 혁신적인 방식으로 솔루션을 개발함으로써 비용을 절감하면서도 효과적인 피싱 예방 시스템을 구축한다.
☑️ 1.2. 서비스 흐름도
전체적인 서비스 구성은 다음과 같다.
☑️ 1.3. 기능 흐름도(Flow Chart)
☑️ 1.4. 프로그램 작동 동영상
📽시연동영상 링크
https://www.youtube.com/watch?v=PEaQGvAfQfg
https://www.youtube.com/watch?v=PEaQGvAfQfg
2. 프로젝트 진행과정
☑️ 2.1. 프로젝트 일정
프로젝트는 아래와 같은 일정으로 진행되었다.
(1) 4월 계획 및 분석
- 프로젝트 방향 설정 및 계획 구체화
- 필요 기자재 계획 수립
- 필요 알고리즘에 대한 준비
(2) 5-6월 설계 및 적용
- 모델 학습 데이터 수집
- 모델 학습 데이터 전처리
- 모델 훈련 및 성능 비교
(3) 7-8월 개발 및 학습
- 자연어처리 모델 학습 및 튜닝
- 라즈베리파이 초기 세팅 시작
- 라즈베리파이에 모델 포팅
(4) 8-9월 테스트 및 보완
- 라즈베리파이 LED 설정
- 웹 개발
- 피드백 및 추가 수정개발
☑️ 2.2. 딥러닝 모델 설계
모델에 텍스트를 넣으면 해당 텍스트가 보이스피싱인지 아닌지 이진 분류를 하는 자연어처리 모델 개발 진행하였다.
다양한 모델이 후보군으로 나왔지만 본 프로젝트에서는 최종 모델로 Customized KoBIGBIRD를 사용하였다.
github: https://github.com/pej0918/Customized-Model
GitHub - pej0918/Customized-Model: ⚙️ NLP 알고리즘을 활용한 A.I 보이스 피싱 탐지 솔루션_Customized 모델
⚙️ NLP 알고리즘을 활용한 A.I 보이스 피싱 탐지 솔루션_Customized 모델 ⚙️ - GitHub - pej0918/Customized-Model: ⚙️ NLP 알고리즘을 활용한 A.I 보이스 피싱 탐지 솔루션_Customized 모델 ⚙️
github.com
📜 About Model 📜
- Relation Extraction Task에서 R-BERT 모델은 CLS 토큰 뿐만 아니라 entity1과 entity2 임베딩 벡터를 같이 활용함으로써 그 성능을 높이고자 하였다.
- 이에 해당 모델은 CLS 토큰 뿐만 아니라 전체 대화 데이터와 형태소 및 키워드만을 추출한 데이터, 각각의 임베딩 벡터를 학습에 사용해보자는 관점에서 Custom이 된 모델이라고 할 수 있다.
⚙️ How Customized? ⚙️
- 해당 모델은 R-BERT 모델로부터 영감을 얻어 KoBIGBIRD 모델의 Architecture를 수정한 모델
- Kr-BERT의 CLS 토큰과 KoBIGBIRD의 CLS 토큰의 임베딩 값을 결합
- 전체 대화 데이터와 키워드 및 형태소만을 추출한 데이터를 벡터로 분리. 이 과정에서 문장의 끝을 나타내는 인덱스를 사용. 이는 전체 대화 데이터를 통해 대화의 문맥을 이해하고, 형태소 및 키워드를 통해 대화에서 중요한 부분을 학습하고자 설계된 부분이다
❓ Why Customized? ❓
- KOBIGBIRD는 한국어에 특화되었으며, BERT의 8배인 최대 4096개의 TOKEN을 다룬 모델 --> 보통 보이스피싱은 전화 통화를 통해 발생하기 때문에 짧은 문장 보다는 긴 문장이 대다수
- R-Bert는 Bert기반의 모델로, 문맥을 고려한 entity 관계 추론에 특화된 모델로, 보이스피싱 문장에서 단어간의 관계성 및 문맥 관계성을 파악하는데 사용할 것이라 기대
- Custom 과정을 걸쳐 Kr-BERT의 언어 이해 능력과 KoBIGBIRD의 장문 처리 능력을 결합함으로써 입력 텍스트의 다양한 특징을 포함
- Kr-BERT와 KoBIGBIRD의 CLS 토큰을 합침으로써 두 모델의 다양한 특징을 융합하여 각 모델의 장점을 활용하고 서로의 부족한 부분을 보완
(1) Input
피싱 데이터로는 금감원에서 제공하는 그놈 목소리 보이스피싱 음성데이터를, 정상 데이터로는 AI hub에서 제공하는 민원 질의 응답 데이터를 사용하였다.
이때, Class imbalance 해결을 위해서 피싱 데이터에 대해서만 증강을 진행하였다.
최종 데이터는 아래와 같다.
순서대로 원본 텍스트 데이터, 형태소만 추출한 데이터, 키워드만 추출한 데이터, 그리고 형태소 및 키워드를 합친 데이터를 의미한다. 4개의 열 중 최종적으로 사용한 것은 comment와 pos_keywords를 최종 모델 input값으로 사용하였다.
(2) 모델 아키텍처
cls 임베딩과 pos_key_embedding, comment_embedding을 합친 결과를 모델의 입력으로 사용하였다.
이를 통해 입력 데이터로부터 의미 있는 특징을 추출하고,해당 특징을 활용하여 분류 작업을 수행한다.
해당 모델은 RoBERTa의 cls 토큰, KoBIGBIRD의 cls 토큰, 그리고 pos_key_embedding과 comment_embedding을 연결(concatenate)하여 하나의 벡터로 만든 후, 이를 label_classifier를 통해 최종 클래스 예측을 수행하는 구조를 띈다.
> Model Process
1. KrBERT와 kobigbird 모델을 사용하여 입력 토큰의 임베딩을 얻음.
2. out과 out_bird에서 각각 첫 번째 토큰인 [CLS]의 임베딩을 가져옴 (cls_krbert 와 cls_kobigbird)
3. 두 문장을 구분해주는, 즉 문장의 끝을 나타내는 인덱스(KoBIGBIRD는 3, KrBERT는 2)를 사용하여 comment_vector와 pos_key_vector를 추출 ->평균을 계산하여 벡터의 차원을 줄임.
4. FCLayer를 사용하여 각 벡터를 적절하게 변환하여 각각의 결과를 cls_embedding, comment_embedding, pos_key_embedding으로 저장
5. 4번의 과정을 통해 변환한 임베딩들을 연결(concat_embedding)하여 모델의 입력으로 사용
6. label_classifier를 통해 최종 분류 결과를 얻음.
모델 성능은 아래와 같다.
정확도 및 f1 score 둘 다 0.95로 높은 수치를 보였다.
☑️ 2.3. 라즈베리파이
모델로부터 피싱여부에 대한 결과값을 공유 받고, 이를 바탕으로 라즈베리파이에서의 위험도 알림(LED를 통한 알림)
1. Raspberry Pi 에 모델 학습 결과(0 또는 1)를 전송한다.
2. LapTop에 부착한 마이크를 통해서 녹취를 수행하고 녹음된 파일을 AWS 서버로 전송
3. 모델 결과를 받아와 보이스피싱 이진 분류에 대한 결과를 라즈베리파이에 부착된 LED를 이용해 피싱여부와 확률에 대한 시각적인 효과로 알림을 제공할 수 있도록 한다. (1이면 빨간 LED불빛을, 0이면 초록색 LED불빛이 깜빡거린다.
3. 프로젝트를 마치며
자연어처리 알고리즘에 대해 공부
프로젝트를 진행하면서 자연어처리 모델을 직접 파인튜닝하고 커스터마이징을 진행했다.모델 성능 개선을 위해 데이터 전처리부터 모델 커스터마이징까지 여러 가지 방법을 시도하면서 자연어처리에 대한 전체적인 흐름을 파악할 수 있었다. 이 과정에서 모델을 구성하는 클래스 간의 size가 안 맞아서 발생하는 오류, 데이터 임베딩에 대한 오류 등 많은 오류가 발생했다. 오류 해결을 위해 밤을 새며 계속 구글링하고, 팀원들에게 조언을 구하거나 주변 사람들에게 도움을 요청하며 하나하나 커스터마이징을 진행하면서 자연어 처리 알고리즘에 대해 공부하고 고민할 수 있는 기회가 되었다.