문구-필터 매핑: 제품 필터를 위한 의미론적 검색

이 기사는 필터 추출 시스템을 지원하는 문구-필터 매핑을 생성하고 확장하는 방법을 설명합니다. 이러한 매핑은 검색 쿼리의 자연어 문구를 구조화된 제품 필터에 연결합니다.

문제: 자연어에서 필터 추출

사용자가 "mini pc with 16gb ram"을 검색하면 다음을 추출해야 합니다:

  • 폼 팩터: Mini PC

  • 주 메모리: 16

하지만 사용자는 같은 의도를 다양한 방식으로 표현합니다:

  • "16gb ram mini pc"

  • "mini computer 16 gb memory"

  • "small pc 16gb"

  • "compact desktop with 16 gigs"

이 모든 문구 변형을 올바른 필터 값에 매핑하는 시스템이 필요합니다.

2단계 프로세스

우리는 두 단계로 문구 매핑을 생성합니다:

  1. 3a단계: 순열 및 속성별 규칙을 사용하여 제품 속성에서 기본 문구를 생성합니다.
  2. 4단계: 임베딩을 사용하여 의미론적 유사성으로 확장합니다.

이 하이브리드 접근 방식은 규칙 기반의 정밀성과 의미론적 유연성을 결합합니다.

3a단계: 기본 문구 생성

속성 메타데이터

모든 제품 속성에는 속성 시퀀스에 메타데이터가 있습니다:

  • 헤딩: 카테고리 이름 (예: 프로세서 속성의 "Processing")

  • 단위: 측정 단위 (예: 메모리의 "GB", 주파수의 "GHz")

이 메타데이터는 문구 생성을 안내합니다.

순열 기반 생성

각 속성 값에 대해 다음 요소의 모든 순열을 생성합니다:

  • 헤딩: "processor"

  • 속성 키: "series"

  • 값: "i5"

  • 단위: (시리즈에는 없음)

이것은 다음을 생성합니다:

  • "processor series i5"

  • "series processor i5"

  • "i5 processor series"

  • "i5 series processor"

  • "processor i5"

  • "series i5"

  • "i5"

모든 순열은 단어 순서와 관계없이 쿼리를 매칭할 수 있도록 보장합니다.

값 + 단위 조합

단위가 있는 속성(메모리, 저장소, 주파수)의 경우 공백이 있는 변형과 없는 변형을 모두 생성합니다:

  • "16 gb" (공백 있음)

  • "16gb" (공백 없음)

이들은 다른 구성 요소와 결합됩니다:

  • "16gb ram"

  • "ram 16gb"

  • "processor 16gb"

포트 접미사 규칙

연결 속성(USB, HDMI, DisplayPort)의 경우 포트 접미사를 추가합니다:

  • "usb port"

  • "usb ports"

  • "2 usb ports"

  • "hdmi port"

이것은 "mini pc with 2 hdmi ports"와 같은 쿼리를 매칭합니다.

속성별 규칙

각 속성 유형에는 사용자 정의 문구 생성이 있습니다:

프로세서 시리즈 (i3, i5, N-시리즈):

  • 코어 프로세서 명칭은 제조업체 이름, 코어 브랜드, 결합 형태의 변형을 생성합니다

  • N-시리즈 프로세서 (N100 등)는 유사한 패턴 조합을 생성합니다

  • 각각은 "processor"와 함께 여러 순열을 생성합니다

주 메모리:

  • 숫자 값은 공백이 있는/없는 GB 변형("16gb","16 gb")을 생성합니다

  • "ram" 및 "memory" 한정사가 자동으로 추가됩니다("16gb memory","16 gb ram")

SSD 저장소:

  • 숫자 값은 GB 변형("512gb", "512 gb")을 생성합니다

  • 값이 1024 이상인 경우 TB 변형을 자동으로 생성합니다 (예: 1024GB → 1TB)

  • "ssd" 및 "storage" 한정사가 자동으로 추가됩니다("512gb ssd", "512 gb storage")

폼 팩터:

  • Mini PC → 공백 없는 형태를 포함한 여러 변형

  • All-in-One → "all in one", "aio", 약어 형태

  • Thin Client → 공백 유무에 따른 변형

  • Industrial PC → 약어 및 전체 형태

세대:

  • 숫자 세대 값은 다음과 같이 변환됩니다: "12th gen", "12th generation", "gen 12"

코어:

  • 2 → "dual core"

  • 4 → "quad core"

  • 6 → "hexa core"

  • 8 → "octa core"

  • 모두 "[n] core processor" 변형을 생성합니다

이더넷:

  • "1000" → ["gigabit ethernet", "gbe", "1gbps"]

  • "2500" → ["2.5gbe", "2.5 gigabit", "2.5gbps"]

운영 체제:

  • "Windows 11" → ["windows", "windows 11", "win 11"]

  • "Ubuntu" → ["linux", "ubuntu"]

  • "FreeDOS" → ["freedos", "no os", "without os"]

단독 값 허용 목록

