본문 바로가기

Project/Patent Intelligent Agent

Patent Intelligence Agent #6

"특허 임베딩으로 기술지도 그리기"

지난 글에서는 Sentence-BERT를 활용해 특허 문헌을 의미 기반 벡터로 변환하고, Cosine Similarity를 이용해 유사 특허를 검색하는 방법을 정리했다. TF-IDF가 단어 기반 유사도 분석이었다면, Sentence-BERT는 문장의 의미를 반영해 특허 간 유사도를 계산할 수 있다는 점에서 한 단계 발전된 방식이었다.

 

이번 글에서는 여기서 한 단계 더 나아간다.

 

지금까지는 특정 특허 하나를 기준으로 유사한 특허 Top-K를 찾았다. 즉, 검색 결과를 리스트 형태로 확인했다.

 

이번에는 여러 특허를 한 번에 2차원 공간에 배치해본다.
유사한 특허끼리는 가까이 위치하고, 기술적으로 거리가 먼 특허는 멀리 위치하도록 시각화한다.

 

이것을 여기서는 기술지도라고 부르겠다.

특허 텍스트
   ↓
Sentence-BERT 임베딩
   ↓
고차원 벡터
   ↓
UMAP / t-SNE 차원축소
   ↓
2차원 좌표
   ↓
기술지도 시각화

 

이번 글의 목표는 다음과 같다.

Sentence-BERT로 만든 특허 임베딩을 2차원 공간에 시각화하고, 유사한 기술문제를 다루는 특허들이 실제로 가까운 위치에 모이는지 확인한다.


1. 왜 기술지도가 필요한가

유사 특허 검색은 특정 문헌 하나를 기준으로 가까운 문헌을 찾는 방식이다.

 

예를 들어 P001이라는 제조장비 이상탐지 특허가 있을 때, 이 특허와 가장 유사한 특허 3개를 찾는 식이다.

Query Patent: P001
   ↓
Top 1: P003 예지보전 특허
Top 2: P002 고장진단 특허
Top 3: P006 상태 모니터링 특허

이 방식은 특정 특허를 자세히 볼 때는 유용하다.
하지만 전체 기술분야의 구조를 보기에는 한계가 있다.

 

예를 들어 Anomaly Detection 특허가 100개 있다고 해보자.
우리가 알고 싶은 것은 단순히 “P001과 가까운 특허는 무엇인가?”가 아니다.

 

더 중요한 질문은 다음과 같다.

전체 특허들은 어떤 기술군으로 나뉘는가?

제조 설비 이상탐지와 금융 이상거래 탐지는 얼마나 떨어져 있는가?

이미지 기반 결함검출 특허들은 별도 클러스터를 형성하는가?

여러 기술군 사이에 걸쳐 있는 특허는 무엇인가?

특정 기업은 어떤 기술영역에 집중하고 있는가?

이런 질문에 답하려면 특허들을 공간상에 배치해야 한다.

 

즉, 특허 하나하나를 점으로 표현하고, 비슷한 특허끼리 가까이 모이도록 시각화해야 한다.


2. 특허 임베딩은 고차원 벡터다

Sentence-BERT는 특허의 Title과 Abstract를 읽고, 각 특허를 숫자 벡터로 변환한다.

 

예를 들어 다음과 같은 형태다.

P001 → [0.12, -0.45, 0.33, ..., 0.07]
P002 → [0.10, -0.41, 0.30, ..., 0.05]
P003 → [0.09, -0.39, 0.28, ..., 0.04]
P004 → [-0.22, 0.51, 0.14, ..., -0.11]

이 숫자 벡터가 특허의 의미를 표현한다.

 

하지만 문제는 차원이다.

 

Sentence-BERT 모델에 따라 벡터는 보통 384차원 또는 768차원일 수 있다.
사람은 384차원 공간을 직접 볼 수 없다.

따라서 고차원 벡터를 사람이 볼 수 있는 2차원 공간으로 줄여야 한다.

 

이때 사용하는 방법이 차원축소다.


3. UMAP과 t-SNE는 무엇인가

UMAP과 t-SNE는 고차원 데이터를 2차원 또는 3차원 공간에 배치하는 차원축소 알고리즘이다.

 

핵심 아이디어는 단순하다.

고차원 공간에서 가까운 데이터는
2차원 공간에서도 가깝게 배치한다.

 

특허 분석에 적용하면 다음과 같다.

의미가 유사한 특허
→ 2차원 지도에서 가까운 점

기술적으로 다른 특허
→ 2차원 지도에서 먼 점

