본문 바로가기

기술/AI

멀티모달 데이터 이해와 키워드 추출 기법

반응형

멀티모달 데이터(이미지, 텍스트, 오디오, 비디오)를 일관된 방식으로 분석하고 활용하기 위해서는 각 데이터에서 의미를 대표하는 키워드나 설명을 추출하고 이를 벡터 임베딩으로 변환해야 합니다. 이러한 접근 방식은 서로 다른 형태의 데이터도 동일한 벡터 공간에서 비교할 수 있게 해주어 통합적인 검색이나 시각화가 가능해집니다.

이번 글에서는 멀티모달 데이터의 개념을 소개하고, 이미지와 텍스트 데이터에서 키워드를 추출하는 다양한 방법과 도구들을 살펴보겠습니다.

멀티모달 데이터란?

멀티모달 데이터는 여러 형태(모달리티)의 정보를 포함하는 데이터를 의미합니다. 우리가 일상에서 접하는 정보는 대부분 단일 형태가 아닌 다양한 형태로 존재합니다. 예를 들어, 유튜브 영상은 시각 정보(영상), 청각 정보(음성, 배경음악), 텍스트 정보(자막, 설명)를 모두 포함합니다.

이러한 멀티모달 데이터를 일관된 방식으로 분석하려면, 각 모달리티의 데이터를 공통된 형태로 변환하는 과정이 필요합니다. 가장 보편적인 방법은 모든 데이터를 텍스트 형태로 표현한 후, 이를 벡터 임베딩으로 변환하는 것입니다.

이미지 데이터: 이미지 캡셔닝 및 OCR을 통한 텍스트화

이미지에서는 크게 두 가지 방법으로 텍스트 정보를 추출할 수 있습니다: 이미지의 시각적 내용을 설명하는 캡셔닝과 이미지 내 텍스트를 인식하는 OCR입니다.

1. 이미지 캡셔닝 모델

이미지 캡셔닝(Image Captioning)은 딥러닝 모델이 이미지의 시각적 내용을 사람의 언어로 표현한 설명문을 자동으로 생성하는 기술입니다. 예를 들어, 고양이 사진을 입력하면 "소파 위에 앉아 있는 고양이"와 같은 설명을 얻을 수 있습니다.

최근에는 BLIP-2 모델이 이미지와 언어 간의 간극을 효율적으로 연결하여 고품질 캡션을 생성합니다. BLIP-2는 미리 학습된 비전 인코더와 대형 언어 모델(LLM) 사이에 Q-Former라는 경량 Transformer를 두는 구조를 가지고 있습니다.

from transformers import AutoProcessor, Blip2ForConditionalGeneration
processor = AutoProcessor.from_pretrained("Salesforce/blip2-opt-2.7b")
model = Blip2ForConditionalGeneration.from_pretrained("Salesforce/blip2-opt-2.7b")

image = ...  # PIL.Image 객체 등으로 이미지 로드
inputs = processor(images=image, return_tensors="pt")
out = model.generate(**inputs, max_new_tokens=20)
caption = processor.batch_decode(out, skip_special_tokens=True)[0].strip()
print(caption)  # 생성된 이미지 설명 출력

2. 객체 인식 및 태깅

이미지에서 객체를 인식하고 태그를 추출하는 것도 유용한 접근법입니다. Faster R-CNN이나 YOLO와 같은 객체 검출(Object Detection) 모델을 사용하면 이미지 내 객체들을 식별하고 라벨들의 집합을 키워드로 활용할 수 있습니다. 예를 들어, 한 이미지에서 "고양이", "소파", "책" 등의 태그를 추출할 수 있습니다.

3. OCR 기반 텍스트 추출

이미지에 문자가 포함된 경우(예: 문서 스캔, 간판 사진 등), 광학 문자 인식(OCR)을 통해 텍스트를 추출할 수 있습니다. 오픈소스 OCR 도구로는 Tesseract, EasyOCR 등이 널리 사용되며, 딥러닝 기반 end-to-end 모델인 Donut(Document Understanding Transformer)도 효과적입니다.

