• 검색 시 동의어가 사용되는 이유 및 방법
  • 아파치 루씬
  • 순방향 신경망의 기초
  • word2vec 알고리즘 사용
  • word2vec 사용해 동의어 생성

동의어(synonyms): 정보 검색 시 쿼리에 따른 관련 결과 개수 늘리는데 사용하는 일반적인 기법

 

2.1 동의어 확장

동의어 확장(synonym expansion): 같은 정보 여러 가지 방법으로 표현할 수 있도록 하는 기술

 

2.1.1 왜 동의어인가?

동의어(synonyms): 철자와 발음은 다르지만 의미가 같거나 아주 비슷한 단어 (ex. aircraft(항공기)와 airplane(비행기)는 모두 'plane'이라는 단어의 동의어)

  • 적절한 쿼리가 일치할 확률을 높임 -> 너무 적거나 아무런 결과도 나오지 않게 하는 쿼리 수 줄어듦
  • 재현율 개선(recall) - 관련성 높음
  • 색인화 시 동의어 확장하면 색인화 속도가 느려지고 색인디 더 커지지만 검색 속도는 빨라짐
    • 크기와 부하가 증가함에 따라 시스템의 성능에 현저한 영향 미침

 

2.1.2 어휘 기반 동의어 일치

 

ex. music is my aeroplane

  1. 토크나이저가 토큰 생성(화이트 스페이스 기준) ('music', 'is', 'my', 'aeroplane')
  2. 토큰 필터 사용해 수신된 각 토큰의 동의어 어휘를 살펴보고 키워드 있는지 확인
    • 용어 문서(위치)
      aeroplane 1(12, 17)
      aircraft 1(12, 17)
      airplane 1(12, 17)
      is 1(6, 8)
      music 1(0. 5)
      my 1(9, 11)
      plane 1(12, 17)
      • 특정 문서에서 해당 용어가 출현하는 위치에 대한 정보 기록
      • 'plane', 'airplane', 'aircraft'용어가 원래 용어인 'aeroplane'에 첨부된 정보와 동일한 위치로 색인 추가됨
      • 용어의 위치(position)를 역색인에 기록  - music is my aeroplane/aircraft/airplane/plane
        • music is my aeroplane
        • music is my aircraft
        • music is my airplane
        • music is my plane
          • 네 가지 다른 형태(form). 이 중 하나라도 일치하면 오직 하나의 문서만을 검색 엔진이 반환

 

아파치 루씬: 자바로 작성된 오픈 소스 검색 라이브러리

  •  Document(문서): 색인화하고 검색할 수 있는 주요 실체. 사용 사례에 따라 페이지, 책, 단락 이미지 등
    • 다른 부분을 파악하는 데 사용할 수 있는 다수의 Field들로 구성(페이지 제목, 페이지 내용 등)
      • 필드별 텍스트 분석 파이프라인 구성 가능
      • 용어 위치 또는 각 용어가 참조하는 원본 텍스트의 값을 게시 목록에 저장할지 등의 색인화 옵션 구성 가능
  •  Directory 통해 접근- 역색인이 유지되는 파일 목록 (역색인 저장)
  • IndexReader: 검색 엔진의 대상 경로에서 디렉토리 열기
  • IndexSearcher: 검색 및 결과 수집
  • Analyzer: 텍스트 분석 작업 수행하는 API. Tokenizer 및 TokenFilter 컴포넌트로 구성 가능
  • IndexWriter: IndexWriterConfig에 따라 역색인을 디렉토리의 디스크에 기록

 

동의어 확장을 통해 루씬 색인 설정

  1. 색인 시간 및 찾기 시간에 텍스트 분석에 사용할 알고리즘 정의
    • 모두 동일한 토크나이저 사용하는 것이 대체로 더 좋으므로 텍스트는 동일한 알고리즘에 따라 분할
  2. 설정
    • 화이트스페이스 토크나이저(whitespace tokenizer, 화이트스페이스 문자 마주쳤을 때 토큰 분할) 토크나이저 사용하는 찾기 시간 Analyzer
    • 화이트스페이스 토크나이저 및 동의어 필터를 사용하는 색인 시간 Analyzer
      • 쿼리 시간과 색인 시간 모두에 동의어 확장이 필요하지 않음

검색 엔진에서 대부분의 경우 가벼운 문서 구조를 유지하는 것이 좋음

  • 각 속성(author, title, year, album, text)에 대한 필드 정의 가능
  • 서로 다른 부분에 다른 Analyzer 사용해 보고, 데이터의 말뭉치에 대한 최적의 조합 찾기 전 여러번 변경이 일반적
  • 시간이 지남에 따라 조정 필요

 

