RAG(Retrieval-Augmented Generation)는 대규모 언어 모델의 출력을 최적화하여 응답을 생성하기 전에 학습 데이터 소스 외부의 신뢰할 수 있는 지식 베이스를 참조하도록 하는 프로세스입니다.


과거에 연구했던 GraphDB 샘플 데이터가, GPT 어시스트로 참조시키면 그것을 해석할수 있는지? 실험을 해보았습니다.

RAG에 이용되는 벡터를 간단하게 살펴보고 GraphDB 실험을 진행해보겠습니다.

벡터

OpenAI 임베디드가 주는 벡터값이  2D로 시각화 될수 있지 않을까? 시도된 프로젝트입니다.

  • 임베딩은 비정형(문장/음성)등 학습된 모델에 의해 벡터로 수치화합니다. -OpenAI 지원
  • 벡터 DB는 벡터기반 검색(근접도등)을 지원하며 사전관리가 필요로하는 방식과 비교 더 다양하고 유연하게 활용될수 있습니다.   -ELK 지원



벡터DB는 이러한 느낌이고~ GRAPH DB를 살펴보겠습니다.

GRAPH-DB

다음은 고객 상담기능에서 고객 발화의 단어를 Neo4J-Graph로 연결시켜본 연구프로젝트입니다.



동영상 링크 : 재생

  • Graph Db의 시각화된 탐색은 이런느낌입니다.

Graph Data - Assist

  • 연결형 Data를 추출하여 GPT의 Assist Data로 이용될수 있습니다.



프롬프트

다음은 neo4j graph 의 결과값입니다. 이 데이터를 기준으로 자유로운 분석을 시도해주세요

GPT

이 데이터는 Neo4j 그래프 데이터베이스의 결과값을 나타내며, 다양한 노드들과 그 속성들을 포함하고 있습니다. 각 노드는 고유한 식별자(identity), 레이블(labels), 속성(properties)을 가지며, 이를 통해 서로 다른 개체와 그 관계를 표현합니다. 주어진 데이터를 분석하여 몇 가지 관찰 사항과 잠재적 분석 방향을 제시하겠습니다.

관찰 사항

  1. 노드 유형: 데이터에는 'Service', 'User', 'Mall', 'Sentence', 'Word'와 같은 다양한 유형의 레이블이 존재합니다. 이는 서비스, 사용자, 쇼핑몰, 문장, 단어 등 다양한 개체를 나타냅니다.

  2. 속성 구조: 각 노드는 'UId'와 'Name'이라는 두 가지 주요 속성을 가집니다. 'UId'는 고유 식별자 역할을 하며, 'Name'은 사람이 읽을 수 있는 이름이나 식별자 역할을 합니다.

  3. 데이터 다양성: 'Word' 레이블을 가진 노드는 다양한 단어를 포함하며, 이는 특정 문맥 또는 대화에서 사용될 수 있는 단어들을 나타낼 수 있습니다. 예를 들어, '아이', '원피스', '걱정', '나이키', '운동' 등 다양한 주제와 관련이 있을 수 있습니다.

  4. 문장과 단어의 관계: 'Sentence' 레이블을 가진 노드와 'Word' 레이블을 가진 노드 사이에는 특정 문장을 구성하는 단어들이나, 단어와 관련된 문장들을 나타내는 관계가 있을 가능성이 높습니다.