특정 속성만 단독 값 매칭을 허용하여 잘못된 매칭을 방지합니다:

  • 시리즈: "i3", "i5", "N100" (하지만 단일 문자는 제외)

  • 프로세서 모델: "N100", "1335U"

  • 운영 체제: "Windows", "Linux", "Ubuntu"

  • 세대: "12th", "13th", "14th"

  • 프로세서 브랜드: "Intel", "ARM"

예를 들어 쿼리가 "2 hdmi ports"인 경우 "2"는 "2 cores"와 매칭되어서는 안 됩니다. 길이 검사는 단일 문자 또는 매우 짧은 모호한 값이 단독으로 매칭되는 것을 방지합니다. 이더넷 또는 포트와 같이 명시적 단위 구성 요소가 있는 속성은 해당 단위로 한정될 때만 단독 조합을 생성합니다.

충돌 방지

메모리와 저장소 값은 겹칩니다(둘 다 64, 128, 256 등을 가짐). 4단계에서는 모호성을 해소하기 위해 값 범위 규칙을 적용합니다:

  • ≤ 64 GB: 주 메모리 (RAM)

  • ≥ 128 GB: SSD 저장소

  • 65-127 GB 범위: 건너뜀 (모호함)

명시적 한정사("ram"/"memory" 또는 "ssd"/"storage")가 있는 문구는 이 규칙을 무시하고 모든 값과 매칭될 수 있습니다.

또한 너무 많은 무관한 필터와 매칭되는 모호한 일반 용어는 후처리를 통한 충돌 해결 중에 제외됩니다: "connectivity", "audio", "display", "processor", "physical" 같은 용어는 여러 패싯에 걸쳐 너무 많은 모호성을 생성합니다.

4단계: 의미론적 확장

N-gram 추출

실제 검색 쿼리에서 단어 하나(1-gram, 예: "mini")부터 더 긴 시퀀스(최대 6-gram, 예: "mini pc with 16gb ram ssd")까지 빈번한 문구를 추출합니다. 최소 3회 이상 나타난 문구만 유지됩니다. 이 필터링 접근 방식은 실제 사용자 언어 패턴을 유지하면서 노이즈를 줄입니다.

필터 검색 텍스트 생성

각 필터 값에 대해 검색 텍스트를 생성합니다:

주 메모리: 16:

  • "16gb ram memory"

  • "16 main memory"

  • "main memory 16"

SSD 저장소: 512:

  • "512gb storage ssd"

  • "512 ssd storage"

  • "ssd storage 512"

이 검색 텍스트는 임베딩 공간에서 필터를 나타냅니다.

임베딩 및 매칭

쿼리 문구와 필터 검색 텍스트를 모두 임베딩으로 변환한 다음 두 항목 간의 코사인 유사도를 계산합니다. 설정된 임계값 이상의 유사도 점수를 가진 문구는 해당 필터의 매핑에 추가됩니다.

수동 시드 문구

확장 전에 신뢰도가 높은 수동 시드 문구를 주입합니다:

"Series:i5": [
    "i5",
    "core i5",
    "intel i5",
    "intel core i5",
    "i5 processor",
    "cpu i5",
]

이 시드 문구는 각 필터에 대해 올바르다고 알고 있는 핵심 문구를 나타냅니다. 최대 유사도 점수로 포함함으로써 확장 알고리즘이 유사한 의미를 가진 관련 문구를 찾도록 안내합니다. 이 시드 문구는 항상 유사도 1.0을 가지며 확장을 안내합니다.

증분 임베딩

우리는 문구와 필터 검색 텍스트에 대한 임베딩을 캐시합니다. 새 쿼리가 도착하면:

  1. 기존 임베딩을 로드합니다
  2. 새 문구만 임베딩합니다
  3. 캐시에 추가합니다

이렇게 하면 변경되지 않은 데이터를 다시 임베딩하지 않아도 됩니다. 자세한 내용은 임베딩 전략을 참조하세요.

충돌 해결

유사도 매칭이 완료된 후 메모리와 저장소 필터 간의 충돌을 해결합니다:

숫자 기반 모호성 해소:

  • 숫자를 포함하는 모호한 문구의 경우: 값이 ≤ 64이면 메모리에만 유지하고, > 64이면 저장소에만 유지합니다

  • 이렇게 하면 "16gb"가 SSD 저장소 필터와 매칭되고 "512gb"가 메모리 필터와 매칭되는 것을 방지합니다

명시적 한정사 규칙 우선:

  • "ram", "memory", "cpu", "processor" 키워드가 있는 문구 → 메모리 전용

  • "ssd", "storage", "disk", "nvme", "drive" 키워드가 있는 문구 → 저장소 전용

  • 예: "processor 8gb"는 숫자임에도 불구하고 메모리에 매핑됩니다

모호한 용어:

  • 여러 무관한 필터와 매칭되는 "connectivity", "audio", "display" 같은 문구를 제거합니다

출력 형식

최종 매핑은 유사도(높은 순), 그 다음 길이(짧은 순)로 정렬됩니다:

