1. 개요
다양한 업계에서 특허 조사는 경쟁 환경을 파악하고, 잠재적인 라이선스 구매 또는 획득 기회를 파악하고, 기존 특허를 침해하지 않기 위한 중요한 도구입니다.
특허 조사는 방대하고 복잡합니다. 수많은 기술 개요를 검토하여 관련 혁신을 찾는 것은 쉽지 않은 작업입니다. 기존의 키워드 기반 검색은 부정확하고 시간이 많이 소요되는 경우가 많습니다. 초록이 길고 기술적이어서 핵심 아이디어를 빠르게 파악하기 어렵습니다. 이로 인해 연구원이 중요한 특허를 놓치거나 관련 없는 결과에 시간을 낭비할 수 있습니다.
목표
이 Codelab에서는 Spanner, 인플레이스 Gemini 1.0 Pro, 임베딩, 벡터 검색을 활용하여 특허 검색 프로세스를 더 빠르고 직관적이며 매우 정확하게 만드는 방법을 알아봅니다.
빌드할 항목
이 실습에서는 다음을 수행합니다.
- Spanner 인스턴스 만들기
- Google 특허 검색 공개 데이터 세트 로드
- Gemini 1.0 Pro 모델로 텍스트 임베딩을 위한 원격 모델 만들기
- 로드된 데이터 세트에서 생성형 통계 생성
- 통계에서 임베딩 생성
- 데이터 세트에 대해 유사성 검색 쿼리 실행
다음 다이어그램은 데이터 흐름과 구현에 포함된 단계를 나타냅니다.
요구사항
2. 시작하기 전에
프로젝트 만들기
- Google Cloud 콘솔의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.
- Cloud 프로젝트에 결제가 사용 설정되어 있어야 하므로 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요 .
- bq가 미리 로드되어 제공되는 Google Cloud에서 실행되는 명령줄 환경인 Cloud Shell을 사용합니다. Google Cloud 콘솔 상단에서 Cloud Shell 활성화를 클릭합니다.
- Cloud Shell에 연결되면 다음 명령어를 사용하여 이미 인증되었는지, 프로젝트가 프로젝트 ID로 설정되어 있는지 확인합니다.
gcloud auth list
- Cloud Shell에서 다음 명령어를 실행하여 gcloud 명령어가 프로젝트를 알고 있는지 확인합니다.
gcloud config list project
- 프로젝트가 설정되지 않은 경우 다음 명령어를 사용하여 설정합니다.
gcloud config set project <YOUR_PROJECT_ID>
- 콘솔에서 Vertex AI 및 Spanner API를 검색하여 사용 설정되어 있는지 확인합니다. 또는 Cloud Shell 터미널에서 다음 명령어를 사용할 수도 있습니다.
gcloud services enable spanner.googleapis.com --project <<YOUR_PROJECT_ID>>
gcloud services enable aiplatform.googleapis.com --project <<YOUR_PROJECT_ID>>
이 링크를 사용하는 것도 방법입니다.
gcloud 명령어 및 사용법은 문서를 참조하세요.
3. Spanner 데이터베이스 준비
특허 데이터 세트가 로드될 Spanner 인스턴스, 데이터베이스, 테이블을 만들어 보겠습니다.
Spanner 인스턴스 만들기
spanner-vertex
라는 Spanner 인스턴스를 만듭니다.
gcloud spanner instances create spanner-vertex \
--config=regional-us-central1 \
--description=spanner-vertex \
--nodes=1
데이터베이스 만들기
- Google Cloud 콘솔에서 Spanner 페이지를 엽니다.
- 목록에서
spanner-vertex
인스턴스를 선택합니다. - '데이터베이스'에서 데이터베이스 만들기를 클릭합니다.
- 데이터베이스 이름을 patents로 설정합니다.
- 만들기를 클릭하여 데이터베이스를 만듭니다.
테이블 만들기
- Google Cloud 콘솔에서 Spanner 페이지를 엽니다.
- 목록에서
spanner-vertex
인스턴스를 선택합니다. patents
데이터베이스를 선택합니다.- 테이블 탭에서 테이블 만들기를 클릭합니다. Spanner 스튜디오 페이지가 열립니다.
- 새 SQL 편집기 탭을 클릭하여 새 탭을 엽니다.
- 다음 쿼리를 실행합니다.
CREATE TABLE patents_data (
id string(25), type string(25), number string(20), country string(2), date string(20), abstract string(300000), title string(100000),kind string(5), num_claims numeric, filename string(100), withdrawn numeric,
) PRIMARY KEY (id);
4. 데이터베이스에 특허 데이터 로드
BigQuery의 Google 특허 공개 데이터 세트가 데이터 세트로 사용됩니다. Spanner 스튜디오를 사용하여 쿼리를 실행합니다. spanner-gemini-search 저장소에는 특허 데이터를 로드하기 위해 실행할 insert_into_patents_data.sql
스크립트가 포함되어 있습니다.
- Google Cloud 콘솔에서 Spanner 페이지를 엽니다.
- 목록에서
spanner-vertex
인스턴스를 선택합니다. patents
데이터베이스를 선택합니다.- 탐색 메뉴에서 Spanner 스튜디오를 클릭합니다. 탐색기 창에 데이터베이스의 객체 목록이 표시됩니다.
- 새 SQL 편집기 탭을 클릭하여 새 탭을 엽니다.
- 편집기의
insert_into_patents_data.sql
스크립트에서insert
쿼리 문을 복사합니다. 이 사용 사례를 빠르게 데모하려면 50~100개의 삽입 문을 복사하면 됩니다. - 실행을 클릭합니다. 쿼리 결과가 결과 테이블에 표시됩니다.
5. Gemini 1.0 Pro용 원격 모델 만들기
특허 데이터가 데이터베이스에 로드되면 Gemini 1.0 Pro Vertex AI 모델을 사용하여 요약된 제목 및 키워드 집합을 생성하는 원격 모델을 만듭니다.
Spanner 스튜디오 편집기에서 다음 DDL 명령어를 실행합니다.
- 탐색 메뉴에서 Spanner 스튜디오를 클릭합니다. 탐색기 창에 데이터베이스의 객체 목록이 표시됩니다.
- 새 SQL 편집기 탭을 클릭하여 새 탭을 엽니다.
- 다음 쿼리를 실행합니다.
CREATE MODEL gemini_pro_model INPUT(
prompt STRING(MAX),
) OUTPUT(
content STRING(MAX),
) REMOTE OPTIONS (
endpoint = '//aiplatform.googleapis.com/projects/<<YOUR_PROJECT_ID>>/locations/us-central1/publishers/google/models/gemini-pro',
default_batch_size = 1
);
- 실행을 클릭합니다. 쿼리 결과가 결과 테이블에 표시됩니다.
6. 텍스트 임베딩을 위한 원격 모델 만들기
이전 단계의 결과에는 제목과 키워드로 구성된 통합 요약이 포함됩니다. 이 대답을 쿼리를 실행할 때 적절한 일치를 생성하는 데 도움이 되는 임베딩으로 변환합니다. Spanner에서 원격으로 Vertex AI의 Text Embedding Gecko 003 model
를 사용합니다.
- 탐색 메뉴에서 Spanner 스튜디오를 클릭합니다. 탐색기 창에 데이터베이스의 객체 목록이 표시됩니다.
- 새 SQL 편집기 탭을 클릭하여 새 탭을 엽니다.
- 다음 쿼리를 실행합니다.
CREATE MODEL text_embeddings INPUT(content STRING(MAX))
OUTPUT(
embeddings
STRUCT<
statistics STRUCT<truncated BOOL, token_count FLOAT64>,
values ARRAY<FLOAT64>>
)
REMOTE OPTIONS (
endpoint = '//aiplatform.googleapis.com/projects/<<YOUR_PROJECT_ID>>/locations/us-central1/publishers/google/models/textembedding-gecko@003');
- 실행을 클릭합니다. 쿼리 결과가 결과 테이블에 표시됩니다.
7. 특허 개요에서 생성형 통계 만들기
앞에서 만든 Gemini 1.5 Pro 모델을 사용하여 생성할 생성형 인사이트를 저장할 patents_data_gemini
테이블을 만듭니다.
테이블 만들기
- 탐색 메뉴에서 Spanner 스튜디오를 클릭합니다. 탐색기 창에 데이터베이스의 객체 목록이 표시됩니다.
- 새 SQL 편집기 탭을 클릭하여 새 탭을 엽니다.
- 다음 쿼리를 실행합니다.
CREATE TABLE patents_data_gemini (id string(100), gemini_response STRING(MAX)) PRIMARY KEY (id);
- 실행을 클릭합니다. 쿼리 결과가 결과 테이블에 표시됩니다.
통계 생성
생성 통계로 테이블을 채우려면 일괄 쓰기 또는 변형 메서드를 사용하는 애플리케이션을 사용하는 것이 좋습니다. 이 Codelab에서는 다음 DDL 쿼리를 최대 4번 실행하여 테이블을 채웁니다.
INSERT INTO patents_data_gemini (id, gemini_response)
SELECT id, content as gemini_response
FROM ML.PREDICT(MODEL gemini_pro_model,
(select id, concat ('Identify the areas of work or keywords in this abstract', abstract) as prompt from patents_data b where id not in (select id from patents_data_gemini) limit 50
));
참고: 이 단계에서 할당량 초과 오류가 발생하는 경우 (마진이 작은 무료 크레딧의 경우 발생할 수 있음) 삽입을 건너뛰고 아래의 해결 방법 섹션에서 선택 쿼리만 실행해 보세요.
해결 방법 섹션:
SELECT id, content as gemini_response
FROM ML.PREDICT(MODEL gemini_pro_model,
(select id, concat ('Identify the areas of work or keywords in this abstract', abstract) as prompt from patents_data b limit 50
))
통계 관찰
이 표에는 쿼리의 'Identify the areas of work or keywords in this abstract',
프롬프트에 대해 생성된 통계가 포함됩니다.
참고: INSERT DDL 대신 위의 해결 방법 섹션 쿼리를 실행한 경우 이 부분을 건너뛰고 이 페이지의 마지막 SELECT 쿼리를 실행하세요.
다음 쿼리를 실행하여 통계의 결과를 확인해 보겠습니다.
select title, abstract, gemini_response from patents_data a inner join patents_data_gemini b
on a.id = b.id;
다음과 같은 결과가 표시됩니다.
참고: 해결 방법 섹션 쿼리를 실행한 경우 위의 선택 쿼리의 테이블 이름을 해결 방법 섹션의 쿼리로 바꿉니다. 대신 다음을 실행합니다.
select title, abstract, gemini_response from patents_data a inner join (SELECT id, content as gemini_response
FROM ML.PREDICT(MODEL gemini_pro_model,
(select id, concat ('Identify the areas of work or keywords in this abstract', abstract) as prompt from patents_data b limit 50
))) b
on a.id = b.id;
결과는 위의 결과 스크린샷과 동일해야 합니다.
8. 생성된 통계의 임베딩 생성
표에 통계를 채운 후에는 이러한 통계를 사용하여 임베딩을 생성할 수 있습니다. 이러한 임베딩은 정확한 키워드 일치에 의존하지 않고 개념적 유사성을 기반으로 결과를 생성하는 데 도움이 됩니다.
참고: 이전 단계에서 해결 방법 섹션 쿼리를 실행한 경우 이 단계를 건너뛰고 이 단계에서 해결 방법 섹션 쿼리로 이동할 수 있습니다.
다음 쿼리를 실행하여 임베딩을 생성합니다.
- 탐색 메뉴에서 Spanner 스튜디오를 클릭합니다. 탐색기 창에 데이터베이스의 객체 목록이 표시됩니다.
- 새 SQL 편집기 탭을 클릭하여 새 탭을 엽니다.
- 다음 쿼리를 실행하여
patents_data_embeddings
테이블을 만듭니다.
CREATE TABLE patents_data_embeddings (id string(100), patents_embeddings ARRAY<FLOAT64>) PRIMARY KEY (id);
- 실행을 클릭합니다. 쿼리 결과가 결과 테이블에 표시됩니다.
- 다음 쿼리를 실행하여 임베딩을 생성합니다.
INSERT INTO patents_data_embeddings (id, patents_embeddings)
SELECT id, embeddings.values as patents_embeddings
FROM ML.PREDICT(MODEL text_embeddings,
(SELECT id, gemini_response as content FROM patents_data_gemini));
- 실행을 클릭합니다. 쿼리 결과가 결과 테이블에 표시됩니다.
결과 관찰
이 표에는 제목과 추상화된 텍스트에 대해 생성된 임베딩이 포함되어 있습니다.
다음 쿼리를 실행하여 결과를 확인해 보겠습니다.
select title, abstract, b.patents_embeddings from patents_data a inner join patents_data_embeddings b
on a.id = b.id;
다음과 같은 결과가 표시됩니다.
해결 방법 섹션:
다른 단계에서 해결 방법 섹션을 수행한 경우 이 쿼리를 사용하세요.
select title, abstract, b.patents_embeddings from patents_data a inner join
(SELECT id, embeddings.values as patents_embeddings
FROM ML.PREDICT(MODEL text_embeddings,
(SELECT id, gemini_response as content FROM (SELECT id, content as gemini_response
FROM ML.PREDICT(MODEL gemini_pro_model,
(select id, concat ('Identify the areas of work or keywords in this abstract', abstract) as prompt from patents_data b limit 50
)))))) b
on a.id = b.id;
그러면 위 스크린샷과 동일한 결과가 표시됩니다.
9. 벡터 검색 준비
이제 텍스트 임베딩을 생성했으므로 유사성 벡터 검색을 실행할 준비가 되도록 웹 애플리케이션을 준비할 수 있습니다. 이 Codelab에서는 K-최근접 이웃 유사성 검색 기능을 기반으로 검색 결과를 제공하는 로직이 포함된 웹 애플리케이션을 만듭니다. 준비된 이 데이터 세트를 검색 앱과 함께 사용하여 검색 결과가 표시되는 방식을 시각화할 수 있습니다.
이 Codelab에서는 프롬프트를 검색하고 컨텍스트를 기반으로 결과를 생성하며 결과를 10개 항목으로 제한하는 샘플 쿼리를 실행합니다.
다음 쿼리를 실행합니다.
- 탐색 메뉴에서 Spanner 스튜디오를 클릭합니다. 탐색기 창에 데이터베이스의 객체 목록이 표시됩니다.
- 새 SQL 편집기 탭을 클릭하여 새 탭을 엽니다.
- 다음 쿼리를 실행하여
patents_data_embeddings
테이블을 만듭니다.
SELECT a.id, a.title, a.abstract, 'A new Natural Language Processing related Machine Learning Model' search_text, COSINE_DISTANCE(c.patents_embeddings,
(SELECT embeddings.values
FROM ML.PREDICT(
MODEL text_embeddings,
(SELECT 'A new Natural Language Processing related Machine Learning Model' as content)))) as distance
FROM patents_data a inner join patents_data_gemini b on a.id = b.id
inner join patents_data_embeddings c on a.id = c.id
ORDER BY distance
LIMIT 10;
- 실행을 클릭합니다. 쿼리 결과가 결과 테이블에 표시됩니다.
참고: 해결 방법 섹션의 쿼리를 사용한 경우 가장 먼저 삽입된 삽입 문 중 하나에 할당량 오류가 있으므로 다른 모든 단계를 건너뛰고 아래 쿼리를 직접 실행하여 Spanner 데이터베이스의 벡터 임베딩에 대한 가장 가까운 이웃 검색을 실행한 결과를 확인할 수 있습니다.
SELECT a.id, a.title, a.abstract, 'A new Natural Language Processing related Machine Learning Model' search_text, COSINE_DISTANCE(c.patents_embeddings,
(SELECT embeddings.values
FROM ML.PREDICT(
MODEL text_embeddings,
(SELECT 'A new Natural Language Processing related Machine Learning Model' as content)))) as distance
FROM patents_data a inner join (SELECT id, embeddings.values as patents_embeddings
FROM ML.PREDICT(MODEL text_embeddings,
(SELECT id, gemini_response as content FROM (SELECT id, content as gemini_response
FROM ML.PREDICT(MODEL gemini_pro_model,
(select id, concat ('Identify the areas of work or keywords in this abstract', abstract) as prompt from patents_data b
)))))) c on a.id = c.id
ORDER BY distance
LIMIT 2;
결과 관찰
위의 쿼리는 COSINE_DISTANCE
메서드를 사용하여 프롬프트에 가장 근접한 10개의 일치를 찾습니다.
다음과 같은 결과가 표시됩니다.
생성된 결과는 쿼리의 일부였던 프롬프트와 문맥적으로 매우 유사합니다.
10. 삭제
이 게시물에서 사용한 리소스의 비용이 Google Cloud 계정에 청구되지 않도록 하려면 다음 단계를 따르세요.
- Google Cloud 콘솔에서 리소스 관리 페이지로 이동합니다.
- 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제를 클릭합니다. 프로젝트를 삭제하지 않으려면 Spanner에서 만든 인스턴스만 삭제하면 됩니다.
- 대화상자에서 프로젝트 ID를 입력하고 종료를 클릭하여 프로젝트를 삭제합니다.
11. 축하합니다
축하합니다. Spanner의 내장 벡터 검색을 사용하여 유사성 검색을 실행했습니다. 또한 임베딩 및 LLM 모델을 사용하여 SQL을 통해 생성형 AI 기능을 직접 제공하는 것이 얼마나 쉬운지 확인했습니다.
다음 단계
Spanner의 정확한 근접 이웃 (KNN 벡터 검색) 기능에 대해 자세히 알아보려면 https://cloud.google.com/spanner/docs/find-k-nearest-neighbors를 참고하세요.
Spanner의 VertexAI 통합을 사용하여 SQL로 온라인 예측을 실행하는 방법에 대한 자세한 내용은 https://cloud.google.com/spanner/docs/ml을 참고하세요.