동의어 파일 작성 - 파일 변경되어도 코드 변경할 필요 없이 그대로 유지 가능 및 언제든 필요할 때 파일 갱신 가능

  • WordNet프로젝트: 프린스턴 대학교의 영어 어휘 데이터페이스. 대규모 동의어 어휘집 이용 가능
    • 모든 언어에 사용 불가
    • 외연(denotation, 즉 외적 형식 또는 겉으로 드러난 의미)을 기반으로 하였기 때문에 단어가 문맥에 따라 정의되는 내포(connotation, 즉 내적 의미 및 함축된 의미)가 고려되지 않음 -> word2Vec 유용

 

2.2 맥락의 중요성

동의어 매핑(mapping, 즉 대응)의 한계: 정적이며, 색인화된 데이터에 구속되지 않음

  • 단어 자체와 동시에 출현하는 인접 단어의 패턴 분석해 최근접 이웃(nearest neighbor) 추출
    • 문법적 관점에서 동의어가 아니더라도 동의어로 간주
  • 분포 가설(distributional hypothesis): 같은 맥락에서 사용되고 발생하는 단어들이 유사한 의미를 갖는 경향이 있다는 생각이며, 텍스트 표현을 위한 많은 딥러닝 알고리즘의 기초가 됨
    • ex. 도시 이름은 'in' 이라는 단어 근처나 'live', 'visit' 등과 같은 동사에서 멀리 떨어지지 않고 사용됨
    • 데이터로부터 동의어 생성 가능

 

2.3 순방향 신경망

순방향 신경망(feed-forward neural network, 또는 전방전달 신경망, 피드 포워드 신경망)

  • 정보가 입력 계층에서 은닉 계층으로 전달, 마지막으로 출력 계층으로 전달되며 루프 구조가 없어 뉴런 간에 순환 고리 형성되지 않음

 

뉴런: 망의 근분적인 구성 요소

  • 어떤 계층에 속함
  • 들어오는 가중치에 맞춰 입력 처리
  • 활성 함수에 따라 출력 전파

  • 두 번째 층의 뉴런으로 들어오는 모든 가중치를 0.3으로 설정하고 첫 번째 계층으로부터 0.4, 0.5, 0.6 입력치 받는다고 가정
  • 각 가중치에 그 입력을 곱함 -> 0.3 * 0.4 + 0.3 * 0.5 + 0.3 * 0.6 = 0.45
  • 활성 함수는 이 중간 결과에 적용된 후 뉴런의 나가는 연결선에 전파. 일반적으로 쓰이는 활성함수로 탄젠트(tanh), 시그모이드(sigmoid) 및 정류 선형 장치(ReLU)가 있음
  • tanh함수 사용할 경우 tanh(0.45) = 0.4218990053 이므로, 세 번째 계츠의 뉴런은 유일한 수신 연결선을 통해 이 숫자를 수신해 자신의 입력치로 사용하여 똑같은 단계 수행

 

 

역전파: 신호가 신경망 내에서 순방향으로 전달된 뒤 다시 출력 계층에서 입력 계층으로 역방향으로 흐르게 함

  • 입력치가 순방향 방식으로 출력 계층에 전달되면 출력 계층에서는 이 값을 활성 함수를 거치며 변형하는데, 이렇게 변형된 최종 출력치는 기대 출력치와 비교됨
  • 비용 함수(cost function): 특정 사례에서 망이 얼마 잘못되었는지 나타내는 측도(measure)
  • 오차는 출력 뉴런으로 들어오는 연결선을 통해 은닉 계층의 해당 유닛에 역방향으로 전달
  • 유닛은 갱신 알고리즘(update algorithm)에 따라 가중치를 갱신하며, 이 가중치의 역방향 갱신은 입력 계층에 연결된 연결선이 나타내는 가중치까지 조정되어야 끝남
    • 각 가중치는 오차가 생기게 하는 원인 중 하나이므로, 역전파라는 과정을 통해 가중치 조정 시 입력과 출력으로 이뤄진 상이 만들어내는 오차 줄일 수 있음

 

 

2.4 word2vec 사용

word2vec: 텍스트의 한 부분을 가져다가 텍스트의 각 단어를 하나씩 일련의 벡터로 출력

  • 출력 벡터가 2차원 그래프에 표시될 때, 서로 의미가 매우 유사한 단어 벡터가 매우 가깝게 놓이게 됨
  • 단어의 동의어 찾기 가능

 

