티스토리 뷰

참고자료 : https://youtu.be/-vToUx5SDW4?si=AzCDhJ51m6VI9fvZ

커피빈 선생님 최고 

 

어떻게 AI 가 생성한 텍스트인지 알 수 있을까? 2가지 방법이 있는데 크게 

1) perplexity / burstiness

2) watermarking

이 2가지를 이용하는 방법이 있다.

 

첫번째의 경우 모델이 생성한 텍스트만 (많이) 있으면 쉽게 Detector 를 만들 수 있다. (유저가 만들 수 있음)

후자는 아예 모델의 디코딩 과정을 약간 수정해서 고유의 워터마크를 집어 넣는 방법이다. (개발자만 가능)

 

1. Perplexitly / Burstiness

GPT_0 가 바로 첫번째 방법으로 만들어진 모델이라고 할 수 있음 (텍스트를 복붙하면 model generated text 인지, human generated text 인지 return)

일단  LLM 이 쓴 글이랑 사람이 쓴 글이랑 2가지 (perplexity / burstiness) 에서 차이가 있다는 가정에서 시작한다. perplexity 의 경우 LLM 의 probability 의 반대 개념이라고 생각하면 된다.

perplexity 가 높을 수록 improbable prediction 이 많다는 의미이다 (low probability, 깜짝 놀라게 하는 prediction).

반대로 probabliity 가 높은 prediction 일수록 perplexity 는 낮다 (high probability, 별로 놀랍지 않은 prediction).

 

즉 p(current wowrd | previous word) 을 구해야 하는데, 그럼 모델 parmeters 에 접근 계산해야 되는거 아냐? 라고 생각할 수 있다. 결과적으로 답은 NO => 그냥 그 모델이 생성한 text 가 아주 많으면 된다. 

이 text 를 가지고 작은 generative 모델을 training 하면 그 모델의 perplexity 가 타겟 모델의 perplexity 의 근사치라고 가정하는 거임.

 

burstiness 라는 건 쓰인 문장들이 서로 얼마나 다양하냐? 정도로 해석할 수 있을 것 같은데 예를 들어서 사람이 글을 쓸 때 rare word 가 등장한다고 하자. 이 단어는 한 두번 쓰이다가 다른 문장에서는 안 쓰이기 때문에 문장 간 스타일이 매우 various 하다고 할 수 있음. 그런데 이에 비해서 LM 은 문장 들이 어느 정도 일정한 차이를 유지하기 때문에 burstiness 가 낮다.

 

Human : various style across sentences <-> Robot : consistent style across sentences

 

근데 사실 이렇게 학습된 detector 은 쉽게 속일 수 있다고 한다.

 

예를 들어 AI generated text 를 아주 살짝만 고치거나, grammar mistake, typo 등을 조금만 넣어주면 gpt0 는 속이기 쉽다고 한다. 반대로 어떤 사람이 굉장히 constant style of writing 을 가지고 있어도 이걸 AI gen text 라고 잘못 예측할 가능성이 있음 (개억울)

 

이런 거에 상관없이 좀 더 정확한 방법이 없을까? => 각 모델에 water mark 를 추가하는 것.

 

2. Watermarking

LLM 이 decoding 할 때, 즉 next word generation step 에서 가장 probable 한 단어를 선택하는 greedy search 를 사용하지 않는다 (Greedy search 를 적용하면, 계속 같은 문장이 반복될 수 있고 사람이 쓴 글이랑 너무 다르기 때문)

실제로는 가끔씩  less probable 하지만, 문장 전체의 overal score는 높게 하기 위해서 random sampling 같은 걸 한다고 한다. 간단히 말하면 가끔씩 less probable 한 단어를 선택한 다음에 얘네들 사이에서 probability 를 구하는거임

 

이 random sampling 과정에서 워터마크를 추가할 수 있다. next word prediction 을 할 때, 전체 vocabulary 의 20% 는 블랙리스트에 추가하고 나머지 80% 에서만 단어를 샘플링하고 이 중에서 probabliity를 구하고 선택하게 한다면? (이 때, previous word 를 random seed 로 쓰고, 이 시드를 각진 random number generator 가 랜덤하게 블랙리스트를 만든다)

=> 결과적으로 이 모델은 어떤 단어 다음에는 절대로 쓰지 않는 단어가 생길 것. 이에 반해서 사람은 이런 constraint 가 없기 때문에 black list 에 들어가 있는 단어들도 쓰게 될 것. 그래서 어떤 글을 보고, black list 가 쓰여진 경우를 모두 세서 그게 높다면 사람이 쓴 글.

 

근데 가끔은 이 단어 다음에는 꼭 이게 와야 하는데, 그게 블랙리스트에 들어가면 어떻게 해? 라고 생각할 수 있는데 이런 문제를 해결하기 위해서 아래 빨간 그래프처럼 한 가지 단어의 probability 만 높고 나머지 단어들은 매우 낮은 경우 (low entropy) 이걸 적용하지 않고, high entropy 상황에서만 한다고 한다.

 

 

근데 모든 방법이 단점이 있듯이, 이것도 attack 할 수 있는 방법이 있긴 있음.

예를 들어 워터마크가 들어간 모델에게 스페이스 대신 이모지를 2개 쓰라고 하면 이 모델이 생성한 텍스트는 black list 가 randomize 되는 효과?가 있다고 함. 그래서 이렇게 생성된 텍스트를 가지고 user 가 이모지를 스페이스만 갈아끼우면 이 텍스트를 가지고는 water mark 를 찾아낼 수 없음. 마찬가지로 chat gpt 한테 모든 단어의 o 를 e 로 바꿔서 써! 한다음에 내가 다시 이 텍스트를 바꿔쓰면 마찬가지로 워터마크가 드러나지 않는 텍스트임.

 

그리고 무엇보다도 이건 각 LLM 을 만드는 개발자들이 자기네 노력으로 워터마킹을 모델에 추가해야 하는 부분이라서 그들이 안 하면 방법 없음

'NLP ' 카테고리의 다른 글

Input normalization / Batch normalization / Layer normalization  (0) 2023.01.26
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함