J2ong 님의 블로그

Perspective API - 욕설 및 비속어 필터링 본문

개인 프로젝트

Perspective API - 욕설 및 비속어 필터링

J2ong 2025. 3. 22. 19:04

안녕하세요! 

이번 게시글에서는 Perspective API를 활용한 욕설 및 비속어 필터링 방법을 공유하려 합니다.

SNS 서비스의 특성상 관리자가 유해 콘텐츠를 하나하나 수동으로 필터링하는 것은 현실적으로 많은 인적 자원과 시간이 소모됩니다. 따라서 자동화된 유해 콘텐츠 필터링 기능이 필요하다고 생각하였고, 이를 위해 욕설 및 비속어 필터링 시스템을 도입하는 것이 중요하다고 판단했습니다.


📌  Perspective API란?

기존 욕설 필터링 방식

욕설 및 비속어를 필터링하는 방식으로 대표적인 방법은 크게 두 가지가 있습니다:

  1. 리스트 기반 필터링
    미리 정의된 욕설 및 비속어 리스트를 생성하고, 사용자가 입력한 텍스트에 해당 단어가 포함되어 있으면 필터링하는 방식입니다. 이 방법은 구현이 비교적 간단하지만, 리스트에 없는 새로운 욕설에 대해서는 필터링을 할 수 없다는 단점이 있습니다.
  2. AI 기반 자연어 처리(NLP) 필터링
    AI와 자연어 처리 기술을 이용하여 텍스트를 분석하고, 욕설이나 비속어를 자동으로 필터링하는 방식입니다. 이 방법은 좀 더 복잡하고 시간이 소모되지만, 새로운 비속어에 대해서도 적응할 수 있는 장점이 있습니다.

 

Perspective API의 활용

리스트 기반 방식은 한계가 분명하고, AI 기반 방식은 성능과 자원 측면에서 부담이 될 수 있습니다. 그래서 두 가지의 단점을 보완하는 방법을 찾던 중 구글에서 Perspective API라는 AI를 기반으로 한 오픈 API를 제공하는 것을 알게 되었습니다. 이 API는 기존에 학습된 모델을 사용하여 텍스트의 유해성 정도를 분석하고, 욕설 및 비속어를 필터링하는 데 유용합니다.

하지만, Perspective API는 영어를 기반으로 훈련된 모델이기 때문에 한글 욕설에 대한 필터링 성능은 다소 부족할 수 있습니다. 그럼에도 불구하고, 영어 텍스트에 대해서는 매우 높은 정확도로 욕설을 필터링할 수 있어, 전체적인 활용도는 충분히 높다고 판단했습니다.

 

적용 방식

SNS에서 특히 중요한 부분은 사용자 경험(UX) 입니다. 메신저에서는 사용자들끼리 자유롭게 소통할 수 있도록 할 수 있으나, 게시물 작성과 닉네임 작성 시에는 유해한 단어나 욕설이 포함되지 않도록 필터링해야 합니다. 따라서 메신저와 같은 실시간 채팅에서는 자유롭게 사용할 수 있도록 두고, 회원가입 시 닉네임 작성게시물 작성 시에만 Perspective API를 활용하여 욕설 및 비속어를 필터링하는 방식으로 적용했습니다.

 


 

📌  Perspective API

구글의 Perspective API를 이용하기 위해서는 Perspective Devlopers와 Google Cloud Console에서 관련 설정을 해줘야 합니다.

Perspective Devlopers에서 승인이 나지 않는다면 API를 사용할 수 없습니다.

 

Perspective API 설정 방법

1. Perspective Developers에서 API 사용 신청

 

Docs - Get Started

 

developers.perspectiveapi.com

  • Request API Access 버튼을 클릭하여 신청 양식을 작성합니다.
  • 승인 후 등록한 이메일로 승인 메일이 도착합니다.

 

2. 신청 승인 후 Google Cloud Console에서 API 활성화

  • 승인 메일 내 Go Enable API 버튼을 클릭하여 API를 활성화합니다.

 

3. API Key를 서비스에 적용

 


 

📌  욕설 및 비속어 필터링 구현

Perspective Devlopers에서 API 사용 방식을 상세하게 설명하고 있으니 참고해주세요.

 

Docs - Sample Requests

 

developers.perspectiveapi.com

 

google-api-python-client 설치
pip install google-api-python-client

 

Perspective API 호출 코드 (Python)

 

※ 이해하기 쉽도록 코드에 주석을 달아놓았습니다. 참고해주세요.

from flask import Flask, request, jsonify
from googleapiclient import discovery
import os

app = Flask(__name__)

# 환경 변수로 설정한 GOOGLE_API_KEY 
API_KEY = os.getenv('GOOGLE_API_KEY')

# Perspective API 호출 처리
@app.route('/check-word', methods=['POST'])
def check_word():
    data = request.get_json()  # 클라이언트에서 전달한 데이터
    word = data.get('word')

    if not word:
        return

    try:
        # Google API 클라이언트 설정
        client = discovery.build(
          'commentanalyzer', 
          'v1alpha1', 
          developerKey=API_KEY, 
          discoveryServiceUrl="https://commentanalyzer.googleapis.com/$discovery/rest?version=v1alpha1",
          static_discovery=False,
        )
        
        # 요청할 내용 설정
        analyze_request = {
            'comment': {'text': word},
            'requestedAttributes': {'TOXICITY': {}},
        }
        
        # Perspective API 호출
        response = client.comments().analyze(body=analyze_request).execute()
        
        # toxicity 점수 확인
        toxicity_score = response['attributeScores']['TOXICITY']['summaryScore']['value']

        # 점수가 0.7 이상이면 비속어가 포함된 것으로 판단
        if toxicity_score >= 0.7:
            return jsonify({"message": "Word contains inappropriate language"}), 400
        
        return jsonify({"message": "Success"}), 200

    except Exception as e:
        return jsonify({"error": str(e)}), 500

if __name__ == '__main__':
    app.run(debug=True)

 


 

유해 콘텐츠 필터링은 SNS 서비스에서 사용자들이 쾌적하게 이용할 수 있도록 하는 중요한 기능입니다. Perspective API는 비록 한글 욕설에 대한 필터링이 다소 부족할 수 있지만, 영어 기반의 텍스트 처리에서 높은 정확도를 보여주기 때문에, 효율적으로 적용할 수 있는 좋은 방법이었습니다.

욕설 및 비속어 필터링 방식에 대해 자료 조사 중 Perspective API를 대해 제대로 다룬 게시물이 없어서 이번 기회에 작성하게 되었습니다.

제 게시물을 통해 다른 분들도 많은 도움을 받으셨길 바라면서 이번 포스팅을 마치겠습니다.

오늘도 행복한 하루 되세요!