https://txt.cohere.com/llm-use-cases-p2
대규모 언어 모델(Large Language Models, LLMs)에 익숙하지 않은 사람들에게는 언제 그리고 어디서 이러한 모델을 자연어 처리(NLP) 사용 사례에 사용할지 이해하는 것이 다소 어렵게 느껴질 수 있습니다. 이 블로그 시리즈에서는 Cohere의 LLM을 이용해 처리할 수 있는 7개의 넓은 범주의 사용 사례를 도식화함으로써 LLM 응용을 간소화합니다.
시리즈의 첫 번째 부분에서는 첫 네 가지 사용 사례 범주인 생성(Generate), 요약(Summarize), 재작성(Rewrite), 추출(Extract)에 대해 다루었습니다. 이 글에서는 나머지 세 가지인 검색(Search), 클러스터(Cluster), 분류(Classify)에 대해 다룰 것입니다. 마지막으로, 우리는 다른 유형들을 어떻게 조합할 수 있는지 살펴보며, 그들의 응용을 훨씬 더 흥미롭고 유용하게 만드는 방법에 대해 알아보겠습니다.
5. Search/Similarity
LLM에 대한 언급은 대부분 이전에 살펴본 네 가지 사용 사례에서 보았던 텍스트 생성 기능에 대한 논의를 촉발할 가능성이 높습니다. 그러나 덜 이야기되는, 그러나 동일하게 강력한 능력은 텍스트 표현입니다.
텍스트 생성이 새로운 텍스트를 생성하는 것에 대한 것이라면, 텍스트 표현은 기존 텍스트를 이해하는 것에 대한 것입니다. 오늘날 인터넷이 점점 더 일상적으로 쓰이면서 생성되는 비정형 텍스트 데이터의 양을 생각해보세요. 이 방대한 정보 양을 처리하는 것은 NLP 기반 자동화 없이는 사람들에게는 불가능할 것입니다.
텍스트 표현에 대한 이러한 사용 사례 범주 중 하나는 유사성 검색입니다. 주어진 텍스트 쿼리에 대해, 목표는 쿼리와 가장 유사한 문서를 찾는 것입니다.
이에 대한 가장 명백한 예시 사용 사례는 검색 엔진입니다. 사용자로서, 우리는 검색 결과가 우리의 쿼리와 관련이 매우 높은 링크와 문서를 반환하기를 기대합니다. 현대의 검색 엔진이 매우 잘 작동하는 이유는 키워드 일치만을 통한 것이 아니라, 의미적 유사성을 통해 쿼리를 적절한 결과와 매칭하는 능력 때문입니다.
간단히 말해, 그들은 의미, 맥락, 테마, 아이디어와 같은 추상적인 개념을 기반으로 매칭을 수행할 수 있습니다. 이러한 개념들은 완전히 다른 단어를 사용할 수도 있지만, 서로 매우 관련이 있습니다.
예를 들어, 사용자가 “공항의 지상 교통”이라는 검색 문자열을 입력한다고 가정해봅시다. 검색 엔진은 사용자가 명시적으로 언급하지 않아도 사용자가 택시, 렌터카, 기차, 또는 기타 유사한 서비스를 찾고 있다는 것을 알아야 합니다.
텍스트를 표현 모델에 입력하면, 모델은 더 많은 텍스트를 생성하는 대신, 입력 텍스트의 의미나 맥락을 대표하는 숫자 집합을 생성합니다. 이 숫자들을 “텍스트 임베딩“이라고 합니다. LLM에서는 이들이 일반적으로 매우 긴 숫자의 순서, 일반적으로 수천 개로 구성되며, 그 길이가 길수록 텍스트에 대한 정보가 더 많이 저장됩니다.
Cohere에서는 이러한 유형의 모델을 Embed 엔드포인트를 통해 접근할 수 있습니다. 이 파이썬 노트북은 의미론적 검색 응용 프로그램의 예를 제공하는데, 주어진 질문에 대해 검색 엔진이 텍스트 임베딩이 질문과 가장 유사한 자주 묻는 질문(FAQ)을 반환합니다.
그리고 아래 이미지에 표시된 것처럼, 모든 질문을 2차원 플롯에 표시하고, 플롯에서 두 점이 가까울수록 그들은 의미론적으로 더 유사합니다.
Two examples of similar questions about sharks and Boxing Day
이 개념은 더 넓은 범위의 사용 사례에 적용될 수 있습니다, 예를 들어:
- 조직 내에서 관련된 유용한 문서 검색: 많은 기업이나 조직에서는 원하는 정보를 찾기 위해 다양한 문서를 빠르게 검색할 수 있는 기능이 필요합니다. LLM을 이용하여 사용자의 검색 질의에 가장 잘 맞는 문서를 신속하게 찾아서 제공할 수 있습니다.
- 비슷한 제품 추천: 온라인 쇼핑 플랫폼에서 고객이 특정 제품을 보았을 때, 그 제품과 비슷한 다른 제품들을 추천해주는 기능이 필요합니다. 이 경우에도 LLM은 제품 설명 및 특성을 분석하고, 가장 유사한 제품들을 찾아내어 고객에게 추천할 수 있습니다.
- 전자상거래 제품 검색: 고객이 특정 키워드로 제품을 검색할 때, LLM은 그 키워드의 의미를 이해하고, 그에 가장 잘 맞는 제품을 검색 결과로 제공할 수 있습니다.
- 읽은 기록을 기반으로 한 다음 기사 추천: 뉴스나 블로그 플랫폼에서는 사용자의 이전 읽은 기록을 분석하여 그와 관련된 새로운 기사를 추천해줄 수 있습니다. 이 경우에도 LLM은 사용자가 이전에 읽은 기사의 주제를 파악하고, 그와 비슷한 주제의 기사를 추천할 수 있습니다.
- 사용 가능한 목록에서 챗봇 응답 선택: 챗봇이 사용자의 질문에 대해 가장 적절한 답변을 선택하는 데에도 LLM을 사용할 수 있습니다. 챗봇은 사용자의 질문의 의미를 파악하고, 사용 가능한 응답 목록 중에서 가장 적절한 응답을 선택할 수 있습니다.
6. Cluster
텍스트 임베딩을 활용하는 또 다른 사용 사례 카테고리는 클러스터링입니다. 여기서의 아이디어는 일련의 문서 그룹을 가져와서 어떻게 구성되고 서로 어떻게 관련되어 있는지를 이해하는 것입니다.
이전 사용 사례에서 우리는 문서 집합을 플롯에 시각화하여 각 문서가 서로 어떻게 유사하거나 다른지에 대한 감각을 얻었습니다. 클러스터링은 이러한 원칙을 사용하지만, 문서를 그룹으로 구성하는 추가 단계를 포함합니다. 이 작업은 예를 들어 k-평균 클러스터링 같은 클러스터링 알고리즘을 통해 수행될 수 있습니다. 이 경우 클러스터의 수를 지정하면 알고리즘이 각 조각과 연관된 적절한 클러스터를 반환합니다.
이 Python 노트북은 Embed 엔드포인트를 활용하여 “Ask HN” (Hacker News) 게시물 세 천 개를 어떻게 이해하는지에 대해 자세히 설명합니다. 먼저 각 게시물의 텍스트 임베딩이 생성됩니다. 그 다음에는 게시물을 주제나 토픽에 따라 작은 그룹으로 클러스터링하고, 각 그룹의 주제를 나타내는 키워드로 보완합니다.
마지막으로 이 게시물들은 아래의 이미지에 보이는 플롯에서 시각화되며, 한 가지 색상이 주제 클러스터를 나타냅니다. 여기서는 생활, 진로, 코딩, 스타트업, 컴퓨터 과학과 같은 몇 가지 주제가 나타나고 있음을 볼 수 있습니다.
Eight clusters from the top 3,000 Ask HN posts, with each set of keywords representing a topic
이 기술은 다양한 작업에 적용될 수 있습니다. 예를 들어:
- 고객의 피드백과 요청을 주제별로 정리: 상품, 서비스, 웹사이트 사용 경험 등 다양한 주제에 대한 고객 피드백이 매일 수천 건씩 넘어올 수 있습니다. 이런 피드백을 주제별로 분류하면, 어떤 문제가 가장 많은 불만을 일으키고 있는지, 어떤 기능이 사용자들에게 가장 인기가 있는지 등을 쉽게 파악할 수 있습니다.
- 제품 설명을 기반으로 제품을 카테고리로 분류: 제품 설명을 분석하여 제품을 카테고리별로 분류하는 것은 고객이 원하는 제품을 쉽게 찾을 수 있도록 돕는 데 중요한 역할을 합니다. 예를 들어, ‘포켓’이라는 단어가 포함된 제품을 모두 ‘의류’ 카테고리로 분류할 수 있습니다.
- ESG 보고서와 뉴스를 주제로 변환: ESG 보고서나 뉴스를 텍스트 임베딩을 사용해 주제별로 분류하면, 기업의 환경, 사회, 지배 구조에 대한 전략과 성과를 쉽게 이해하고 분석할 수 있습니다. 예를 들어, ‘지속 가능한’ 이라는 단어가 자주 나오는 보고서는 ‘환경 친화적인 전략’이라는 주제로 분류될 수 있습니다.
- 대량의 회사 문서를 정리: 회사에서는 매일 수많은 문서가 생성됩니다. 이런 문서들을 잘 정리해 두면 필요할 때 찾기가 쉬워지며, 중요한 정보를 놓치지 않게 됩니다. 예를 들어, ‘계약서’라는 단어가 포함된 문서는 ‘계약’이라는 폴더에 자동으로 분류될 수 있습니다.
- 설문 응답 분석에서 새로운 주제 발견: 설문조사 결과를 텍스트 임베딩을 사용해 분석하면, 응답자들이 공통적으로 어떤 주제에 대해 언급했는지를 알 수 있습니다. 이를 통해 기업은 고객들의 요구사항이나 문제점을 더욱 정확하게 파악할 수 있습니다.
7. Classify
텍스트 분류는 아마도 현재 가장 널리 적용되는 자연어 처리(NLP) 사용 사례일 것입니다. 이것을 클러스터링과 비슷하게 생각할 수 있는데, 약간의 차이가 있습니다.
클러스터링은 “비지도 학습” 알고리즘으로 불립니다. 이는 우리가 사전에 클러스터가 무엇인지 모르기 때문입니다 – 우리는 클러스터의 수를 지정하면(어떤 숫자든 선택할 수 있음), 알고리즘이 그 숫자에 따라 우리가 제공하는 문서를 그룹화합니다.
반면, 분류는 “지도 학습” 알고리즘이라고 부릅니다. 이번에는 사전에 그 클러스터, 더 정확하게 말하면 클래스가 무엇인지 이미 알고 있습니다.
예를 들어, 우리가 전자상거래 고객 문의 목록을 가지고 있고, 라우팅을 위해 각각을 세 가지 클래스 중 하나인 배송, 반품, 추적으로 분류하고 싶다고 가정해봅시다. 분류기를 작동시키기 위해서는, 먼저 충분한 예제를 보여주어 학습시켜야 합니다. 예를 들어 “당일 배송이 가능한가요?”와 같은 텍스트와 그 실제 클래스인 ‘배송’ 등이 있습니다.
LLM을 사용하면 이를 수행하는 두 가지 가능한 접근법이 있습니다. 첫 번째는 텍스트 임베딩을 통한 방법으로, 이 Python 노트북에서 설명하고 있습니다. 여기서는 텍스트 임베딩을 사용해 분류기를 학습시키는 예제를 보여줍니다. 먼저 각 텍스트의 임베딩을 생성합니다. 다음으로, 이 임베딩들을 분류기를 학습시키는 입력으로 사용합니다. 이러한 설정에 필요한 학습 예제의 수는 작업에 따라 다르지만, 일반적으로 수백 개에서 수천 개 사이가 될 수 있습니다.
다른 접근법은 “few-shot” 분류를 활용하는 것입니다. 이 접근법을 사용하면, 우리는 프롬프트 엔지니어링을 통해 모델에 분류 예제를 제공합니다. 이는 각 클래스당 최소 5개의 학습 예제를 사용해도 잘 작동하는 것으로 확인되었으며, 우리가 어떤 작업을 수행하는지에 따라 여전히 달라질 수 있습니다. 그러나 이 선택사항을 이용하면, 학습 예제가 많지 않을 때 – 너무나 흔한 문제 – 작동하는 분류기를 만들 수 있습니다.
다음은 몇 가지 예제를 이용한 접근법으로 전자상거래 문의 분류기를 구축하는 방법입니다. 아래에 있는 것은 Cohere Playground에서 Classify 엔드포인트를 활용하여 분류기를 구축하는 스크린샷입니다.
먼저, 텍스트-클래스 쌍의 예제를 포함하는 프롬프트를 준비합니다. 최소한 클래스당 다섯 가지 예제, 그리고 세 가지 클래스를 제공하면 총 15개의 예제를 제공하게 됩니다.
The list of examples used to build the classifier
텍스트 분류가 유용할 수 있는 몇 가지 예시는 다음과 같습니다:
- 온라인 플랫폼에서 유해한 댓글에 대한 콘텐츠 검토
- 챗봇에서의 의도 분류
- 소셜 미디어 활동에 대한 감정 분석
- 전자상거래 상품 분류
- 고객 지원 티켓을 적절한 팀에 할당하기
각각의 예를 더 구체적으로 살펴보면:
- 온라인 플랫폼에서 유해한 댓글에 대한 콘텐츠 검토: 텍스트 분류 알고리즘이 사용되어 유해한 댓글을 식별하고 차단할 수 있습니다. 이를 통해 온라인 커뮤니티를 안전하게 유지할 수 있습니다.
- 챗봇에서의 의도 분류: 사용자의 메시지가 주어지면, 분류 알고리즘이 사용자의 의도를 분류하여 적절한 챗봇 응답을 결정할 수 있습니다.
- 소셜 미디어 활동에 대한 감정 분석: 텍스트 분류는 사용자의 텍스트를 긍정적, 부정적 또는 중립적으로 분류하여 소셜 미디어 활동에 대한 통찰력을 제공할 수 있습니다.
- 전자상거래 상품 분류: 상품 설명이 주어지면, 분류 알고리즘이 상품을 적절한 카테고리로 분류할 수 있습니다.
- 고객 지원 티켓을 적절한 팀에 할당하기: 고객의 문의가 주어지면, 분류 알고리즘이 문의를 최적의 지원 팀으로 분류하여 티켓을 효과적으로 처리할 수 있습니다.
LLM의 일곱 가지 주요 사용 사례를 살펴본 후에, 이러한 다양한 기능들을 함께 사용하여 정말 흥미로운 애플리케이션을 만드는 방법에 대해 생각해봅시다. 몇 가지 예를 살펴보고 재미있는 하나부터 시작해봅시다.
당신이 특정한 목소리나 스타일을 가져야 하는 챗봇을 만들고 있다고 상상해봅시다. 우리의 경우, 그 챗봇은 해적입니다!
사람들이 문구를 입력하면 그 챗봇이 그 문구가 충분히 “해적스러운”지를 결정하는 게임을 만들어 봅시다. 그리고 충분히 해적스럽지 않다면, 그 챗봇은 심지어 그 문구를 수정하고 해적 말투로 바꿔버릴 것입니다!
이것은 사실 우리 팀이 직접 시도해 본 것입니다. 하지만 구현 세부 사항을 들어가지 않고, 이것을 작동시키기 위해서는 먼저 문구가 해적 말투인지 아닌지를 분류해야 했습니다. 만약 그렇지 않다면, 우리는 그 문구를 해적 말투로 바꾸는 과정을 거쳤습니다. 그리고 나서 우리는 생성된 문구와 원래의 문구 사이의 유사성을 비교했고, 그들이 충분히 유사할 경우에만 챗봇이 새로운 문구를 반환했습니다.
이것을 가능하게 하기 위해, 우리는 세 가지 사용 사례 카테고리를 활용했습니다: 분류(Classify), 재작성(Rewrite), 검색/유사성(Search/Similarity).
A summary flow of the pirate paraphraser
더 실용적인 예를 들면, 포럼에서 질문에 답하는 챗봇이 있을 수 있습니다. 여기에 기본적인 구현을 한 가지 가능성을 소개하겠습니다. 먼저, 사용자가 질문을 입력했는지 아니면 일반적인 코멘트나 채팅을 입력했는지를 판단하는 분류 단계를 구현합니다. 그리고 만약 그것이 질문이라면, 우리는 우리의 데이터베이스에서 질문과 가장 유사한 질문을 검색하여, 관련된 답변을 제공할 수 있도록 합니다.
A summary flow of the question answering chatbot
또 다른 예를 들어, 사용자가 현재 읽고 있는 기사와 가장 관련이 높은 다른 기사들의 목록을 제공하는 것이 목표인 기사 추천 시스템을 구축한다고 가정해봅시다. 이 기사는 기본 추천 시스템에서 유사성 검색, 분류, 추출을 구현하는 예를 보여줍니다.
A summary flow of the article recommender
더 나아가, 이러한 단계를 다른 API와 결합함으로써 시스템을 더욱 향상시킬 수 있습니다. 최근의 블로그 게시물에서는 Cohere의 API 기능과 텍스트-이미지 생성 API를 결합하여 완전히 플레이 가능한 Magic the Gathering 카드를 AI로 만드는 방법을 설명했습니다.
A summary flow of the Magic the Gathering card generator
결론
이러한 예제들을 통해 우리는 아직 이 분야의 일부만을 탐험해본 상태입니다. LLM을 사용하는 가능성은 우리의 상상력에 의해서만 제한됩니다. 이제는 더이상 큰 기업들만이 아니라, 어떤 개발자나 팀도 단순한 API 호출을 통해 사용할 수 있는 최첨단 AI 기술을 활용하여 가장 어려운 NLP 문제를 해결할 수 있는 흥미진진한 시기입니다.