논문 정보
- 제목: Automated Hate Speech Detection and the Problem of Offensive Language
- 저자: Thomas Davidson, Dana Warmsley, Michael Macy, Ingmar Weber
- 소속: Cornell University, Qatar Computing Research Institute
- 발간지: ICWSM 2017
Introduction
온라인상의 혐오 발언(Hate Speech)과 단순히 공격적인 언어(Offensive Language)를 어떻게 구분할 수 있을까? 이 논문은 이 질문에 대한 깊이 있는 탐구를 시작한다. 저자들은 혐오 발언을 "특정 집단을 향해 경멸, 모욕, 굴욕감을 주기 위한 의도를 가진 언어"로 정의하고 이것이 단순히 무례하거나 저속한 표현과는 질적으로 다르다고 주장한다. 예를 들어 아프리카계 미국인 커뮤니티 내에서 사용되는 'n*gga'와 같은 단어나 랩 가사를 인용하며 쓰이는 'b*tch' 같은 단어는 매우 공격적일 수 있지만, 특정 집단에 대한 증오를 표출하는 혐오 발언과는 구분되어야 한다는 것이다. 이러한 구분은 소셜 미디어에 만연한 공격적인 언어들 속에서 진짜 혐오 발언만을 정확히 골라내야 하는 실용적인 탐지 시스템 개발에 매우 중요하다. 당시 대부분의 혐오 발언 탐지 연구는 이 두 가지를 혼용하여, 단순히 욕설이나 공격적인 단어가 포함되면 모두 '혐오 발언'으로 분류하는 한계를 보였다. 이는 특정 단어 목록에 의존하는 어휘 기반 탐지 방법의 낮은 정밀도로 이어졌다. 이 연구는 이러한 문제를 해결하기 위해, 크라우드소싱을 통해 데이터를 '혐오 발언', '공격적인 언어', '둘 다 아님'의 세 가지 클래스로 정교하게 레이블링하고 이를 구분할 수 있는 다중 클래스 분류기(multi-class classifier)를 훈련시키는 것을 목표로 한다. 궁극적으로는 분류 결과와 오류를 면밀히 분석하고 언제 이 둘을 성공적으로 분리할 수 있고 또 언제 어려운지에 대한 깊은 통찰을 제공하였다.
Related Work
이 연구는 기존 혐오 발언 탐지 연구들의 한계를 명확히 짚고 넘어간다. 첫째, 욕설과 같은 단어의 존재 여부만으로 판단하는 단순한 '단어 가방(Bag-of-words)' 접근법은 재현율은 높을지 몰라도 혐오 발언이 아닌 수많은 공격적인 트윗까지 혐오 발언으로 오탐지하여 높은 위양성(false positive)을 보인다고 지적하였다. 한 연구에서는 흑인에 대한 인종차별 트윗으로 분류된 사례의 86%가 단순히 공격적인 단어 포함 때문이었다는 결과를 인용하기도 하였다. 둘째, 혐오 발언과 공격적인 언어의 차이는 미묘한 언어적 구분에 있다는 점을 강조한다. 예를 들어, 'n*gger'는 혐오 발언으로 분류될 가능성이 높지만, 'n*gga'는 그렇지 않은 경우가 많다는 선행 연구를 언급하고, 문맥과 철자의 미세한 차이가 중요함을 보여준다. 셋째, 일부 연구에서는 품사 태그(POS)나 특정 구문 구조(예: 'I hate <대상>')를 활용하여 탐지 정확도를 높이려는 시도가 있었지만 대부분의 지도 학습 기반 연구들은 여전히 혐오 발언과 공격적인 언어를 명확히 구분하지 않고 광범위한 정의를 사용하고 있었다. 이는 심지어 신경망 언어 모델을 사용한 연구에서도 마찬가지였다. 마지막으로 저자의 성별이나 인종과 같은 비언어적 특징이 분류에 도움이 될 수 있지만 소셜 미디어 환경에서는 이러한 정보를 얻기가 어렵거나 신뢰할 수 없다는 한계도 지적하였다.
Data
이 연구는 데이터셋을 구축하기 위해 체계적인 단계를 거쳤다. 먼저 인터넷 사용자들이 직접 혐오 발언으로 식별한 단어와 구문이 포함된 온라인 사전인 Hatebase.org의 어휘 목록을 초기 자원으로 활용했다. 트위터 API를 사용하여 이 어휘 목록에 포함된 단어를 포함하는 트윗들을 검색하였고 이를 통해 33,458명의 사용자로부터 8,540만 개의 트윗을 수집하였다. 이 방대한 코퍼스에서 25,000개의 트윗을 무작위로 샘플링하여 크라우드소싱 플랫폼인 CrowdFlower(CF)를 통해 일반인 작업자들에게 수동으로 레이블링을 맡겼다. 작업자들은 각 트윗을 '혐오 발언(hate speech)', '혐오 발언은 아니지만 공격적인 언어(offensive but not hate speech)', '둘 다 아님(neither)'의 세 가지 범주 중 하나로 분류하도록 요청받았다. 이때 단순히 특정 단어의 유무로 판단하지 말고 단어가 사용된 전체적인 문맥을 고려하여 신중하게 판단하라는 명확한 가이드라인을 제공하였다. 각 트윗은 최소 3명 이상의 작업자에 의해 평가되었고 작업자 간의 신뢰도는 92%로 높은 수준을 보였다. 최종 레이블은 다수결로 결정되었고 이 과정을 통해 총 24,802개의 레이블링된 트윗 데이터셋이 완성되었다. 분석 결과, 오직 5%의 트윗만이 '혐오 발언'으로 분류되었고, 대다수인 76%는 '공격적인 언어'로 분류되었다. 이는 초기에 사용된 Hatebase 어휘 목록이 실제 혐오 발언을 찾아내는 데에는 정밀도가 낮았음을 시사한다.
Features
분류 모델을 훈련시키기 위해 연구팀은 각 트윗에서 다양한 종류의 특징(feature)을 추출하였다.
- 텍스트 전처리 및 N-gram 특징: 먼저 모든 트윗을 소문자로 변환하고 포터 스테머(Porter stemmer)를 이용해 어간을 추출하였다. 그 후, 텍스트의 핵심적인 단어 및 구문 패턴을 잡아내기 위해 TF-IDF(Term Frequency-Inverse Document Frequency) 가중치를 적용한 unigram, bigram, trigram을 특징으로 사용하였다.
- 구문 및 가독성 특징: 문장의 구조적 정보를 포착하기 위해 자연어 처리 도구인 NLTK를 사용하여 품사(Part-of-Speech) 태그의 unigram, bigram, trigram을 추출하였다. 또한 트윗의 가독성 수준을 측정하기 위해 문장 수를 1로 고정한 수정된 플레시-킨케이드(Flesch-Kincaid) 가독성 점수를 특징으로 포함하였다.
- 감성 및 메타데이터 특징: 트윗에 담긴 감성을 분석하기 위해 소셜 미디어 텍스트에 특화된 감성 사전을 활용하여 감성 점수를 계산하였다. 이 외에도 해시태그, 사용자 멘션(@), 리트윗, URL의 존재 여부와 개수를 나타내는 특징과 함께 각 트윗의 총 문자 수, 단어 수, 음절 수와 같은 기본적인 메타데이터도 특징으로 활용하였다.
Model
연구팀은 다양한 모델을 시험하여 최적의 분류기를 찾고자 하였다. 먼저 고차원의 특징 공간을 다루기 위해 L1 정규화(regularization)를 적용한 로지스틱 회귀를 사용하여 특징의 수를 줄이는 차원 축소 단계를 거쳤다. 그 후 선행 연구들에서 널리 사용된 로지스틱 회귀, 나이브 베이즈, 결정 트리, 랜덤 포레스트, 선형 SVM 등 다양한 모델의 성능을 테스트하였다. 모델 평가는5-fold cross-validation을 사용하였고 과적합을 방지하기 위해 전체 샘플의 10%를 최종 평가용으로 남겨두었다. 여러 모델과 파라미터 조합을 탐색하는 그리드 서치(grid-search)를 수행한 결과, 로지스틱 회귀와 선형 SVM이 다른 모델들보다 훨씬 뛰어난 성능을 보이는 것을 확인하였다. 최종 모델로는 L2 정규화를 적용한 로지스틱 회귀를 선택했는데, 이는 각 클래스에 속할 예측 확률을 직접적으로 분석하기에 더 용이하고, 다른 선행 연구들에서도 좋은 성능을 보였기 때문이다. 분류 방식으로는 각 클래스별로 별도의 분류기를 훈련시킨 후, 가장 높은 확률을 예측한 클래스를 최종 레이블로 할당하는 일대다(one-versus-rest) 프레임워크를 채택하였다.
Results
실험 결과, 개발된 모델은 전체적으로 정밀도 0.91, 재현율 0.90, F1 점수 0.90이라는 높은 성능을 보였다. 하지만 클래스별로 나누어 보면 중요한 문제점이 드러났다. 모델은 특히 '혐오 발언' 클래스를 탐지하는 데 가장 큰 어려움을 겪었다. 실제 혐오 발언 중 61%만이 정확하게 분류되었고, 31%는 '공격적인 언어'로, 9%는 '정상'으로 잘못 분류되었다. 이는 모델이 실제보다 덜 심각한 쪽으로 예측하는 편향을 가지고 있음을 보여준다. 반면, '공격적인 언어'를 '혐오 발언'으로 잘못 분류하는 경우는 5%에 불과하여, 이 두 범주를 구분하는 데는 어느 정도 성공하였다.
- 정확하게 탐지된 혐오 발언: 주로 'n*gger', 'f*ggot'과 같이 매우 강한 인종차별적, 동성애 혐오적 비속어가 여러 번 사용된 트윗들
- '공격적'으로 오탐지된 혐오 발언: 덜 흔한 비속어를 사용하거나 혐오와 직접적인 연관성이 약한 단어들을 사용한 경우
- '공격적'으로 정확하게 탐지된 경우: 주로 'b*tch', 'h*e'와 같은 성차별적 용어나 일반적인 욕설을 포함하는 트윗들, 이는 주석가들이 인종차별이나 동성애 혐오 용어는 '혐오'로, 성차별적 용어는 '공격적'인 것으로 인식하는 경향과 일치
- '혐오'로 오탐지된 공격적 언어: 'n*gga'와 같이 특정 집단 내에서 일상적으로 사용되는 단어가 포함되거나 랩 가사를 인용한 경우
Conclusions
이 연구는 '혐오 발언'과 '공격적인 언어'를 무분별하게 혼용할 때 발생하는 문제점을 명확히 보여주었다. 두 개념을 혼동하면 심각한 증오를 표출하지 않은 사람들까지 혐오 발언자로 잘못 분류하게 되고 정작 심각한 혐오 발언과 일상적인 공격적 언어를 구분하지 못하는 오류를 낳게 된다. 저자들은 단순히 혐오 단어 목록에 의존하는 어휘 기반의 방법이 실제 혐오 발언을 탐지하는 데에는 얼마나 부정확한지를 실험적으로 증명하였다(Hatebase 어휘 목록으로 수집된 트윗 중 극소수만이 실제 혐오 발언으로 판명됨). 제안된 다중 클래스 분류 모델이 비교적 높은 정확도를 달성했지만, 여전히 특정 혐오 단어의 유무에 따라 분류가 좌우되는 한계를 보였다. 특히 인간 주석가와 모델 모두 인종차별이나 동성애 혐오 발언은 '혐오'로, 여성에 대한 경멸적인 언어는 '공격적'인 것으로 간주하는 사회적 편향을 반영하는 경향이 있었다. 따라서 저자들은 향후 연구가 단순히 텍스트 자체에만 집중할 것이 아니라 발언이 이루어지는 사회적 맥락과 대화의 동적인 흐름, 혐오 발언을 사용하는 사람들에 대한 더 깊은 이해를 통합해야 한다고 제언하였다. 또한 알고리즘에 스며드는 사회적 편향을 식별하고 이를 교정하려는 노력이 반드시 필요하다고 결론지었다.
데이터 전처리 및 특징 추출 방법
- 포터 스테머 (Porter Stemmer): 단어의 ‘어간(stem)’을 추출하여 단어를 단순화하는 기법, 예를 들어 ‘hated’, ‘hating’, ‘hates’ 같은 단어들을 모두 원형에 가까운 ‘hate’로 통일하고 모델이 같은 의미의 단어들을 효과적으로 학습하게 도움
- TF-IDF (Term Frequency-Inverse Document Frequency): 특정 단어가 한 트윗 안에서 얼마나 자주 등장하는지 (TF) 그 단어가 전체 트윗 모음에서 얼마나 희귀한지 (IDF)를 계산하여 단어의 중요도를 평가하는 방법이다. 이를 통해 ‘the’나 ‘a’처럼 자주 나오지만 의미는 적은 단어의 중요도는 낮추고 ‘zionist’처럼 특정 트윗에서 집중적으로 나타나는 단어의 중요도는 높여준다.
- 플레시-킨케이드 가독성 점수(Flesch-Kincaid Grade Level): 문장의 단어 수와 음절 수 등을 계산하여 텍스트의 가독성을 측정하는 지표이다. 이 연구에서는 트윗의 언어적 품질을 평가하는 특징으로 사용되었다.
머신러닝 모델과 학습 전략
- L1 정규화를 적용한 로지스틱 회귀: 모델을 학습시킬 때 덜 중요한 특징의 가중치를 0으로 만들어 아예 제거해버리는 방식이다. 이 연구에서는 수많은 특징들 중에서 진짜 의미 있는 것들만 골라내기 위한 차원 축소 방법으로 사용되었다.
- 분류 모델:
- 그리드 서치(Grid Search): 최적의 모델 성능을 내는 하이퍼파라미터 조합을 찾기 위해 가능한 모든 조합을 격자(grid)처럼 만들어 하나씩 테스트해보는 탐색 기법이다.
- L2 정규화를 적용한 로지스틱 회귀: 연구팀이 최종적으로 선택한 모델, L1과 달리 특징을 완전히 제거하지는 않지만 모든 특징의 가중치 크기를 전반적으로 줄여 모델이 특정 특징에만 과도하게 의존하는 과적합을 방지
- 일대다 프레임워크 (One-Versus-Rest Framework): 세 개 이상의 클래스를 분류할 때 사용하는 전략. 이 연구에서는 ‘혐오 발언 vs 나머지’, ‘공격적 언어 vs 나머지’, ‘정상 vs 나머지’를 구분하는 분류기를 각각 따로 훈련시킨다. 그리고 새로운 트윗이 들어오면 이 세 개의 분류기 중 가장 높은 확률 점수를 주는 클래스를 최종 예측 결과로 선택한다.
L1 정규화 vs L2 정규화
- L1 정규화 (Lasso): 중요도가 낮은 특징의 가중치를 0으로 만들어 특징 자체를 선택하고 제거하는 효과가 있다. 모델을 더 단순하게 만들고 싶을 때 유용하다.
- L2 정규화 (Ridge): 특징의 가중치를 0에 가깝게 만들지만 완전히 0으로 만들지는 않는다. 모든 특징을 유지하되 영향력을 전반적으로 줄여서 모델의 과적합을 방지하는데 더 중점을 둔다.