[PYTHON/LANGCHAIN] Chroma 클래스 : similarity_search_by_vector 메소드를 사용해 검색 문자열 벡터 리스트로 검색 결과 문서 리스트 구하기 2
■ Chroma 클래스의 similarity_search_by_vector 메소드를 사용해 검색 문자열의 벡터 리스트로 검색 결과 문서 리스트를 구하는 방법을 보여준다. ※ OPENAI_API_KEY 환경 변수 값은
■ Chroma 클래스의 similarity_search_by_vector 메소드를 사용해 검색 문자열의 벡터 리스트로 검색 결과 문서 리스트를 구하는 방법을 보여준다. ※ OPENAI_API_KEY 환경 변수 값은
■ InMemoryByteStore 클래스를 사용해 메모리 파일 저장소를 만드는 방법을 보여준다. ※ OPENAI_API_KEY 환경 변수 값은 .env 파일에 정의한다. ▶ main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
from dotenv import load_dotenv from langchain_openai import OpenAIEmbeddings from langchain.storage import InMemoryByteStore from langchain.embeddings import CacheBackedEmbeddings from langchain_community.document_loaders import TextLoader from langchain_text_splitters import CharacterTextSplitter from langchain_community.vectorstores import FAISS load_dotenv() openAIEmbeddings = OpenAIEmbeddings() inMemoryByteStore = InMemoryByteStore() cacheBackedEmbeddings = CacheBackedEmbeddings.from_bytes_store(openAIEmbeddings, inMemoryByteStore, namespace = openAIEmbeddings.model) textLoader = TextLoader("state_of_the_union.txt") documentList = textLoader.load() characterTextSplitter = CharacterTextSplitter(chunk_size = 1000, chunk_overlap = 0) splitDocumentList = characterTextSplitter.split_documents(documentList) list1 = list(inMemoryByteStore.yield_keys()) faiss = FAISS.from_documents(splitDocumentList, cacheBackedEmbeddings) list2 = list(inMemoryByteStore.yield_keys()) print(len(list1)) print(len(list2)) """ 0 42 """ |
▶
■ CacheBackedEmbeddings 클래스를 사용해 FAISS 벡터 저장소에 임베딩 캐시를 설정하는 방법을 보여준다. ※ OPENAI_API_KEY 환경 변수 값은 .env 파일에 정의한다. ▶ main.py
■ CacheBackedEmbeddings 클래스의 from_bytes_store 정적 메소드를 사용해 CacheBackedEmbeddings 객체를 만드는 방법을 보여준다. ※ OPENAI_API_KEY 환경 변수 값은 .env 파일에 정의한다. ▶ main.py
■ LocalFileStore 클래스를 사용해 로컬 파일 저장소를 만드는 방법을 보여준다. ▶ main.py
1 2 3 4 5 |
from langchain.storage import LocalFileStore localFileStore = LocalFileStore("./cache/") |
▶ requirements.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
aiohttp==3.9.5 aiosignal==1.3.1 annotated-types==0.7.0 async-timeout==4.0.3 attrs==23.2.0 certifi==2024.6.2 charset-normalizer==3.3.2 frozenlist==1.4.1 greenlet==3.0.3 idna==3.7 jsonpatch==1.33 jsonpointer==3.0.0 langchain==0.2.6 langchain-core==0.2.10 langchain-text-splitters==0.2.2 langsmith==0.1.82 multidict==6.0.5 numpy==1.26.4 orjson==3.10.5 packaging==24.1 pydantic==2.7.4 pydantic_core==2.18.4 PyYAML==6.0.1 requests==2.32.3 SQLAlchemy==2.0.31 tenacity==8.4.2 typing_extensions==4.12.2 urllib3==2.2.2 yarl==1.9.4 |
※ pip install langchain 명령을 실행했다.
■ HuggingFaceEmbeddings 클래스의 embed_query 메소드를 사용해 문자열에서 벡터 리스트를 구하는 방법을 보여준다. ▶ main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 |
from langchain_huggingface import HuggingFaceEmbeddings huggingFaceEmbeddings = HuggingFaceEmbeddings(model_name = "sentence-transformers/all-mpnet-base-v2") embeddingList = huggingFaceEmbeddings.embed_query("What was the name mentioned in the conversation?") print("임베딩 리스트 :", len(embeddingList)) """ 임베딩 리스트 : 768 """ |
▶ requirements.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
annotated-types==0.7.0 certifi==2024.6.2 charset-normalizer==3.3.2 filelock==3.15.4 fsspec==2024.6.1 huggingface-hub==0.23.4 idna==3.7 Jinja2==3.1.4 joblib==1.4.2 jsonpatch==1.33 jsonpointer==3.0.0 langchain-core==0.2.10 langchain-huggingface==0.0.3 langsmith==0.1.82 MarkupSafe==2.1.5 mpmath==1.3.0 networkx==3.3 numpy==1.26.4 nvidia-cublas-cu12==12.1.3.1 nvidia-cuda-cupti-cu12==12.1.105 nvidia-cuda-nvrtc-cu12==12.1.105 nvidia-cuda-runtime-cu12==12.1.105 nvidia-cudnn-cu12==8.9.2.26 nvidia-cufft-cu12==11.0.2.54 nvidia-curand-cu12==10.3.2.106 nvidia-cusolver-cu12==11.4.5.107 nvidia-cusparse-cu12==12.1.0.106 nvidia-nccl-cu12==2.20.5 nvidia-nvjitlink-cu12==12.5.40 nvidia-nvtx-cu12==12.1.105 orjson==3.10.5 packaging==24.1 pillow==10.3.0 pydantic==2.7.4 pydantic_core==2.18.4 PyYAML==6.0.1 regex==2024.5.15 requests==2.32.3 safetensors==0.4.3 scikit-learn==1.5.0 scipy==1.14.0 sentence-transformers==3.0.1 sympy==1.12.1 tenacity==8.4.2 threadpoolctl==3.5.0 tokenizers==0.19.1 torch==2.3.1 tqdm==4.66.4 transformers==4.42.3 triton==2.3.1 typing_extensions==4.12.2 urllib3==2.2.2 |
※ pip install langchain-huggingface
■ HuggingFaceEmbeddings 클래스의 embed_documents 메소드를 이용해 문자열 리스트에서 벡터 리스트의 리스트를 구하는 방법을 보여준다. ▶ main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
from langchain_huggingface import HuggingFaceEmbeddings huggingFaceEmbeddings = HuggingFaceEmbeddings(model_name = "sentence-transformers/all-mpnet-base-v2") sourceList = [ "Hi there!", "Oh, hello!", "What's your name?", "My friends call me World", "Hello World!" ] embeddingListList = huggingFaceEmbeddings.embed_documents(sourceList) print("임베딩 리스트의 리스트 :", len(embeddingListList)) print() for embeddingList in embeddingListList: print("임베딩 리스트 :", len(embeddingList)) """ 임베딩 리스트의 리스트 : 5 임베딩 리스트 : 768 임베딩 리스트 : 768 임베딩 리스트 : 768 임베딩 리스트 : 768 임베딩 리스트 : 768 """ |
▶ requirements.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
annotated-types==0.7.0 certifi==2024.6.2 charset-normalizer==3.3.2 filelock==3.15.4 fsspec==2024.6.1 huggingface-hub==0.23.4 idna==3.7 Jinja2==3.1.4 joblib==1.4.2 jsonpatch==1.33 jsonpointer==3.0.0 langchain-core==0.2.10 langchain-huggingface==0.0.3 langsmith==0.1.82 MarkupSafe==2.1.5 mpmath==1.3.0 networkx==3.3 numpy==1.26.4 nvidia-cublas-cu12==12.1.3.1 nvidia-cuda-cupti-cu12==12.1.105 nvidia-cuda-nvrtc-cu12==12.1.105 nvidia-cuda-runtime-cu12==12.1.105 nvidia-cudnn-cu12==8.9.2.26 nvidia-cufft-cu12==11.0.2.54 nvidia-curand-cu12==10.3.2.106 nvidia-cusolver-cu12==11.4.5.107 nvidia-cusparse-cu12==12.1.0.106 nvidia-nccl-cu12==2.20.5 nvidia-nvjitlink-cu12==12.5.40 nvidia-nvtx-cu12==12.1.105 orjson==3.10.5 packaging==24.1 pillow==10.3.0 pydantic==2.7.4 pydantic_core==2.18.4 PyYAML==6.0.1 regex==2024.5.15 requests==2.32.3 safetensors==0.4.3 scikit-learn==1.5.0 scipy==1.14.0 sentence-transformers==3.0.1 sympy==1.12.1 tenacity==8.4.2 threadpoolctl==3.5.0 tokenizers==0.19.1 torch==2.3.1 tqdm==4.66.4 transformers==4.42.3 triton==2.3.1 typing_extensions==4.12.2 urllib3==2.2.2 |
※ pip
■ OpenAIEmbeddings 클래스의 embed_query 메소드를 사용해 문자열에서 벡터 리스트를 구하는 방법을 보여준다. ※ OPENAI_API_KEY 환경 변수 값은 .env 파일에 정의한다. ▶ main.py
■ OpenAIEmbeddings 클래스의 embed_documents 메소드를 사용해 문자열 리스트에서 벡터 리스트의 리스트를 구하는 방법을 보여준다. ※ OPENAI_API_KEY 환경 변수 값은 .env 파일에 정의한다.
■ TChart 클래스의 ClickLegend 이벤트를 사용해 레전드 클릭시 처리하는 방법을 보여준다. (.NET 오류 개선 버전) ▶ MainForm.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
using Steema.TeeChart.Styles; namespace TestProject { /// <summary> /// 메인 폼 /// </summary> public partial class MainForm : Form { //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor ////////////////////////////////////////////////////////////////////////////////////////// Public #region 생성자 - MainForm() /// <summary> /// 생성자 /// </summary> public MainForm() { InitializeComponent(); for(int i = 0; i < 10; i++) { Points points = new Points(this.tChart.Chart); points.FillSampleValues(20); } this.tChart.ClickLegend += tChart_ClickLegend; this.tChart.MouseClick += tChart_MouseClick; } #endregion //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Private #region 티차트 레전드 클릭시 처리하기 - tChart_ClickLegend(sender, e) /// <summary> /// 티차트 레전드 클릭시 처리하기 /// </summary> /// <param name="sender">이벤트 발생자</param> /// <param name="e">이벤트 인자</param> private void tChart_ClickLegend(object sender, MouseEventArgs e) { // .NET6 버그 처리 double legendItemHeight = (double)this.tChart.Legend.Height / (double)this.tChart.Series.Count; int heightOffset = this.tChart.Legend.Height - (this.tChart.Legend.Height - (e.Y - this.tChart.Legend.Top)); int index = (int)((double)heightOffset / legendItemHeight); // .NET FRAMEWORK의 경우 //int index = this.tChart.Legend.Clicked(e.X, e.Y); if(index > -1) { for(int i = 0; i < this.tChart.Series.Count; i++) { this.tChart[i].Transparency = 0; if(i != index) { // 선택되지 않은 항목 반투명하게 처리한다. this.tChart[i].Transparency = 70; } } } } #endregion #region 티차트 마우스 클릭시 처리하기 - tChart_MouseClick(sender, e) /// <summary> /// 티차트 마우스 클릭시 처리하기 /// </summary> /// <param name="sender">이벤트 발생자</param> /// <param name="e">이벤트 인자</param> private void tChart_MouseClick(object sender, MouseEventArgs e) { // Legend 영역이 아닌 경우 모두 원상태로 돌리기 int index = this.tChart.Legend.Clicked(e.X, e.Y); if(index == -1) { for(int i = 0; i < this.tChart.Series.Count; i++) { this.tChart[i].Transparency = 0; } } } #endregion } } |
TestProject.zip
■ CharacterTextSplitter 클래스의 split_text 메소드를 사용해 문자열에서 문자열 리스트를 구하는 방법을 보여준다. ▶ main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
from transformers import GPT2TokenizerFast from langchain_text_splitters import CharacterTextSplitter with open("sample.txt") as textIOWrapper: fileContent = textIOWrapper.read() gpt2TokenizerFast = GPT2TokenizerFast.from_pretrained("gpt2") characterTextSplitter = CharacterTextSplitter.from_huggingface_tokenizer(gpt2TokenizerFast, chunk_size = 100, chunk_overlap = 0) stringList = characterTextSplitter.split_text(fileContent) for string in stringList: print(string) print() """ '잔느'는 귀족의 딸로 부모의 사랑을 받으며 어려움 없이 자란 소녀였다. 열일곱 살인 그녀는, 수녀원 부속 여학교를 졸업하고 행복에 대한 기대로 가득 차 있었다. 아버지인 '시몽 자크 르 페르튀 데 보' 남작은 선량하고 다정했고, 어머니는 따뜻했다. 다만 어머니는 심장비대증으로 고생 중이었는데, 로잘리가 잘 부축했다. 따뜻한 집안 분위기로 인해, 하녀인 '로잘리'는 둘째 딸 같은 대접을 받았다. 마을의 피코 신부는 이제 막 수녀원을 졸업한 잔느에게 한 청년을 소개해 주었다. 그는 '줄리앙 장 드 라마르' 자작으로, 검소하고 외모가 출중한 청년이었다. 줄리앙과 함께 소풍을 다녀온 잔느는 줄리앙을 사랑하게 되고, 결국 둘은 결혼을 한다. 그러나 결혼식 후, 그들의 첫날밤은 달콤하지 않았다. 잔느는 난폭하게 자신의 욕구만 채우고 잠든 줄리앙에게 심한 모욕감을 느낀다. 심지어 신혼여행 중 줄리앙은 잔느의 용돈 2천 프랑을 맡아준다며 가져가지만, 잔느가 쇼핑을 할 때마다 심한 눈치를 주었다. 결국 잔느는 쇼핑도 제대로 못하고, 줄리앙에게 자신의 용돈을 고스란히 빼앗기고 만다. """ |
▶ requirements.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
annotated-types==0.7.0 certifi==2024.6.2 charset-normalizer==3.3.2 filelock==3.15.4 fsspec==2024.6.1 huggingface-hub==0.23.4 idna==3.7 jsonpatch==1.33 jsonpointer==3.0.0 langchain-core==0.2.10 langchain-text-splitters==0.2.2 langsmith==0.1.82 numpy==1.26.4 orjson==3.10.5 packaging==24.1 pydantic==2.7.4 pydantic_core==2.18.4 PyYAML==6.0.1 regex==2024.5.15 requests==2.32.3 safetensors==0.4.3 tenacity==8.4.2 tokenizers==0.19.1 tqdm==4.66.4 transformers==4.42.3 typing_extensions==4.12.2 urllib3==2.2.2 |
※ pip install langchain-text-splitters
■ CharacterTextSplitter 클래스의 from_huggingface_tokenizer 메소드를 사용해 CharacterTextSplitter 객체를 만드는 방법을 보여준다. ▶ main.py
1 2 3 4 5 6 7 8 |
from transformers import GPT2TokenizerFast from langchain_text_splitters import CharacterTextSplitter gpt2TokenizerFast = GPT2TokenizerFast.from_pretrained("gpt2") characterTextSplitter = CharacterTextSplitter.from_huggingface_tokenizer(gpt2TokenizerFast, chunk_size = 100, chunk_overlap = 0) |
▶ requirements.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
annotated-types==0.7.0 certifi==2024.6.2 charset-normalizer==3.3.2 filelock==3.15.4 fsspec==2024.6.1 huggingface-hub==0.23.4 idna==3.7 jsonpatch==1.33 jsonpointer==3.0.0 langchain-core==0.2.10 langchain-text-splitters==0.2.2 langsmith==0.1.82 numpy==1.26.4 orjson==3.10.5 packaging==24.1 pydantic==2.7.4 pydantic_core==2.18.4 PyYAML==6.0.1 regex==2024.5.15 requests==2.32.3 safetensors==0.4.3 tenacity==8.4.2 tokenizers==0.19.1 tqdm==4.66.4 transformers==4.42.3 typing_extensions==4.12.2 urllib3==2.2.2 |
※ pip install langchain-text-splitters transformers
■ transformers 패키지를 설치하는 방법을 보여준다. 1. 명령 프롬프트를 실행한다. 2. 명령 프롬프트에서 아래 명령을 실행한다. ▶ 실행 명령
1 2 3 |
pip install transformers |
■ GPT2TokenizerFast 클래스의 from_pretrained 정적 메소드를 사용해 GPT2TokenizerFast 객체를 만드는 방법을 보여준다. ▶ main.py
1 2 3 4 5 |
from transformers import GPT2TokenizerFast gpt2TokenizerFast = GPT2TokenizerFast.from_pretrained("gpt2") |
▶ requirements.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
certifi==2024.6.2 charset-normalizer==3.3.2 filelock==3.15.4 fsspec==2024.6.1 huggingface-hub==0.23.4 idna==3.7 numpy==1.26.4 packaging==24.1 PyYAML==6.0.1 regex==2024.5.15 requests==2.32.3 safetensors==0.4.3 tokenizers==0.19.1 tqdm==4.66.4 transformers==4.42.3 typing_extensions==4.12.2 urllib3==2.2.2 |
※ pip install transformers
■ konlpy 패키지를 설치하는 방법을 보여준다. 1. 명령 프롬프트를 실행한다. 2. 명령 프롬프트에서 아래 명령을 실행한다. ▶ 실행 명령
1 2 3 |
pip install konlpy |
■ KonlpyTextSplitter 클래스의 split_text 메소드를 사용해 한글 문자열에서 한글 문자열 리스트를 구하는 방법을 보여준다. ▶ main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
from langchain_text_splitters import KonlpyTextSplitter with open("sample.txt") as textIOWrapper: fileContent = textIOWrapper.read() konlpyTextSplitter = KonlpyTextSplitter() stringList = konlpyTextSplitter.split_text(fileContent) for string in stringList[:3]: print(string) print() """ ' 잔느' 는 귀족의 딸로 부모의 사랑을 받으며 어려움 없이 자란 소녀였다. 열일곱 살인 그녀는, 수녀원 부속 여학교를 졸업하고 행복에 대한 기대로 가득 차 있었다. 아버지인 ' 시 몽 자크 르 페르튀 데 보' 남작은 선량하고 다정했고, 어머니는 따뜻했다. 다만 어머니는 심장 비대증으로 고생 중이었는데, 로잘리가 잘 부축했다. 따뜻한 집안 분위기로 인해, 하녀인 ' 로잘리' 는 둘째 딸 같은 대접을 받았다. 마을의 피코 신부는 이제 막 수녀원을 졸업한 잔느에게 한 청년을 소개해 주었다. 그는 ' 줄 리 앙 장 드 라 마르' 자작으로, 검소하고 외모가 출중한 청년이었다. 줄리앙과 함께 소풍을 다녀온 잔 느는 줄리앙을 사랑하게 되고, 결국 둘은 결혼을 한다. 그러나 결혼식 후, 그들의 첫날 밤은 달콤하지 않았다. 잔 느는 난폭하게 자신의 욕구만 채우고 잠든 줄리앙에게 심한 모욕감을 느낀다. 심지어 신혼여행 중 줄리앙은 잔느의 용돈 2천 프랑을 맡아 준다며 가져가지만, 잔느가 쇼핑을 할 때마다 심한 눈치를 주었다. 결국 잔 느는 쇼핑도 제대로 못하고, 줄리앙에게 자신의 용돈을 고스란히 빼앗기고 만다. """ |
▶ requirements.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
annotated-types==0.7.0 certifi==2024.6.2 charset-normalizer==3.3.2 idna==3.7 JPype1==1.5.0 jsonpatch==1.33 jsonpointer==3.0.0 konlpy==0.6.0 langchain-core==0.2.10 langchain-text-splitters==0.2.2 langsmith==0.1.82 lxml==5.2.2 numpy==2.0.0 orjson==3.10.5 packaging==24.1 pydantic==2.7.4 pydantic_core==2.18.4 PyYAML==6.0.1 requests==2.32.3 tenacity==8.4.2 typing_extensions==4.12.2 urllib3==2.2.2 |
※ pip
■ NLTKTextSplitter 클래스의 split_text 메소드를 사용해 문자열에서 문자열 리스트를 구하는 방법을 보여준다. ▶ main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
from langchain_text_splitters import NLTKTextSplitter with open("state_of_the_union.txt") as textIOWrapper: fileContent = textIOWrapper.read() nltkTextSplitter = NLTKTextSplitter(chunk_size = 1000) strnigList = nltkTextSplitter.split_text(fileContent) print(strnigList[0]) """ Madam Speaker, Madam Vice President, our First Lady and Second Gentleman. Members of Congress and the Cabinet. Justices of the Supreme Court. My fellow Americans. Last year COVID-19 kept us apart. This year we are finally together again. Tonight, we meet as Democrats Republicans and Independents. But most importantly as Americans. With a duty to one another to the American people to the Constitution. And with an unwavering resolve that freedom will always triumph over tyranny. Six days ago, Russia’s Vladimir Putin sought to shake the foundations of the free world thinking he could make it bend to his menacing ways. But he badly miscalculated. He thought he could roll into Ukraine and the world would roll over. Instead he met a wall of strength he never imagined. He met the Ukrainian people. From President Zelenskyy to every Ukrainian, their fearlessness, their courage, their determination, inspires the world. Groups of citizens blocking tanks with their bodies. """ |
▶ requirements.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
annotated-types==0.7.0 certifi==2024.6.2 charset-normalizer==3.3.2 click==8.1.7 idna==3.7 joblib==1.4.2 jsonpatch==1.33 jsonpointer==3.0.0 langchain-core==0.2.10 langchain-text-splitters==0.2.2 langsmith==0.1.82 nltk==3.8.1 orjson==3.10.5 packaging==24.1 pydantic==2.7.4 pydantic_core==2.18.4 PyYAML==6.0.1 regex==2024.5.15 requests==2.32.3 tenacity==8.4.2 tqdm==4.66.4 typing_extensions==4.12.2 urllib3==2.2.2 |
※ pip install langchain-text-splitters
■ SentenceTransformersTokenTextSplitter 클래스의 count_tokens 메소드를 사용해 토큰 수를 구하는 방법을 보여준다. ▶ main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
from langchain_text_splitters import SentenceTransformersTokenTextSplitter with open("state_of_the_union.txt") as textIOWrapper: fileContent = textIOWrapper.read() sentenceTransformersTokenTextSplitter = SentenceTransformersTokenTextSplitter( model_name = "sentence-transformers/all-mpnet-base-v2", tokens_per_chunk = 384, chunk_overlap = 32 ) tokenCount = sentenceTransformersTokenTextSplitter.count_tokens(text = fileContent) print(tokenCount) """ 8093 """ |
▶ requirements.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
annotated-types==0.7.0 certifi==2024.6.2 charset-normalizer==3.3.2 filelock==3.15.4 fsspec==2024.6.1 huggingface-hub==0.23.4 idna==3.7 Jinja2==3.1.4 joblib==1.4.2 jsonpatch==1.33 jsonpointer==3.0.0 langchain-core==0.2.10 langchain-text-splitters==0.2.2 langsmith==0.1.82 MarkupSafe==2.1.5 mpmath==1.3.0 networkx==3.3 numpy==1.26.4 nvidia-cublas-cu12==12.1.3.1 nvidia-cuda-cupti-cu12==12.1.105 nvidia-cuda-nvrtc-cu12==12.1.105 nvidia-cuda-runtime-cu12==12.1.105 nvidia-cudnn-cu12==8.9.2.26 nvidia-cufft-cu12==11.0.2.54 nvidia-curand-cu12==10.3.2.106 nvidia-cusolver-cu12==11.4.5.107 nvidia-cusparse-cu12==12.1.0.106 nvidia-nccl-cu12==2.20.5 nvidia-nvjitlink-cu12==12.5.40 nvidia-nvtx-cu12==12.1.105 orjson==3.10.5 packaging==24.1 pillow==10.3.0 pydantic==2.7.4 pydantic_core==2.18.4 PyYAML==6.0.1 regex==2024.5.15 requests==2.32.3 safetensors==0.4.3 scikit-learn==1.5.0 scipy==1.14.0 sentence-transformers==3.0.1 sympy==1.12.1 tenacity==8.4.2 threadpoolctl==3.5.0 tokenizers==0.19.1 torch==2.3.1 tqdm==4.66.4 transformers==4.42.3 triton==2.3.1 typing_extensions==4.12.2 urllib3==2.2.2 |
※ pip install langchain-text-splitters sentence-transformers
■ SentenceTransformersTokenTextSplitter 클래스를 사용해 문장 변환 토큰 텍스트 분리자를 만드는 방법을 보여준다. ▶ main.py
1 2 3 4 5 6 7 8 9 |
from langchain_text_splitters import SentenceTransformersTokenTextSplitter sentenceTransformersTokenTextSplitter = SentenceTransformersTokenTextSplitter( model_name = "sentence-transformers/all-mpnet-base-v2", tokens_per_chunk = 384, chunk_overlap = 32 ) |
▶ requirements.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
annotated-types==0.7.0 certifi==2024.6.2 charset-normalizer==3.3.2 filelock==3.15.4 fsspec==2024.6.1 huggingface-hub==0.23.4 idna==3.7 Jinja2==3.1.4 joblib==1.4.2 jsonpatch==1.33 jsonpointer==3.0.0 langchain-core==0.2.10 langchain-text-splitters==0.2.2 langsmith==0.1.82 MarkupSafe==2.1.5 mpmath==1.3.0 networkx==3.3 numpy==1.26.4 nvidia-cublas-cu12==12.1.3.1 nvidia-cuda-cupti-cu12==12.1.105 nvidia-cuda-nvrtc-cu12==12.1.105 nvidia-cuda-runtime-cu12==12.1.105 nvidia-cudnn-cu12==8.9.2.26 nvidia-cufft-cu12==11.0.2.54 nvidia-curand-cu12==10.3.2.106 nvidia-cusolver-cu12==11.4.5.107 nvidia-cusparse-cu12==12.1.0.106 nvidia-nccl-cu12==2.20.5 nvidia-nvjitlink-cu12==12.5.40 nvidia-nvtx-cu12==12.1.105 orjson==3.10.5 packaging==24.1 pillow==10.3.0 pydantic==2.7.4 pydantic_core==2.18.4 PyYAML==6.0.1 regex==2024.5.15 requests==2.32.3 safetensors==0.4.3 scikit-learn==1.5.0 scipy==1.14.0 sentence-transformers==3.0.1 sympy==1.12.1 tenacity==8.4.2 threadpoolctl==3.5.0 tokenizers==0.19.1 torch==2.3.1 tqdm==4.66.4 transformers==4.42.3 triton==2.3.1 typing_extensions==4.12.2 urllib3==2.2.2 |
※ pip install langchain-text-splitters
■ TokenTextSplitter 클래스의 split_text 메소드를 사용해 문자열에서 문자열 리스트를 구하는 방법을 보여준다. ▶ main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
from langchain_text_splitters import TokenTextSplitter with open("state_of_the_union.txt") as textIOWrapper: fileContent = textIOWrapper.read() tokenTextSplitter = TokenTextSplitter(chunk_size = 10, chunk_overlap = 0) stringList = tokenTextSplitter.split_text(fileContent) for string in stringList[:3]: print(string) print() """ Madam Speaker, Madam Vice President, our First Lady and Second Gentleman. Members of Congress and the Cabinet. Justices of the Supreme Court. """ |
▶ requirements.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
annotated-types==0.7.0 certifi==2024.6.2 charset-normalizer==3.3.2 idna==3.7 jsonpatch==1.33 jsonpointer==3.0.0 langchain-core==0.2.10 langchain-text-splitters==0.2.2 langsmith==0.1.82 orjson==3.10.5 packaging==24.1 pydantic==2.7.4 pydantic_core==2.18.4 PyYAML==6.0.1 regex==2024.5.15 requests==2.32.3 tenacity==8.4.2 tiktoken==0.7.0 typing_extensions==4.12.2 urllib3==2.2.2 |
※ pip install langchain-text-splitters
■ RecursiveCharacterTextSplitter 클래스의 split_text 메소드를 사용해 문자열에서 문자열 리스트를 구하는 방법을 보여준다. ▶ main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
from langchain_text_splitters import RecursiveCharacterTextSplitter with open("state_of_the_union.txt") as textIOWrapper: fileContent = textIOWrapper.read() recursiveCharacterTextSplitter = RecursiveCharacterTextSplitter.from_tiktoken_encoder( model_name = "gpt-4", chunk_size = 100, chunk_overlap = 0 ) stringList = recursiveCharacterTextSplitter.split_text(fileContent) for string in stringList[:3]: print(string) print() """ Madam Speaker, Madam Vice President, our First Lady and Second Gentleman. Members of Congress and the Cabinet. Justices of the Supreme Court. My fellow Americans. Last year COVID-19 kept us apart. This year we are finally together again. Tonight, we meet as Democrats Republicans and Independents. But most importantly as Americans. With a duty to one another to the American people to the Constitution. And with an unwavering resolve that freedom will always triumph over tyranny. Six days ago, Russia’s Vladimir Putin sought to shake the foundations of the free world thinking he could make it bend to his menacing ways. But he badly miscalculated. He thought he could roll into Ukraine and the world would roll over. Instead he met a wall of strength he never imagined. He met the Ukrainian people. From President Zelenskyy to every Ukrainian, their fearlessness, their courage, their determination, inspires the world. Groups of citizens blocking tanks with their bodies. Everyone from students to retirees teachers turned soldiers defending their homeland. In this struggle as President Zelenskyy said in his speech to the European Parliament “Light will win over darkness.” The Ukrainian Ambassador to the United States is here tonight. """ |
▶ requirements.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
annotated-types==0.7.0 certifi==2024.6.2 charset-normalizer==3.3.2 idna==3.7 jsonpatch==1.33 jsonpointer==3.0.0 langchain-core==0.2.10 langchain-text-splitters==0.2.2 langsmith==0.1.82 orjson==3.10.5 packaging==24.1 pydantic==2.7.4 pydantic_core==2.18.4 PyYAML==6.0.1 regex==2024.5.15 requests==2.32.3 tenacity==8.4.2 tiktoken==0.7.0 typing_extensions==4.12.2 urllib3==2.2.2 |
※ pip install langchain-text-splitters
■ RecursiveCharacterTextSplitter 클래스의 from_tiktoken_encoder 메소드를 사용해 토큰 기준 분할용 RecursiveCharacterTextSplitter 객체를 만드는 방법을 보여준다. ▶ main.py
1 2 3 4 5 6 7 8 9 |
from langchain_text_splitters import RecursiveCharacterTextSplitter recursiveCharacterTextSplitter = RecursiveCharacterTextSplitter.from_tiktoken_encoder( model_name = "gpt-4", chunk_size = 100, chunk_overlap = 0 ) |
▶ requirements.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
annotated-types==0.7.0 certifi==2024.6.2 charset-normalizer==3.3.2 idna==3.7 jsonpatch==1.33 jsonpointer==3.0.0 langchain-core==0.2.10 langchain-text-splitters==0.2.2 langsmith==0.1.82 orjson==3.10.5 packaging==24.1 pydantic==2.7.4 pydantic_core==2.18.4 PyYAML==6.0.1 regex==2024.5.15 requests==2.32.3 tenacity==8.4.2 tiktoken==0.7.0 typing_extensions==4.12.2 urllib3==2.2.2 |
※ pip
■ CharacterTextSplitter 클래스의 split_text 메소드를 사용해 문자열에서 문자열 리스트를 구하는 방법을 보여준다. ▶ main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
from langchain_text_splitters import CharacterTextSplitter with open("state_of_the_union.txt") as textIOWrapper: fileContent = textIOWrapper.read() characterTextSplitter = CharacterTextSplitter.from_tiktoken_encoder(encoding_name = "cl100k_base", chunk_size = 100, chunk_overlap = 0) stringList = characterTextSplitter.split_text(fileContent) for string in stringList[:3]: print(string) print() |
▶ requirements.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
annotated-types==0.7.0 certifi==2024.6.2 charset-normalizer==3.3.2 idna==3.7 jsonpatch==1.33 jsonpointer==3.0.0 langchain-core==0.2.10 langchain-text-splitters==0.2.2 langsmith==0.1.82 orjson==3.10.5 packaging==24.1 pydantic==2.7.4 pydantic_core==2.18.4 PyYAML==6.0.1 regex==2024.5.15 requests==2.32.3 tenacity==8.4.2 tiktoken==0.7.0 typing_extensions==4.12.2 urllib3==2.2.2 |
※ pip install langchain-text-splitters
■ CharacterTextSplitter 클래스의 from_tiktoken_encoder 메소드를 사용해 토큰 기준 분할용 CharacterTextSplitter 객체를 만드는 방법을 보여준다. ▶ main.py
1 2 3 4 5 |
from langchain_text_splitters import CharacterTextSplitter characterTextSplitter = CharacterTextSplitter.from_tiktoken_encoder(encoding_name = "cl100k_base", chunk_size = 100, chunk_overlap = 0) |
▶ requirements.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
annotated-types==0.7.0 certifi==2024.6.2 charset-normalizer==3.3.2 idna==3.7 jsonpatch==1.33 jsonpointer==3.0.0 langchain-core==0.2.10 langchain-text-splitters==0.2.2 langsmith==0.1.82 orjson==3.10.5 packaging==24.1 pydantic==2.7.4 pydantic_core==2.18.4 PyYAML==6.0.1 regex==2024.5.15 requests==2.32.3 tenacity==8.4.2 tiktoken==0.7.0 typing_extensions==4.12.2 urllib3==2.2.2 |
※ pip
■ SemanticChunker 클래스의 생성자에서 breakpoint_threshold_type 인자를 사용해 문서 분할 임계값 기준을 설정하는 방법을 보여준다. ※ breakpoint_threshold_type 인자의 디폴트 값은 "percentile"이고, "percentile", "standard_deviation",