메세지 필터링 : 사전 기반에서 딥러닝까지 #욕설필터링 #사전기반 #딥러닝

김선우
saraminlab
Published in
10 min readAug 27, 2021

들어가며

지난 장에서는 비속어의 다양한 표현에 대해 언어학 중에서도 음성학과 음운론을 활용한 사전 확장에 대해서 다뤘다. 이번 장에서는 이를 기반으로 개발한 메세지 필터링 모델에 대해 이야기하고자 한다.

현재 일반적으로 메세지 필터링 기술은 주로 두 가지 방향으로 연구/개발이 되고 있다. 가장 일반적으로 활용되는 사전 기반 방법은 금칙어 사전을 활용해서, 문장 내에 해당 표현들이 존재하는 지를 검출하는 것이다. 간단하고 효율적인 방법이지만, 오탐 및 신규 금칙어에 대한 대응이 어렵고, 이에 대한 관리 포인트가 발생한다. 또한 문장 수준의 공격적 표현 등은 감지하기 어렵다는 문제도 가지고 있다.

이에 최근 연구되고 있는 방향은 머신러닝(Machine-Learning) 기술을 활용하는 것이다. 이 중에서도 딥러닝(Deep-Learning) 기술을 활용한 필터링 연구가 활발히 이뤄지고 있다. 문장 수준으로 학습한 딥러닝 모델은 사전 기반 방법의 문제점을 대부분 보완할 수 있으나, 일정 이상의 품질을 위해서는 적합한 학습데이터가 대량으로 필요하다는 문제가 있다. 또한, 비속어의 특성상, 주기적인 데이터의 업데이트가 필요하기 때문에 학습데이터를 확보하는 부분의 비용이 크게 발생한다.

메세지 필터링을 위한 시스템 구조

이 장에서는 사람인 서비스에 메세지 필터링 기술을 적용하기 위해 연구한 바를 설명한다. 최종적으로는 문장 수준까지 고려한 딥러닝 모델을 사전 모델과 함께 활용할 수 있는 하이브리드 형태의 모델을 목표로 한다. 이를 위해 위 그림과 같이, 사전 기반 모델에서 데이터를 축적해서 효율적으로 딥러닝 기반 모델까지 학습할 수 있도록 전체적인 시스템을 구성하였다.

자세한 사항은크게 사전 기반 모델과 학습데이터 가공 방법, 딥러닝 기반 모델 등 3가지로 나누어 설명할 것이다.

메세지 필터링 시스템

1. 사전 기반 모델

학습데이터가 확보되지 않은 Cold-Start 상황에서, 효율적인 필터링 적용을 위해 사전 기반 모델을 우선 개발했다.

음성학과 음운론기반 확장 사전

금칙어의 다양한 회피표현과 변형에 대처하기 위해, 이전 장에서 다룬 확장 방법론을 기준해 외부 수집한 금칙어 사전을 확장하고 검수하였다. 이를 통해 대략 3만 6천 여건의 확장 금칙어를 확보했다. 사전 기반 모델은 음절 단위 N-Gram 기반으로 체크를 하면서 해당 확장 사전에 매칭하여 욕설 및 차별표현, 성희롱, 개인정보 등을 검출하는 형태이다.

오탐 패턴 및 추가 적용 방법

한편, 사전 기반 모델의 약점인 오탐 위험성을 위해, 오탐에 대한 패턴 작업을 적용하였다. 검출된 비속어 표현의 앞뒤 표현을 통해, 해당 표현이 실제로 비속어로 활용된 것인지를 확인하는 과정이다.

예를 들어, “개년”이라는 표현은 단독으로 활용될 경우에는 비속어지만, “3개년 계획” 등과 같이 활용될 경우에는 일반적인 용어이다. 이 때, “개년”이라는 비속어의 경우, 숫자가 앞에 붙을 경우에는 다른 일반적 표현이라는 것을 패턴을 통해 심어주는 것이다.

이 외에도, “ㅅ1발”, “시@@@@발” 등 과 같은 다양한 회피 표현 대처를 위해, 특수기호 정규화와 유사 모음을 처리 하는 작업을 진행하였다.

2. 학습데이터 가공 방법

지도학습 기반의 방법에서 학습데이터를 특정 과업에 맞게 구축하고 가공하는 작업은 매우 중요하지만, 그만큼 비용이 많이 소요되는 작업이다. 사람인에서는 이 작업을 가능한 효율적으로 대처하기 위해, 반자동으로 학습데이터를 가공할 수 있는 프로세스를 구성하였다.