즉, UMAP이나 t-SNE를 사용하면 특허 임베딩을 지도처럼 볼 수 있다.

 

다만 주의할 점이 있다.
2차원 지도에서 x축과 y축 자체가 명확한 물리적 의미를 갖는 것은 아니다.
예를 들어 x축이 “기술성”이고 y축이 “시장성”이라는 뜻은 아니다.

 

이 지도에서 중요한 것은 절대 좌표가 아니라 상대적 거리와 군집 구조다.

중요한 것
- 어떤 특허들이 가까이 모이는가
- 어떤 특허들이 멀리 떨어지는가
- 몇 개의 기술군이 형성되는가
- 기술군 사이에 걸친 특허가 있는가

중요하지 않은 것
- x축 자체의 의미
- y축 자체의 의미
- 점 하나의 절대 좌표값

 


4. 이번 실험의 전체 구조

이번 실험에서는 지난 글에서 만든 Sentence-BERT 임베딩을 사용한다.

 

분석 흐름은 다음과 같다.

Patent Dataset
   ↓
Title + Abstract 결합
   ↓
analysis_text 생성
   ↓
Sentence-BERT Embedding
   ↓
UMAP 또는 t-SNE 차원축소
   ↓
2D Scatter Plot
   ↓
기술군 해석

 

이번 글의 핵심 산출물은 2차원 산점도다.

 

각 점은 하나의 특허를 의미한다.
점들이 가까이 모여 있으면 유사한 기술문제를 다룰 가능성이 높다.


5. 실험용 샘플 데이터

먼저 샘플 데이터를 만든다.

 

이번에는 기술군이 조금 더 잘 보이도록 특허 개수를 늘려본다.
실제 프로젝트에서는 50건 이상, 가능하면 100건 이상의 특허를 사용하는 것이 좋지만, 여기서는 코드 구조를 이해하기 위해 작은 데이터셋을 사용한다.

import pandas as pd

data = [
    {
        "patent_id": "P001",
        "title": "Method for anomaly detection in manufacturing equipment",
        "abstract": "A method includes collecting sensor data and detecting abnormal states using a trained machine learning model.",
        "domain": "Manufacturing"
    },
    {
        "patent_id": "P002",
        "title": "System for fault diagnosis of industrial machines",
        "abstract": "The invention relates to diagnosing machine faults based on vibration and temperature sensor data.",
        "domain": "Manufacturing"
    },
    {
        "patent_id": "P003",
        "title": "Predictive maintenance method using machine learning",
        "abstract": "Provided is a method for predicting equipment failure by analyzing time-series sensor signals.",
        "domain": "Manufacturing"
    },
    {
        "patent_id": "P004",
        "title": "Condition monitoring apparatus for rotating machinery",
        "abstract": "An apparatus monitors the operating condition of rotating machines using vibration signals and detects early signs of failure.",
        "domain": "Manufacturing"
    },
    {
        "patent_id": "P005",
        "title": "Defect detection method for visual inspection",
        "abstract": "A computer vision method detects defects in product images using a neural network.",
        "domain": "Vision Inspection"
    },
    {
        "patent_id": "P006",
        "title": "Image-based quality inspection system",
        "abstract": "A system identifies defective products by analyzing captured images with a deep learning model.",
        "domain": "Vision Inspection"
    },
    {
        "patent_id": "P007",
        "title": "Surface defect classification using convolutional neural network",
        "abstract": "A method classifies surface defects of manufactured products based on image features extracted by a convolutional neural network.",
        "domain": "Vision Inspection"
    },
    {
        "patent_id": "P008",
        "title": "Abnormal transaction detection system",
        "abstract": "A system detects abnormal financial transactions using historical transaction patterns and machine learning.",
        "domain": "Finance"
    },
    {
        "patent_id": "P009",
        "title": "Fraud detection method using transaction behavior analysis",
        "abstract": "A method determines fraudulent transactions by learning abnormal user behavior patterns from financial data.",
        "domain": "Finance"
    },
    {
        "patent_id": "P010",
        "title": "Medical anomaly detection using patient monitoring data",
        "abstract": "A system detects abnormal patient conditions by analyzing physiological time-series signals.",
        "domain": "Healthcare"
    },
    {
        "patent_id": "P011",
        "title": "Abnormal symptom detection in wearable healthcare devices",
        "abstract": "A wearable device detects abnormal health signals by monitoring heart rate and oxygen saturation patterns.",
        "domain": "Healthcare"
    },
    {
        "patent_id": "P012",
        "title": "Battery fault detection system",
        "abstract": "A battery management system detects abnormal voltage and temperature patterns to prevent battery failure.",
        "domain": "Battery"
    },
    {
        "patent_id": "P013",
        "title": "Thermal runaway prediction for battery packs",
        "abstract": "A method predicts thermal runaway risk by analyzing temperature, voltage, and current signals of battery cells.",
        "domain": "Battery"
    }
]