# EasyOCR 예시
import easyocr
reader = easyocr.Reader(['ko', 'en'])  # 한국어와 영어 인식
results = reader.readtext('sample_image.jpg')
for detection in results:
    text = detection[1]
    print(text)

Donut 모델을 사용하면 OCR 단계를 거치지 않고도 문서의 구조화된 정보를 얻을 수 있습니다:

from transformers import DonutProcessor, VisionEncoderDecoderModel
processor = DonutProcessor.from_pretrained("naver-clova-ix/donut-base")
model = VisionEncoderDecoderModel.from_pretrained("naver-clova-ix/donut-base")

# 이미지 처리 및 텍스트 추출 과정
# ...

 

텍스트 데이터: 핵심 키워드 추출

텍스트 데이터(예: 문서, 기사, 보고서)는 이미 언어로 작성되어 있으므로, 그 내용을 요약하는 키워드나 핵심 구문을 추출하는 작업이 필요합니다. 일반적으로 문서 내에서 빈도가 높고 중요도가 큰 단어들을 찾거나, 문맥적으로 중요한 구절을 식별하는 방법이 활용됩니다.

1. YAKE (Yet Another Keyword Extractor)

YAKE는 문서 내부의 통계적 특성(단어 빈도, 문장 위치, 단어 동시출현 등)을 활용한 비지도 키워드 추출 알고리즘입니다. 별도의 학습 없이 동작하며, 여러 언어와 도메인에 적용 가능합니다.

import yake
text = "머신러닝에서 지도학습은 입력과 출력 레이블 쌍의 예제를 통해 함수를 학습하는 방법입니다."
extractor = yake.KeywordExtractor(lan="ko", n=2, top=5)  # bigram까지, 상위 5개
keywords = extractor.extract_keywords(text)
print(keywords)  # [(키워드1, 점수), (키워드2, 점수), ...]

YAKE에서는 점수가 낮을수록 중요도가 높음을 의미합니다.

2. KeyBERT

KeyBERT는 BERT 등의 사전학습 언어모델을 활용하여 문서의 임베딩을 구한 뒤, 문서 내 후보 단어들의 임베딩과 비교하여 가장 유사한 것들을 키워드로 선정하는 방식입니다.

from keybert import KeyBERT
doc = """머신러닝에서 지도학습(supervised learning)은 입력과 출력 레이블 쌍의 예제를 통해 함수를 학습하는 방법이다."""
kw_model = KeyBERT()
keywords = kw_model.extract_keywords(doc, keyphrase_ngram_range=(1, 2), top_n=5)
print(keywords)
# 출력 예시: [('머신러닝', 0.65), ('지도학습', 0.64), ('학습 알고리즘', 0.60), ('훈련 데이터', 0.58), ('일반화', 0.57)]

KeyBERT는 문맥을 고려한 키워드 추출이 가능하며, 한국어의 경우에도 멀티링구얼 모델을 사용하면 적용 가능합니다.

3. 텍스트 요약 및 NER

경우에 따라 문서에서 요약문을 뽑고, 그 요약문에서 키워드를 추출하거나 개체명 인식(NER)을 통해 인물, 지명, 조직명 등 핵심 개체를 키워드로 삼는 방법도 있습니다.

다음 편에서는...

다음 편에서는 오디오와 비디오 데이터에서 의미를 추출하는 방법과 이를 텍스트로 변환하는 기법들을 살펴보겠습니다. 또한 다양한 모달리티의 데이터를 어떻게 통합적으로 분석할 수 있는지에 대해서도 알아보겠습니다.


이번 글을 통해 멀티모달 데이터 분석의 기초와 이미지 및 텍스트 데이터에서 키워드를 추출하는 방법에 대해 알아보았습니다. 다양한 AI 도구와 기법들을 활용하면 서로 다른 형태의 데이터에서도 일관된 의미 표현을 얻을 수 있으며, 이는 통합적인 데이터 분석의 첫 단계가 됩니다.

여러분은 어떤 멀티모달 데이터 분석 프로젝트에 관심이 있으신가요? 댓글로 여러분의 생각과 경험을 공유해 주세요!

반응형