• 검색 결과가 없습니다.

비속어 판별

문서에서 저작자표시 (페이지 43-48)

C. LSTM을 활용한 비속어 판별

3. 비속어 판별

사용자가 작성된 문장을 대상으로 비속어를 판별하기 위해서는 모델을 학습시킨 데 이터와 동일한 형식으로 만들어야 한다. [표 3-13]은 하나의 문장이 들어왔을 때 문장 을 전처리, 초·중·종성 분리 및 단어 임베딩(Word Embedding) 순서대로 진행하고 비 속어를 판별하는 함수이다.

>>> def test_result(s, fasttest_model, lstm_model):

>>> test_word = run(s)

>>> test_word_split = test_word.split()

>>> fast_vec = []

>>> for index in range(sentence_number):

>>> if index < len(test_word_split):

>>> fast_vec.append(fasttest_model[test_word_split[index]])

>>> else:

>>> fast_vec.append(np.array([0]*100))

>>> fast_vec = np.array(fast_vec)

>>> fast_vec=fast_vec.reshape(1, fast_vec.shape[0], fast_vec.shape[1])

# 학습 데이터와 마찬가지로 3차원으로 크기 조절

>>> test_pre = lstm_model.predict_classes([fast_vec]) # 비속어 판별

>>> if test_pre[0][0] == 0:

>>> print("lstm 결과 : 비속어가 포함되어 있지 않습니다.")

>>> else:

>>> print("lstm 결과 : 비속어가 포함되어 있습니다.") [표 3-13] 하나의 문장 비속어 판별 함수

[표 3-13]의 함수는 비속어가 포함되어 있는 문장이라면 ‘lstm 결과 : 비속어가 포함 되어 있습니다.’라는 문구가 출력 되고 비속어가 포함되지 않은 문장이라면 ‘lstm 결과 : 비속어가 포함되어 있지 않습니다.’라는 문구가 출력 되어 비속어가 포함된 문장인지

포함되지 않은 문장인지 판별 할 수 있게 된다. 추가로 비속어가 포함된 문장일 경우 학습된 FastText 모델의 유사도 비교를 이용 하면 어떤 단어가 비속어인지 찾을 수 있다. 문장 내에 있는 각각의 단어를 학습된 FastText 모델로 유사도 비교를 하면 단 어의 의미로 가장 가까운 단어가 10개를 확인 할 수 있다. [그림 3-9]는 ‘시발’, ‘시발 점’에 대한 유사도 결과이다. 유사도 결과의 단어들 중에서 비속어가 많이 존재 한다면 해당 단어도 비속어라고 할 수 있다. [표 3-14]는 비속어가 포함된 문장에서 띄어쓰기 기준으로 단어를 분리하고 FastText 모델을 활용해 유사도를 비교한 후 유사한 단어 들에서 비속어 단어의 개수를 알려주는 소스코드이다.

[그림 3-9] FastText 모델 단어 유사도 비교

>>> s = '비속어가 포함된 문장‘

>>> for s_split in s.split():

>>> test_word_run = run(s_split)

>>> result = fasttest_model.get_nearest_neighbors(test_word_run)

>>> count = 0

>>> for _, word_temp in result:

>>> for w in word_list:

>>> if w in run_inverse(word_temp):

>>> count+=1

[표 3-14] FastText 모델의 유사도 비교를 통한 비속어 찾는 과정

[그림 3-10]은 ‘근데 존나 멋지지 않냐’라는 문장에 대한 비속어 판별 결과이다. 결과 에 ‘존나_6’은 ‘존나’라는 단어와 유사한 단어를 확인해보면 6개의 단어가 비속어이며 해당 문장에서는 ‘존나’라는 단어가 비속어인 것을 알 수 있다.

[그림 3-10] 유사도 비교를 통한 비속어 단어 확인

다음 그림들은 비속어를 정확하게 판별 하는 결과를 보여준다. [그림 3-11]에서는 비 속어가 포함되어 있지 않은 문장과 포함되어 있는 문장의 결과를 보여준다.

[그림 3-11] 비속어 판별 결과

[그림 3-12]에서는 ‘씨발’이라는 단어의 중성(nucleus)이 변형된 ‘씌발’ 또는 ‘씌발놈 아’의 단어가 포함 되어 있더라도 비속어로 판별하는 결과이다.

[그림 3-12] 중성(nucleus)이 변형된 비속어 판별 결과

[그림 3-13]에서는 최근 Youtube에서 ‘시발’이라는 단어 대신 ‘야발’이라는 단어로 많 이 사용하는데 문맥의 흐름상 비속어라면 비속어라고 판별 하는 것을 보여준다. 하지 만, 새롭게 생성된 비속어인 경우 아직은 정확도가 떨어진다.

[그림 3-13] 새롭게 생성된 비속어 판별

마지막으로 문맥에서 비속어가 아닌 표준어가 사용된 경우 ‘비속어가 포함되어 있지 않습니다.’라고 정확하게 판별 하는 모습을 볼 수 있다. [그림 3-14]는 ‘시발점’, ‘새끼발 가락’의 표준어 판별 결과이다.

[그림 3-14] ‘시발점’, ‘새끼발가락’ 표준어 판별 결과

문서에서 저작자표시 (페이지 43-48)

관련 문서