잠재적 분석 방향

  1. 네트워크 분석: 노드 간의 관계를 통해 사용자, 서비스, 쇼핑몰, 단어, 문장 간의 연결성 및 중요도를 분석할 수 있습니다. 예를 들어, 특정 서비스나 쇼핑몰이 어떤 단어나 문장과 더 자주 연관되는지, 또는 어떤 사용자가 특정 주제에 대해 더 많이 언급하는지 등을 알아볼 수 있습니다.

  2. 텍스트 분석: 'Sentence'와 'Word' 레이블을 가진 노드를 중심으로 텍스트 데이터의 분석을 시도할 수 있습니다. 단어의 빈도수 분석, 연관성 분석, 감정 분석 등을 통해 특정 주제나 트렌드에 대한 인사이트를 얻을 수 있습니다.

  3. 사용자 행동 분석: 'User' 레이블을 가진 노드와 이들이 상호작용하는 서비스, 쇼핑몰, 문장 등의 노드를 분석하여 사용자 행동 패턴을 파악할 수 있습니다. 이를 통해 사용자 선호도, 관심사, 구매 경향 등을 분석할 수 있습니다.

  • Graph DB의 설명이 따로 필요없이 GPT가 스스로 설명하고 해석해 냅니다.
  • 필드 네이밍을 통해 개발자의 의도를 정확하게 추측해 냅니다. - GPT때문이라도 작명이 더욱더 중요해질것 같습니다.



프롬프트

원피스를 언급한 연관 단어를 요약하고 어떠한 관계가 있는지 분석해죠

GPT

"원피스"를 언급한 연관 단어를 분석하고 그 관계를 파악하기 위해서는, 주어진 데이터 내에서 "원피스"와 관련된 단어들을 식별하고, 이들 단어 사이의 관계를 추론해야 합니다. 그러나 제공된 데이터에는 직접적인 관계 정보가 포함되어 있지 않으므로, 우리는 "원피스"와 가능한 연관성을 가질 수 있는 단어들을 추론하고, 이러한 단어들이 어떻게 관련될 수 있는지를 분석할 수 있는 몇 가지 가설을 세울 수 있습니다.

가능한 연관 단어 및 그 관계에 대한 가설:

  1. "아이": "원피스"는 의류 아이템을 의미할 수 있으며, "아이"는 대상 사용자 그룹을 의미할 수 있습니다. 이 경우, "아이용 원피스" 또는 "어린이 의류"와 같은 관계를 형성할 수 있습니다.

  2. "나이키": "나이키"는 주로 스포츠웨어와 운동화를 제조하는 브랜드입니다. 비록 전통적으로 "원피스"와 직접적인 관련이 없어 보일 수 있지만, 스포츠 또는 캐주얼 원피스 제품 라인을 탐색하는 경우 연관될 수 있습니다.

  3. "추천": 사용자나 리뷰에서 "원피스" 아이템에 대한 "추천"을 언급하는 경우가 있을 수 있습니다. 이는 특정 "원피스" 제품이나 브랜드에 대한 긍정적인 평가를 나타낼 수 있습니다.

  4. "물건", "상품": 이 단어들은 "원피스"와 직접적으로 연결될 수 있습니다. "물건"이나 "상품"은 "원피스"를 포함하는 쇼핑 목록이나 제품 카탈로그에서 언급될 수 있습니다.

  5. "사이즈", "상세": "원피스" 구매 과정에서 중요한 고려 사항입니다. 구매자가 온라인 쇼핑몰에서 "원피스"를 살펴볼 때, 제품의 "사이즈"나 "상세" 설명을 찾을 가능성이 높습니다.

  6. "배송비", "환불": 이러한 용어는 "원피스" 구매와 관련된 전반적인 쇼핑 경험과 관련이 있습니다. 온라인 구매에서 "배송비"는 중요한 고려사항이며, "환불" 정책은 구매 결정에 영향을 미칠 수 있습니다.

이러한 가설은 "원피스"와 관련된 단어들 사이의 잠재적 관계를 탐색하는 데 도움이 될 수 있습니다. 실제 연결성과 관계의 맥락을 파악하기 위해서는 추가적인 데이터 분석이 필요합니다. 예를 들어, 각 단어 사이의 관계를 명시적으로 나타내는 엣지 데이터가 있거나, 특정 문맥에서 이 단어들이 어떻게 사용되는지를 보여주는 텍스트 데이터가 필요할 수 있습니다.

  • 나이키와 원피스가 무슨 연관관계지?
    • 상담을 하는 어머니의 마음 : 아이에게 이쁜 원피스를 입히고 싶은데~ 구두를 신기면 아파하고 발건강이 걱정됩니다. 원피스와 어울리는 나이키 신발을 추천해주세요 ( 실제 상담 사례입니다.)


