랭체인을 활용하여 RAG를 구현해 보려고 하는데
문서를 좀 더 잘 분해하여 임베딩 시켜 저장하면 좋을 것 같아 찾아봄.
어차피 임베딩해서 저장하는 이유는
Vector Space에 문서를 잘 뿌려 놓고 다시 잘 찾아오기 위한 것이다.
문서를 좀 더 잘게 쪼개 놓으면 원하는 내용을 찾아오기 쉬울 것 같았는데
일부 예제에서 문서 길이를 보고 자르는 게 있길래
의미 기반으로 자를 순 없을지 찾아보니 역시 기능이 있었다.
sementic chunker
이름도 멋지게 잘 만들어 놨군 ㅋㅋ
https://python.langchain.com/v0.2/docs/how_to/semantic-chunker/
한글도 잘 되는지 보려고 신문기사 하나로 실험해 봄
https://www.hankyung.com/article/202405149217i
위 기사를 활용해 의미 기반으로 잘 짤리는지 테스트 했다.
문장 단위로 임베딩을 하고 앞 뒤 문장이 아래 3가지 계산법중 하나로 일부 수치를 넘어갔을 때
문서를 구분하는 방식이다.
percentile
standard_deviation
interquartile
아래와 같은 방식으로 의미기반 청킹 방식을 정하고 짤라봤다.
from langchain_experimental.text_splitter import SemanticChunker
from langchain_openai.embeddings import OpenAIEmbeddings
text_splitter = SemanticChunker(OpenAIEmbeddings())
// 청커 방식 정하기
text_splitter = SemanticChunker(
OpenAIEmbeddings(), breakpoint_threshold_type="interquartile"
)
// 문서 읽기
with open("news_test.txt") as f:
news_test = f.read()
docs = text_splitter.create_documents([news_test])
print(len(docs))
for doc in docs:
print("################\n")
print(doc.page_content)
아래 결과가 기본 방식인 percentile 방식인데 내생각에 가장 잘 된것 같았다.
#######로 문서를 구분해 봤는데
시작 부분이 따로 구분이 됐고,
당구장 사업의 의미 따로, 현재 당구장 운영 비용이나 매출에 관한 내용 따로
잘 구분 되었다.
문서를 직접 보고 구분하는 것도 방법이지만
이렇게 자동으로 의미기반으로 구분해서 저장해보는 것도
시도해볼만한것 같다.
'AI' 카테고리의 다른 글
Flowise 나도 따라해보기 (windows) (1) | 2024.06.13 |
---|---|
Watsonx 한번 써보기 (0) | 2024.06.13 |
Hugging Face 모델 Colab 에서 써보기 (한글 예제 돌리기 및 비교) (0) | 2024.05.25 |
구글 Gemini 제미나이 한글 테스트 (w/ Google AI Studio) (0) | 2024.05.17 |
한국어 제일 잘하는 AI 찾기 (feat. ollama / quantize) (8) | 2024.05.09 |