{
  "Main Memory:16": [
    {"phrase": "16gb ram", "similarity": 1.0},
# ... (implementation details omitted)

필터 추출과의 통합

이 매핑은 필터 추출 알고리즘을 지원합니다:

  1. 쿼리 도착: "mini pc with 16gb ram"
  2. 문구 추출: ["mini pc", "16gb ram", "mini", "pc", "16gb", "ram"]
  3. 매핑을 사용하여 문구를 필터에 매칭
  4. 필터 반환: {"Form Factor": ["Mini PC"], "Main Memory": ["16"]}

자세한 내용은 필터 추출 알고리즘을 참조하세요.

저장 및 배포

문구 매핑은 JSON 파일로 저장되며 시스템 전반에 걸쳐 사용됩니다:

  • 기본 매핑 파일: 3a단계에서 생성되며 규칙 기반 문구를 포함합니다

  • 확장 매핑 파일: 4단계에서 생성되며 의미론적 확장 결과를 포함합니다

확장 매핑은 다음에서 사용됩니다:

  • 쿼리 페이지 생성: 쿼리 텍스트에서 필터 추출

  • 검색 서비스: 실시간 필터 추출 API

  • 제품 매칭: 추출된 필터로 제품 필터링

성능 특성

기본 생성 (3a단계):

  • 처리 시간은 필터 값 수에 비례하여 증가합니다

  • 많은 수의 기본 문구 변형을 생성합니다

  • 생성 중 메모리 사용량은 적정 수준을 유지합니다

의미론적 확장 (4단계):

  • 처리 시간은 쿼리 볼륨과 임베딩 크기에 비례하여 증가합니다

  • 출력에는 기본 생성보다 훨씬 많은 문구가 포함됩니다

  • 임베딩 저장으로 인해 메모리 요구 사항이 증가합니다

확장은 유사도 계산으로 인해 CPU 바운드입니다. NumPy를 BLAS 가속과 함께 사용하면 행렬 연산이 크게 빨라집니다.

SEO 파이프라인과의 통합

문구 매핑 생성은 SEO 파이프라인의 3a 및 4단계입니다:

  1. 0단계: 소스 데이터 임베딩 - 제품, 부품, 기사
  2. 1단계: 쿼리 가져오기 - GSC, Google Ads, 실시간, Algolia
  3. 2단계: 쿼리 결합 - 모든 소스 병합
  4. 3a단계: 기본 문구 매핑 생성 ← 현재 위치
  5. 3b단계: 쿼리 임베딩 - 벡터로 변환
  6. 4단계: 문구 매핑 확장 ← 현재 위치
  7. 5단계: 쿼리 클러스터링 - 페이지로 그룹화
  8. 6단계: 제품 매칭 - 쿼리-제품 매칭
  9. 7단계: 쿼리 페이지 구축 - HTML 생성
  10. 8단계: 관련 검색 생성 - 관련 쿼리 찾기
  11. 11단계: Valkey로 마이그레이션 - 검색 서비스에 로드

전체 흐름은 SEO 파이프라인 개요를 참조하세요.

왜 두 단계인가?

기본 생성 (3a단계) 은 다음을 제공합니다:

  • 정밀성: 규칙 기반 문구는 예상한 것과 정확히 일치합니다

  • 포괄성: 순열을 통해 모든 단어 순서가 포함됩니다

  • 제어: 속성별 규칙이 도메인 지식을 처리합니다

의미론적 확장 (4단계) 은 다음을 제공합니다:

  • 유연성: 예상하지 못한 문구를 발견합니다

  • 실제 사용자 언어: 실제 검색 쿼리에서 학습합니다

  • 동의어: 동등한 문구를 찾습니다 ("16gb"에 대한 "16 gigs")

이 둘은 함께 정밀성과 재현율의 균형을 유지합니다.

참고 자료

기술 개념

모델 문서

관련 기사

요약

우리는 두 단계로 문구-필터 매핑을 생성합니다:

3a단계 (기본 생성):

  • 헤딩, 키, 값, 단위의 모든 순열 생성

  • 속성별 규칙 적용 (프로세서 시리즈, 메모리, 저장소, 폼 팩터)

  • 연결 속성에 포트 접미사 추가

  • 특정 속성에 대해 단독 값 허용 목록 적용

  • 규칙에서 기본 문구 세트 출력

4단계 (의미론적 확장):

  • 실제 검색 쿼리에서 n-gram 문구 추출

  • 문구와 필터 검색 텍스트 임베딩

  • 임계값 이상의 유사도 점수를 가진 문구 매칭

  • 확장을 안내하는 수동 시드 문구 주입

  • 메모리/저장소 충돌 해결

  • 확장되고 모호성이 해소된 문구 세트 출력

결과는 예상된 문구(규칙 기반)와 예상치 못한 변형(의미론적 유사성 기반)을 모두 처리하는 포괄적인 매핑입니다. 이러한 매핑은 쿼리 페이지, 검색, 제품 매칭 전반에서 필터 추출을 지원합니다.


← 문서 색인으로 돌아가기