프롬프트

환불을 언급하는 고객이 함께 이야기하는 단어들도 요약하고 분석해죠

GPT

"환불"을 언급하는 고객이 함께 이야기하는 단어들을 분석하고 요약하기 위해서, 우리는 "환불"과 관련된 주제나 맥락에서 자주 등장하는 단어들을 살펴볼 필요가 있습니다. 주어진 데이터셋에서 "환불"과 직접적으로 관련된 다른 단어들을 명시적으로 연결하는 정보는 없으므로, 고객 서비스나 쇼핑 경험과 관련하여 "환불" 주변에서 자주 등장할 수 있는 단어들에 대한 가설을 세워 보겠습니다.

가능한 연관 단어 및 그 관계

  1. "물건", "상품": 고객이 "환불"을 언급할 때, 주로 구매한 "물건"이나 "상품"에 만족하지 못했거나 문제가 있었음을 나타낼 수 있습니다. 따라서, "물건" 또는 "상품"은 "환불"과 밀접하게 관련되어 있을 가능성이 높습니다.

  2. "배송비": "환불"과 함께 "배송비"가 언급되는 경우, 고객이 환불 과정에서 배송비의 환불 여부에 대해 우려하거나 문의하는 상황을 나타낼 수 있습니다.

  3. "사이즈", "상세": 이러한 단어는 제품이 설명과 다르거나, 예상한 사이즈와 맞지 않아 "환불"을 요청하는 상황과 관련될 수 있습니다.

  4. "추천": "추천"과 "환불"이 함께 언급되는 경우는 두 가지 상황을 나타낼 수 있습니다. 하나는 고객이 제품을 추천받았지만 만족하지 못해 환불을 요청하는 경우이며, 다른 하나는 환불 과정이 원활하여 다른 고객들에게 해당 서비스를 추천하는 경우입니다.

  5. "주문": 고객이 잘못된 "주문"을 했거나 주문 변경을 원할 때 "환불"을 언급할 수 있습니다. 이는 주문 오류나 변경과 관련된 환불 요청을 나타낼 수 있습니다.

  6. "쓰레기": 이 단어가 "환불"과 함께 언급되는 경우, 고객이 제품의 품질에 대해 매우 불만족하여 강한 부정적인 감정을 표현하는 상황을 나타낼 수 있습니다.

분석 요약

"환불"을 언급하는 고객들이 함께 이야기하는 단어들은 주로 고객 불만족, 제품 문제, 서비스에 대한 우려와 관련이 있을 가능성이 높습니다. 이러한 단어들은 제품의 품질, 주문 처리 오류, 제품 정보의 정확성, 고객 서비스의 효율성과 같은 주제들을 반영할 수 있습니다. 따라서, 이러한 단어들의 사용 빈도와 맥락을 분석함으로써, 기업은 고객 서비스 개선, 제품 품질 관리, 효율적인 환불 정책 구현과 같은 분야에서 중요한 인사이트를 얻을 수 있습니다.

프롬프트

Word 노드중 많이 언급된 순으로 top 10을 요약하고 ~ 많이 연결된 top 10도 함께 요약해죠

GPT

주어진 데이터는 Neo4j 그래프 데이터베이스에서 추출한 것으로 보이지만, 단일 데이터 포인트에 대한 빈도나 각 노드 간 연결 정보(예: 어떤 노드가 다른 노드와 얼마나 자주 연결되었는지)는 제공되지 않았습니다. 각 "Word" 노드가 언급된 횟수나 노드 간 연결 횟수를 직접 계산하려면, 그래프의 엣지(관계) 데이터가 필요합니다. 그럼에도 불구하고, 제공된 데이터를 바탕으로 할 수 있는 분석은 다음과 같습니다.

