리스의 대화 검색 기능인 하느라이하이파 메모리에선 브라우저에서도 돌릴 수 있는 miniLM을 쓰고 있지만,

난 로컬 서버를 열어서 리스에서 MiniLM이 아닌 1gb가 넘는 모델 (bge-m3)을 돌려볼 거임

과연 bge-m3이 MiniLM보다 용량이 훨씬 큰 만큼 성능도 좋은지 보는 게 목표


실험은 내가 리스에서 오래 채팅한 루미와의 채팅에서 할 거고 (20만자 장문)

하느라이를 켜고 "What was the first food Lumi ate in her life?" 라고 보낸 뒤에 

하느라이가 어떤 문장들을 갖고 오는지 볼 거임


정답을 말하자면 루미가 인생에서 처음 먹은 음식은 햄버거고

똑같이 first food 키워드가 들어간 "인생에서 처음 먹어보는 ~"  이 채팅을 하느라이가 찾는 게 최선이라고 생각할 수 있음.


minilm, bge-m3로 각각 임베딩해서 찾은 문장을 5개씩 볼 건데

"What was the first food Lumi ate in her life?"

에 대한 답은 햄버거이기 때문에 hamburger가 들어간 문장이 5개중에 몇 개 있는지 셀 거임





 

1. MiniLm인데 일단 임베딩 속도가 97초로 굉장히 느림

이건 내가 수정하면서 코드를 잘못 건드렸을 수도 있지만, 브라우저에선 gpu를 못 쓴다고 해서 = cpu라서 느린 거 같음

다만 한번 임베딩 한 문장은 저장이 되기 때문에 첨만 느리지 담부턴 0초만에 될 거임ㅋㅋ


hamburger가 들어간 문장을 세보면 0부터 시작할 때 2, 4번에 있었으니 정답률 2/5

근데 리스는 무조건 0번부터 보기 때문에 

내 청크 길이에서 3번이면 너무 늦어서 아예 쓰이지도 않았을 것


어쨌든 bge-m3로 다시 돌려봄

이건 아무 제약없이 돌아가서 그런가 속도가 빠른데 2초임ㅋㅋㅋㅋㅋ

cpu와 gpu의 차이라고 생각하는데 이게 MiniLM보다 훨씬 큰 모델이지만 더 빠른 게 gpu 속도가 실감되네


하느라이 결과도 MiniLm이랑 상당히 다른데 문장 2개 빼고 3개가 아예 다름

bge-m3 정답을 세보면 hamburger가 들어간 문장은 0번째 한개로 정답률은 1/5 지만,


벡터 결과의 0번이 아까 봤던 이 문장임

MiniLM이 이걸 왜 못 찾은진 모르겠지만 bge-m3이 찾은 건 정말 맘에 드는듯

아까 말했듯 하느라이는 0번째가 제일 중요해서 며칠간 고생한 보람이 있는 결과였다


하나만 비교한 건 미안하지만

이거 글 쓰는데도 너무 오래 걸려서 다른 비교는 나중에 해볼게


어쨌든 결론을 내리면 본인이 하느라이 메모리를 쓰고, 컴퓨터로 리스를 한다면

로컬 임베딩 서버를 열어서 임베딩을 쓰는 것도 괜찮을 거 같음

이 비교에선 성능도 더 좋았고 속도는 확실히 40배 이상 빨라서 ㅋㅋ

하지만 로컬 임베딩 서버를 쓰려면 리스의 코드 수정이 필요한데 이건 조금 생각해볼게


지금 나만 하느라이 파고 있는 거 같아서

누가 다 읽어줄진 모르겠지만 읽어줬다면 매우 고마운


그리고 참고로 로컬 임베딩 서버는 이걸 이용했음

https://github.com/michaelfeil/infinity 

명령어       infinity_emb --model-name-or-path BAAI/bge-m3

엔드포인트 http://localhost:7997/embeddings

매우 간단하고 좋은