diff --git a/_config.yml b/_config.yml index 222b927..b255b5c 100644 --- a/_config.yml +++ b/_config.yml @@ -57,8 +57,4 @@ plugins: [jekyll-paginate, jekyll-seo-tag, jekyll-feed, jekyll-sitemap, jekyll-t exclude: [".jekyll-cache", ".jekyll-metadata", ".idea", "vendor/*", "assets/node_modules/*"] # theme: type-on-strap # if using the theme as a jekyll theme gem -remote_theme: sylhare/Type-on-Strap # If using as a remote_theme in github - -toc: - min_level: 1 - max_level: 3 +remote_theme: sylhare/Type-on-Strap # If using as a remote_theme in github \ No newline at end of file diff --git a/_posts/2023-10-12-what-can-language-models-do-in-finance.md b/_posts/2023-10-12-what-can-language-models-do-in-finance.md index 579a404..eac796c 100644 --- a/_posts/2023-10-12-what-can-language-models-do-in-finance.md +++ b/_posts/2023-10-12-what-can-language-models-do-in-finance.md @@ -11,7 +11,7 @@ back_color: "#ffffff" img_name: "argumentation-methods.png" toc: true show: true -new: true +new: false series: -1 index: 32 --- @@ -226,7 +226,7 @@ MSCI ESG rating guideline에서 해당 뉴스와 관련이 있을 만한 라벨
-#### Pythia, CerebrasGPT, OPT +### Pythia, CerebrasGPT, OPT 해당 대회 시작 시기 즈음부터 Alpaca, Vicuna부터 시작된, 효과적으로 사전 학습 및 미세 조정된 오픈소스 언어모델이 출시되었으나, 당시 새로운 미세조정된 오픈소스 언어모델들에 대한 저희 팀의 활용 경험은 아직 부족했습니다. diff --git a/_posts/2023-11-28-dig-up-treasure-from-the-scattered-subtitles.md b/_posts/2023-11-28-dig-up-treasure-from-the-scattered-subtitles.md index 5323483..a66430d 100644 --- a/_posts/2023-11-28-dig-up-treasure-from-the-scattered-subtitles.md +++ b/_posts/2023-11-28-dig-up-treasure-from-the-scattered-subtitles.md @@ -28,7 +28,7 @@ index: 36 * 결론 * 제안 사항 및 향후 계획 * 참고 문헌 - {:toc} +{:toc}
@@ -62,6 +62,7 @@ Text Alignment는 이러한 상황에서 대안으로 사용될 수 있습니다
#### Examples from English-Korean TEDtalk Data +{:.no_toc} {: style="text-align:center"} | 한국어 | 영어 | @@ -111,6 +112,7 @@ Text Alignment는 이러한 상황에서 대안으로 사용될 수 있습니다
#### *Sentence Boundary Detection (SBD)* +{:.no_toc}
@@ -125,6 +127,7 @@ Text Alignment는 이러한 상황에서 대안으로 사용될 수 있습니다
#### *Clause Boundary Detection (CBD)* +{:.no_toc}
  저희는 처음에 한국어 문장 대 영어 문장으로 정렬을 시도했습니다. 하지만 언어적 특성으로 인하여 정보의 양이 1:1로 매칭되는 문장 쌍은 생각보다 많지 않았습니다. 더 많은 문장쌍을 발굴하기 위해, 다시말하면 재현율을 높이기 위해 한 쪽 텍스트를 더 작은 단위로 나눌 필요성이 있다고 생각 되었습니다. 한국어와 영어의 문법적 특성을 고려할 때, 한국어 문장 1개에 영어 절 n개를 매칭하는 것이 훨씬 효과적이라고 결론 지었습니다. 문장의 접속사와 원본 데이터의 줄 바꿈을 고려하여 구와 절을 분리하면 (영어 텍스트에 대해서만) 아래와 같이 절 경계 감지(CBD)가 완료됩니다.
@@ -221,13 +224,13 @@ similarity threshold = 0.47
-### 결론 +## 결론   본 포스트에서는 시간 순서대로 생성된 텍스트 데이터를 처리하는데 맞춤화된 텍스트 정렬 파이프라인인 TATT를 소개했습니다. TATT는 문장을 정렬하고 내용적으로 매칭되지 않는 텍스트를 필터링하여 전반적으로 더 높은 품질의 병렬 데이터를 생성할 수 있었습니다. 정량평가에서는 F1-score 기준 0.915의 높은 성능을 보였고 정성평가에서도 큰 폭으로 데이터 품질이 개선된 것으로 확인했습니다.   TATT는 노이즈가 많고 정렬이 부정확한 병렬 데이터로 관련 작업을 해야 하는 NLP 실무자에게 유용한 도구가 될 수 있습니다. 기계 번역, 다국어 모델링, 다른 타깃언어로의 텍스트 요약과 같은 여러 NLP 작업의 성능을 개선하는 데 사용할 수 있습니다. -#### 제안 사항 및 향후 계획 +### 제안 사항 및 향후 계획   현재 TATT는 단일 화자 데이터와 한국어-영어 언어 쌍으로 제한되어 있습니다. 추가로 다중 화자 데이터(예: 영화/드라마 자막)와 더 많은 언어 쌍을 처리할 수 있도록 기능을 확장할 계획입니다. 이런 문제들을 해결하기 위해 고려해야 하는 면들이 또 어떤 것들이 있을지 궁금하고 기대가 되네요! @@ -237,7 +240,7 @@ similarity threshold = 0.47
-### 참고 문헌 +## 참고 문헌 1: OPUS. "TED Talks - Korean-English Parallel Corpus." OPUS - The Open Parallel Corpus, Version 1.0, Translation@Scale, 2016. [Link to OPUS TED2020](https://opus.nlpl.eu/TED2020.php). diff --git a/_posts/2024-01-30-varco-mt.md b/_posts/2024-01-30-varco-mt.md index 290188c..07bebec 100644 --- a/_posts/2024-01-30-varco-mt.md +++ b/_posts/2024-01-30-varco-mt.md @@ -55,7 +55,7 @@ index: 41
-## 들어가며 +# 들어가며
@@ -63,11 +63,11 @@ index: 41 이번 WMT 2023 Terminology Shared Task에 참가함으로써, 우리는 VARCO MT를 용어 번역에 더욱 고도화하면서 VARCO MT가 세계적인 대회에서 어디까지 도달할 수 있는지 확인하고 싶었습니다. WMT 2023에서의 Terminology shared task에 대한 세부 내용을 살펴보고 과제를 해결하기 위해 어떻게 접근했고 어떤 성과를 거두었는지에 대한 내용들을 소개하겠습니다. -## WMT23 Terminology Shared Task +# WMT23 Terminology Shared Task
-### Terminology Shared Task가 뭐죠? +## Terminology Shared Task가 뭐죠? Terminology Shared Task는 **용어 번역 쌍**이 존재 할 때 기계 번역 모델이 이를 얼마나 잘 **활용**하는지를 겨루는 경진대회입니다. @@ -93,7 +93,7 @@ Terminology Shared Task는 **용어 번역 쌍**이 존재 할 때 기계 번역
-### WMT 2021 Terminology Shared Task +## WMT 2021 Terminology Shared Task 이번 WMT 2023 Terminology Shared Task에 참가하기 전에, 2021년에 개최된 WMT 2021 Terminology Shared Task에서서 우승했던 팀들의 논문을 살펴보았습니다. 여러 팀들의 접근 방식을 분석한 결과, 다음과 같은 주요 전략들이 돋보였습니다. @@ -114,7 +114,7 @@ Terminology Shared Task는 **용어 번역 쌍**이 존재 할 때 기계 번역
-### 공개 데이터 및 제약 조건 +## 공개 데이터 및 제약 조건 WMT23 Terminology Shared Task는 다음과 같이 3가지의 단방향 언어쌍으로 진행되었습니다. @@ -126,7 +126,7 @@ WMT23 Terminology Shared Task는 다음과 같이 3가지의 단방향 언어쌍 학습 데이터는 별도로 제공되지 않았고, [General MT Shared Task](https://www2.statmt.org/wmt23/translation-task.html)의 학습 데이터를 사용하고 General Task의 제약 조건을 따르라는 안내가 있었습니다. 특이하게도, 용어 번역 쌍은 따로 제공되지 않았고 주최측에 문의했더니 직접 구축하라는 답변을 받았습니다. 😓 -#### 공개 데이터 +### 공개 데이터 WMT23 General Task에서 공개한 ZH-EN 병렬 데이터의 종류와 크기는 다음과 같습니다. @@ -157,22 +157,22 @@ WMT23 General Task에서 공개한 ZH-EN 병렬 데이터의 종류와 크기는 학습 데이터와 다르게 검증, 평가, Blind 데이터는 각 Mode별 용어 병렬 쌍도 함께 공개되었습니다. -#### 제약 조건 +### 제약 조건 - **Unconstrained Track과 Constrained Track의 구분**: 주어진 데이터와 언급한 사전 학습 모델 이외의 자원을 사용할 경우, 해당 팀은 Unconstrained Track으로 분류되어 별도로 평가됩니다. - **Constrained Track에서의 학습 데이터**: Constrained Track에서는 올해에 공개된 학습 데이터만을 사용할 수 있습니다. - **허용된 사전 학습 모델**: 대회에서는 사전 학습 모델로 이미 공개된 특정 모델들만을 사용할 수 있도록 허용하고 있습니다: mBART, BERT, RoBERTa, XLM-RoBERTa, sBERT, LaBSE - **기본 언어학 도구 사용 허용**: 기본 언어학 도구들(Taggers, Parsers, Morphology Analyzers 등)은 사용이 허용되어 있습니다. -## 데이터 처리 +# 데이터 처리
-### 데이터 정제 +## 데이터 정제 공개된 데이터 중에서 큰 비중을 차지하는 Back Translated Data 및 Crawling Data의 신뢰성을 높이기 위해 데이터 정제를 진행했습니다. 휴리스틱한 방법으로 1차적으로 정제 후 딥러닝 모델 기반 방법으로 2차 정제를 진행했습니다. -#### 1차 정제: 휴리스틱 +### 1차 정제: 휴리스틱 아래에 기술된 필터링 조건이 하나라도 포함되면 제거하였습니다. 중국어 tokenizer는 jieba[1](#footnote_1)를 사용했습니다. @@ -189,7 +189,7 @@ WMT23 General Task에서 공개한 ZH-EN 병렬 데이터의 종류와 크기는 11. Target 문장에서 중국어 이외의 글자가 20% 이상인 문장 12. E-mail 및 Web Link가 포함된 문장 -#### 2차 정제: LaBSE(Language-agnostic BERT Sentence Embedding)[2](#footnote_2) +### 2차 정제: LaBSE(Language-agnostic BERT Sentence Embedding)[2](#footnote_2) Google AI에서 공개한 LaBSE를 활용하여 문장 쌍의 유사도를 측정하였습니다. 유사도가 너무 크면 병렬쌍이 아닌 동일한 언어의 거의 비슷한 문장인 경우였고 유사도가 너무 작으면 두 문장의 의미가 다른 경우였습니다. 이러한 데이터들을 정제하기 위하여 특정 유사도보다 크거나 작은 데이터들을 제거하였습니다. @@ -210,7 +210,7 @@ Google AI에서 공개한 LaBSE를 활용하여 문장 쌍의 유사도를 측 **실험 및 분석**에서 이러한 과정이 모델의 성능에 어떤 영향을 미치는지 더 자세히 살펴보겠습니다. -### 용어 추출 +## 용어 추출 따로 제공된 용어 사전이 없어 학습 병렬 말뭉치에서 직접 용어 사전을 추출하는 작업을 수행했습니다. 이번 대회에서는 각 모드 별 용어 번역 쌍을 반영한 번역 결과를 평가하기 때문에, 각 모드 별로 용어 사전을 추출해야 했습니다. @@ -287,7 +287,7 @@ Mode 3에서 추출된 용어와 Algnment 정보를 융합하여 후보를 생
표 8. 용어 병렬 쌍 추출 결과

-## 모델 +# 모델
우리는 번역 모델의 구조를 결정하기 전에 대회의 제약 조건을 다시 한번 확인하였습니다. 이때 몇 가지 고려해야 할 사항이 있었습니다. @@ -321,7 +321,7 @@ Mode 3에서 추출된 용어와 Algnment 정보를 융합하여 후보를 생
-## TSSNMT (Terminology Self-selection Neural Machine Translation) +# TSSNMT (Terminology Self-selection Neural Machine Translation) ![]({{"/assets/img/post/435833e86d3e4cd1e2576fa9aabaf4bc47dc1ad6/TSSNMT.jpg"| relative_url}}){: width="70%"} @@ -333,7 +333,7 @@ TSSNMT는 "**모델이 일반적인 단어를 번역할 때는 Source 문장을
-## ForceGen Transformer (ForceGen-T) +# ForceGen Transformer (ForceGen-T) ![]({{"/assets/img/post/435833e86d3e4cd1e2576fa9aabaf4bc47dc1ad6/ForceGen-T.jpg"| relative_url}}){: width="80%"} @@ -349,28 +349,28 @@ ForceGen-T는 유사한 문장의 번역한 결과를 미리 보고 현재 문
-## 실험 및 분석 +# 실험 및 분석
-### 평가 지표 +## 평가 지표 - SacreBLEU[7](#footnote_7): BLEU를 개선한 버전으로, 입력 되는 Token 단위에 따라 점수가 달라지는 BLEU와 다르게 일관된 점수로 측정되는 것이 가장 큰 특징 - ChrF[8](#footnote_8): Character N-gram을 기반으로 측정하는 평가 지표 - COMET[9](#footnote_9): 모델 기반 기계 번역 성능 평가 지표로 SacreBLEU, ChrF와 다르게 의미적(Semantic)으로 평가. 평가에는 WMT22-COMET-DA 모델을 사용. - CSR (Copy Success Rate): 번역 결과 문장에 용어 번역 쌍이 얼마나 반영되었는지를 판단하는 지표 (내부 개발) -### 실험 1. 모델 검증 +## 실험 1. 모델 검증 우리는 WMT 데이터의 전처리가 이루어지는 동안 다른 기계 번역 경진 대회인 IWSLT(The International Conference on Spoken Language Translation)에서 공개한 중-영 데이터와 META에서 공개한 MUSE[10](#footnote_10)의 병렬 사전 말뭉치를 이용하여 구상한 모델들을 검증하였습니다. -#### 데이터 수량 (IWSLT 2017 ZH-EN) +### 데이터 수량 (IWSLT 2017 ZH-EN) - 학습 데이터: 231,266 문장 쌍 - 검증 데이터: 8,549 문장 쌍 - 평가 데이터: 879 문장 쌍 -#### 결과 +### 결과 | 모델 | SacreBLEU | ChrF | COMET | CSR | | :------------------: | :-------: | :-------: | :--------: | :--------------------: | @@ -386,17 +386,17 @@ TermMind 재현 모델의 경우 Baseline 모델보다 입력 구조가 복잡
-### 실험 2. WMT 데이터 적용 +## 실험 2. WMT 데이터 적용 IWSLT 데이터로 실험을 진행하는 동안 WMT 데이터의 전처리가 일부 완료되어 WMT 데이터로 변경해서 2차 실험을 진행하였습니다. -#### 검증 데이터 +### 검증 데이터 대회 주최측에서 제공한 검증 데이터는 총 99 문장 쌍이었습니다. 이는 검증 데이터로 학습에 활용하기에는 부족한 양이기 때문에, 학습 데이터에서 2,000개의 문장쌍을 랜덤하게 선택하여 새로운 검증 데이터로 활용하여 실험의 신뢰도를 높일 수 있었습니다. 새로운 검증 데이터는 학습 데이터와 동일한 방식으로 Mode 별 용어를 추출하였고, ChatGPT를 활용하여 Source 문장에 용어 번역 쌍을 고려한 Target 문장을 생성하였습니다. -#### 평가 데이터 +### 평가 데이터 평가 데이터는 두 종류를 사용했습니다. @@ -405,7 +405,7 @@ IWSLT 데이터로 실험을 진행하는 동안 WMT 데이터의 전처리가 동일한 Source 문장에 다른 용어 번역 쌍이 주어졌을 때 번역 결과가 어떻게 달라지는지를 확인하기 위해 두 번째 평가 데이터도 따로 제작하여 실험하였습니다. 이후 진행되는 모든 실험에서는 위에서 설명한 평가 데이터와 검증 데이터를 사용하였습니다. -#### 데이터 수량 (WMT 2023 데이터 일부) +### 데이터 수량 (WMT 2023 데이터 일부) - 학습 데이터: 9,927,357 문장 쌍 - 검증 데이터: 6,000 문장 쌍 (Mode 별 2,000 문장 쌍) @@ -413,7 +413,7 @@ IWSLT 데이터로 실험을 진행하는 동안 WMT 데이터의 전처리가 - WMT 평가 데이터: 7,942 문장 쌍 - Mode 별 평가 데이터: 7,809 문장 쌍 (Mode 별 2,603 문장 쌍) -#### 결과 +### 결과 @@ -491,13 +491,13 @@ WMT 일부 데이터 실험 결과 ForceGen-T 모델이 대부분의 성능에
-### 실험 3. 메인 실험 결과 +## 실험 3. 메인 실험 결과 WMT에서 제공한 모든 데이터의 전처리가 완료되어 메인 실험을 진행하였습니다. Blind 평가 데이터는 대회 마감 일주일 전에 공개되었고 WMT 평가 데이터와 동일한 방법으로 Target 문장을 생성하였습니다. 대회에 제출할 최종 모델은 WMT 평가 데이터와 Blind 평가 데이터를 고려하여 결정하였습니다. -#### 데이터 수량 (WMT 2023 데이터 전체) +### 데이터 수량 (WMT 2023 데이터 전체) - 학습 데이터: 43,019,073 문장 쌍 - 검증 데이터: 6,000 문장 쌍 (2,000 \* 3) @@ -505,7 +505,7 @@ Blind 평가 데이터는 대회 마감 일주일 전에 공개되었고 WMT 평 - WMT 평가 데이터: 7,942 문장 쌍 - Blind 평가 데이터: 7,896 문장 쌍 -#### WMT 평가 데이터 결과 +### WMT 평가 데이터 결과 | 모델 | SacreBLEU | ChrF | COMET | CSR | | :------------------: | :-------: | :-------: | :--------: | :----------------------: | @@ -516,7 +516,7 @@ Blind 평가 데이터는 대회 마감 일주일 전에 공개되었고 WMT 평
표 12. 최종 모델 WMT 평가 데이터 결과

-#### Blind 평가 데이터 결과 +### Blind 평가 데이터 결과 | 모델 | SacreBLEU | ChrF | COMET | CSR | | :------------------: | :-------: | :-------: | :--------: | :----------------------: | @@ -531,7 +531,7 @@ TSSNMT, ForceGen-T 두 모델 모두 동일한 데이터와 비슷한 수의 파
-### 추가 실험 1. 데이터 정제 실험 결과 +## 추가 실험 1. 데이터 정제 실험 결과 데이터 정제 실험에서는 전체 데이터를 1차 정제만을 진행하고 학습한 모델과, 1차 정제 이후에 추가로 2차 정제까지 진행하고 학습한 모델을 비교하였습니다. 이 실험은 TSSNMT 모델을 이용하였고 학습 데이터 품질에 따른 번역 결과를 분석하는 데에 중점을 두었습니다. 평가 데이터로는 WMT 평가 데이터를 활용하였습니다. @@ -548,18 +548,18 @@ TSSNMT, ForceGen-T 두 모델 모두 동일한 데이터와 비슷한 수의 파
-## WORKSHOP 결과 +# WORKSHOP 결과
-### 주최측 평가 지표 +## 주최측 평가 지표 - ChrF[8](#footnote_8) - COMET[9](#footnote_9) (WMT22-COMET-DA) - Terminology Consistency: 용어 번역 일관성 (동일한 문서에서 같은 단어가 동일하게 번역되는가를 평가) - Terminology Success Rate: 용어 번역 성공률 (번역 결과 문장에 용어 번역 쌍이 얼마나 반영되었는지를 판단 하는 지표, CSR과 의미적으로 동일) -### 대회 공식 결과[11](#footnote_11) +## 대회 공식 결과[11](#footnote_11) ![]({{"/assets/img/post/435833e86d3e4cd1e2576fa9aabaf4bc47dc1ad6/results.jpg"| relative_url}}){: width="80%"} @@ -571,7 +571,7 @@ ForceGen-T 모델 역시 Terminology Consistency 2위, Terminology Success Rate
-## 마치며 +# 마치며 이 글에서는 WMT 23 Terminology Shared Task에 참가한 경험을 살펴보았습니다. 대회 주최측의 제약 조건을 따르면서도 모델이 용어를 원하는 대로 번역 할 수 있는 방법을 탐구했습니다. 용어의 정보를 모델에 전달할 때, 용어의 연속성에 구애받지 않도록 TSSNMT 또는 ForceGen-T와 같은 방법으로 접근했습니다. 그 결과, 일반적인 Transformer 구조의 Baseline보다 번역 성능이 향상되었을 뿐만 아니라 주어진 용어 번역 쌍을 반영한 번역 결과를 얻을 수 있었습니다. 또한, 데이터 정제를 통해 모델의 성능이 크게 향상됨을 확인하면서 학습에 있어 고품질 데이터의 중요성을 다시 한 번 강조하고 싶습니다. @@ -579,7 +579,7 @@ VARCO MT가 세계적인 기계 번역 대회에서 좋은 결과를 거두어
-## Reference +# Reference
diff --git a/_posts/2024-03-28-shifting-search-paradigms.md b/_posts/2024-03-28-shifting-search-paradigms.md index 9bbb12f..0570b51 100755 --- a/_posts/2024-03-28-shifting-search-paradigms.md +++ b/_posts/2024-03-28-shifting-search-paradigms.md @@ -9,21 +9,22 @@ tags: [검색, Information_Retrieval, Search, SPLADE, DPR, BM25] excerpt: "Sparse에서 Dense을 거쳐 Learned Sparse Retrieval까지 검색 패러다임의 변천사를 소개합니다." back_color: "#ffffff" img_name: "thumbnail.png" -toc: false +toc: true show: true new: true series: -1 index: 45 --- -- [시작하며](#시작하며) - - [검색 파이프라인](#검색-파이프라인) -- [검색 패러다임](#검색-패러다임) - - [Sparse Retrieval](#sparse-retrieval) - - [Dense Retrieval](#dense-retrieval) - - [Learned Sparse Retrieval](#learned-sparse-retrieval) -- [마치며](#마치며) -- [References](#references) +- 시작하며 + - 검색 파이프라인 +- 검색 패러다임 + - Sparse Retrieval + - Dense Retrieval + - Learned Sparse Retrieval +- 마치며 +- References +{:toc}
@@ -72,6 +73,7 @@ index: 45 `Sparse Retrieval은 Lexical Match 기반 검색 패러다임입니다.` **검색어에 있는 단어가 많이 나오는 문서**를 사용자에게 검색 결과로 제공합니다. 직관적인 검색 방법으로 좋은 성능을 보였기에 오랜 시간이 지난 지금에도 사용되는 전통적인 검색 방식입니다. ### 인덱싱과 검색 단계 +{:.no_toc} ![]({{"/assets/img/post/003e686308f3f3db597b5e5b5d9b6a6bd062aad0/sparse_retrieval.png"| relative_url}}) *<그림 2> Sparse Retrieval의 예시* *(인덱싱 단계) 어떤 단어가 어떤 문서에 들어있는지 인덱스로 구조화한다. (검색 단계) 검색어에서 단어를 뽑고 인덱스에서 해당 단어가 들어있는 문서를 찾아서 검색 결과로 제공한다.* @@ -83,6 +85,7 @@ Sparse Retrieval의 인덱싱과 검색 단계는 <그림 2>와 같습니다. 검색에 사용될 수 있는 단어의 개수는 매우 많습니다. Sparse Retrieval은 수많은 단어 중에서도 대상 문서와 검색어에 있는 **일부 단어만 고려**해서 Lexical Match 점수를 계산합니다. 일부 단어만 고려하기 때문에 **Sparse Retrieval**이라는 이름이 붙었습니다. ### BM25 알고리즘 +{:.no_toc} **BM25**(**B**est **M**atch)[^2] 알고리즘은 Sparse Retrieval에 속하는 대표적인 방법론입니다. BM25는 **검색어와 문서 사이의 Lexical Match 점수를 계산**합니다. 검색어와 문서에 있는 단어가 겹치는 정도를 기준으로 검색 결과를 만듭니다. 아래 수식은 BM25 알고리즘을 표현한 것입니다. $$ @@ -92,6 +95,7 @@ $$ 위 수식의 $$f(q_i, D)$$와 $$\text{IDF}(q_i)$$는 각각 TF-IDF의 구성요소인 TF(Term Frequency)와 IDF(Inverse Document Frequency)입니다. $$(k_1 + 1)$$과 $$k_1 \cdot (1 - b + b \cdot \frac{\\|D\\|}{\text{avgdl}})$$ 부분은 Smoothing을 위한 항으로 결과 조정을 위해 추가된 부분입니다. 따라서 BM25는 TF-IDF를 기반으로 문서-검색어 간 관련도를 계산하는 알고리즘입니다. ### Sparse Retrieval의 한계 +{:.no_toc} 다시 <그림 2>을 살펴봅시다. <그림 2>의 인덱스를 통해 문서6에 단어 "*마라탕*"과 "*맛집*"이 있는 것을 알 수 있습니다. 검색어 "*판교 마라탕 맛집*"과 문서6이 두 개의 단어에서 Lexical Match 됐습니다. <그림 2>와 같이 검색어를 **문서에 등장할 법한 단어**로 잘 정리해서 Lexical Match가 되면 원하는 검색 결과를 쉽게 얻을 수 있습니다. ![]({{"/assets/img/post/003e686308f3f3db597b5e5b5d9b6a6bd062aad0/vocab_mismatch.png"| relative_url}}) @@ -106,6 +110,7 @@ Sparse Retrieval의 Lexical Mismatch 문제를 해결하기 위해 여러 방법 `Dense Retrieval은 문서/검색어의 의미를 고려하는 벡터 검색 패러다임입니다.` 예전과 달리 언어 모델이 발전해서 문서/검색어를 의미 벡터로 표현할 수 있게 되며 Dense Retrieval이 등장할 수 있었습니다. ### 새로운 검색 파이프라인 +{:.no_toc} ![]({{"/assets/img/post/003e686308f3f3db597b5e5b5d9b6a6bd062aad0/pipeline.png"| relative_url}}) *<그림 4> 학습 단계가 포함된 파이프라인* *왼쪽 상단의 노란색으로 강조된 부분은 학습 단계를 나타낸다. 인덱싱을 하기 전에 언어모델을 데이터셋으로 학습해서 인코더를 만든다. 인덱싱 단계에서 문서 인코더는 문서를 벡터화한다. 검색 단계에서 검색어 인코더는 검색어를 벡터화한다.* @@ -113,6 +118,7 @@ Sparse Retrieval의 Lexical Mismatch 문제를 해결하기 위해 여러 방법 Dense Retrieval부터는 인코더(Encoders)의 개념이 나타납니다. 문서와 검색어를 의미 벡터로 표현하기 위한 문서 인코더와 검색어 인코더를 말합니다. 문서/검색어 인코더는 먼저 언어모델을 데이터셋으로 **학습**(Training)해서 만들 수 있습니다. 따라서 학습 단계가 파이프라인에 추가됩니다. <그림 4>의 좌측 상단에 노란색으로 강조한 부분이 추가된 학습 단계에 해당합니다. 인코더 학습 단계는 인덱싱과 검색 단계 이전에 진행되어야 합니다. 학습된 문서/검색어 인코더를 인덱싱과 검색 단계에서 사용하기 때문입니다. ### 인덱싱과 검색 단계 +{:.no_toc} ![]({{"/assets/img/post/003e686308f3f3db597b5e5b5d9b6a6bd062aad0/dense_retrieval.png"| relative_url}}) *<그림 5> Dense Retrieval의 인덱싱과 검색 단계* *(인덱싱 단계) 문서 인코더로 각 문서를 벡터로 만들고 벡터 인덱스로 구조화한다. (검색 단계) 검색어 인코더로 사용자의 검색어를 벡터로 만든다. 벡터 인덱스에서 검색어 벡터와 가까운 문서 벡터를 찾아서 검색 결과로 제공한다. 의미가 비슷한 문서를 검색 결과로 얻을 수 있다.* @@ -126,9 +132,11 @@ Dense Retrieval에서의 인덱싱과 검색 단계는 <그림 5>와 같습니 <그림 5>의 인코더는 문서와 문장을 **빽빽한 벡터**(Dense Vector)로 인코딩합니다. 벡터의 각 차원은 다양한 의미를 나타내고 대부분 0이 아닌 값을 갖습니다. <그림 5>의 벡터가 각 차원에 다양한 색을 갖는 것이 Dense Vector의 특성을 보여줍니다. Dense Vector로 문서/검색어를 표현하고 검색에 사용하기에 **Dense Retrieval**이라고 하는 것입니다. ### DPR +{:.no_toc} Dense Retrieval에서는 인코더의 구조와 학습 단계에 따라 다양한 방법론이 나타났습니다. 특히 **DPR**(**D**ense **P**assage **R**etrieval)[^4]은 Dense Retrieval에 속하는 대표적인 방법론입니다. DPR 인코더는 BERT 기반이며 문서와 검색어 각각 전용 인코더를 두는 점이 특징입니다. 또한 In-Batch Negative Sampling과 Contrastive Learning을 통해 인코더를 학습하는 점도 특징입니다. DPR을 자세히 살펴보겠습니다. #### DPR 인코더 학습 단계 +{:.no_toc} DPR의 인코더 학습 단계를 간단히 살펴보겠습니다. - 검색어와 관련 문서가 연결된 학습 데이터셋을 준비합니다. - 문서/검색어 인코더(BERT)로 문서/검색어를 Dense Vector로 만듭니다. @@ -154,6 +162,7 @@ $$ 위 수식은 검색어 $$q_i$$와 관련된 문서 $$p_{i}^+$$(Positive Sample)와 관련 없는 문서들 $$p_{i,1:n}^-$$(In-Batch Negative Samples) 간의 **Contrastive Loss**(Rank-IBN)를 나타냅니다. Contrastive Loss를 최소화하면 관련된 문서와의 유사도 $$\text{sim}(q_i,p_{i}^+)$$는 커지고 관련 없는 문서와의 유사도 $$\text{sim}(q_i,p_{i,j}^-)$$는 작아지도록 인코더의 가중치값이 조정됩니다. ### Dense Retrieval의 한계 +{:.no_toc} 검색할 때는 **핵심 단어에 집중**할 필요가 있습니다. `하지만 Dense Retrieval에서는 핵심 단어보다는 문서/검색어의 전체적인 의미를 바탕으로 검색합니다.` 검색어의 핵심 단어가 없어도 비슷한 의미의 문서가 검색 결과로 나올 수 있습니다. 예를 들어 "*축구선수 리오넬 메시는 어떤 상 받았어?*"를 검색하면 검색어의 핵심 단어는 단연코 "*리오넬 메시*"입니다. 하지만 핵심 단어가 나오는 "*메시의 국가대표 경력*" 문서뿐만 아니라 전체적인 의미가 비슷한 "*네이마르가 바르사에서 이달의 선수상 첫 수상*", "*축구선수 음바페 역대 수상 목록*" 등의 문서도 검색 결과로 나오게 됩니다. 사용자의 의도에 맞지 않는 검색 결과입니다. @@ -168,6 +177,7 @@ Sparse와 Dense Retrieval의 장단점을 다시 살펴보겠습니다. 인코더가 Lexical Match를 학습하면 어떨까요? 문서/검색어의 의미를 반영하면서도 핵심 단어에 집중해서 검색할 수 있을 것입니다. 위 예시에서 본 *"축구선수 리오넬 메시는 어떤 상 받았어?"* 검색어에 대해서 *"네이마르가 바르사에서 이달의 선수상 첫 수상"*, *"축구선수 음바페 역대 수상 목록"* 문서를 찾는 문제를 막을 것입니다. 지금부터 다룰 `Learned Sparse Retrieval은 학습할 수 있는 인코더로 의미 기반 Lexical Match를 하는 검색 패러다임입니다.` Learned Sparse Retrieval에서 어떻게 인코더로 Lexical Match를 하는지 살펴보겠습니다. ### 인덱싱과 검색 단계 +{:.no_toc} ![]({{"/assets/img/post/003e686308f3f3db597b5e5b5d9b6a6bd062aad0/learned_sparse_retrieval.png"| relative_url}}) *<그림 6> Learned Sparse Retrieval의 인덱싱과 검색 단계* *문서 인코더와 검색어 인코더는 Sparse Vector를 만든다. Sparse Vector는 대부분이 0이고 일부분만 0이 아닌 값을 가진다. 벡터의 0인 부분은 흰색으로 표현했고 0이 아닌 부분은 푸른색으로 표현했다. 벡터 간 유사도 계산을 해서 검색어와 가까운 문서를 검색 결과로 제공한다. 녹색 사각형은 두 벡터가 모두 0이 아닌 부분을 표현하고 있다. 유사도 계산시 녹색 사각형 부분만 연산하면 된다는 특징이 있다.* @@ -175,9 +185,11 @@ Sparse와 Dense Retrieval의 장단점을 다시 살펴보겠습니다. Learned Sparse Retrieval을 표현한 <그림 6>과 Dense Retrieval을 표현한 <그림 5>를 비교해 보면 인코더로 벡터를 만들고 유사도 계산을 하는 점이 비슷합니다. 반면에 가장 두드러지는 차이는 벡터의 형태에 있습니다. <그림 5>의 인코더는 Dense Vector를 만들지만 <그림 6>의 인코더는 **희소한 벡터**(Sparse Vector)를 만듭니다. <그림 6>의 벡터의 값이 0인 대부분은 흰색이고 0이 아닌 일부만 푸른색인 것이 Sparse Vector의 특성을 보여줍니다. 벡터가 Sparse하므로 유사도 계산 시 0이 아닌 부분에 대해서만 연산하면 됩니다. Sparse Vector에서 각 차원이 단어라고 생각하면 검색어와 단어가 많이 겹치는 문서에 높은 점수를 주게 되는 것입니다. Sparse Retrieval의 Lexical Match 방식과 비슷합니다. 학습을 통한 Sparse Retrieval이라 **Learned Sparse Retrieval** 패러다임입니다. ### SPLADE +{:.no_toc} Learned Sparse Retrieval에서도 인코더의 구조와 학습 단계에 따라 다양한 방법론이 나타났습니다. 특히 Sparse Vector를 만드는 방식과 벡터의 각 차원이 의미하는 바가 무엇인지가 중요합니다. **SPLADE**(**SP**arse **L**exical **A**n**D** **E**xpansion model)[^5]는 Learned Sparse Retrieval에 속하는 대표적인 방법론입니다. SPLADE는 Log Saturation과 FLOPS Regularization을 통해 Sparse Vector를 만든다는 점과 벡터의 각 차원이 Vocabulary 단어를 의미한다는 점이 주요 특징입니다. SPLADE를 자세히 살펴보겠습니다. #### SPLADE 인코더 구조 +{:.no_toc} ![]({{"/assets/img/post/003e686308f3f3db597b5e5b5d9b6a6bd062aad0/splade_encoder.png"| relative_url}}) *<그림 7> SPLADE 인코더 예시* *BERT와 Linear는 문서/검색어 토큰의 Vocabulary Size 차원 벡터를 만든다. Log Saturation은 각 토큰 벡터를 Sparse 하게 바꾼다. 모든 토큰에 대해 Log Saturated 벡터를 더한 문서/검색어 벡터는 Sparse Vector가 된다. 벡터의 각 차원은 Vocabulary 단어의 중요도를 나타낸다.* @@ -213,6 +225,7 @@ SPLADE 인코더에서 중요한 역할을 하는 **Log Saturation**이 어떤 Log-saturated 토큰 벡터의 합으로 정의되는 문서 벡터는 Sparse 하며 Vocabulary Size의 차원을 가지게 됩니다. 문서와 검색어는 **적은 수의 단어**에 대한 중요도로 표현되며 덕분에 **핵심 단어**에 집중할 수 있습니다. <그림 7>에서 검색어 "*경기도민의 수는 얼마나 되나요?*"의 벡터가 핵심 단어 "*인구*", "*경기도*", "*명*"에 집중된 것을 확인할 수 있습니다. #### SPLADE 인코더 학습 단계 +{:.no_toc} SPLADE의 인코더 학습 단계를 살펴보겠습니다. - 검색어와 관련 문서가 연결된 학습 데이터셋을 준비합니다. - 문서/검색어 인코더로 문서/검색어를 Sparse Vector로 만듭니다. @@ -237,11 +250,13 @@ $$ $$\ell_{\text{FLOPS}}$$를 최소화 하는 것은 모든 문서 쌍/검색어 쌍 $$(d_x, d_y)$$ 벡터 절댓값의 Dot Product 값인 $$\langle\vert\textbf{w}^{(d_x)}\vert,\vert\textbf{w}^{(d_y)}\vert\rangle$$를 0에 가깝게 하는 것입니다. Dot Product를 0에 가깝게 하는 것은 벡터 간에 Orthogonal 하게 하고 벡터가 Sparse 하게 만듭니다. 따라서 FLOPS Regularizer는 벡터 간의 **직교성**(Orthogonality)과 벡터의 **희소성**(Sparsity)을 높입니다. Orthogonality가 높은 것은 두 벡터가 공통으로 0이 아닌 차원의 수가 적다는 의미입니다. 따라서 유사도 연산에 필요한 Floating-point Operations의 수를 규제합니다. Floating-point Operations의 수를 규제하기에 이름이 FLOPS Regularizer입니다. ### Sparsity & Orthogonality +{:.no_toc} SPLADE는 인코더 구조에 **Log Saturation**과 학습 단계에 **FLOPS Regularizer**를 사용해서 **Sparse & Orthogonal 문서/검색어 벡터**를 만듭니다. Sparsity 덕에 각 문서/검색어는 적은 수의 단어에 대한 중요도 벡터로 표현되며 Orthogonality 덕에 각 문서/검색어를 표현하는 단어가 덜 겹칩니다. `SPLADE는 Sparsity와 Orthogonality 덕에 유사도 계산 시 연산량이 적고 핵심 단어에 집중합니다.` 따라서 논문[^5]의 실험 결과를 보면 SPLADE가 기존 모델들보다 효율과 검색 성능 면에서 뛰어납니다. 앞선 Dense Retrieval의 한계점으로 제시된 *메시* 예시를 다시 생각해 봅시다. SPLADE 인코더를 사용하면 "*축구선수 리오넬 메시는 어떤 상 받았어?*" 벡터는 "*메시*", "*아르헨티나*", "*발롱도르*" 등 핵심 단어에 집중될 것입니다. 따라서 "*네이마르*"나 "*음바페*"에 관련된 문서 대신 "*메시의 국가대표 경력*" 문서를 검색 결과로 찾을 것입니다. ### SPLADE 결과 +{:.no_toc} ![]({{"/assets/img/post/003e686308f3f3db597b5e5b5d9b6a6bd062aad0/splade_vector_example.png"| relative_url}}) *<그림 9> SPLADE 벡터 예시* *SPLADE로 생성한 네 개의 검색어에 대한 벡터 예시이다. x축(Vocabulary 단어)을 y축(벡터값)의 내림차순으로 정렬했다. 검색어 벡터에서 0이 아닌 부분은 수만 개의 단어 중 100개도 되지 않을 정도로 Sparse 하다. 검색어 "체리 효능" 벡터의 단어 "영양"의 경우처럼 검색어에 없는 단어에도 높은 중요도가 나타난다. 검색어 "도쿄올림픽 한국 여자배구 세계 랭킹" 벡터의 단어 "랭킹"의 경우처럼 검색어에 있는 단어인데도 벡터값이 0인 경우가 있다.* @@ -249,6 +264,7 @@ SPLADE는 인코더 구조에 **Log Saturation**과 학습 단계에 **FLOPS Reg 실제 예시를 통해서도 SPLADE의 특징을 확인할 수 있습니다. <그림 9>는 한국어 데이터로 SPLADE 인코더를 학습한 후 네 개의 검색어에 대해 벡터를 만들어 본 결과입니다. 수만 차원의 벡터에서 100개도 되지 않는 적은 차원에서만 0이 아닌 값이 나왔습니다. **Sparse Vector**가 만들어졌습니다. 검색어 "*체리 효능*"에 없는 단어 "*영양*"이 상위권에 생성되었고 검색어 "*도쿄올림픽 한국 여자배구 세계 랭킹*"에 있는 단어 "*랭킹*"이 사라지고 "*순위*"가 생겨난 것을 확인할 수 있습니다. 핵심 단어를 찾는 것이 **Query Term Expansion**과 **Selection**의 효과도 갖고 있음을 보여줍니다. 각 문서/검색어가 어떤 단어들의 벡터로 표현됐는지 알 수 있다 보니 **각 단어가 검색 결과에 미치는 영향**을 쉽게 확인할 수도 있습니다. 또한 중요도 0.5 이상의 단어만 쓰는 등 **Thresholding**을 하면 사용하는 단어의 수를 조절할 수 있습니다. ### SPLADE vs. BM25, DPR +{:.no_toc} SPLADE는 앞서 보았던 방법론들과 비교하여 다음과 같은 장점이 있습니다. - BM25와 달리 SPLADE는 학습을 통해 개선할 수 있으며 문서/검색어의 의미를 고려합니다. - DPR와 달리 SPLADE는 핵심 단어에 대한 Lexical Match를 할 수 있으며 각 단어가 검색 결과에 미치는 영향을 쉽게 확인할 수 있습니다. diff --git a/_posts/2024-04-11-cross-domain-recommendations-with-generative-models.md b/_posts/2024-04-11-cross-domain-recommendations-with-generative-models.md index b7205dc..db42eda 100755 --- a/_posts/2024-04-11-cross-domain-recommendations-with-generative-models.md +++ b/_posts/2024-04-11-cross-domain-recommendations-with-generative-models.md @@ -9,7 +9,7 @@ tags: [LLM, Recommendation, Zero-shot Learner, Instruction Tuning, Retrieval Aug excerpt: "NCSOFT VARCO 모델을 활용하여 다양한 도메인의 추천에 적용가능한 생성형 추천 모델을 제작했던 경험을 공유합니다." back_color: "#ffffff" img_name: "zero_shot_RS_framework.png" -toc: false +toc: true show: true new: true series: -1 @@ -26,6 +26,7 @@ index: 46 - [모델 개선 시도 2: 신뢰성 있는 zero-shot RS를 위한 검색 증강 방법 적용](#모델-개선-시도-2-신뢰성-있는-zero-shot-rs를-위한-검색-증강-방법-적용) - [글 마무리](#글-마무리) - [References](#references) +{:toc}
@@ -150,6 +151,7 @@ LLM을 활용한 추천 모델 연구는 아래 그림과 같이 _(A) 분류 vs ### 프롬프트 템플릿 +{:.no_toc} 먼저, 프롬프트 템플릿을 결정하는 방법입니다. 능동적/수동적 상황의 추천 시나리오에 대응되는 프롬프트 템플릿을 생성하는 방법은 다양하겠지만, 여기서는 Tencent의 연구[^1]와 Microsoft 연구진의 Orca[^2] 연구를 참조하여, [system message, instruction, response]로 구성하였으며, 아래 그림은 수동적 상황에서 Direct/Listwise Recommendation 예시와, 능동적 상황에서의 Direct/Listwise Search Instruction 예시입니다. @@ -160,6 +162,7 @@ LLM을 활용한 추천 모델 연구는 아래 그림과 같이 _(A) 분류 vs ### 프롬프트 템플릿에 적용할 데이터 생성 +{:.no_toc} 두 번째로, 프롬프트 템플릿을 채워줄 데이터를 생성하는 과정에 대해서 설명드리겠습니다. 앞서 살펴본 것처럼 추천 시스템은 도메인에 따라 서로 다른 요소가 추천에 영향을 미칩니다. 예를 들면 우리가 웹툰이나 영화를 볼 때는 스토리 플롯, 장르, 작가/감독, 출연 배우 등을 주요하게 보지만, 전자 상거래에서는 기존 구매 아이템과의 관계,기능,가격 등이 중요한 역할을 합니다. Cross-domain 추천 모델을 학습하기 위해서 저희는 각기 다른 도메인에 대해서 어떤 요소를 중요하게 보고 추천을 제공하는지 학습하기 위한 데이터가 필요합니다. 본 연구에서는 이를 확보하기 위해 여덟 개의 도메인에 대한 공개된 데이터 셋을 활용했습니다.
@@ -197,6 +200,7 @@ __능동적 상황의 데이터 생성:__ 하지만 능동적 상황의 데이 ### 프롬프트 답변 데이터 생성 +{:.no_toc} 저희는 답변 데이터도 LLM을 활용하여 생성하였습니다. 저희는 이미 유저 히스토리/검색 쿼리 정보와 실제 다음 시점에 구매한 아이템 정보를 알고 있습니다. 이제 주어진 히스토리/검색 쿼리와 실제 구매한 타겟 아이템 정보를 프롬프트에 넣어주고 유저 히스토리에 기반하여 타겟 아이템을 구매/소비한 사유를 추론하게 하였습니다. 이는 단순하게 아이템만을 결과로 제시하는 것보다 사유를 함께 추론하도록 할 때, 추론이 더 잘 되기 때문입니다.
@@ -264,6 +268,7 @@ __능동적 상황의 데이터 생성:__ 하지만 능동적 상황의 데이 ### 저품질 답변 데이터 필터링 +{:.no_toc} 위와 같이 만들어진 학습 프롬프트를 그대로 활용하여 학습할 수 있다면 얼마나 좋을까요? 안타깝게도 생성된 프롬프트 답변의 일부는 매우 품질이 안좋은 경우가 존재합니다. 아래 예시는 실제 생성된 답변 중 품질이 안좋은 예시입니다.
@@ -305,6 +310,7 @@ $$\mathrm{response\ score} = ln(L)\frac{L}{C} \\ L: \mathrm{token\ length}, \,C: ### 1차 결과: Instruction tuning 결과 +{:.no_toc} 저희가 파인튜닝한 모델이 새로운 데이터셋에 대해서도 잘 동작하는지 확인해볼까요? 아래는 뉴스와 전자 상거래 도메인에서 임의로 구성한 데이터에 대한 결과입니다. @@ -367,6 +373,7 @@ GIGABYTE B650I AORUS 울트라 마더보드 Razer Huntsman V2 TKL 텐키리스 저희는 사람의 선호와 일치하는 답변을 생성하기 위해 DPO[^8] 방법을 첫 번째로 시도해 보았습니다. 이는 OpenAI가 InstructGPT 학습에 활용한 근사 정책 최적화(PPO)[^7] 등 RLHF(Reinforcement Learning From Human Feedback) 방법의 한 방법입니다. 상세한 내용은 다른 NC Research 글이나 논문을 참조해주세요. 앞에서도 계속 언급했듯이, 저희는 최소한의 자원으로 학습하는 것이 목표이기 때문에 DPO 방법을 활용하였습니다. ### DPO 목적함수 +{:.no_toc} DPO는 2개의 답변 중에서 선호/비선호를 태깅한 데이터를 학습에 활용합니다. 이러한 선호 데이터를 기존 PPO 등의 강화학습 방법과 다르게 명시적인 Reward 모델링 과정을 없애고 Bradley-Terry 선호 모델을 그래디언트 업데이트만으로 직접 학습할 수 있게 되었습니다.
@@ -376,9 +383,11 @@ $$L_{DPO}(\pi_{\theta};\pi_{\mathrm{ref}}) = -E_{(x,y_w,y_l) ~ D}[\log(\sigma(\b 위와 같은 DPO 목적 함수는 모델($$\pi_\theta$$)이 reference 모델($$\pi_{\mathrm{ref}}$$)과 비교했을 때 선호 답변의 생성 확률을 증가시키고, 비선호 답변의 경우 감소시키도록 하는 형태를 띄고 있습니다. 위 식의 상세한 유도 과정과 RL 방법론에서 Reward 모델링을 생략할 수 있었던 이유는 해당 논문을 참조해주세요 :) ### DPO 학습을 위한 Human Feedback 데이터 태깅 +{:.no_toc} 1차 실험 모델(Instruction tuning 모델)의 학습에 사용하지 않은 새로운 데이터 1,000개를 추가로 생성하고, 해당 데이터를 1차 실험 모델을 활용하여 5개의 답변을 생성하였습니다. 이 중에서 가장 선호되는 답변과 가장 비선호되는 답변을 저희가 직접 태깅하여 2차 모델 학습에 활용하였습니다. ### 2차 결과: DPO 학습 결과 +{:.no_toc} 이제 실험 결과를 비교해볼까요? 아래 그림에서 오른쪽은 Instruction tuning 모델로만 학습한 1차 실험 결과이고, 왼쪽은 1차 실험 모델 결과에 DPO로 추가로 학습한 결과를 나타냅니다. 2차 실험 모델의 결과에서 볼 수 있듯 DPO를 사용하여 추가로 학습한 경우 연관성 없는 문장이 튀어나오는 빈도가 줄어든 것을 확인할 수 있습니다. 하지만, 여전히 환각 증상이나 학습 데이터에서 등장했던 구체적인 상품명 같은 것이 튀어나오는 부분은 개선점으로 남아있습니다.
@@ -394,6 +403,7 @@ $$L_{DPO}(\pi_{\theta};\pi_{\mathrm{ref}}) = -E_{(x,y_w,y_l) ~ D}[\log(\sigma(\b 저희는 이와 같은 문제를 극복하고자 Unseen 도메인 데이터를 chunk 단위로 적재하고 이를 LLM의 답변과의 연관성을 찾는 시도를 수행하였습니다. ### Unseen 도메인 데이터 vector DB 적재 및 Retriever를 활용한 연관 아이템 추천 +{:.no_toc} '모델이 생성한 답변은 실제 필요한 추천 상품에 대한 정보를 담고 있다'는 가정 하에 모델이 생성한 답변과 실제 추천을 적용하고자 하는 도메인 데이터를 chunking하고 vector DB에 저장한 각 chunk와의 유사도를 retriever를 활용하여 계산하고 가장 연관성이 높은 아이템을 반환하는 방법입니다.
diff --git a/_posts/2024-04-25-video-generation.md b/_posts/2024-04-25-video-generation.md index 762c23d..469b2b2 100755 --- a/_posts/2024-04-25-video-generation.md +++ b/_posts/2024-04-25-video-generation.md @@ -16,6 +16,7 @@ series: -1 index: 47 --- +- {:toc}
diff --git a/_posts/2024-05-16-nac-and-codec-based-lm.md b/_posts/2024-05-16-nac-and-codec-based-lm.md index 3c042c0..8a62766 100755 --- a/_posts/2024-05-16-nac-and-codec-based-lm.md +++ b/_posts/2024-05-16-nac-and-codec-based-lm.md @@ -16,6 +16,7 @@ series: -1 index: 48 --- +- {:toc}
@@ -68,7 +69,7 @@ index: 48 > * SoundStream, UniAudio 방법론의 세부 작동 방식
-## 시작하며 +# 시작하며 현재의 오디오 생성모델은 주로 멜-스펙트로그램(Mel-Spectrogram) 기반의 음향모델과 보코더(Vocoder)로 이뤄져 있습니다. 음향모델은 주어진 텍스트 스크립트 등의 조건에 따라 멜-스펙트로그램 형태의 오디오를 생성하며, 보코더는 이를 오디오 신호로 변환합니다. 이 방법은 고품질 녹음 데이터를 학습에 필요로 하며, 대량의 학습 데이터를 구축하기 어려워 일반화된 모델을 만드는 데 제한이 있습니다. 예를 들어, 제로샷 TTS(Zero-shot TTS)와 같은 경우에는 사용자가 원하는 목소리와 유사한 음성을 만들기 어렵습니다. 언어모델링은 자연어 처리 분야에서 매우 효과적으로 검증된 방법입니다. 최근에는 텍스트뿐만 아니라 이미지, 영상 등 다른 영역에서도 많은 가능성을 보여주고 있습니다. 오디오 생성 분야에서는 뉴럴 오디오 코덱(Neural Audio Codec)을 활용하여 연속적인 오디오를 이산 코드로 변환하고, 자기 지도 학습(Self-supervised Learning, SSL)과 언어모델링 접근 방법을 통해 앞서 언급한 문제 등을 해결하고자 하는 시도들이 계속 진행되고 있습니다. @@ -98,7 +99,7 @@ Meta의 AudioBox[^7]와 같은 연구에서는 오디오 입력과 텍스트 형 이 블로그에서는 두 가지 중요한 연구인 SoundStream[^10]과 UniAudio[^9]를 소개합니다. SoundStream은 Google AI에서 개발한 뉴럴 오디오 코덱으로, 이후의 연구에 기반이 되어 현재까지 광범위하게 활용되고 있습니다. UniAudio는 뉴럴 오디오 코덱을 활용하여 음성 합성, 음성 변환, 음성 개선, 대상 음성 추출 등 다양한 오디오 작업을 수행할 수 있는 언어모델링 접근 방식입니다. 이는 오디오 생성 분야에서 GPT와 유사한 역할을 합니다. UniAudio는 오디오 처리와 생성 분야에서 새로운 혁신적인 방법을 제안하고 있습니다. -## SoundStream +# SoundStream SoundStream[^10]은 최신 뉴럴 오디오 합성 기술과 양자화 모듈을 활용하여 음성, 음악, 효과음 등의 오디오 신호를 고품질이고 고효율로 압축합니다. 이는 오토인코더(Auto Encoder)와 양자화(Quantization) 기법을 결합한 형태입니다. SoundStream은 인코더(Encoder), 잔여 벡터 양자화기(Residual Vector Quantizer, RVQ), 디코더(Decoder)로 구성되어 있으며, 적대적 학습과 재구성 손실을 통해 모델을 학습합니다. 필요에 따라 잡음 제거 기능을 선택적으로 추가할 수 있습니다.
@@ -113,7 +114,7 @@ SoundStream[^10]은 최신 뉴럴 오디오 합성 기술과 양자화 모듈을 학습 과정에서 두 가지 구분자(Discriminator)가 사용됩니다. 첫 번째는 파형 기반 구분자로 원본 오디오 신호와 디코더를 통해 복원된 신호의 파형을 최대한 유사하게 만드는 역할을 합니다. 두 번째는 STFT(Short-Time Fourier Transform)에 기반한 구분자로 원본 오디오 신호의 주파수 분석 결과와 복원된 오디오 신호의 주파수 분포가 유사하게 학습되도록 합니다. -### 인코더 아키텍처 +## 인코더 아키텍처 인코더 아키텍처는 아래 그림 3과 같습니다. 입력 오디오 신호의 채널 수는 $$C_{enc}$$로 표시되며, 1D 합성곱 레이어와 이어지는 $$B_{enc}$$개의 합성곱 블록으로 구성됩니다. 각 블록은 3개의 잔여 유닛(Residual Unit)으로 이루어져 있으며, 다운샘플링 과정에서 채널 수가 2배씩 증가합니다. 마지막 1D 합성곱 레이어는 임베딩 차원($$D$$)을 설정합니다. 입력 파형과 임베딩 사이의 시간적 리-샘플링(re-sampling) 비율은 $$B_{enc}$$와 각 합성곱 블록의 스트라이드(Stride)에 따라 결정됩니다. 예를 들어, $$B_{enc} = 4$$이고 스트라이드가 $$S = \left( 2, 4, 5, 8 \right)$$로 구성된 경우, $$M = 2 \cdot 4 \cdot 5 \cdot 8 = 320$$개마다 하나의 임베딩이 계산됩니다. 즉, 입력 샘플 $$x$$가 $$T$$개의 샘플로 구성되어 있다면, 인코더는 $$enc \left( x \right) = R^{S \times D}$$의 임베딩 값을 출력합니다. 여기서 $$S$$는 $${T \over M}$$입니다.. @@ -126,10 +127,10 @@ SoundStream[^10]은 최신 뉴럴 오디오 합성 기술과 양자화 모듈을 {:.center_div}
-### 디코더 아키텍처 +## 디코더 아키텍처 디코더 아키텍처는 인코더와 유사한 구조를 갖고 있습니다. 먼저 1D 합성곱 레이어를 거친 후 일련의 디코더 블록이 이어집니다. 각 블록은 인코더 블록과 유사하며, 업샘플링을 위해 전치 합성곱(Transposed Convolution)이 사용됩니다. 업샘플링할 때마다 채널 수가 절반으로 줄어들며, 마지막 1D 합성곱 레이어는 임베딩을 다시 파형 도메인으로 투영하여 원래 파형을 재구성합니다. 인코더와 디코더의 채널 수는 동일한 파라미터로 제어됩니다. -### 잔여 벡터 양자화(Residual Vector Quantization, RVQ) +## 잔여 벡터 양자화(Residual Vector Quantization, RVQ) RVQ는 인코더 출력을 압축하는 중요한 역할을 합니다. 이는 일반적인 벡터 양자화(Vector Quantization, VQ)의 한계를 극복하고 비트레이트 확장성을 제공하는 강력한 압축 기법입니다. RVQ는 종단간 방식으로 학습되며, 역전파를 통해 양자화기, 인코더, 디코더를 공동으로 최적화합니다. VQ는 $$D$$차원의 인코더 출력 $$\text{enc} \left( x \right)$$를 대상 비트레이트 $$R$$로 압축하기 위해, $$N$$개의 크기를 갖는 코드북으로 매핑하는 것을 목표로 합니다. 코드북의 코드는 $$\text{log}_2{N}$$개의 비트로 이루어진 원핫(one-hot) 벡터입니다. 그러나 VQ는 많은 정보를 압축할 때 코드북의 크기가 실현 불가능할 정도로 커지는 문제점을 가지고 있습니다. 예를 들어 비트레이트 $$R = 6,000 \text{bps}$$를 대상으로 하는 코덱을 고려해 봅시다. 샘플링 레이트 $$f_s = 24 \text{kHz}$$의 원본 오디오 신호를 $$M = 320$$을 사용하여 인코딩할 경우, 인코더의 출력은 1초 당 $$S = f_s/M = 24,000/320 = 75$$개의 $$D$$차원 벡터의 시퀀스가 됩니다. 이것에 대상 비트 레이트가 $$R = 6,000$$를 대입할 때, 각 벡터에 할당된 비트 수는 $$r = R/75 = 6,000/75 =80$$이 되며, 총 $$N = 2^r = 2^{80}$$의 코드북 크기가 필요합니다. @@ -144,16 +145,18 @@ RVQ는 이를 해결하기 위해 $$N_q$$개의 VQ 레이어를 캐스케이드( {:.center_div}
-### 구분자(Discriminator) 아키텍처 +## 구분자(Discriminator) 아키텍처 적대적 손실을 계산하기 위해 두 가지 다른 구분자를 사용합니다. 첫 번째는 파형 기반 구분자로, 단일 파형을 입력으로 받습니다. 두 번째는 STFT(Short Time Fourier Transform) 기반 구분자로, 입력 파형의 복소값 STFT를 실수부와 허수부로 표현한 것을 입력으로 받습니다. -#### 파형 기반 구분자 +### 파형 기반 구분자 +{:.no_toc} 파형 기반 구분자는 MelGAN[^3]에서 사용된 것같이 다중 해상도 합성곱 구조를 사용합니다. 입력 오디오를 세 가지 해상도(원본, 2배 다운샘플링, 4배 다운샘플링)로 처리하며, 각 해상도의 구분자는 일반 합성곱 레이어와 그룹화된 컨볼루션 레이어로 구성되어 있습니다. 마지막으로 최종 출력, 즉 로짓(logit)을 생성하기 위해 두 개의 추가 일반 컨볼루션 레이어를 거칩니다. -#### STFT 기반 구분자 +### STFT 기반 구분자 +{:.no_toc} STFT 기반의 구분자는 입력 오디오 파형의 STFT를 기반으로 작동합니다. 윈도우 길이는 1024이고, 홉(hop) 길이는 256으로 설정됩니다. 이후에는 $$7 \times 7$$ 크기의 커널과 32개의 채널을 가진 2D 합성곱을 적용합니다. 총 6개의 잔차 블록(residual block)이 사용되며, 각 블록은 다양한 크기의 합성곱과 스트라이드를 가집니다. 출력은 다운샘플링을 거친 후 주파수 빈(bin)에서 로짓을 집계합니다. -## UniAudio +# UniAudio UniAudio[^9]는 대규모 언어모델(LLM) 기술을 활용하여 특정한 입력 조건에 따라 다양한 종류의 오디오를 생성합니다. 이 과정은 다음과 같습니다: (1) 대상 오디오와 다른 조건을 토큰화하고, (2) 소스-대상 쌍을 하나의 시퀀스로 결합하며, (3) LLM을 사용하여 다음 토큰을 예측합니다. 또한, 매우 긴 시퀀스를 처리하기 위해 잔차 벡터 양자화 기반 신경 코덱과 다중 스케일 트랜스포머 모델을 도입하였습니다. UniAudio의 학습은 다양한 오디오 생성 작업을 기반으로 하여, 오디오의 본질적 특성과 다른 모달리티와의 상호 관계에 대한 충분한 사전 지식을 확보하는 것을 목표로합니다. 학습된 UniAudio 모델은 모든 훈련된 작업에서 강력한 성능을 보이며, 간단한 파인튜닝 후 새로운 오디오 생성 작업을 원활하게 지원할 수 있는 잠재력을 지니고 있습니다.
@@ -164,11 +167,13 @@ UniAudio[^9]는 대규모 언어모델(LLM) 기술을 활용하여 특정한 입 {:.center_div}
-### 토큰화 -#### 오디오 토큰화 +## 토큰화 +### 오디오 토큰화 +{:.no_toc} 언어모델은 대개 입력 토큰에 대한 순차적 모델링 방식을 사용합니다. 오디오도 다른 입력 모달리티와 유사한 토큰화 과정을 거칩니다. UniAudio는 음성, 소리, 음악, 노래 등 모든 유형의 오디오를 예측합니다. 이를 위해 UniAudio는 모든 유형의 오디오를 단일 모달리티로 통합하여 토큰화합니다. 이러한 방법은 고유한 패턴이 존재하더라도 모든 유형의 오디오를 공유된 잠재 공간으로 매핑하기에 적합한 모델을 필요로 합니다. UniAudio는 뉴럴 오디오 코덱을 이용하여 이를 실현합니다. -#### 기타 입력 모달리티 처리 +### 기타 입력 모달리티 처리 +{:.no_toc} UniAudio에서는 오디오 이외의 입력 모달리티도 시퀀스로 표현하고 토큰화하여 이산형 데이터로 변환합니다. 각 입력 모달리티의 직렬화 및 토큰화 과정은 다음과 같습니다: - **음소(Phoneme):** 발음의 기본 단위인 음소는 발음 사전을 활용하여 텍스트에서 추출됩니다. 음성만 사용 가능한 경우, DNN-HMM 시스템의 빔 검색을 통해 지속 시간 정보가 포함된 음소 시퀀스를 얻을 수 있습니다. 텍스트와 음성을 모두 사용할 경우, DNN-HMM 시스템의 강제 정렬을 통해 지속 시간 정보가 포함된 음소 시퀀스를 얻을 수 있습니다. @@ -176,17 +181,19 @@ UniAudio에서는 오디오 이외의 입력 모달리티도 시퀀스로 표현 - **텍스트(Text):** 텍스트는 오디오 생성 작업에서 인간의 지시를 전달하는 데 사용됩니다. UniAudio는 텍스트를 사전 훈련된 텍스트 언어모델[^5]에서 파생된 연속적 임베딩으로 표현합니다. - **오디오 의미 토큰(Semantic Token):** 오디오 의미 토큰은 오디오 자기지도학습(Self-supervised Learning, SSL)된 모델에서 출력된 연속적 임베딩으로부터 생성됩니다. UniAudio는 연속적 표현을 K-means 클러스터링을 통해 토큰화하여 의미 토큰을 생성합니다[^2]. 연속적 표현은 프레임 수준이므로, 의미 토큰도 지속 시간 정보를 인코딩합니다. -### 통합된 오디오 생성 작업 +## 통합된 오디오 생성 작업 UniAudio는 다양한 오디오 생성 작업을 지원하며, 각 작업은 조건과 대상 오디오로 구성됩니다. 대상 모달리티가 동일하더라도 조건이 다르면 다른 작업으로 정의됩니다. 그러나 모든 작업은 언어모델에서 처리할 수 있는 순차적 모델링 작업으로 일괄적으로 공식화될 수 있습니다. -#### 순차적 모델링 기반 작업 정의 +### 순차적 모델링 기반 작업 정의 +{:.no_toc} UniAudio에서는 모든 작업이 다음과 같은 순차적 모델링 방식으로 정의됩니다: 1. **조건 및 대상 오디오 변환:** 조건과 대상 오디오는 먼저 시퀀스로 변환됩니다. 각 모달리티의 시퀀스는 앞서 설명한 토큰화 방식에 따라 생성됩니다. 2. **시퀀스 결합:** 변환된 조건 및 대상 오디오 시퀀스는 `[조건, 대상]` 형식의 시퀀스로 결합됩니다. 3. **언어모델 기반 처리:** 결합된 시퀀스는 언어모델 형태의 모델에 입력되며, 모델은 조건을 기반으로 대상 오디오를 생성합니다. -#### 지원하는 오디오 생성 작업 +### 지원하는 오디오 생성 작업 +{:.no_toc} UniAudio는 총 11가지 오디오 생성 작업을 지원합니다. 각 작업의 순차적 표현은 다음과 같습니다:
@@ -197,12 +204,13 @@ UniAudio는 총 11가지 오디오 생성 작업을 지원합니다. 각 작업 ![UniAudio - Tasks.png]({{"/assets/img/post/597b26f272d3ebc8b4c070563e2a0969503009a9/UniAudio%20-%20Tasks.png"| relative_url}})
-#### 시퀀스 구분 토큰 +### 시퀀스 구분 토큰 +{:.no_toc} 다양한 작업과 모달리티 간의 모호함을 피하기 위해 특별한 이산형 토큰(<>)을 사용합니다. 이러한 토큰은 세 가지 주요 의미를 가지고 있습니다: (1) 전체 시퀀스의 시작과 끝, (2) 각 모달리티의 하위 시퀀스의 시작과 끝, (3) 작업의 식별자입니다. 예를 들어, 텍스트 설명을 기반으로 대상 오디오를 생성하는 Text-to-Sound 작업 시퀀스는 다음과 같습니다: ` text_sequence audio_sequence ` -### 다중-스케일 트랜스포머(Multi-Scale Transformer) +## 다중-스케일 트랜스포머(Multi-Scale Transformer) UniAudio는 음악 생성을 위해 언어모델 구조를 기반으로 한 다중-스케일 트랜스포머를 도입하고 있습니다. 기존 연구에서는 이산 오디오 토큰을 평탄한 시퀀스로 변환하여 처리했으나, 이로 인해 트랜스포머 모델의 복잡성으로 인한 문제가 발생했습니다. 이 문제를 해결하기 위해 [^1]에서는 다중-스케일 트랜스포머를 제안합니다. 이 구조는 음악을 프레임 단위로 분할하여 각각 전역 트랜스포머와 로컬 트랜스포머로 처리합니다. - **전역 트랜스포머:** 프레임 간의 연관성을 캡처합니다. 짧은 프레임 시퀀스만을 처리하기 때문에 계산 비용이 적게 듭니다. @@ -210,13 +218,15 @@ UniAudio는 음악 생성을 위해 언어모델 구조를 기반으로 한 다 이러한 다중-스케일 트랜스포머는 기존 방식보다 계산 복잡성을 줄이면서도 효과적인 오디오 생성을 가능하게 합니다. 또한, 이 구조는 음악뿐만 아니라 다른 이산 및 연속적인 시퀀스에도 적용 가능합니다. -### 실험 결과 +## 실험 결과 UniAudio는 오디오 생성 실험 결과를 제시합니다. 먼저 실험 설정을 살펴보고, 훈련 및 파인튜닝 단계에서의 결과를 확인합니다. -#### 실험 설정 +### 실험 설정 +{:.no_toc} UniAudio는 12개의 공개 데이터셋을 활용하여 구축되었으며, 이를 통해 총 오디오 시간은 165,000시간에 달합니다. 실험은 훈련과 파인튜닝 두 단계로 진행됩니다. 이산 토큰을 사용하여 모든 모달리티에서 공통 어휘를 생성하며, 훈련 단계에서는 7가지 작업을 수행하고 파인튜닝을 위해 4가지 새로운 작업을 추가합니다. -#### 훈련 단계에서의 7가지 생성 작업 결과 +### 훈련 단계에서의 7가지 생성 작업 결과 +{:.no_toc} UniAudio는 7가지 오디오 생성 작업에서 경쟁력 있는 성능을 보여줍니다. 주관적 평가에서는 6가지 작업 중 3가지에서 베이스라인을 능가하고, 객관적 평가에서는 7가지 작업 중 5가지에서 우수한 결과를 보입니다.
@@ -227,13 +237,14 @@ UniAudio는 7가지 오디오 생성 작업에서 경쟁력 있는 성능을 보 ![UniAudio - Evaluation in Training Strage.png]({{"/assets/img/post/597b26f272d3ebc8b4c070563e2a0969503009a9/UniAudio%20-%20Evaluation%20in%20Training%20Strage.png"| relative_url}})
-#### 파인튜닝(Fine-tuning) 단계에서의 4가지 생성 작업 결과 +### 파인튜닝(Fine-tuning) 단계에서의 4가지 생성 작업 결과 +{:.no_toc} UniAudio는 파인튜닝 단계에서 음악 편집 및 음성 제거 작업에서 우수한 성과를 보입니다. 지시된 TTS 작업에서는 실제 품질에 가까운 결과를 달성하며, 음성 편집 작업에서도 상당한 개선이 있습니다. -## 마치며 +# 마치며 결론적으로, SoundStream과 UniAudio는 최신 연구 결과를 반영한 중요한 모델입니다. SoundStream은 첨단 뉴럴 오디오 합성 기술을 통해 효율적인 오디오 압축과 고품질 재구성을 가능하게 하며, UniAudio는 다양한 입력 모달리티를 활용하여 범용 오디오 생성을 실현합니다. 이 두 모델은 다양한 오디오 응용 분야에서 활용될 수 있는 잠재력을 지니고 있으며, 앞으로 더욱 발전할 것으로 기대됩니다. -## 참고자료 +# 참고자료 [^1]: Jade Copet, Felix Kreuk, Itai Gat, Tal Remez, David Kant, Gabriel Synnaeve, Yossi Adi, and Alexandre Defossez. 2023. Simple and Controllable Music Generation. In Advances in Neural Information Processing Systems, 2023. Curran Associates, Inc., 47704–47720. Retrieved from https://proceedings.neurips.cc/paper_files/paper/2023/file/94b472a1842cd7c56dcb125fb2765fbd-Paper-Conference.pdf [^2]: Rongjie Huang, Chunlei Zhang, Yongqi Wang, Dongchao Yang, Luping Liu, Zhenhui Ye, Ziyue Jiang, Chao Weng, Zhou Zhao, and Dong Yu. 2023. Make-A-Voice: Unified Voice Synthesis with Discrete Representation. Retrieved April 18, 2024 from http://arxiv.org/abs/2305.19269 diff --git a/_sass/layouts/_posts.scss b/_sass/layouts/_posts.scss index cb3c0ab..e94d7cb 100644 --- a/_sass/layouts/_posts.scss +++ b/_sass/layouts/_posts.scss @@ -188,7 +188,7 @@ header { } h4 { color: var(--gray800); - font-size: 1.5rem; + font-size: 1.25rem; line-height: 2.375rem; } h5 {