Word 노드 언급 순위

주어진 데이터셋에서 모든 "Word" 레이블을 가진 노드는 단 한 번씩만 언급되어 있으므로, "가장 많이 언급된" 순서로 랭킹을 매기는 것은 불가능합니다. 대신, "Word" 레이블을 가진 노드들의 리스트를 제공할 수 있습니다. 이는 상위 10개 노드가 될 것입니다(데이터셋에 따라 달라질 수 있음):

  1. 아이
  2. 원피스
  3. 걱정
  4. 나이키
  5. 운동
  6. 추천
  7. 부탁
  8. 주문
  9. 물건
  10. 사이즈

많이 연결된 노드 분석

실제로 노드 간의 연결 정보를 분석하려면, 각 노드가 다른 노드와 어떻게 연결되었는지에 대한 상세한 관계 데이터가 필요합니다. 예를 들어, 사용자 노드가 특정 "Word" 노드와 얼마나 자주 연결되었는지, 혹은 특정 "Service" 노드가 "Word" 노드와 어떤 관계를 가지고 있는지 등의 정보가 포함되어야 합니다. 이 정보 없이는 "가장 많이 연결된" 노드를 식별하는 것이 불가능합니다.

분석 결론

이 데이터를 통해 얻을 수 있는 인사이트는 제한적입니다. 더 깊이 있는 분석을 위해서는 각 "Word" 노드의 언급 횟수를 집계할 수 있게 해주는 추가 데이터가 필요하며, 노드 간의 연결성을 파악하기 위해서는 노드들 사이의 관계(엣지) 데이터가 필요합니다. 이를 통해, 예를 들어, 특정 단어가 특정 사용자에 의해 언급되었는지, 혹은 특정 서비스와 관련된 단어들이 무엇인지 등을 분석할 수 있습니다.

  • GPT를 이용하다보니 데이터모델이 빈약한점도 찾게됩니다. - Graph모델을 강화할때 도움될수 있음



GPT에게 Edge(관계) 를 조금더 구체적으로 설명해 Assist에 사용할 데이터의 아이디어를 풍부하게 할수 있습니다.

프롬프트

고객상담 Relation 은 Mall 과 User 에만 연결되어 있고, User는 Sentence와 문장 Relation이 그리고 Sentence 는 Word와 단어 Relation이 되어 있습니다.

고객상담이 일어난 단어를 Rank화 해줘~

MATCH (u:User)-[:`고객상담`]->(m:Mall), (u)-[:`문장`]->(s:Sentence)-[:`단어`]->(w:Word)
WITH w.Name AS Word, COUNT(s) AS Frequency
ORDER BY Frequency DESC
RETURN Word, Frequency

결과

NOWordFrequency

1

"문의"278

2

"배송문의"270

3

"배송"270

4

"처음"112

5

"연결"28

6

"상담원"28



단순 문장랭킹은 GraphDB가 아니여도 가능한 영역으로  GraphDB의 특징을 살려 고객상담 Edge(연결)가 많이 발생한 문장중 언급된 단어의 랭킹을 고객사별로 요약해줘를 빠르게 수행 가능합니다.

MATCH (u:User)-[r:`고객상담`]->(m:Mall), (u)-[:`문장`]->(s:Sentence)-[:`단어`]->(w:Word)
WITH m.Name AS Mall,w.Name AS Word, COUNT(r) AS RelationsCount
ORDER BY RelationsCount DESC
LIMIT 300
RETURN Mall, Word, RelationsCount
  • RDB의 쿼리문과 많이 다르지만~  비숫한 느낌으로 쿼리를 작성할수 있습니다.


결과값

NoMallWordRelationsCount

1

"angdou7012""문의"248

2

"angdou7012""배송문의"240

3

"angdou7012""배송"240

4

"angdou7012""처음"112