로그에 대한 번역 기반 이중 검수

먼저 사전 기반 모델을 통해, 다양한 서비스에 적용하면서 이에 대한 로그를 적재한다. 이를 통해 실 서비스에서 활용되는 다양한 문장들을 확보하여, 도메인에 적합한 데이터를 확보할 수 있다. 로그 적재 시에는 검출 여부를 같이 확인하여, 검출된 표현을 모니터링 한다.

검출되지 않은 문장들을 대상으로는 문장 수준의 번역 모델을 활용하여 영문으로 해당 데이터를 번역한다. 번역 후, 영문 기반의 비속어를 한 번 더 체크한다. 번역 모델을 활용하게 될 경우, 문맥 수준을 고려할 분석이 가능하여 비속어가 직접 드러나지 않은 공격적 표현이나 회피 표현을 검출할 수도 있다. 또한, 번역 결과를 정리된 표현으로 확보할 수 있기 때문에 사전 방법에 대한 비용도 적다.

실 데이터 내에서 사전 모델을 통해 검출된 결과와 번역 모델의 검출 결과만을 검수하여, 검수 과정을 최소화한다. 이를 통해 축적된 데이터들은 문장 수준의 공격적 표현에 대한 데이터를 확보할 수 있을 뿐 아니라, 사전 방법 자체를 보완하는 작업에도 활용한다.

3. 딥러닝 기반 모델

메시지 필터링 문제는 주로 문장 분류 문제로 연구되고 있다. hateSpeech와 같은 오픈 데이터셋과 같이, 공격적이거나 혐오표현이 포함된 문장을 분류하는 문제로 접근하는 것이다.

최근, 대부분의 문장 분류 모델은 PLM(Pretraining Language Model)을 활용한 연구로 진행되고 있다. 그러나 메시지 필터링과 같은 실시간성으로 매우 많은 요청에 대응해야 하는 문제에서는 적합하지 않다고 판단했다. 속도와 문장 수준의 분석 등에 대한 고민 끝에, Bidirectional GRU를 통한 입력 자질 분석과 Bidirectional LSTM Attention 구조를 선택하였다. 전체 모델 구조는 다음 그림과 같다.

메시지 필터링을 위한 딥러닝 모델 구조

입력 자질 분석

입력된 문장은 SentencePiece를 활용해 토큰화 한다. 이후, 토큰 단위의 임베딩 벡터 정보 e 를 동적으로 구성한다. 이는 학습 과정에서 해당 문제에 더욱 적합하게끔 변화할 수 있는 정보로 구성된다.

한편, 비속어의 특성상 다양한 회피 표현과 미등록어/신조어 대처를 위해, 토큰 내 자질 분석을 추가로 구성했다. 토큰 내의 음절 단위의 Bidirectional GRU 구조를 추가했으며, 토큰 단위의 State 정보를 취하여 토큰 자질 r 을 구하였다. 이후, 토큰 단위 임베딩 정보 e 와 음절 단위 분석 정보 r 을 병합하여, 토큰에 대한 입력 자질 정보 x 를 확보하였다.

Bidirectional LSTM Attention 모델

토큰 단위의 입력 자질 정보는 문장 수준의 분석을 통해, Bidirectional LSTM 구조로 분석된다. 양방향 분석을 통해 문장 내의 문맥 정보를 활용한 분석이 가능할 뿐만 아니라, 비속어가 직접 등장하지 않은 공격적 표현에 대해서도 대처할 수 있다. LSTM 층의 토큰별 분석 결과(outputs)를 토대로 Self-Attention 분석을 활용했다. 이는 토큰별로 어느 부분이 영향을 미쳤는지를 파악할 수 있는 가중치를 확보하기 위함이다.

Attention 분석 결과는 이후, 비속어 및 공격적 표현이 포함되어 있는지 여부를 Sigmoid를 통해 분류한다. 이에 대한 Loss 정보를 최소화하는 방향으로 모델을 학습하여 전체적인 가중치 정보를 개선한다.

실험 및 결과

상술한 메시지 필터링 시스템의 구조가 실제적으로 효과적인지를 파악하기 위해 연구수준의 실험을 진행했다. “취준진담”이라는 커뮤니티 서비스에 실제 4개월 간 사전 기반 모델을 활용하여 분석한 로그를 기준해서, 학습데이터 가공 및 딥러닝 기반 모델을 학습까지의 플로우를 진행했다. 실제로 학습데이터가 잘 가공되어 구축되는지, 이를 통해 학습한 모델이 꾸준히 성능이 개선되는지 여부를 파악한 것이다.

