- 검색 시 동의어가 사용되는 이유 및 방법
- 아파치 루씬
- 순방향 신경망의 기초
- word2vec 알고리즘 사용
- word2vec 사용해 동의어 생성
동의어(synonyms): 정보 검색 시 쿼리에 따른 관련 결과 개수 늘리는데 사용하는 일반적인 기법
2.1 동의어 확장
동의어 확장(synonym expansion): 같은 정보 여러 가지 방법으로 표현할 수 있도록 하는 기술
2.1.1 왜 동의어인가?
동의어(synonyms): 철자와 발음은 다르지만 의미가 같거나 아주 비슷한 단어 (ex. aircraft(항공기)와 airplane(비행기)는 모두 'plane'이라는 단어의 동의어)
- 적절한 쿼리가 일치할 확률을 높임 -> 너무 적거나 아무런 결과도 나오지 않게 하는 쿼리 수 줄어듦
- 재현율 개선(recall) - 관련성 높음
- 색인화 시 동의어 확장하면 색인화 속도가 느려지고 색인디 더 커지지만 검색 속도는 빨라짐
- 크기와 부하가 증가함에 따라 시스템의 성능에 현저한 영향 미침
2.1.2 어휘 기반 동의어 일치
ex. music is my aeroplane
- 토크나이저가 토큰 생성(화이트 스페이스 기준) ('music', 'is', 'my', 'aeroplane')
- 토큰 필터 사용해 수신된 각 토큰의 동의어 어휘를 살펴보고 키워드 있는지 확인
-
용어 문서(위치) 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들로 구성(페이지 제목, 페이지 내용 등)
- 필드별 텍스트 분석 파이프라인 구성 가능
- 용어 위치 또는 각 용어가 참조하는 원본 텍스트의 값을 게시 목록에 저장할지 등의 색인화 옵션 구성 가능
- 다른 부분을 파악하는 데 사용할 수 있는 다수의 Field들로 구성(페이지 제목, 페이지 내용 등)
- Directory 통해 접근- 역색인이 유지되는 파일 목록 (역색인 저장)
- IndexReader: 검색 엔진의 대상 경로에서 디렉토리 열기
- IndexSearcher: 검색 및 결과 수집
- Analyzer: 텍스트 분석 작업 수행하는 API. Tokenizer 및 TokenFilter 컴포넌트로 구성 가능
- IndexWriter: IndexWriterConfig에 따라 역색인을 디렉토리의 디스크에 기록
동의어 확장을 통해 루씬 색인 설정
- 색인 시간 및 찾기 시간에 텍스트 분석에 사용할 알고리즘 정의
- 모두 동일한 토크나이저 사용하는 것이 대체로 더 좋으므로 텍스트는 동일한 알고리즘에 따라 분할
- 설정
- 화이트스페이스 토크나이저(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 |
---|