5

"urbanlady2714""배송문의"30

6

"urbanlady2714""배송"30



Graph DB가 준 Assist Data를 이용해 GPT에게 요약을 요청해보겠습니다.

프롬프트

다음 데이터는 상담에서 사용된 고객사(mall)별 고객발화 단어 랭킹입니다. 고객사별로 상담과 관련된 특이사항을 요약해죠

이 데이터를 분석하여 각 고객사별 상담과 관련된 특이사항을 요약해보면 다음과 같습니다:

1. angdou7012
주요 관심사: 상담 요청들 중에서 "문의", "배송문의", 그리고 "배송"이 가장 많은 비중을 차지하고 있으며, 이들의 빈도수가 모두 240회 이상으로 매우 높습니다. 특히 "문의"와 관련된 상담이 가장 많았습니다.
처음 이용 고객: "처음"이라는 단어의 사용 빈도가 112회로 상당히 높으며, 이는 많은 고객이 처음으로 서비스를 이용하거나 상담을 요청하는 것으로 해석할 수 있습니다.
상담원 연결 요청: "연결"과 "상담원"이라는 단어가 각각 28회 등장하여, 고객들이 상담원과의 직접적인 상담을 선호하는 경향이 있음을 나타냅니다.
고객 만족도: "감사"라는 단어의 사용 빈도가 12회로, 상담 서비스에 대한 고객의 긍정적인 반응을 나타내는 지표가 될 수 있습니다.
2. urbanlady2714
배송 관련 문의: "문의", "배송문의", "배송"과 관련된 상담이 모두 동일하게 30회로, 이 고객사의 상담 요청도 주로 배송과 관련된 문의임을 알 수 있습니다.
3. test
다양한 주제의 상담 요청: "반품", "무통장입금", "페이코", "신용카드", "신청", "회수", "택배회수", "택배", "CJ대한통운" 등 다양한 주제의 상담 요청이 있으며, 모두 2회씩 등장합니다. 이는 다양한 주제에 대한 상담 요청이 있었음을 나타냅니다.
4. lunatest
개별적인 요청: "부탁", "추천", "운동", "나이키", "걱정", "원피스", "아이" 등 다양한 단어가 1회씩 등장합니다. 이는 매우 개별적이고 다양한 요구가 있었다는 것을 의미합니다.
5. hotpong
비판적인 요청과 다양한 상품 관련 문의: "쓰레기"라는 단어가 1회 등장하는 것을 포함하여, "원피스", "환불", "배송비", "상세", "상품", "사이즈", "물건", "주문" 등 다양한 상품 관련 문의가 있었습니다.
6. tmall
거의 동일한 문의 유형을 보이는 test와 유사: "반품", "무통장입금", "페이코", "신용카드", "신청", "회수", "택배회수", "택배", "CJ대한통운" 등의 단어가 모두 1회씩 등장하며, 이는 test 고객사와 매우 유사한 상담 요청 유형을 보입니다.
  • 샘플데이터는 실제 고객사가아닌~ 테스트 데이터입니다.


벡터의 경우 3D 프로그래밍에서도 변환에서 중요하게 이용되는 요소로 이과에 가까운것같으며

Graph의 경우 노드와 엣지에 단어또는 활동명을 이용해  네트워크에서 인사이트를 찾아야하기 때문에 다소 문과적인 접근법에 가까운것같습니다.


GPT가 비교적 적은 데이터및 빈약한 모델임에도 불구 GraphDB 의 데이터를 잘 해석 하는것으로 파악되었으며

GPT가 설명하는 벡터데이터와  GraphDB의 장단점은 다음과같으며

벡터 데이터