word2vec 같은 알고리즘에 의해 생성된 단어 벡터는 정적이고(static) 이산적이며(discrete), 고차원적인(high dimensional) 단어 표현을 차원이 더 낮으면서도 미분 가능한(연속적인) 벡터 공간에 사상(mapping)하기 때문에 단어 매장(word embedding)이라고 하는 경우가 많음

 

ex. i like pleasure spiked with pain and music is my aeroplane

  • 텍스트를 word2vec에 입력할 시 각 단어에 대한 벡터 생성(주성분 분석, t-SNE와 같은 차원성 축소 알고리즘 사용해 2차원 출력)
  • 각 벡터 사이의 거리 측정하기 위해 코사인 유도 사용 시 결과 중 일부는 좋고, 일부는 좋지 않음
    • music -> song, view
    • looking -> view, better
    • in -> the, like
    • sitting -> turning, could
      • 생성된 단어 벡터의 차원(2개 차원) 수가 너무 낮은 것으로 보임
      • 더 많은 예문 필요
  • 더 많은 데이터셋 사용해 word2vec 모델 다시 만들 시
    • music -> song, sing
    • view -> visions, gaze
    • sitting -> hanging, lying
    • in -> with, into
    • looking -> lookin, lustin

 

검색 엔진이 자신이 취급하는 데이터에서 동의어를 생성하는 방법을 학습할 수 있기 때문에 최신 정보를 유지하기 위한 사전이나 어휘가 필요하지 않을 수 있음

 

word2vec의 단어 표현 학습 - 연속 단어 주머니(CBOW)와 연속 스킵그램(continuous skip-gram) 사용

  • 신경망에 일정한 크기의 조각으로 쪼개지는 텍스트 한 조각이 주어지며, 모든 단편은 표적 단어(target word 또는 대상어, 목표 단어)와 문맥(context)로 구성된 쌍으로 망에 공급
    • 훈련 중 각 조각의 일부를 표적 단어로 사용하며, 나머지는 문맥으로 사용
    • 연속 단어 주머니 모델에서는 표적 단어를 망의 출력물로, 텍스트 조각(문맥)의 나머지 단어를 입력으로 사용
    • 연속 스킵그램 모델에서는 표적 단어는 입력으로, 문맥 단어는 출력으로 사용
    • 스킵그램이 자주 사용하지 않는 단어에서 약간 더 잘 작동하는 경우가 흔하므로 더 선호됨
    • ex. she keeps moet et chandon in her pretty cabinet let them eat cake she says (창: 5)
      • | she | keeps | moet | et | chandon | 5개의 텍스트 조각 표본
      • 입력: | she | keeps | et | chandon |
      • 출력: moet
  • 망의 은닉 계층에는 각 단어에 대한 일련의 가중치가 들어가며, 이 벡터들은 학습이 끝날 때 단어 표현으로 사용됨
  • 훈련 단계가 끝날 때 은닉 계층의 내부 상태 추출해 각 단어를 정확히 하나의 벡터 표현으로 산출
  • 각 단어를 원핫인코딩 벡터로 표현
  • 단어 주머니 모델
      • 입력 계층은 CxV의 차원성을 가지며, 여기서 C는 문맥의 길이(window 파라미터 1에 대응), V는 어휘의 크기
      • 은닉 계층에는 사용자가 정의한 N의 차원성 존재
      • 출력 계층은 V와 같은 차원성 가짐
    • 입력 단어의 원핫인코딩 벡터를 먼저 입력-은닉 사이에 있는 가중치들에 곱해 망을 통해 전파
    • 출력은 은닉-출력 가중치와 결합(다중)되어 출력 생성되며, 이 출력은 소프트맥스 함수 통과
    • 소프트맥스는 임의의 실제 값 k차원 벡터(출력 벡터)를 1까지 더하는 범위(0,1)의 k차원 벡터에 '스쿼시(squash)'하여 확률 분포 나타낼 수 있도록 함
    • 문맥(망 입력) 감안해 각 출력 단어가 선택될 확률 알려줌
    • 이 신경망의 가장 중요한 부분은 맥락에서 주어진 단어들을 예측하는 것이 아닌, 두 단어가 의미적으로 비슷한 경우를 결정할 수 있도록 은닉 계층의 가중치가 조정됨
  • 스킵그램 모델

      • 입력 벡터는 원핫인코딩(각 단어마다 하나씩)되어 있으므로 입력 계층에는 입력 텍스트의 단어 수와 같은 수의 뉴런 존재
      • 은닉 계층은 원하는 결과 단어 벡터의 차원성을 가짐
      • 출력 계층은 window - 1에 단어 수를 곱한 숫자의 뉴런 가지고 있음
      • ex. she keeps moet et chandon in her pretty cabinet let htem eat cake she says
        • 입력: moet
        • 출력: | she | keeps | et | chandon |

 

 

