[Ⅴ. Sequence Models] Natural Language Processing & Word Embeddings (5)
Natural Language Processing & Word Embeddings
Applications Using Word Embeddings
Sentiment Classification
감성 분류sentiment classification는 텍스트 일부를 보고 누군가가 말하고 있는 내용을 좋아하는지 싫어하는지 판단하는 작업입니다. NLP에서 가장 중요한 구성 요소 중 하나이며 많은 애플리케이션에서 사용됩니다.
감성 분류의 과제 중 하나는 여러분에게 이에 대한 대형 레이블 훈련 세트가 없을 수도 있다는 겁니다. 하지만 단어 임베딩을 사용하면 아주 작은 규모의 레이블 훈련 세트만 있어도 좋은 감성 분류기를 만들 수 있습니다. 어떻게 하는지 봅시다.
Sentiment Classification Problem
여기 감성 분류 문제의 예가 있습니다. 입력 x는 일종의 텍스트이며 그리고 여러분이 예측하기를 원하는 출력 y는 말하자면 레스토랑 리뷰와 같은 감정입니다.
누군가 ‘디저트가 훌륭하다’라고 하고 별 네 개 리뷰를, ‘서비스는 꽤 느렸다’며 별 두 개, ‘빨리 식사하기엔 좋지만 별 것 없다’라고 별 세 개 리뷰를 남겼다고 합시다. 그리고 이것은 꽤 신랄한 리뷰인데요. ‘좋은 맛, 좋은 서비스, 좋은 분위기가 전혀 없다’ 이것은 별 한 개 리뷰입니다.
따라서 만약 여러분이 이런 레이블 데이터를 기반으로 x나 y로부터 매핑하는 시스템을 훈련할 수 있다면 여러분이 운영하는 레스토랑 리뷰를 모니터링할 수 있을 겁니다.
사람들은 트위터, 페이스북, 인스타그램, 그 외 다른 형태의 소셜 미디어에 여러분의 레스토랑에 대한 메시지를 게시할 수도 있습니다. 그리고 만약 여러분이 감성 분류기를 가지고 있다면 텍스트의 일부만을 보고도 식당에 대한 글쓴이의 감정이 얼마나 긍정적이거나 부정적인지 파악할 수 있습니다.
그런 다음 여러분은 또한 문제가 있는지 없는지, 혹은 시간이 지날수록 더 좋아지는지 더 나빠지는지를 추적할 수 있습니다.
따라서 감성 분류의 과제 중 하나는 방대한 레이블 데이터 세트가 없을 수도 있다는 겁니다. 감성 분류 작업에서 1만에서 10만 단어 사이의 훈련 세트는 드문 것이 아닙니다. 1만 단어보다 작은 경우도 있지만 단어 임베딩을 사용하면 특히 훈련 세트가 작은 경우 훨씬 더 잘 이해하는 데 도움이 될 수 있습니다.
몇 가지 다른 알고리즘을 살펴보도록 하죠.
Simple Sentiment Classification Model
여기 간단한 감성 분류 모델이 있습니다. ‘디저트가 훌륭하다’와 같은 문장을 가지고 사전에서 단어들을 찾아볼 수 있습니다. 평소와 같이 1만 단어 사전을 사용하겠습니다. 분류기를 만들어 별 4개 리뷰였던 출력 y에 매핑합니다. 따라서 이 네 단어가 주어지면 평소와 같이 이 네 단어로 원-핫 벡터를 찾을 수 있습니다.
따라서 임베딩 행렬 E와 곱해지는 원-핫 벡터 $o_8928$이 있습니다. 이것은 훨씬 더 방대한 텍스트 말뭉치에서 학습할 수 있습니다. 예를 들어 10억 개의 단어나 1,000억 개의 단어에서 임베딩하여 학습하고 이를 사용해 “the”라는 단어에 대한 임베딩 벡터를 추출하고 “dessert”, “is”, “excellent”에 대해서도 동일한 작업을 수행합니다.
그리고 이것이 1,000억 개의 단어처럼 아주 방대한 데이터 세트에서 훈련되었다면 자주 사용하지 않는 단어에 대해서도 많은 지식을 가져와서 여러분들의 문제에 적용시킬 수 있습니다. 레이블이 지정된 훈련 세트에 없는 단어라도요.
여기 분류기를 만드는 한 가지 방법이 있습니다. 이 벡터들을 가져다가 300차원 벡터라고 합시다. 그런 다음 합계나 평균을 낼 수 있습니다 여기 더 큰 평균 연산자를 넣어 합계나 평균을 사용할 수 있습니다. 그리고 이것은 300차원 특징 벡터를 제공하고 이는 소프트맥스 분류기를 통하여 y-hat을 출력합니다. 소프트맥스는 별 한 개에서 별 다섯 개까지의 가능한 결과물의 확률을 출력할 수 있습니다. 따라서 이것은 y를 예측하기 위한 다섯 가지 가능한 결과 모음입니다.
여기서 평균 연산을 사용하여 이 특별한 알고리즘이 짧거나 긴 리뷰용으로 작동합니다. 왜냐하면, 100단어 길이의 리뷰라도 100개 단어에 대한 모든 특징 벡터를 합산하거나 평균을 낼 수 있기 때문에 300차원 특징 표현을 감성 분류기로 전달할 수 있습니다. 따라서 이 알고리즘은 상당히 잘 작동합니다. 그리고 그것은 실제로 모든 단어의 의미를 평균화하거나 예에 있는 모든 단어들의 의미를 합산합니다.
이 알고리즘의 문제 중 하나는 단어 순서를 무시한다는 것입니다. 예를 들어, 여기 매우 부정적인 리뷰가 있습니다. ‘좋은 맛, 좋은 서비스, 좋은 분위기가 전혀 없다’ 하지만 ‘좋은’이라는 단어가 많이 나타납니다. 정말 많이 세 번이나 나옵니다.
따라서 이런 알고리즘을 사용하면 단어의 순서를 무시하고 다른 단어들에 대한 임베딩을 합하거나 평균만 내기 때문에 최종 특징 벡터에 ‘좋은’이라는 표현이 많이 있게 되고 여러분의 분류기는 사실 매우 가혹한 이 리뷰를 좋은 리뷰라고 생각할지도 모릅니다.
이것은 별 하나짜리 리뷰입니다 여기 단어 임베딩을 전부 합하는 대신 감성 분류에 RNN을 사용할 수 있는 더 정교한 모델이 있습니다.
RNN for Sentiment Classification
‘좋은 맛, 좋은 서비스, 좋은 분위기가 전혀 없다’ 라는 리뷰를 가지고 각 단어에서 원-핫 벡터를 찾을 수 있습니다. 그래서 저는 원-핫 벡터의 표현을 건너뛰고 원-핫 벡터를 평소와 같이 임베딩 행렬 E에 곱하면 임베딩 벡터를 RNN에 입력할 수 있습니다. 그리고 RNN의 역할은 마지막 단계에서 y-hat을 예측할 수 있는 표현을 계산하는 것입니다.
이것이 저번 주에 살펴본 다대일 RNN 아키텍처의 예시입니다. 이러한 알고리즘을 사용하면 단어 순서를 더욱 잘 고려할 수 있게 되어, “좋은 취향이 부족하다”는 말과 “좋지 않다”는 말이 부정적인 리뷰라는 것을 알 수 있습니다. 모든 것을 그저 큰 단어 벡터 반죽에 더하기만 하고 “좋지 않음”이 “좋음” 또는 “좋은 맛이 부족하다” 등과 같은 표현과 완전히 다르다는 것을 모르는 이전 알고리즘과는 다르죠.
따라서 이 알고리즘을 훈련시키면 상당히 괜찮은 감성 분류 알고리즘이 될 것이며 단어 임베딩을 훨씬 더 큰 데이터 세트에서 배울 수 있기 때문에 훈련 세트에서 보게 될 새로운 단어에 대해서도 일반화를 더 잘 수행할 수 있을 겁니다.
예를 들어 다른 사람이 ‘좋은 취향, 좋은 서비스, 좋은 환경이 부재한다’라고 했다면 ‘부재’라는 단어가 여러분의 레이블 훈련 세트에 없더라도 단어 임베딩을 훈련하는 데 사용하는 10억 또는 1,000억 단어 말뭉치에 있다면 그 의미를 이해하고 훨씬 더 잘 일반화할 수 있습니다.
단어 임베딩을 훈련하는 데 사용된 훈련 세트에 있었지만 감성 분류 문제를 위해 특별히 가지고 있던 레이블 훈련 세트에 없는 단어에 대해서도 말입니다 감성 분류에 대한 설명은 여기까지입니다.
이것을 통해 여러분이 온라인에서 단어 임베딩을 학습하거나 다운로드하고 상당히 효율적인 NLP 시스템을 빠르게 구축할 수 있는 방법을 배우셨길 바랍니다.
Debiasing Word Embeddings
기계 학습과 AI 알고리즘은 매우 중요한 결정을 하는데 도움이 되거나 도움을 줄 수 있다는 신뢰를 받고 있습니다. 따라서 우리는 그것들에 성별 또는 인종 차별과 같이 바람직하지 않은 형태의 편향이 없는지 확인하고 싶습니다.
이번에는 단어 임베딩 내의 이러한 편향의 형태를 줄이거나 제거하는 몇 가지 아이디어를 보여드리고자 합니다.
The Problem of Bias in Word Embeddings
여기서 말하는 ‘편향’은 편향-분산의 의미가 아닙니다. 대신에 성별, 민족, 성적 성향과 같은 편향을 의미합니다. 이는 일반적으로 기계 학습에 대한 기술 토론에서 사용되는 편향이라는 단어와는 다른 의미입니다.
그러나 대부분의 문제는 단어 임베딩이 어떻게 남자와 여자, 왕과 여왕의 관계를 유추하는 법을 배우는지 이야기했죠. 하지만 남자와 컴퓨터 프로그래머는 여자와 무엇의 관계와 같나요? 학습된 단어 임베딩에서 다소 끔찍한 결과를 발견했습니다.
여자와 주부의 관계와 같다고 출력될 수도 있습니다. 이것은 잘못된 것이며 아주 해로운 성 고정관념을 강요합니다. 남자와 컴퓨터 프로그래머의 관계는 여자와 컴퓨터 프로그래머와 같다는 알고리즘 출력이 훨씬 더 바람직할 것입니다. 또한 아버지와 의사와 관계는 어머니와 무엇의 관계와 같을까요? 정말 불행한 결과는 어떤 학습된 단어 임베딩이 ‘엄마:간호사’를 만들어낸다는 것입니다.
따라서 단어 임베딩은 모델을 훈련하는 데 사용되는 텍스트의 성별, 민족, 나이, 성적 성향, 기타 편향들을 반영할 수 있습니다. 제가 특히 신경 쓰는 편향 중 하나는 사회 경제적 지위에 대한 편향입니다. 저는 모든 사람들이 부유층 가정 출신이든 저소득 가정이든 그 사이의 어느 곳이든 좋은 기회를 가져야 한다고 생각합니다.
그리고 머신 러닝 알고리즘은 매우 중요한 결정을 내리는 데 사용되고 있습니다. 머신 러닝 알고리즘은 대학 입학부터 구직 방법, 대출 신청과 그것이 승인되는 여부, 형사 사법 제도, 심지어 판결 지침까지 모든 것에 영향을 미치고 있습니다. 학습 알고리즘은 매우 중요한 결정을 내리고 있기 때문에 이런 종류의 바람직하지 않은 편향을 최대한 줄이거나 이상적으로는 없애기 위해 바꾸려고 하는 것이 중요하다고 생각합니다.
단어 임베딩의 경우 모델을 훈련하는 데 사용된 텍스트의 편향을 포착해 사람이 작성한 텍스트의 편향을 선택하거나 반영하는 경향이 있습니다. 수십 년, 수세기 동안, 저는 인류가 이러한 종류의 편향을 줄이는 데 진전을 이루었다고 생각합니다. 제 생각에는 아마 운이 좋게도 AI의 경우 편향을 빨리 줄일 수 있는 더 좋은 아이디어가 있는 것 같습니다. 인류의 경우보다 말입니다.
AI의 경우 역시 결코 편향이 줄지 않았다고 생각하지만 아직 많은 연구들이 진행 중이고 학습 알고리즘의 이러한 편향을 줄이기 위해 노력이 필요합니다. 단어 임베딩의 편향을 줄이는 것에 대한 아이디어의 예시를 공유하고자 합니다.
Addressing Bias in Word Embeddings
자, 여기 아이디어가 있습니다. 단어 임베딩을 이미 배웠다고 합시다. 베이비시터는 여기, 의사는 여기에 있습니다. 여기 할머니와, 여기 할아버지가 있습니다. 아마 소녀는 저기, 소년은 저기 임베딩됩니다. 그리고 아마 그녀는 여기, 그는 저기에 임베딩됩니다.
처음으로 할 일은 줄이거나 없애고 싶은 특정한 편향에 해당하는 방향을 파악하는 것입니다. 예를 들어, 저는 성 편향에 초점을 맞추려고 하지만 이 아이디어는 앞서 말씀드린 다른 모든 종류의 편향에도 적용됩니다.
이 예시에서 그러면 편향에 해당하는 방향을 어떻게 식별할 수 있을까요? 성별의 경우 성별에 따라 다르기 때문에 ‘그’에 대한 임베딩 벡터에서 ‘그녀’에 대한임베딩 벡터를 빼고 $e_{male}$에서 $e_{female}$을 빼서 이 중 몇 개를 가지고 평균을 냅니다. 기본적으로 이 차를 가지고 평균을 냅니다. 이 경우에 이 방향으로 보이는 것이 성별이나 편향된 방향임을 알 수 있습니다.
반면 이 방향은 우리가 다루고자 하는 특정 편향과는 관련이 없습니다. 따라서 이것은 비편향 방향입니다. 그리고 이 경우 편향 방향은 1차원 부분 공간이 되고 비편향 방향은 299차원 부분 공간이 됩니다. 제가 원본 논문의 설명을 조금 단순화했습니다. 편향 방향은 1차원보다 높을 수 있으며 제가 여기서 설명하는 것처럼 평균을 취하는 대신 실제로는 특이값 분해, SVD라고 하는 더 복잡한 알고리즘을 통해 발견됩니다. 주성분 분석에 익숙하다면 PCA, 주성분 분석 알고리즘과 유사한 아이디어를 활용한다는 점에서 매우 밀접한 관련이 있습니다.
그 다음 단계는 중립화 단계입니다. 명확하지 않은 모든 단어의 경우 추정하여 편향을 없앱니다. 어떤 단어들은 본질적으로 성별을 담아냅니다. 할머니, 할아버지, 소녀, 소년, 그, 그녀 같은 단어들은 정의에 성별이 내재되어 있습니다.
반면에 의사나 베이비시터 같은 단어들은 성중립적이길 원합니다. 실제로 더 많은 일반적인 경우 의사나 베이비시터같은 단어가 인종 중립적이거나 성적 지향 중립적이길 원할 겁니다. 하지만 여기서는 예시를 나타내기 위해 성별을 사용하겠습니다.
기본적으로 명확하지 않은 모든 단어는 정의에 따라 할머니는 여성이고 할아버지는 남성이라는 할아버지는 남성이라는 아주 타당한 성별 요소가 있는 단어가 아닌 것을 의미합니다. 그래서 의사나 베이비시터와 같은 단어들의 경우 편향 방향에서 이 축으로 예상하여 구성 요소를 줄이거나 제거할 수 있습니다. 그래서 이 수평 방향에서 그 구성 요소들을 감소시킵니다. 이것이 두 번째 중립화 단계입니다.
그리고 마지막 단계는 평준화 단계로 임베딩에서 예를 들어 할머니와 할아버지, 또는 소녀와 소년와 같은 단어 쌍의 유일한 차이점은 성별일 것입니다. 그렇다면 왜 그걸 원하시나요? 이 예에서, 베이비시터와 할머니 사이의 거리나 유사성은 베이비시터와 할아버지 사이의 거리보다 더 가깝습니다. 아마도 이것은 할아버지보다 할머니가 베이비시터와 더 가깝게 되는 건강하지 않거나 바람직하지 않은 편향을 강화할지도 모릅니다.
그래서 마지막 평준화 단계에서 우리가 하려는 것은 할머니와 할아버지와 같은 단어들이 성 중립적인 단어여야 하는 베이비시터나 의사 같은 단어로부터 정확히 같은 거리에 있거나 유사성이 같은지 확인하는 것입니다. 이를 위한 몇몇 선형 대수학 단계가 있습니다. 하지만 기본적으로 할아버지와 할머니는 이 중심축과 동떨어져 있는 점 한 쌍으로 이동하게 됩니다.
그 결과는 이 두 단어와 비교했을 때 베이비시터와의 거리가 완전히 같다는 겁니다 그리고 일반적으로 이 평준화 단계를 수행하고자 하는 할머니-할아버지, 소년-소녀, 여학생-남학생 클럽, 걸후드-보이후드, 자매-형제, 여자 조카 -남자 조카, 딸-아들과 같은 비슷한 단어들이 많이 있습니다.
마지막으로 중립화할 단어를 어떻게 결정할까요? 예를 들어, 의사라는 단어는 성별이나 인종이 특정되지 않도록 중립화해야 할 단어같아 보입니다. 반면 할아버지와 할머니는 성별로 특정되어야 합니다 그리고 수염과 같은 단어들도 있습니다. 통계적으로 볼 때 남성이 여성보다 수염이 더 많기 때문에 수염은 여성보다 남성에 더 가까울지도 모릅니다.
그래서 분류기를 훈련시켜 어떤 단어가 정의적인지, 어떤 단어는 성별에 따라 달라야 하는지, 어떤 단어가 아니어야 하는지 알아내는 것이었습니다. 영어에서 대부분의 단어들은 정의적이지 않다는 것이 밝혀졌고 이는 성별이라는 것이 정의의 일부가 아니라는 뜻입니다.
그리고 할머니-할아버지, 소녀-소년, 여학생-남학생 클럽과 같은 단어들은 비교적 작은 부분집합이기 때문에 중립화해서는 안됩니다. 선형 분류기는 중립화 과정을 통해 어떤 단어들이 어떻게 전달되는지 알려줄 수 있고, 이런 편향 방향을 투영해서 299차원 부분 공간에 투영시킵니다.
그리고 마지막으로, 평준화하고자 하는 쌍의 숫자도 사실 상대적으로 작고 적어도 성별 예제의 경우 평준화하고자 하는 쌍의 대부분을 손으로 고르는 것이 가능합니다. 따라서 전체 알고리즘은 여기서 보여드리는 것보다 좀 더 복잡합니다. 자세한 내용을 보려면 이 논문을 보세요.
요약하자면, 저는 학습 알고리즘의 편향을 줄이거나 없애는 것이 매우 중요한 문제라고 생각하는데, 왜냐하면 이 알고리즘들은 사회에서 더 중요한 결정을 내리도록 돕거나 그런 요청을 받기 때문입니다. 이 문제를 어떻게 해결할지 아이디어를 공유했지만 이것은 여전히 많은 연구원들이 지속적으로 연구하는 분야입니다.
댓글남기기