4개월 간의 로그 대상의 학습데이터 가공 결과

4개월 간의 로그를 대상으로 실험한 결과, 각 개월 수준으로 다음과 같이 학습데이터를 확보할 수 있었다. 지속적으로 확보하는 데이터의 양이 상승하는 것을 확인할 수 있었고, 결과적으로 총 41,136건의 문장을 확보했다. 번역기를 통한 추가 검수로 67건의 추가 데이터도 확보하였다. 각 개월의 데이터는 이전 달의 데이터를 포함한 누적데이터이며, 실험집합(Test Set)은 전체 데이터의 일부를 무작위로 추출한 후, 문장 수준의 공격적 표현 문장 분석 여부를 평가하기 위해 일부 추가한 데이터이다.

각 개월의 데이터를 활용해, 딥러닝 기반 모델을 학습하고 성능을 평가했다. 실험 성능 척도는 Accuracy 외에 RecallPrecision의 조화 평균인 F1 성능을 이진 형태로 측정해 평가했다.

실험 결과는 위 그래프와 같다. 데이터 구축의 개월 단위가 커질수록, 꾸준히 성능이 향상함을 확인했다. 사전 기반 모델의 성능인 77.55%의 F1 성능을 3개월 차 이후부터는 초과한 것을 확인하였고, 3개월 이후부터는 문장 수준의 공격적 표현들도 검출하는 것을 확인했다.

이러한 실험 결과는 메시지 필터링 시스템 구조가 지속적인 성능 개선이 가능한 구조라는 것을 의미한다. 해당 시스템 구조를 지속적으로 유지하면, 문장 수준의 공격적 표현 문제, 오탐 문제, 미등록어 관리 문제 등 다양한 문제에 유연하게 대응할 수 있다.

나가며

지금까지 설명한 메시지 필터링 시스템은 학습데이터가 없는 상황에서 실 서비스 운영에 있어서 어떻게 데이터를 축적하고 딥러닝 모델까지 나아갈 수 있는지에 대한 나름의 답변이다.

그러나 실 서비스에 적용을 위해서는 성능 개선을 위한 구조와 하이브리드 방법을 위한 효율적인 서비스 구조를 잡는 등의 고민이 조금 더 필요할 것으로 보인다. 또한, 금칙어에 대한 마스킹과 같은 추가 공수가 필요한 부분에 대해서도 종단적으로 대처할 수 있는 Sequence Labeling이나 NMT 같은 방법론으로 접근하는 연구도 고려 중이다.

한편, 실 운영 과정에서는 메시지 필터링 기술이 필요한 서비스가 늘어남에 따라 관리 포인트를 효율적으로 다룰 수 있는 기술도 필요하다. 현재 사람인 내에서는 취준진담, 면접후기, 기업리뷰, 채팅 플랫폼, We 라운지, 파랑새, K프로젝트, 인재풀, 직무키워드 입력 서비스 등 매우 다양한 서비스에 메시지 필터링 기술이 적용되어 있다. 다음 장에서는 이러한 다양한 서비스에 대해, 효율적으로 메시지 필터링 기술을 적용하고 모니터링하기 위한 관리기에 대해서 다루어 보겠다.

References

본 포스팅은 KCC2021에 발표된 [김선우 외, “학습집합 확장을 위한 딥러닝 기반 메시지 필터링 구조 연구.” ]를 기반으로 작성하였습니다.

[1] 이제이엔, “트위치 싹둑” [참고: 2021.04.20], http://ssa kdook.twip.kr.

[2] 김찬우, 성미영. “변형된 한글 금칙어에 대한 실시간 필터링 시스템.” 멀티미디어학회논문지 22, 1: 695–705. 2019.

[3] 유주연. “이미지 학습 기반의 텍스트 필터링 개선 연구.” 석사학위논문, 성균관대학교 일반대학원. 2019.

[4] 조용래, “넥슨 NDC 2018: 딥 러닝으로 욕설 탐지하기.” [참고:2021.04.20 ], http://ndc.vod.nexoncdn.co.kr/NDC2018/slides/NDC2018_0033/inde x.html.

[5] Moon, J., Cho, L. & Lee, J. “BEEP! Korean Corpus of Online News Comments for Toxic Speech Detection”, Proceedings of the 55th AMACL: 25–31. 2018.

--

--