2.4.1 Deeplearning4j에 word2vec 끼워쓰기

DL4J(Deeplearning4j): 자바 가상 머신을 위한 딥러닝 라이브러리

  • 스킵그램 모델을 기반으로 word2vec 바로 구현 가능

 

2.4.2 Word2vec 기반 동의어 확장

WordNet 사용 시 제한된 동의어 집합을 가지고 있기 때문에 색인 부풀리기 불가

word2vec을 책임감 있게 사용하기 위한 전략

  • 최근접 단어를 얻기 위해 투입할 단어의 종류 제한 (ex. PoS(품사)가 NC(보통명사) 또는 VERB(동사)인 단어에 대해서만 사용)
  • 문서가 얼마나 유익한지 살펴보는 것 (ex. 긴 문서보다 짧은 문서들에 초점을 맞추면서 이 문서들의 동의어를 확장)
  • 용어 가중치를 보고 낮은 가중치를 생략
  • 유사도가 좋은 경우에만 word2vec 결과 사용

 

  • word2vec을 기반 동의어 확장 과정
  • 학습된 word2vec 모델을 사용해 필터링 중 용어 동의어를 예측할 수 있는 동의어 필터 생성 가능

 

 

2.5 평가 및 비교

쿼리 확장의 도입 전후에 정밀도, 재현율, 결과 0의 쿼리 등을 포함한 계량(metrics) 포착 가능하며, 신경망의 모든 파라미터를 최선의 구성 집합이 되게 정하는 것도 좋은 방법

 

교차 검증(cross validation): 머신러닝 모델이 훈련용 데이터와 훈련용이 아닌 데이터를 구분함으로써 훈련을 아주 잘 하게 하는 동시에 파라미터를 최적화 하는 방법

  • 훈련 집합: 모델 훈련하는 데 쓸 데이터의 출처로 사용
  • 교차 검증 집합: 가장 성능이 좋은 파라미터를 가진 모델을 선택하는데 사용
  • 테스트 집합: 교차 검증 집합과 동일한 방식으로 사용되나, 교차 검증 집합에서 테스트를 통해 선택된 모델에서만 사용되는 것 제외

 

 

2.6 프로덕션 시스템에 대해 고려할 사항

대부분의 기존 프로덕션 시스템은 이미 많은 색인화된 문서를 포함하고 있으며, 그러한 경우 색인화되기 전 존재했던 원래의 데이터에 접근하는 것이 때때로 불가능

시간이 지나 데이터셋이 변할 경우 별도의 저장소에 이전 사본을 보관하지 않으면 나중에 모든 색인된 문서에 대해 word2vec 모델 작성 불가능

-> 검색 엔진을 주요 데이터 소스로 사용해 해결

 

 

2.6.1 동의어 대 반의어

보통 텍스트에 'hate', 'love'가 비슷한 맥락에서 나타나지만, 적절한 동의어가 아니라는 것을 말해 줄 충분한 정보가 있음

단어 벡터 간의 유사도는 충분히 비슷하지 않은 최근접 이웃을 배제하는데 도움

  • 유사도의 절대값(ex. 0.6)을 기준으로 필터링

 


요약

  • 동의어 확장 시 재현율이 개선되므로 검색 엔진 사용자를 더 행복하게 하는 기법이 될 수 있음
  • 일반적인 동의어 확장 기법 적용 시 사용되는 데이터와 별 관계없는 정적인 사전이나 어휘집을 사용하게되고, 이로 인해 이러한 사전이나 어휘집을 일일이 수작업으로 정비 필요
  • 순방향 신경망은 많은 신경망 아키텍처의 기초. 정보는 입력 계층에서 출력 계층으로 흐르며, 이 두 계층 사이에 하나 이상의 은닉 계층 있을 수 있음
  • word2vec은 유사한 의미의 단어를 찾거나 유사한 문맥에 나타나는 단어를 찾기 위해 사용할 수 있는 단어들에 대한 벡터 표현을 학습하는 순방향 신경망 기반 알고리즘. 따라서 이 단어를 동의어 확장에도 사용하는 것이 합리적

'Study > 검색을 위한 딥러닝' 카테고리의 다른 글

Chapter 1. 신경망을 이용한 검색  (0) 2023.10.14

+ Recent posts