df = pd.DataFrame(data)
df.head()

 

여기서 domain은 실제 모델이 예측한 값이 아니라, 시각화를 쉽게 해석하기 위해 사람이 붙인 임시 라벨이다.

 

실제 분석에서는 이 라벨 없이 클러스터링을 수행한 뒤, 나중에 사람이 각 클러스터의 의미를 해석할 수 있다.


6. 분석용 텍스트 만들기

이제 Title과 Abstract를 결합해 analysis_text를 만든다.

df["analysis_text"] = df["title"] + " " + df["abstract"]

df[["patent_id", "analysis_text", "domain"]].head()

 

분석 텍스트는 다음 구조다.

analysis_text = title + " " + abstract

 

이 방식은 초기 MVP에서 가장 안정적이다.
Title은 기술 주제를 압축적으로 담고 있고, Abstract는 기술문제와 해결방식을 요약하기 때문이다.


7. Sentence-BERT로 특허 임베딩 만들기

이제 Sentence-BERT를 사용해 analysis_text를 임베딩으로 변환한다.

 

Google Colab에서 실행한다면 먼저 패키지를 설치한다.

!pip install sentence-transformers

 

이후 모델을 불러온다.

from sentence_transformers import SentenceTransformer

model = SentenceTransformer("all-MiniLM-L6-v2")

 

특허 텍스트를 벡터로 변환한다.

texts = df["analysis_text"].tolist()
embeddings = model.encode(texts)

embeddings.shape

 

예상되는 출력은 다음과 비슷하다.

(13, 384)

 

이는 13개의 특허가 각각 384차원 벡터로 표현되었다는 의미다.


8. UMAP으로 2차원 좌표 만들기

이제 384차원 임베딩을 2차원으로 줄인다.

먼저 UMAP을 설치한다.

!pip install umap-learn

 

UMAP을 실행한다.

import umap

reducer = umap.UMAP(
    n_components=2,
    n_neighbors=3,
    min_dist=0.1,
    random_state=42
)

embedding_2d = reducer.fit_transform(embeddings)

embedding_2d.shape

 

출력은 다음과 같은 형태가 된다.

(13, 2)

 

즉, 13개의 특허가 각각 2차원 좌표로 변환된 것이다.

P001 → (x1, y1)
P002 → (x2, y2)
P003 → (x3, y3)
...

 

이제 이 좌표를 원래 데이터프레임에 추가한다.

df["x"] = embedding_2d[:, 0]
df["y"] = embedding_2d[:, 1]

df[["patent_id", "domain", "x", "y"]].head()

9. 기술지도 시각화하기

이제 matplotlib을 사용해 2차원 산점도를 그린다.

import matplotlib.pyplot as plt

plt.figure(figsize=(10, 7))

for domain in df["domain"].unique():
    subset = df[df["domain"] == domain]
    plt.scatter(
        subset["x"],
        subset["y"],
        label=domain,
        s=80
    )

for _, row in df.iterrows():
    plt.text(
        row["x"] + 0.02,
        row["y"] + 0.02,
        row["patent_id"],
        fontsize=9
    )

plt.title("Patent Technology Map using Sentence-BERT + UMAP")
plt.xlabel("UMAP Dimension 1")
plt.ylabel("UMAP Dimension 2")
plt.legend()
plt.grid(True)
plt.show()

 

이 그래프에서 각 점은 하나의 특허를 의미한다.

점 하나 = 특허 하나
점의 위치 = 특허 임베딩을 2차원으로 축소한 좌표
점의 거리 = 의미적 유사성의 상대적 표현
점의 색상 = 사람이 붙인 임시 기술 도메인

 

그래프에서 제조 설비 이상탐지 특허들이 가까이 모이고, 이미지 기반 결함검출 특허들이 다른 영역에 모이며, 금융 이상거래 탐지 특허들이 별도 위치에 모인다면, 임베딩이 어느 정도 기술 의미를 반영하고 있다고 볼 수 있다.


10. 결과는 어떻게 해석해야 하는가

기술지도를 해석할 때 가장 먼저 볼 것은 군집이다.

 

