그림이 닮았다는 검색 결과를 받았다고 해서 검토가 끝나지는 않습니다. 원본 파일을 잘라 다시 사용한 것인지, 같은 캐릭터를 다른 자세로 그린 것인지부터 구분해야 합니다. 비슷한 문장이나 설정이 함께 발견되더라도 각각 무엇을 보여주는 근거인지는 다릅니다. Veridion은 이런 신호를 모으고 출처를 연결해, 사람이 비교하고 판단할 수 있도록 만든 저작권 검토 지원 시스템입니다. 요구사항 분석부터 아키텍처, 백엔드·프론트엔드와 온톨로지 구현까지 단독으로 맡았습니다.
개발하면서 가장 많이 바뀐 부분은 검색 결과에 붙이는 결론이었습니다. 후보를 찾는 모델은 있어도, 그 모델이 언제 믿을 만한지는 별도로 설계해야 했습니다. 닮은 것을 찾는 능력과 그 닮음으로 무엇을 말할 수 있는지는 서로 다른 문제였습니다.
같은 파일과 같은 캐릭터를 구분하기
이미지 경로부터 질문을 나눴습니다. 압축하거나 잘라 쓴 원본을 찾는 경로에는 근접 중복 탐지 모델인 SSCD를, 포즈와 화풍이 달라져도 같은 캐릭터를 찾는 경로에는 캐릭터 임베딩 모델인 CCIP를 사용했습니다. 재작화된 캐릭터가 원본 파일과 멀리 떨어져 있다는 이유만으로 관련이 없다고 처리하거나, 같은 작품의 비슷한 화풍을 곧바로 같은 인물로 읽지 않기 위해서입니다.
텍스트도 같은 문장을 반복한 경우와 의미가 비슷한 경우를 나누고, 서사·말투·인물 설정을 별도 근거로 유지했습니다. 여러 모델의 점수를 더해 하나의 침해 확률처럼 보여주면 근거의 종류가 사라집니다. 각 경로가 어떤 질문에 답했고 무엇을 확인하지 못했는지를 보존한 채 검토 자료로 모으는 구조를 택했습니다.
카탈로그가 커지자 점수의 뜻이 바뀌었습니다
처음의 고정 유사도 기준에는 검색 규모가 빠져 있었습니다. 이미지 한 쌍을 비교할 때 드문 오탐도, 같은 입력을 많은 후보와 비교하면 만날 가능성이 커집니다. 작은 표본에서 정한 기준을 카탈로그 전체에 그대로 적용할 수는 없었습니다.
그래서 판정선을 모델의 상수에서 운영 조건의 결과로 바꿨습니다. 다른 캐릭터끼리 얼마나 비슷하게 나오는지 측정한 분포, 실제 비교 횟수, 검토 과정에서 허용할 오탐 수준을 함께 사용합니다. 한 번의 검색에서 잘못된 후보가 하나라도 통과할 확률인 FPIR을 기준으로, 현재 검색 규모에 필요한 유사도 기준을 역산했습니다.
이 접근에는 멈추는 지점도 필요했습니다. 측정한 표본이 뒷받침할 수 있는 수준보다 더 낮은 오탐률을 요구하면, 그럴듯한 곡선을 연장해 숫자를 만들지 않습니다. 검색 순위와 유사도는 돌려주되 판정은 비워 두고, 비교 횟수와 보류 이유를 함께 남깁니다. 보정 자료가 없을 때도 판정을 보류합니다. 측정한 집단에 포함되지 않은 후보는 별도로 표시해, 해당 기준의 적용 범위를 확인할 수 있게 했습니다. 후보를 찾는 기능을 유지하면서, 결론을 붙일 수 없는 조건과 추가 검증이 필요한 조건을 드러낸 방식입니다.
여러 인물을 찾는 기능이 새로운 오탐을 만들었습니다
한 그림에 여러 캐릭터가 있으면 전체 이미지를 한 번에 요약한 벡터가 어느 캐릭터에도 정확히 대응하지 않을 수 있습니다. 인물 영역을 나눠 각각 검색하는 기능을 붙였지만, 영역을 찾는 것만으로 문제가 끝나지 않았습니다. 초기에는 모든 영역의 결과를 합쳐 유사도순으로 정렬했습니다. 그러자 참조 이미지가 많은 캐릭터가 목록을 채우고, 다른 영역에서 제대로 찾은 캐릭터는 화면 밖으로 밀렸습니다.
병합 기준을 각 영역의 상위 후보가 번갈아 등장하도록 바꿨습니다. 한 영역의 후보를 모두 보여준 뒤 다음 영역으로 넘어가는 대신, 각 영역의 가장 가까운 후보부터 교차 배치합니다. 같은 캐릭터의 여러 참조 이미지와 서로 다른 캐릭터도 구분해 평가했습니다. 이 변경은 단순한 정렬 개선이 아니라, 사용자가 한 그림에서 발견된 인물들을 함께 검토할 수 있게 하는 조정이었습니다.
영역 검색은 판정 기준도 다시 요구했습니다. 영역마다 검색하면 비교 횟수가 늘고, 배경을 잘라내면 정답뿐 아니라 다른 캐릭터와의 유사도도 함께 올라갔습니다. 처음에는 전체 이미지 검색 횟수만 사용하던 계산을 영역 수까지 포함하도록 고쳤고, 이어서 잘린 입력의 오탐 분포를 따로 측정했습니다. 전체 이미지용 보정 자료를 재사용하는 것만으로는 부족했습니다. 영역용 보정 자료가 없을 때에는 전체 이미지 기준으로 대신 판정하지 않도록 했습니다.
한 장에서 통했던 수정이 전체에서는 실패했습니다
스타일을 크게 단순화한 그림은 더 어려웠습니다. 스텐실처럼 색과 음영을 없애자 캐릭터를 구분하던 정보가 사라졌고, 모델은 같은 작품의 다른 인물을 가까운 후보로 돌려줬습니다. 높은 점수만으로는 이 실패를 알아차리기 어려웠습니다. 기존 연구 기록에 남긴 실험에서도 원본과 스타일 변형 입력 사이에 식별 성능이 크게 벌어졌습니다.
색을 바꾸거나 회색조로 변환해 다시 검색하는 방법을 시험했습니다. 특정 실패 이미지에서는 순위가 좋아졌지만, 더 넓게 확인하면 정상적인 컬러 입력을 해치거나 스타일 변형의 실패를 충분히 고치지 못했습니다. 참조 이미지에도 같은 스타일 변환을 추가하는 방법 역시 잃어버린 식별 정보를 복원하지 못했습니다. 한 사례가 좋아졌다는 이유로 전체 경로에 전처리를 추가하지 않았습니다.
눈·머리·복장 같은 시각적 속성을 검색 점수에 섞는 접근도 시험했습니다. 같은 작품의 인물들은 이런 속성마저 공유하는 경우가 있어, 단순 융합은 오히려 맞던 순위를 흐렸습니다. 이후에는 원래 검색 결과를 유지하면서 속성이 어느 후보를 지지하는지, 두 경로가 어디서 다른 답을 내는지 따로 보여주도록 역할을 바꿨습니다. 보조 후보 순위가 생기더라도 자동 판정을 승격하는 근거로 쓰지 않았습니다.
이 실패들은 입력의 신뢰 상태를 따로 표현해야 한다는 설계로 이어졌습니다. 서로 다른 캐릭터가 비슷한 점수대에 몰리는 경우, 스타일 변형이 큰 경우, 측정 범위 밖의 입력을 같은 숫자 하나로 가리지 않게 했습니다. 사람이 확인해야 할 이유도 결과의 일부가 됐습니다.
근거는 쌓는 것만큼 철회하는 것도 중요했습니다
검색 결과에 출처가 없으면 검토자는 원본과 권리 주장을 다시 찾아야 합니다. 그래서 이미지·문장·인물·작품 사이의 관계와 분석 출처를 그래프로 연결했습니다. 무거운 유사도 검색은 벡터 색인에서 처리하고, 어떤 자료에서 어떤 주장이 나왔는지 따라가는 일은 지식그래프가 맡도록 나눴습니다.
여기에도 생성 모델의 출력이 들어오므로, 관계가 문법에 맞는다고 사실이 되는 것은 아니었습니다. LLM에는 정해진 JSON 구조로만 후보 주장을 내게 하고, 서버가 허용된 관계만 그래프로 만들도록 했습니다. 이 검사는 잘못된 관계 형식을 제한할 수 있지만, 내용의 진실성까지 보장하지는 않습니다.
그래서 모델이 만든 주장은 사람이 정리한 자료와 섞어 덮어쓰지 않았습니다. 추출기별로 구분한 저장 영역에 출처를 붙이고, 문제가 드러난 추출기의 주장은 묶음 단위로 철회할 수 있게 했습니다. RDF의 named graph와 출처 표현인 PROV-O를 사용한 이유입니다. 모델이나 추출 방식이 바뀐 뒤에도 어떤 근거가 어떤 경로에서 만들어졌는지 확인하고 수정할 수 있어야 했습니다.
구현과 검증의 범위
Veridion에서 만든 것은 검색, 보정, 보류, 근거 조회를 연결한 검토 시스템입니다. 사용자는 닮은 후보뿐 아니라 어떤 영역을 검색했는지, 어떤 비교가 모호한지, 근거가 어디에서 왔는지를 함께 확인할 수 있습니다. 저는 이 판단 경계를 요구사항으로 정의하고 실제 응답 구조와 화면까지 연결했습니다.
합성한 다중 인물 이미지에서의 개선은 실제 웹툰 장면 전체에 일반화하지 않았습니다. 다음 검증에는 고정된 평가 자료와 보정 산출물을 함께 보존하고, 실제 입력에서 오탐과 검토 부담을 다시 측정하는 작업이 필요합니다.