Education*
Devops
Architecture
F/B End
B.Chain
Basic
Others
CLOSE
Search For:
Search
BY TAGS
linux
HTTP
golang
flutter
java
fintech
개발환경
kubernetes
network
Docker
devops
database
tutorial
cli
분산시스템
www
블록체인
AWS
system admin
bigdata
보안
금융
msa
mysql
redis
Linux command
dns
javascript
CICD
VPC
FILESYSTEM
S3
NGINX
TCP/IP
ZOOKEEPER
NOSQL
IAC
CLOUD
TERRAFORM
logging
IT용어
Kafka
docker-compose
Dart
Gemini를 이용한 E-commerce 제품 설명서 생성
Recommanded
Free
YOUTUBE Lecture:
<% selectedImage[1] %>
yundream
2024-08-23
2024-08-23
321
![ecommerce](https://docs.google.com/drawings/d/1rtl9IRoL4oDuh9u3aJUzRPv-APWw1JCwPABXzyC-9yM/pub?w=960&h=720) # 소개 GEN AI를 이용하면 많은 유용한 것들을 만들 수 있다. GEN AI의 (2024년 가장 성공한)응용인 LLM은 특히 **구체적인 사례나 경험을 통해서 일반적인 법칙이나 원리를 도출하는** 귀납적 사고에 더 적합하다. LLM은 방대한 데이터셋을 학습하여 언어 패턴을 인식하고 이러한 패턴을 바탕으로 답변을 생성한다. 이러한 학습 패턴으로 수많은 사례와 경험을 통해 일반적인 패턴을 학습하는 귀납적 추론 능력을 가지게 됐다. LLM이 특히 문서요약을 잘 하는 이유이다. 여기에서는 Gemini의 멀티모달 기능을 이용해서 전자상거래의 제품 사진에 대한 설명(요약)을 만드는 법을 살펴보려 한다. # 전자상거래 프로세스 먼저 전자상거래 웹 사이트에 표시된 제품들의 제품 설명을 만드는 프로세스를 살펴보도록 하자. 청바지와 같은 의류 상품의 경우 모델을 예약해서 사진을 찍을 것이다. 이러한 모든 사진들은 대부분 스튜디오에서 촬영이 된다. 그런다음 **카피라이터**가 보정된 사진을 보고 웹사이트에 표시될 제품 설명을 글로 쓰게 된다. 매일 수백에서 수천개의 제품이 올라올 것이며 대부분 수작업이기 때문에 노동집약적이고 많은 시간이 걸리며 오류도 발생하기 쉽다. # Pain Point 전자상거래에서 매일 올라오는 수백, 수천개의 제품의 설명을 작성하는 건 힘든 작업이다. 이 작업을 도와줄 **제품 설명 생성기**를 만들어보자. # 조건 * 멀티모달 모델: 텍스트와 이미지를 함께 다루어야하기 때문에 멀티모달 모델이 필요하다. 여기에서는 **Gemini 1.5 Pro**를 사용한다. * Google Cloud 계정 * 제품 이미지가 담긴 [zip 압축파일을 다운로드](https://gw.geshan.com.np/assets/images.zip)한다. # Vertex AI를 이용한 생성형 AI 워크플로 아래 다이어그램은 생성형 AI 워크플로의 대략적인 개요를 보여준다. ![Vertex AI ](https://docs.google.com/drawings/d/1tylxAzv3i5BCYUZg7EVDyTHbkLg4qmVeIsB0goAkvOE/pub?w=960&h=720) **프롬프트** 생성형 AI의 대부분은 프롬프트로 시작한다. 프롬프트는 응답을 유도하기 위해 생성형 AI 모델로 전송되는 요청이다. 모델에 따라 프롬프트는 텍스트, 이미지, 영상, 오디오, 문서 등이 전달될 수 있다. 2개 이상의 형식이 함께 전달될 경우 멀티모달 모델을 사용해야 할 것이다. Gemini는 멀티모달을 지원한다. **파운데이션 모델** 프롬프트는 **파운데이션 모델**로 전달된다. 파운데이션 모델은 대규모로 훈련된 범용적으로 사용할 수 있는 모델로 다양한 데이터 소스로부터 학습하여 괌범위한 작업에 적용할 수 있는 능력을 갖추고 있으며, 다른 특정 작업에 맞게 추가로 미세조정 할 수 있다. Google Vetex AI는 아래의 파운데이션 모델을 제공한다. * Gemini API: 추론, 멀티턴 채팅, 코드 생성, 멀티모달 프롬프트 * Imagen API: 이미지 생성, 수정, 이미지 캡셔닝 * MedLM: 의료 질의 응답 및 요약(비공개 GA) **Grounding RAG** LLM은 훈련에 많은 시간이 걸리기 때문에 최신 데이터를 반영하지 못한다. 또한 각 기업과 개인의 정보역시 학습할 수가 없다. Grounding RAG를 이용해서 구글 검색, 데이터베이스 등에서 정보를 가져와서 응답할 수 있다. # Vertex AI Pricing | 모델 | 기능 | 유형 | 가격 <br>( 컨텍스트 기간 128,000개 미만) | 가격 <br>(컨텍스트 기간 128,000개 초과) | | ---------------- | ------ | ------------------------------------------ | ------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------- | | Gemini 1.5 Flash | 멀티모달 | 이미지 입력 <br>비디오 입력 <br>텍스트 입력 <br>오디오 입력 | $0.00002 / 이미지 <br>$0.00002 / 초 <br>$0.00001875 / 1,000자(영문 기준) <br>$0.000002 / 초 | $0.00004 / 이미지 <br>$0.00004 / 초 <br>$0.0000375 / 1,000자(영문 기준) <br>$0.000004 / 초 | | | 텍스트 출력 | $0.000075 <br>/ 1,000자(영문 기준) | $0.00015 / 1,000자(영문 기준) | | | Gemini 1.5 Pro도 | 멀티모달 | 이미지 입력 <br>비디오 입력 <br>텍스트 입력 <br>오디오 입력 | $0.001315 / 이미지 <br>$0.001315 / 초 <br>$0.00125 / 1,000자(영문 기준) <br>$0.000125 / 초 | $0.00263 / 이미지 <br>$0.00263 / 초 <br>$0.0025 / 1,000자(영문 기준) <br>$0.00025 / 초 | | | 텍스트 출력 | $0.00375 / 1,000자(영문 기준) | $0.0075 / 1,000자(영문 기준) | | | Gemini 1.0 Pro | 멀티모달 | 이미지 입력 <br>동영상 입력 <br>텍스트 입력 | $0.0025/이미지 <br>$0.002/초 <br>$0.000125/1,000자 | | | | 텍스트 출력 | $0.000375/1000자 | | | | Google 검색으로 그라운딩 | 텍스트 | 그라운딩 요청 | 요청 1,000회당 $35 (일일 최대 100만 개 요청) <br>더 필요한 경우 계정팀에 문의하세요. <br>요청 수 100만 회 이상 | | gemini.google.com 과 Vertex AI gemini와 헷갈릴 수 있는데, gemini는 일반 사용자를 대상으로 하는 모델이고 Vertex Gemini는 기업이자체적인 AI솔류션을 구축하기 위해서 사용하는 **기업용** 모델이다. # 프로젝트 만들기 https://console.cloud.google.com 으로 이동해서 로그인 한 다음에 e-comm-prod-description 프로젝트를 만들자. ![Create Project](https://docs.google.com/drawings/d/1A3lcsnfbfvhKY0EcjP_1-A6CDKJ34pxtK2IkvnP7XHg/pub?w=960&h=720) 검색 창에서 **Vertex AI** 서비스를 검색한다. ![Vertex AI 선택](https://docs.google.com/drawings/d/1kmx_MadOta0dhaDPPQnimKSe6nR4Brp_tC6IdVGSJYw/pub?w=960&h=720) Vertex AI에서 제공하는 API를 사용하기 위해서 **모든 권장 API 사용 설정**을 클릭한다. ![Vertex AI enable](https://docs.google.com/drawings/d/1ptCLQtD4IxvKWmbaZuTlyIxrOwQPO60s9REnVUgO6wI/pub?w=960&h=720) 권장 API가 활성화 되면 테스트할 준비가 완료된다. **멀티모달** 을 클릭한다. ![Vertex AI 멀티모달](https://docs.google.com/drawings/d/1Yoc8aVNrWVW9sYhdXoi9tHlhRuoVWl9NNe7n72Kgi44/pub?w=960&h=720) 아래와 같이 **프롬프트 설계(싱글턴)** 을 클릭한다. ![Vertex AI 프롬프트 설계](https://docs.google.com/drawings/d/11Q90PtAe6URVwBVM7ls59hJrT5YfVtAEXcAhdFtOf8U/pub?w=960&h=720) * 싱글턴: 각 요청과 응답이 독립적이다. 이 사용 사례는 각 이미지에 대한 설명이 독립적으로 이루어지기 때문에 싱글턴이 적당하다. * 멀티턴: 우리가 흔히 생각하는 그 채팅이다. 모델과 연속적으로 대화를 처리하는 방식이다. # Prompting gemini-1.5-pro-001 모델을 선택한다. 그 다음 아래 프롬프트를 붙여넣는다. 그리고 womens-jeans-phots 디렉토리에 있는 8개의 이미지를 모두 업로드한다. ``` As an expert e-commerce copywriter, analyze the uploaded image of women's jeans and write a product description for a low to mid-end fashion e-commerce website. Please include the details about the comfortable to wear jeans and do not include any details about the price. Make sure that the copy is written in an engaging and friendly tone. Please answer in Korean. ``` 이 프롬프트는 프롬프트의 모범사례를 따르고 있다. * LLM의 페르소나를 **e-commerce copywriter** 로 설정하고 있다. * e-commerce copywriter로써 어떤 작업을 해야 하는지 설명했다. 또한 low 에서 mid-end 를 고객 타겟으로 하라고 범위를 명확히 하고 있다. * 가격을 표시하지 말라고 가이드 하고 있다. * 글은 매력적이고 친근한 톤으로 작성하라고 지시하고 있다. ![Vertex AI 프롬프트](https://docs.google.com/drawings/d/1Y50p7ZY3zHZpyTO0EFyGj1FbcIOOpDS3NxeZdEJe_b8/pub?w=960&h=720) * 모델: gemini-1.5-pro-001 * 리전: 서울리전 * 강도: LLM의 **Temperature** 다. 선택한 모델은 0에서 2까지의 값을 가진다. 낮은 온도에서 모델은 확률이 가장 높은 단어를 선택한다. 이 경우 생성되는 텍스트는 결정적이고 예측가능하다. 즉 사실 기반으로 무미 건조하게 답한다. 온도가 높으면 더 창의적인 글을 쓴다. 테스트에는 1.0 을 사용했다. * 토큰: 토큰은 대략 단어의 갯수로 의미하면 된다. 이미지도 토큰으로 계산되는데 8장의 이미지를 포함한 전체 토큰은 2,139개임을 알 수 있다. 아래는 LLM의 응답 결과다. ![Vertex AI Response](https://docs.google.com/drawings/d/1SBrJDHTB0hXNZl7job2DdTQo7_Cut3k3eYnP6qZHzrk/pub?w=960&h=720) 읽기 쉽게 한글로 출력해달라고 했는데, 한글처리가 매끄럽지 못한 점이 아쉽다. 출력 언어를 영어로 하면 훨씬 매끄럽게 출력되는 걸 확인 할 수 있다. ![Vertex AI Gemini Prompt Save](https://docs.google.com/drawings/d/1I2mBxc4DodKUxMsNaMDSXBBq812ea1842EKeS__ym3Y/pub?w=960&h=720) ![Vertex AI Gemini Prompt Save](https://docs.google.com/drawings/d/101C4_rjYDPskAGGWycjkJPYP38X99RK7fbLuxXietAI/pub?w=960&h=720) 저장한 프롬프트는 "저장된 프롬프트"에서 로딩해서 사용할 수 있다. ![Vertex AI saved prompt](https://docs.google.com/drawings/d/1S3lPHVWLAe6qbgcTR4PBhJpVcKGyRvgBvitfrILSAUc/pub?w=960&h=720) # Advanced 옵션 Advanced를 클릭하면 몇 가지 세부설정 옵션이 나온다. ![Vertex AI Advaned Options](https://docs.google.com/drawings/d/1ohjXx7iYCH2QA019Qpy1ykls6RycU55I4LG6Dfbcf98/pub?w=960&h=720) * 최상위 K(top-k): 모델이 다음 단어를 선택하는 방식을 제어하는 매개변수다. LLM은 주어진 문맥에서 다음 나올 단어를 예측할 때, 각 단어에 대해 확률을 할당한다. Top-K를 이용해서 확률분포상에서 상위 K 개의 단어를 고려하고 나머지는 무시한다. 예를 들어 Topk-k를 5로 설정하면 다음 단어로 가장 높은 확률을 가진 5개의 단어 후보만 고려한다. K 값이 너무 작으면 예측 가능한 방식으로 생성된다. 즉 창의성이 떨어진다. K 값이 너무 크면 품질이 낮은 텍스트가 생성될 가능성이 높아진다. * 최상위 P(top-P): 확률이 높은 단어들 중에서 후보를 동적으로 선택한다. 상대적으로 낮은 확률의 단어도 포함될 수 있으며, 이로 인해 텍스트의 다양성을 높이면서도 품질을 유지할 수 있다. 예를 들어 top-p가 95이면 모델이 생성한 단어들 중 누적 확률이 90%를 넘는 단어의 집합을 선택하고 이 집합에서 무작위로 단어를 선택한다. # Prompt Engineering 출력의 품질을 올리는 여러 가지 방법이 있다. 가장 빠르게 수행 할 수 있는 것은 **Prompt Engineering** 이다. 프롬프트 엔지니어링을 이용해서 출력을 원하는 방향으로 유도 할 수 있으며, 출력양식도(불릿기호를 사용 하는 등) 설정 할 수 있다. 프롬프트 관련 내용은 [프롬프트 엔지니어링 101](https://www.joinc.co.kr/w/prompt-engineering-101)을 읽어보자. 프롬프트 작성 기술과는 별개로 "한국어"이기 때문에 발생하는 문제가 있다. 대부분의 LLM들은 한국어 능력이 떨어진다. 개인적으로 사용하면 거슬리는 정도이고 별 문제가 아닐 수 있다. 하지만 제품 목적으로 사용해야 한다면 이야기가 달라진다. 때문에 LLM Application 개발자는 여러가지 방법들을 이용해서 문제를 해결하거나 완화하기 위한 방법을 개발해야 한다.(물론 모델이 좋아지면서 계속해서 더 좋아질 것이 분명하긴 하지만 당장 적용해야 하니..) 한국어와 관련된 입력/출력 문제는 따로 다뤄볼 생각이다. # 참고 * [Gemini ecommerce product description generator](https://geshan.com.np/blog/2024/04/gemini-ecommerce-product-description-generator/) * [Build an E-commerce product description generator using Gemini - Workshop| Geshan |Build With AI Syd](https://youtu.be/Qz83Y0uBkNc?si=myWxUVClplMYibhG)
Recent Posts
GPT를 이용한 Reranker 테스트
5분만에 만들어보는 Streamlit 챗봇
Let's encrypt로 SSL 인증서 관리하기
Upscayl을 이용한 이미지 업스케일링
스테이블 디퓨전 설치 및 사용해보기
Elasticsearch 설치
AI / LLM에 대한 친절한 소개
SLA 다운타임 계산기
Docker로 GitLab 설치하기
Ubuntu Linux에 NVIDIA 드라이버 설치
Archive Posts
Tags
AI
LLM
Copyrights © -
Joinc
, All Rights Reserved.
Inherited From -
Yundream
Rebranded By -
Joonphil
Recent Posts
Archive Posts
Tags