장점:

  • 고차원 분석 가능: 벡터 데이터는 수치화된 정보를 포함하며, 이를 기반으로 복잡한 계산과 분석이 가능합니다. OpenAI Assist를 통해 다양한 수치 분석, 예측 모델링, 데이터 시각화 등을 수행할 수 있습니다.
  • 빠른 처리 속도: 벡터 기반의 데이터는 일반적으로 고정된 구조를 가지고 있어, 병렬 처리와 같은 최적화 기법을 적용하기 용이합니다. 이로 인해 대량의 데이터 처리 시 빠른 속도를 기대할 수 있습니다.
  • 범용성: 수치 데이터는 다양한 분야와 문제에 적용할 수 있는 범용성을 가집니다. OpenAI Assist를 사용하면 수학, 통계, 머신러닝 등 다양한 영역에서 벡터 데이터를 활용할 수 있습니다.

단점:

  • 상호작용 분석 제한: 단순 벡터 데이터만으로는 개체 간의 복잡한 상호작용이나 관계를 표현하는 데 한계가 있습니다. 이러한 정보는 특히 사회 네트워크 분석, 추천 시스템 등에서 중요할 수 있습니다.
  • 해석의 어려움: 고차원의 벡터 데이터는 인간이 직관적으로 이해하고 해석하기 어려울 수 있습니다. 결과적으로 분석 결과의 해석과 시각화에 추가적인 노력이 필요할 수 있습니다.

GraphDB 데이터

장점:

  • 복잡한 관계 표현: GraphDB는 노드(Node)와 엣지(Edge)를 사용하여 복잡한 관계와 네트워크를 효과적으로 모델링합니다. 이는 소셜 네트워크, 지식 그래프, 추천 시스템 등 관계 중심의 데이터 분석에 매우 유용합니다.
  • 유연한 데이터 구조: GraphDB는 스키마가 유연하며, 다양한 형태의 데이터를 쉽게 통합하고 관리할 수 있습니다. 이로 인해 데이터 구조의 변경이나 확장이 자주 발생하는 환경에서 강점을 보입니다.
  • 질의 성능: 복잡한 관계를 기반으로 한 질의에서 GraphDB는 높은 성능을 제공합니다. 특히 경로 찾기, 깊이 우선 탐색(DFS), 너비 우선 탐색(BFS) 등의 연산에서 빠른 처리 속도를 보입니다.

단점:

  • 처리 속도: 대량의 데이터와 복잡한 관계를 처리할 때, 그래프 데이터베이스의 성능은 사용하는 질의나 데이터의 구조에 따라 크게 달라질 수 있습니다. 특히 대규모 그래프에서는 성능 최적화가 중요한 고려 사항입니다.
  • 학습 곡선: GraphDB는 관계형 데이터베이스와 비교했을 때 상대적으로 새로운 개념이며, 사용자가 그래프 모델링과 질의 언어를 학습해야 하는 학습 곡선이 존재합니다.

OpenAI Assist를 통해 벡터 데이터와 GraphDB 데이터를 다룰 때, 이러한 장단점을 고려하여 최적의 도구와 접근 방법을 선택하는 것이 중요합니다. 데이터의 특성과 분석 목적에 따라 적합한 데이터 유형을 선택하고, OpenAI Assist의 기능을 최대한 활용하여 효과적인 분석을 수행할 수 있습니다.


RAG영역에서 벡터데이터/Graph데이터가 상호보완해  발전해나가지 않을까? 란 고민에서 시작된 연구활동으로  

시각화는 Blazor로 , Graph이벤트처리는  액터모델을 이용해 시도되었습니다.

  • RAG를 연구하기위해 Elk/Neo4j등 다양한 Nosql진영의 데이터 소스를 GPT 에게 던져 OPEN AI LLM을 혹사시키는 프로젝트로 이 연구활동의 구현코드입니다.
  • 고차원의 벡터 데이터는 수학적 모델을 요구하며 인간이 직관적으로 이해하기어렵우며 복잡한 상호 관계를 파악하기가 어렵기때문에  Graph DB로 상호보완하는 RAG 방법을 연구하고 있습니다.


추가 참고 기술링크 :







  • No labels
Write a comment…