
"Sentence-BERT로 의미 기반 유사 특허 검색하기"
지난 글에서는 TF-IDF와 Cosine Similarity를 활용해 유사 특허를 찾는 첫 번째 실험을 진행했다. 특허의 Title과 Abstract를 결합해 analysis_text를 만들고, 이를 TF-IDF 벡터로 변환한 뒤, 특허 간 유사도를 계산했다.
TF-IDF는 구현이 쉽고 해석이 가능하다는 장점이 있다. 하지만 명확한 한계도 있다.
TF-IDF는 단어 기반 방법이다. 즉, 두 문서에 같은 단어가 얼마나 자주 등장하는지를 중심으로 유사도를 계산한다. 이 방식은 단어가 겹치는 문서에는 강하지만, 표현은 다르지만 의미가 비슷한 문서를 찾는 데는 약하다.
예를 들어 다음 표현들은 기술적으로 유사한 문제를 다룰 수 있다.
anomaly detection
fault diagnosis
failure prediction
predictive maintenance
condition monitoring
abnormal state detection
하지만 TF-IDF는 이 표현들이 서로 유사한 의미를 가진다는 것을 스스로 이해하지 못한다. 단어가 다르면 다른 것으로 본다.
이번 글에서는 이 한계를 보완하기 위해 Sentence-BERT를 사용한다.
목표는 간단하다.
특허의 Title + Abstract를 문장 임베딩으로 변환하고,
Cosine Similarity를 이용해 의미적으로 유사한 특허를 검색한다.
이번 단계부터 Patent Intelligence Agent는 단순 키워드 검색을 넘어 Semantic Patent Search로 확장된다.
1. 왜 Sentence-BERT인가
TF-IDF는 단어의 빈도와 희소성을 기반으로 문서를 벡터화한다.
반면 Sentence-BERT는 문장이나 문서의 의미를 벡터 공간에 표현한다.
즉, TF-IDF가 “어떤 단어가 등장했는가”를 본다면, Sentence-BERT는 “이 문장이 어떤 의미를 갖는가”를 본다.
차이를 단순화하면 다음과 같다.
TF-IDF
- 단어 기반
- 단어가 겹치면 유사도가 높아짐
- 동의어, 유사 표현에 약함
- 해석이 쉬움
- Baseline으로 적합
Sentence-BERT
- 의미 기반
- 단어가 달라도 의미가 비슷하면 가까운 벡터로 표현
- 문맥과 의미를 반영
- 유사 문장 검색에 적합
- Semantic Search에 적합
특허 분석에서는 이 차이가 중요하다.
특허 문서는 같은 기술을 서로 다른 표현으로 설명하는 경우가 많다. 어떤 특허는 “fault detection”이라고 쓰고, 어떤 특허는 “abnormal state diagnosis”라고 쓸 수 있다. 또 어떤 문서는 “predictive maintenance”라고 표현할 수 있다.
사람이 보면 비슷한 기술이라는 것을 알 수 있지만, 단어 기반 모델은 이를 놓칠 수 있다.
그래서 특허 검색에는 의미 기반 검색이 필요하다.
2. Semantic Patent Search란 무엇인가
Semantic Search는 단어가 정확히 일치하는 문서를 찾는 것이 아니라, 질문이나 문서의 의미와 가까운 결과를 찾는 검색 방식이다.
특허 분석에서 Semantic Search는 다음과 같은 질문에 답하는 데 유용하다.
- 이 특허와 기술적으로 유사한 특허는 무엇인가?
- 표현은 다르지만 같은 문제를 다루는 특허는 무엇인가?
- 특정 기업이 보유한 특허와 유사한 기술을 가진 경쟁사는 누구인가?
- 특정 기술 키워드와 의미적으로 가까운 특허군은 어디에 있는가?
- 기존 키워드 검색으로는 놓쳤던 특허를 찾을 수 있는가?
Patent Intelligence Agent 관점에서 Semantic Search는 핵심 기능이다.
RAG, 기술지도, 기업 경쟁구도 분석, 기술 포트폴리오 벡터화는 모두 의미 기반 검색을 기반으로 확장된다.
전체 구조는 다음과 같다.
Patent Text
↓
Sentence-BERT Embedding
↓
Vector Representation
↓
Cosine Similarity
↓
Semantic Patent Search
↓
Technology Intelligence
이번 글에서는 이 구조의 가장 기본적인 버전을 구현한다.
3. 이번 실험의 목표
이번 실험의 목표는 TF-IDF 실험과 동일한 데이터 구조를 사용하되, 벡터화 방법만 Sentence-BERT로 바꾸는 것이다.
즉, 비교 구조는 다음과 같다.
4편: TF-IDF 기반 유사 특허 검색
Title + Abstract
↓
TF-IDF Vector
↓
Cosine Similarity
↓
유사 특허 Top-K
5편: Sentence-BERT 기반 유사 특허 검색
Title + Abstract
↓
Sentence Embedding
↓
Cosine Similarity
↓
유사 특허 Top-K
중요한 것은 같은 데이터에 대해 두 방법을 비교할 수 있다는 점이다.
TF-IDF는 Baseline이다.
Sentence-BERT는 Semantic Search 모델이다.
이후 실제 특허 데이터가 늘어나면 두 방식의 검색 결과를 비교하면서 다음 질문을 던질 수 있다.
- TF-IDF와 Sentence-BERT가 같은 특허를 유사하다고 판단하는가?
- Sentence-BERT는 단어가 다르지만 의미가 유사한 특허를 더 잘 찾는가?
- TF-IDF가 더 잘 찾는 경우는 무엇인가?
- 특허 검색에서 의미 기반 검색은 실제로 유효한가?
이 질문이 나중에 논문형 프로젝트의 연구질문으로 확장될 수 있다.
4. 실험용 샘플 데이터
이번에도 작은 샘플 데이터셋을 사용한다.
실제 특허 데이터를 수집하기 전에는, 먼저 파이프라인이 정상적으로 동작하는지 확인하는 것이 중요하다.
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.",
"applicant": "Company A",
"filing_date": "2021-03-01",
"ipc_cpc": "G06N"
},
{
"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.",
"applicant": "Company B",
"filing_date": "2020-07-14",
"ipc_cpc": "G05B"
},
{
"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.",
"applicant": "Company C",
"filing_date": "2022-11-20",
"ipc_cpc": "G06Q"
},
{
"patent_id": "P004",
"title": "Defect detection method for visual inspection",
"abstract": "A computer vision method detects defects in product images using a neural network.",
"applicant": "Company D",
"filing_date": "2021-09-10",
"ipc_cpc": "G06T"
},
{
"patent_id": "P005",
"title": "Abnormal transaction detection system",
"abstract": "A system detects abnormal financial transactions using historical transaction patterns and machine learning.",
"applicant": "Company E",
"filing_date": "2020-12-05",
"ipc_cpc": "G06Q"
},
{
"patent_id": "P006",
"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.",
"applicant": "Company F",
"filing_date": "2022-04-18",
"ipc_cpc": "G01M"
}
]
df = pd.DataFrame(data)
df
이번에는 P006을 추가했다.
P006은 “anomaly detection”이라는 단어를 직접 쓰지 않지만, 회전기계의 상태를 모니터링하고 고장 징후를 감지한다는 점에서 P001, P002, P003과 기술적으로 가깝다.
이런 데이터가 Sentence-BERT의 장점을 확인하기 좋은 사례다.
5. 분석용 텍스트 만들기
이제 Title과 Abstract를 결합한다.
df["analysis_text"] = df["title"] + " " + df["abstract"]
df[["patent_id", "analysis_text"]]
분석 대상 텍스트는 다음 구조를 가진다.
analysis_text = title + " " + abstract
특허 검색에서 Title과 Abstract를 결합하는 이유는 명확하다.
Title
- 기술 주제를 압축적으로 표현
Abstract
- 기술 문제, 방법, 효과를 요약
Title + Abstract
- 주제와 기술 내용을 함께 반영
초기 MVP에서는 이 조합이 가장 안정적이다.
6. Sentence-BERT 설치
Google Colab에서 Sentence-BERT를 사용하려면 먼저 sentence-transformers 패키지를 설치한다.
!pip install sentence-transformers
설치 후 필요한 라이브러리를 불러온다.
from sentence_transformers import SentenceTransformer
from sklearn.metrics.pairwise import cosine_similarity
import pandas as pd
이번 실험에서는 가벼운 사전학습 모델을 사용한다.
model = SentenceTransformer("all-MiniLM-L6-v2")
이 모델은 문장 임베딩 실험에 자주 사용되는 경량 모델이다.
처음 실험에서는 무거운 모델보다 빠르게 실행되는 모델을 사용하는 것이 좋다.
7. 특허 텍스트를 임베딩으로 변환하기
이제 analysis_text를 Sentence-BERT 임베딩으로 변환한다.
texts = df["analysis_text"].tolist()
embeddings = model.encode(texts)
embeddings.shape
embeddings.shape를 출력하면 다음과 비슷한 형태가 나온다.
(6, 384)
이는 6개의 특허 문서가 각각 384차원 벡터로 변환되었다는 의미다.
즉, 하나의 특허 문서가 다음과 같은 숫자 벡터로 표현된다.
Patent P001
→ [0.021, -0.184, 0.093, ..., 0.047]
Patent P002
→ [0.018, -0.162, 0.088, ..., 0.052]
사람이 보기에는 숫자 배열이지만, 모델 입장에서는 이 벡터가 문장의 의미를 표현한다.
8. Cosine Similarity 계산
이제 특허 임베딩 간 Cosine Similarity를 계산한다.
similarity_matrix = cosine_similarity(embeddings)
similarity_matrix
결과는 특허 간 의미 유사도 행렬이다.
P001 P002 P003 P004 P005 P006
P001 1.00 0.62 0.66 0.41 0.48 0.59
P002 0.62 1.00 0.64 0.38 0.36 0.71
P003 0.66 0.64 1.00 0.42 0.44 0.61
P004 0.41 0.38 0.42 1.00 0.39 0.35
P005 0.48 0.36 0.44 0.39 1.00 0.33
P006 0.59 0.71 0.61 0.35 0.33 1.00
실제 값은 실행 환경과 모델에 따라 달라질 수 있다.
중요한 것은 값 자체보다 상대적인 순위다.
예를 들어 P006은 “condition monitoring”이라는 표현을 사용하지만, P002의 “fault diagnosis”와 기술적으로 가깝다. Sentence-BERT는 이런 의미적 유사성을 어느 정도 반영할 수 있다.
9. 의미 기반 유사 특허 검색 함수 만들기
이제 특정 특허와 의미적으로 유사한 특허를 찾아주는 함수를 만든다.
def find_similar_patents_sbert(patent_id, top_k=3):
# 입력한 patent_id의 index 찾기
idx = df.index[df["patent_id"] == patent_id][0]
# 해당 특허와 다른 특허 간 유사도 가져오기
sim_scores = list(enumerate(similarity_matrix[idx]))
# 자기 자신 제외
sim_scores = [
(i, score) for i, score in sim_scores
if i != idx
]
# 유사도 기준 내림차순 정렬
sim_scores = sorted(
sim_scores,
key=lambda x: x[1],
reverse=True
)
# Top-K 선택
top_results = sim_scores[:top_k]
# 결과 정리
results = []
for i, score in top_results:
results.append({
"query_patent": patent_id,
"similar_patent": df.loc[i, "patent_id"],
"title": df.loc[i, "title"],
"similarity": round(float(score), 3)
})
return pd.DataFrame(results)
P001과 유사한 특허를 검색해본다.
find_similar_patents_sbert("P001", top_k=3)
예상 결과는 다음과 같은 형태다.
query_patent | similar_patent | title | similarity
P001 | P003 | Predictive maintenance method using machine... | 0.660
P001 | P002 | System for fault diagnosis of industrial... | 0.620
P001 | P006 | Condition monitoring apparatus for rotating... | 0.590
P001은 제조장비 이상탐지 특허다.
P003은 예지보전, P002는 고장진단, P006은 상태 모니터링과 관련되어 있다.
표현은 다르지만 모두 “장비 상태를 데이터 기반으로 판단하고 이상 또는 고장을 감지한다”는 공통 문제를 다룬다.
이것이 Semantic Search의 장점이다.
10. TF-IDF와 Sentence-BERT 결과를 비교해보기
이번에는 TF-IDF와 Sentence-BERT의 차이를 개념적으로 비교해본다.
Query Patent: P001
Method for anomaly detection in manufacturing equipment
TF-IDF에서는 단어가 직접 겹치는 특허가 높게 나올 가능성이 크다.
TF-IDF가 좋아하는 특허
- anomaly라는 단어가 있는 특허
- detection이라는 단어가 있는 특허
- machine learning이라는 단어가 있는 특허
- sensor라는 단어가 있는 특허
Sentence-BERT는 단어가 다르더라도 의미가 비슷한 특허를 찾을 가능성이 있다.
Sentence-BERT가 찾을 수 있는 특허
- fault diagnosis
- predictive maintenance
- condition monitoring
- failure prediction
- abnormal state diagnosis
이 차이가 Patent Intelligence Agent에서 매우 중요하다.
특허 검색은 단순히 같은 단어를 찾는 문제가 아니다.
서로 다른 표현으로 작성된 기술문서 사이에서 의미적으로 가까운 문서를 찾아야 한다.
11. Sentence-BERT도 완벽하지 않다
Sentence-BERT가 TF-IDF보다 항상 좋은 것은 아니다.
Sentence-BERT는 의미 기반 검색에 강하지만, 특허 도메인에는 몇 가지 한계가 있다.
Sentence-BERT의 한계
- 일반 문장 데이터에 학습된 모델은 특허 문체에 최적화되어 있지 않을 수 있다.
- 청구항처럼 길고 복잡한 문장은 의미가 희석될 수 있다.
- 기술적 세부 차이를 과도하게 비슷하다고 판단할 수 있다.
- 법적 권리범위의 차이를 정확히 이해하지 못한다.
- 도메인 특화 용어를 충분히 반영하지 못할 수 있다.
예를 들어 두 특허가 모두 “battery fault detection”을 다룬다고 해도, 하나는 전압 센서 기반이고 다른 하나는 열화학 모델 기반일 수 있다. Sentence-BERT는 둘을 비슷하게 볼 수 있지만, 기술평가나 특허권리 분석 관점에서는 중요한 차이가 존재할 수 있다.
즉, Sentence-BERT는 특허 분석가를 대체하는 모델이 아니라, 후보군을 좁혀주는 검색 보조 모델로 보는 것이 적절하다.
12. 특허 도메인에서는 무엇을 더 해야 할까
특허 분석에 Sentence-BERT를 적용할 때는 몇 가지 개선 방향이 있다.
개선 방향
1. 특허 도메인에 특화된 임베딩 모델 사용
2. Title, Abstract, Claims를 분리해 각각 임베딩
3. IPC/CPC 정보를 함께 활용
4. 유사도 점수와 기술분류 일치도를 함께 평가
5. Cross-Encoder Reranker 추가
6. 전문가 검토를 통한 검색 결과 평가
초기 MVP에서는 Title + Abstract를 하나로 합쳐 임베딩한다.
하지만 나중에는 필드별 임베딩을 분리할 수 있다.
예를 들면 다음과 같은 구조다.
Title Embedding
Abstract Embedding
Claims Embedding
IPC/CPC Encoding
Citation Feature
↓
Combined Patent Representation
↓
Semantic Search / Clustering / Valuation
이렇게 하면 특허 하나를 더 정교하게 표현할 수 있다.
13. 이번 실험의 의미
이번 실험은 Patent Intelligence Agent의 검색 기능을 한 단계 발전시킨 것이다.
4편에서는 TF-IDF를 사용했다.
단어가 비슷한 특허를 찾는다.
5편에서는 Sentence-BERT를 사용했다.
의미가 비슷한 특허를 찾는다.
이 차이는 앞으로 매우 중요해진다.
기술기업의 특허 포트폴리오를 분석하려면 단순히 같은 키워드를 가진 특허를 모으는 것으로는 부족하다. 서로 다른 표현을 쓰더라도 같은 기술문제를 다루는 특허들을 찾아야 한다.
그때 필요한 것이 의미 기반 검색이다.
Patent Text
↓
Sentence Embedding
↓
Semantic Similarity
↓
Similar Patent Search
↓
Technology Cluster
↓
Technology Intelligence
즉, 이번 실험은 Patent Intelligence Agent가 “키워드 검색기”에서 “의미 기반 기술검색기”로 넘어가는 첫 단계다.
14. 정리
이번 글에서는 Sentence-BERT를 활용해 의미 기반 유사 특허 검색을 구현했다.
핵심은 다음과 같다.
| 핵심 요약 |
| 1. TF-IDF는 단어 기반 유사도 분석에 적합하다. 2. Sentece-BERT는 문장의 의미를 벡터로 표현하는 임베딩 모델이다. 3. 특허의 Title+Abstract를 결합해 analysis_text를 만든다. 4. Sentence-BERT로 analysis_text를 임베딩하면 의미 기반 유사도 검색이 가능하다. 5. fault diagnosis, predictive maintenance, conditino monitoring처럼 표현은 다르지만 의미가 가까운 특허를 찾는 데 유용하다. 6. 그러나 일반 Sentence-BERT는 특허 도메인에 완전히 최적화된 모델은 아니다. 7. 향후에는 특허 특화 모델, IPC/CPC 정보, Reranker, Claims 분석을 결합해야 한다. |
이번 실험을 통해 특허 텍스트를 의미 벡터로 변환하고, 유사 특허를 검색하는 기본 구조를 만들었다.
다음 글에서는 여기서 한 단계 더 나아가, 여러 특허를 2차원 공간에 배치해 기술군이 어떻게 나뉘는지 시각화해볼 예정이다. 이를 위해 UMAP 또는 t-SNE를 사용해 특허 임베딩을 차원축소하고, 기술지도의 첫 번째 버전을 만들어본다.
다음 글 예고
"특허 임베딩으로 기술지도 그리기"
다음 글에서는 Sentence-BERT로 만든 특허 임베딩을 UMAP 또는 t-SNE로 2차원 공간에 시각화하고, 유사한 특허들이 실제로 가까운 위치에 모이는지 확인해볼 예정이다.
'Project > Patent Intelligent Agent' 카테고리의 다른 글
| Patent Intelligence Agent #7 (0) | 2026.06.22 |
|---|---|
| Patent Intelligence Agent #6 (0) | 2026.06.22 |
| Patent Intelligence Agent #4 (0) | 2026.06.16 |
| Patent Intelligence Agent #3 (0) | 2026.06.16 |
| Patent Intelligence Agent #2 (0) | 2026.06.15 |