Hard Negatives는 딥러닝 모델, 특히 검색 모델이나 임베딩 모델의 학습 데이터에서 의미적으로 정답과 비슷하지만 정답은 아닌 문서를 말한다.
이들은 학습 데이터를 더욱 어려운 문제로 만들어, 모델이 단순한 학습 패턴에 의존하지 않고, 더 정교한 학습을 유도할 수있게 한다는 말이다.
Hard Negatives란 무엇인가?
Hard Negative 정의
Hard Negatives는 쿼리(Query)와 양성 문서(Positive Sample) 사이의 유사한 맥락을 가지지만, 실제로는 정답이 아닌 문서이다.
예를 들어,
- Query: "Python 프로그래밍 기초 가이드"
- Positive: "Python 초보자를 위한 프로그래밍 입문서"
- Hard Negative: "Python 고급 프로그래밍 기법 소개"
Hard Negative는 정답과 매우 유사해 보이지만, 실제로는 요청된 답변이나 문맥에 맞지 않다.
Hard Negatives의 중요성
랜덤 Negatives의 한계
반적인 Negative 샘플링은 랜덤하게 문서를 선택한다.
하지만 랜덤 Negative는 쿼리와 관련성이 거의 없는 문서들로 구성되는 경우가 많아 학습에서 큰 도움이 되지 않는다.
예를 들어
- Query: "Python 프로그래밍 기초"
- Random Negative: "오늘의 날씨는 맑음"
이 경우 모델이 쉽게 Random Negative를 구별할 수 있어 학습 효과가 낮아진다.
Hard Negatives의 학습 효과
Hard Negative는 정답에 가까운 문서들로 구성되기 때문에 모델이 Positive와 Negative의 차이를 구별하는 데 더 깊은 학습이 필요하게 된다. 이는 Hard Negative를 학습하면 모델은 단순한 키워드 매칭이 아니라, 의미적 차이에 기반한 임베딩 공간을 학습하게된다는 말이다.
# input
[
{
"query": "Python 프로그래밍 기초",
"positive": "Python 초보자를 위한 가이드",
"negatives": [
"오늘의 날씨는 맑음",
"Python 데이터 분석",
"JavaScript 프로그래밍 입문"
]
}
]
# output
[
{
"query": "Python 프로그래밍 기초",
"positive": "Python 초보자를 위한 가이드",
"hard_negatives": [
"Python 데이터 분석",
"Python 고급 프로그래밍 기법"
]
}
]
Hard Negatives의 생성 과정
Hard Negatives는 일반적으로 사전 학습된 검색 모델이나 유사도 계산 기법을 이용해 생성된다.
Step 1: 사전 학습된 모델 사용
- 사전 학습된 모델(예: BERT, BGE 등)을 사용해 각 쿼리와 후보 문서들 간의 유사도를 계산한다.
- 유사도가 높은 문서들을 상위 Top-k로 선택한다.
Step 2: Positive 샘플 제외
- 상위 Top-k 문서 중 Positive(정답 문서)를 제외한다.
Step 3: Negative 샘플링
- Top-k 문서들(Positive 제외)에서 Negative 샘플을 무작위로 선택하거나 특정 범위(예: --range_for_sampling)를 설정해 샘플링한다.
- 범위를 조정하면 Negative 샘플의 난이도를 조절할 수 있다.
- 2-100: Positive와 더 유사한 문서에서 샘플링 → 더 어려운 Hard Negatives.
- 50-300: Positive와 덜 유사한 문서에서 샘플링 → 비교적 쉬운 Hard Negatives.
Hard Negatives의 활용 분야
정보 검색(Information Retrieval)
- 검색 엔진이나 문서 검색 시스템에서 쿼리와 가장 적합한 문서를 정확히 반환하기 위해 사용된다.
질문-답변 시스템(QA Systems)
- Hard Negatives를 학습하면 모델이 정답과 유사하지만 틀린 답변을 걸러낼 수 있다.
추천 시스템(Recommender Systems)
- 사용자와 유사한 아이템을 추천하되, 정답이 아닌 유사 아이템을 필터링하도록 학습할 수 있다.
의미적 유사성 학습(Sentence Embedding)
- 문장 간 유사도를 학습하는 모델(예: BERT-based ReRanker)에서 유사하지만 다른 문장을 구별하는 데 사용된다.
Donjin Reranker에서 Hard Negatives 생성 과정 소개
Donjin Reranker에서 Hard Negatives를 생성하는 과정은 문장 임베딩 모델의 품질을 개선하고 의미적으로 정교한 학습 데이터를 제공하기 위해 진행된다.
Dongjin-kr/ko-reranker · Hugging Face
Korean Reranker Training on Amazon SageMaker 한국어 Reranker 개발을 위한 파인튜닝 가이드를 제시합니다. ko-reranker는 BAAI/bge-reranker-larger 기반 한국어 데이터에 대한 fine-tuned model 입니다. 보다 자세한 사항은
huggingface.co
FlagEmbedding
FlagEmbedding은 효율적인 문장 임베딩 및 검색 모델을 위한 라이브러리다.
BAAI/bge-reranker-large · Hugging Face
We have updated the new reranker, supporting larger lengths, more languages, and achieving better performance. FlagEmbedding More details please refer to our Github: FlagEmbedding. English | 中文 FlagEmbedding focuses on retrieval-augmented LLMs, consist
huggingface.co
- 문장 임베딩 생성
- 텍스트 입력을 받아 고차원 벡터로 변환합니다.
- 벡터는 텍스트의 의미를 포함하며, 유사도 계산에 사용됩니다.
- Hard Negatives 생성에서의 활용
- FlagModel은 주어진 텍스트 쿼리(Query)와 후보 문서들의 벡터를 계산합니다.
- 쿼리와 후보 문서 간의 유사도를 계산하여, Hard Negatives를 선택하는 데 사용됩니다.
사용된 모델
from FlagEmbedding import FlagModel model = FlagModel.from_pretrained("BAAI/bge-base-en-v1.5")
- BAAI/bge-base-en-v1.5는 문장 임베딩 모델로, 의미적 유사도를 학습한 사전 학습된 모델이다.
- 쿼리와 문서 간의 의미적 유사도를 계산하고, 검색 및 재랭킹(ReRanking) 작업에 적합하다.
- 동진씨는 데이터를 한국어 변역하기 전에 영어 데이터셋을 해당 모델로 Hard Negatives 데이터셋을 만들었다.
Hard Negatives 생성 스크립트
python ./src/preprocess/hn_mine.py \
--model_name_or_path BAAI/bge-base-en-v1.5 \
--input_file ./dataset/toy_finetune_data.jsonl \
--output_file ./dataset/toy_finetune_data_minedHN.jsonl \
--range_for_sampling 2-200 \ --use_gpu_for_searching
--range_for_sampling
- Negative 샘플링 범위.
- 2-200은 모델이 쿼리에 대해 계산한 Top 2부터 Top 200까지의 문서 중에서 Negative를 샘플링함.
- 이 범위는 Negative 샘플의 난이도를 조정하는 데 사용됨
- 작은 범위 (예: 2-50): 더 어려운 Hard Negatives.
- 큰 범위 (예: 50-300): 더 쉬운 Hard Negatives.
이렇게하면 데이터셋은 만들어진다.
본인은 Modern Bert로 Hard Negatives 데이터 셋을 구성해보는 것을 해보려고한다.
다음 게시물에 계속..
'A.I.(인공지능) & M.L.(머신러닝) > A.I. Information' 카테고리의 다른 글
Multi Agent LLM (0) | 2024.07.11 |
---|---|
[이론] 검색 증강 생성 RAG(Retrieval-Augmented Generation) (0) | 2024.06.26 |
[검색엔진] Vector Store (1) | 2024.06.03 |
인테리어 이미지 유사도 검색: 오늘의 집 (0) | 2024.05.16 |
[이론] LLM GPU 학습 병렬처리 (DP, DDP, FSDP) (0) | 2024.04.18 |