예를 들어 다음과 같은 패턴이 나올 수 있다.

Cluster 1
- P001 제조장비 이상탐지
- P002 산업기계 고장진단
- P003 예지보전
- P004 회전기계 상태 모니터링

해석
→ 센서 기반 설비 진단 및 예지보전 기술군
Cluster 2
- P005 이미지 기반 결함검출
- P006 이미지 기반 품질검사
- P007 CNN 기반 표면 결함 분류

해석
→ Vision 기반 품질검사 기술군
Cluster 3
- P008 금융 이상거래 탐지
- P009 거래 행동 기반 사기 탐지

해석
→ 금융 데이터 기반 이상탐지 기술군
Cluster 4
- P010 환자 모니터링 데이터 이상탐지
- P011 웨어러블 헬스케어 이상징후 감지

해석
→ 의료·헬스케어 모니터링 기술군
Cluster 5
- P012 배터리 고장 감지
- P013 열폭주 예측

해석
→ 배터리 상태진단 및 안전관리 기술군

이런 식으로 점들의 분포를 보고 기술군을 해석할 수 있다.


11. 기술지도에서 볼 수 있는 것

기술지도는 단순히 예쁜 시각화가 아니다.
기술평가와 기술전략 관점에서 여러 가지 질문을 던질 수 있다.

 

기술지도에서 볼 수 있는 것

1. 기술군 구조
- 전체 특허가 어떤 하위 기술군으로 나뉘는가

2. 기술 간 거리
- 제조 이상탐지와 배터리 이상탐지는 가까운가, 먼가

3. 융합 가능성
- 서로 다른 기술군 사이에 위치한 특허가 있는가

4. 경쟁 밀도
- 특정 기술군에 특허가 과도하게 몰려 있는가

5. 기술 공백
- 유사 기술 대비 비어 있는 영역이 있는가

6. 기업 포지션
- 특정 기업이 어떤 기술군에 집중하는가

 

이 중 기업 포지션 분석은 이후 글에서 중요하게 다룰 부분이다.

특허 단위로 기술지도를 그린 뒤, 각 특허의 출원인을 함께 보면 기업별 기술 포트폴리오가 보이기 시작한다.


12. t-SNE로도 시각화할 수 있다

UMAP 대신 t-SNE를 사용할 수도 있다.

 

t-SNE는 국소적인 이웃 구조를 잘 보여주는 차원축소 방법이다.
즉, 가까운 데이터끼리 뭉쳐 보이도록 하는 데 강점이 있다.

 

다만 데이터 수가 적을 때는 perplexity 값을 조정해야 한다.
일반적으로 perplexity는 데이터 개수보다 작아야 한다.

 

샘플 데이터가 13건이므로, 여기서는 perplexity=3 정도로 설정한다.

from sklearn.manifold import TSNE

tsne = TSNE(
    n_components=2,
    perplexity=3,
    random_state=42,
    init="random",
    learning_rate="auto"
)

tsne_2d = tsne.fit_transform(embeddings)

df["tsne_x"] = tsne_2d[:, 0]
df["tsne_y"] = tsne_2d[:, 1]

 

시각화 코드는 UMAP과 비슷하다.

plt.figure(figsize=(10, 7))

for domain in df["domain"].unique():
    subset = df[df["domain"] == domain]
    plt.scatter(
        subset["tsne_x"],
        subset["tsne_y"],
        label=domain,
        s=80
    )

for _, row in df.iterrows():
    plt.text(
        row["tsne_x"] + 0.02,
        row["tsne_y"] + 0.02,
        row["patent_id"],
        fontsize=9
    )

plt.title("Patent Technology Map using Sentence-BERT + t-SNE")
plt.xlabel("t-SNE Dimension 1")
plt.ylabel("t-SNE Dimension 2")
plt.legend()
plt.grid(True)
plt.show()

 

UMAP과 t-SNE는 결과가 다르게 나올 수 있다.
이것은 자연스러운 현상이다.

 

차원축소 알고리즘은 고차원 구조를 2차원에 완벽히 보존하지 못한다.
따라서 한 번의 시각화 결과만 보고 결론을 내리면 안 된다.


13. UMAP과 t-SNE 중 무엇을 쓸 것인가

초기 프로젝트에서는 UMAP을 우선 사용하는 것이 좋다.

UMAP
- 비교적 빠르다
- 큰 데이터셋에도 사용하기 좋다
- 전역 구조를 어느 정도 유지한다
- 기술지도 시각화에 적합하다

