임베딩 모델을 사용하여 이미지 속 텍스트 검색하기
요약
본 글은 Gemma 2 임베딩 모델을 사용하여 이미지 속 텍스트 검색의 성능과 특이점을 분석한 연구 보고서입니다. 특히, 텍스트 질의와 이미지 간 코사인 유사도 변화를 추적하며, 단어 단위 정보가 전체 문장보다 더 지배적인 경향성을 발견했습니다. 이 테스트는 다국어(영어/한국어/일본어) 스크린샷을 활용하여 모델의 한계점과 유용성을 탐구합니다.
핵심 포인트
- Gemma 2 임베딩 모델은 크기 대비 유용하지만, 유사도 성능에 제한이 있습니다.
- 텍스트 정보가 시각적 특징보다 코사인 유사도에 더 큰 영향을 미치는 경향을 보입니다.
- 단어 단위의 존재 여부가 전체 문장보다 검색에서 더 지배적인 역할을 합니다.
- 테스트는 다국어 스크린샷 3003개 세트를 활용하여 진행되었습니다.
Embedding Gemma 2를 사용한 테스트 내용을 몇 주 동안 진행해 왔습니다. 이 모델은 Q8 기준으로 약 330MB 크기입니다. 이것이 '리소스' 카테고리로 분류될지 잘 모르겠습니다... 이미지는 텍스트 질의(즉, 텍스트 임베딩 벡터)를 시간이 지남에 따라 다듬으면서 코사인 유사도가 어떻게 변하는지를 보여줍니다. 이 모델이 얼마나 잘 작동하고 동시에 어떤 특이점들이 있는지 보여줍니다. 지금은 요약본만 남기겠습니다. 여기는 새벽 3시 30분입니다. 관심 있는 분이 있다면 더 많은 테스트를 진행하여 위와 같은 예제 질의 이미지를 만들 것입니다. 현재 영어/한국어/일본어가 혼합된 총 22,448개의 스크린샷으로 구성된 7세트가 남아 있지만, 테스트 아이디어가 고갈되었습니다. 과학적이지 않은 몇 세트에 대해서만 테스트되었으므로 '소금 가루를 뿌려서' 받아주시기 바랍니다(TAKE WITH GRAIN OF SALT). EmbeddingGemma2에 대한 요약은 다음과 같습니다: 크기 및 임베딩 차원(330MB Q8 / 768 임베딩 차원)을 고려할 때 매우 유용합니다. 언어 전반에 걸쳐 단어의 의미를 어느 정도 이해하지만, 유사도가 훨씬 낮습니다 (다시 말해, 크기 때문일 가능성이 높음). 질의 cos sim. delta to next candidate image with sentence 삼각건이 머리에 얹어졌다 0.71156 +0.00810 (38.jpg) image with sentence triangular cloth hat was placed on top of head 0.62414 +0.00015 (38.jpg) 신중한 단어 선택이 필요합니다 (예: blond vs blonde) - SLM의 제한일 수도 있고 임베딩 차원의 제한일 수도 있습니다 (적어도 영어 및 한국어). 텍스트가 시각적 특징보다 코사인 유사도에 지배적인 것처럼 보이며, 때로는 시각적 특징을 해치기도 합니다(위의 의자 참조). 이 테스트 세트에서는 텍스트가 더 정보 밀도가 높기 때문인지('더 놀라운' 등) 아니면 단순히 모델이 작아서 그러한 시각적 특징을 인식하지 못하는 것인지는 모르겠습니다. 어쨌든, 3003개 이미지 중 90%가 금발 소녀를 포함할 것이기 때문에 이 테스트 세트에서는 시각적 특징은 덜 유용합니다. 질의 cos sim. delta to next candidate image with dialog '삼각건이 머리에 얹어졌다' 0.75960 +0.01774 image with blonde girl 0.68208 +0.00250 image with blonde girl making >< expression 0.70416 +0.00340 (적어도 한국어) 단어의 존재가 전체 문장보다 우세합니다. 예:
위 이미지의 예시에서 '삼각건'(cleaning hat thing)이 주변 다른 단어들보다 더 지배적입니다. 참고로, 3003개의 이미지 중 '삼각건'이라는 단어를 포함하는 이미지는 단 2개에 불과합니다. 이는 delta gap drops query cos delta image with word 삼각건 0.69251 +0.01211 / +0.00766 / +0.00008, image with word 삼각건 & 머리 0.72881 +0.01331 / +0.02728 / +0.00203, image with sentence 삼각건이 머리에 얹어졌다 0.71156 +0.00810 / +0.01660 / +0.00041을 통해 확인할 수 있습니다.
테스트 설정: hanasaki workspring의 단일 루트 비주얼 노벨 스크린샷 3003개, irotoridori no hikari의 scs (스크린샷)
임베딩 모델: Gemma2 via llama cpp model = KV = Q8_0 nb = b = ctx = 4096 (임베딩 모델 제한으로 모든 값이 동일해야 함)
하드웨어: RX 7900GRE via vulkan (f u rocm이라 빌드하기 까다로움)
궁금한 분들을 위한 샘플 처리 시간 출력:
Index mode: $ py embed_img_▽.py "./하나사키워크스프링 히카리"
배치(Batch): 8, 리사이즈 너비(Resize width): 1280, 리사이즈 임계값(Resize threshold): 1536
[VectorDB] open w/ 0 rows removing 0 missing records from DB Checking new/modified images in dir Got 3003 new/modified imgs [EmbedServer] open for http://127.0.0.1:8081 100%|██████████| 376/376 [08:30<00:00, 1.36s/batch] [EmbedServer] closed [VectorDB] closed Indexed 3003 new/modified files in 510.10 (5.887/s)
Query mode: $ py embed_img_▽.py "./하나사키워크스프링 히카리" -q "image with dialog '삼각건이 머리에 얹어졌다' with blonde girl making >< face"
[VectorDB] open w/ 3003 rows [EmbedServer] open for http://127.0.0.1:8081 [EmbedServer] closed [VectorDB] closed Query: "image with dialog '삼각건이 머리에 얹어졌다' with blonde girl making >< face" Top-5: 0.76813 +0.01052 Artemis_2026-09-08-00-57-38.jpg 0.75761 +0.00773 Artemis_2026-09-08-00-57-26.jpg 0.74988 +0.00341 Artemis_2026-09-07-02-36-38.jpg 0.74647 +0.00067 Artemis_2026-09-07-02-36-52.jpg 0.74580 -------- Artemis_2026-09-08-01-58-14.jpg '.../하나사키워크스프링 히카리/Artemis_2026-09-08-00-57-38.jpg' '.../하나사키워크스프링 히카리/Artemis_2026-09-08-00-57-26.jpg' '.../하나사키워크스프링 히카리/Artemis_2026-09-07-02-36-38.jpg' '.../하나사키워크스프링 히카리/Artemis_2026-09-07-02-36-52.jpg' '.../하나사키워크스프링 히카리/Artemis_2026-09-08-01-58-14.jpg' Data
points: 포맷팅 버그로 인해 gist로 이동됨. 제출자: /u/jupiterbjy [링크] [댓글]
AI 자동 생성 콘텐츠
본 콘텐츠는 r/LocalLLaMA의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기