t-SNE
- 가까운 이웃 구조를 잘 보여준다
- 작은 군집을 시각적으로 잘 분리할 수 있다
- 데이터가 많으면 느릴 수 있다
- 파라미터에 따라 결과가 크게 달라질 수 있다

 

정리하면 다음과 같다.

초기 기술지도 시각화
→ UMAP 추천

작은 데이터셋에서 군집 구조를 직관적으로 보고 싶을 때
→ t-SNE도 가능

논문형 분석으로 확장할 때
→ UMAP, t-SNE 결과를 모두 비교하고 해석

 

이번 시리즈에서는 UMAP을 기본 시각화 방법으로 사용하고, t-SNE는 비교용으로 활용하는 것이 적절하다.


14. 기술지도 해석 시 주의할 점

기술지도는 강력한 시각화 도구지만, 해석에는 주의가 필요하다.

 

첫째, 점의 위치를 과도하게 해석하면 안 된다.
x축과 y축은 임의의 차원축소 결과이기 때문에, 좌표값 자체에 직접적인 의미를 부여하면 안 된다.

 

둘째, 가까운 점이 반드시 같은 권리범위를 가진다는 뜻은 아니다.
Sentence-BERT는 텍스트 의미를 반영하지만, 특허의 법적 권리범위나 청구항 구조를 정확히 판단하지는 못한다.

 

셋째, 시각화 결과는 데이터셋 구성에 영향을 받는다.
어떤 키워드로 특허를 수집했는지, 어떤 문헌을 제외했는지에 따라 기술지도는 달라질 수 있다.

 

넷째, 샘플 데이터가 너무 적으면 군집 구조가 왜곡될 수 있다.
실제 분석에서는 최소 50건 이상, 가능하면 100건 이상의 특허를 확보하는 것이 좋다.

따라서 기술지도는 최종 판단 도구가 아니라, 기술 구조를 탐색하기 위한 분석 도구로 보는 것이 적절하다.


15. 이번 실험의 의미

이번 글에서는 Sentence-BERT 임베딩을 UMAP 또는 t-SNE로 2차원 공간에 시각화해 특허 기술지도를 만드는 방법을 정리했다.

이전 단계에서는 유사 특허를 리스트로 확인했다.

P001과 유사한 특허 Top-K

 

이번 단계에서는 전체 특허의 분포를 지도처럼 확인한다.

전체 특허가 어떤 기술군으로 나뉘는가

 

이 차이는 중요하다.

 

유사 특허 검색은 문헌 단위 분석에 가깝다.
반면 기술지도는 기술영역 단위 분석에 가깝다.

 

즉, 기술지도는 Patent Intelligence Agent가 단순 검색기를 넘어 기술구조를 파악하는 분석 도구로 확장되는 단계다.


16. 정리

이번 글의 핵심은 다음과 같다.

핵심 요약
1. 특허 임베딩은 특허 문서의 의미를 숫자 벡터로 표현한 것이다.

2. Sentence-BERT 임베딩은 보통 384차원 또는 768차원과 같은 고차원 벡터다.

3. 사람은 고차원 벡터를 직접 볼 수 없기 때문에 UMAP이나 t-SNE로 2차원으로 줄인다.

4. 2차원 공간에서 각 점은 하나의 특허를 의미한다.

5. 가까운 점들은 의미적으로 유사한 특허일 가능성이 높다.

6. 기술지도는 특허군, 기술거리, 경쟁밀도, 기술공백을 탐색하는 데 활용할 수 있다.

7. 다만 기술지도는 탐색 도구이지 최종 판단 도구는 아니므로 원문 검토가 필요하다.

 

이번 실험을 통해 특허 임베딩을 2차원 공간에 배치하고, 유사한 특허들이 실제로 가까운 위치에 모이는지 확인하는 방법을 정리했다.

 

다음 글에서는 이 기술지도에서 한 걸음 더 나아가, HDBSCAN을 사용해 특허들을 자동으로 기술군으로 분류해본다. 즉, 사람이 직접 그룹을 나누는 것이 아니라, 모델이 특허 임베딩의 분포를 보고 유사한 특허군을 자동으로 찾아내는 실험을 진행할 예정이다.


다음 글 예고

"HDBSCAN으로 특허 기술군 자동 분류하기"

다음 글에서는 Sentence-BERT 임베딩과 UMAP 결과를 기반으로 HDBSCAN 클러스터링을 적용해, 유사한 기술문제를 다루는 특허들이 자동으로 하나의 기술군으로 묶이는지 확인해볼 예정이다.