여러분, Graph Database의 렌즈를 통해 마하바라타를 탐험하는 시간이 다시 돌아왔어요! 1부에서는 Neo4j를 사용해서 서사시 속 등장인물과 그 관계에 대한 포괄적인 그래프를 구축했죠.
아직 안 읽어보셨다면 1부를 먼저 읽어보시는 걸 추천드려요!
Mahabharata의 웹 공개: Neo4j 그래프 데이터베이스를 사용한 엄청난 관계 분석(1부)
이제 강력한 도구인 챗봇을 도입해서 이 복잡한 관계망에 생명을 불어넣을 시간이에요.
가장 큰 challenge는 뭘까요?
Neo4j는 관계를 저장하고 분석하기 위한 강력한 플랫폼을 제공하지만, 기존의 Cypher 쿼리는 기술 지식이 없는 사용자에게는 장벽이 될 수 있어요. 구문을 이해하고 데이터 모델을 파악하는 건 쉽지 않죠. 이는 접근성을 제한하고 마하바라타 관계망 탐색의 잠재력을 온전히 활용하지 못하게 만들어요.
예를 들어, Lord Kashyapa의 부모가 누구인지 알아내고 싶다면 쿼리는 다음과 같을 거예요.
MATCH (kashyapa:Person{name:'Kashyapa'})-[:SON_OF]->(m:Person) RETURN m
마하바라타와 대화하기: 자연어로 간극을 해소해요
바로 이럴 때 챗봇이 등장하는 거죠! 사용자가 간단하게 "Arjuna의 가장 가까운 동맹은 누구야?"라고 물어본다고 상상해 보세요. 아니면 "Draupadi는 크리슈나와 어떤 관계야?" 라거나 "Ghatotakach를 죽인 사람은 누구야?" 같은 질문도 가능하겠죠. 챗봇은 마치 중개인처럼, 이런 자연어 쿼리를 백그라운드에서 효율적인 Cypher 문으로 변환해 준답니다.
Python과 Gradio를 사용해서 챗봇을 구축해 봐요
여기서 저희의 Python 전문성이 빛을 발하죠! 사용자 친화적인 Python 웹 프레임워크인 Gradio의 기능을 활용해서 챗봇 인터페이스를 구성할 거예요. 이를 통해 사용자 쿼리를 이해하고, Gemini API를 사용해서 Cypher 문으로 변환하고, 1부에서 구축한 Neo4j 데이터베이스를 검색하고, 가능한 경우 응답을 반환하고, 사용자에게 보여주는 방식으로 시각적으로 매력적이고 직관적인 플랫폼을 만들 수 있어요.
자연어와 Cypher 사이의 간극을 더욱 좁히기 위해서, Google의 Gemini API in Google AI 스튜디오의 흥미로운 잠재력을 탐구해 봤어요. 이 Large Language Model은 사용자 쿼리를 () 정확한 Cypher 문으로 변환해서 챗봇이 Neo4j 그래프와 원활하게 상호 작용할 수 있게 해준답니다.
혹시 위 문단에서 제가 "거의"라는 단어를 쓴 걸 눈치채셨나요? 이유가 뭘까요?
Gemini는 강력한 도구이긴 하지만, 자연어를 정확한 Cypher 쿼리로 변환하는 게 쉽지 않다는 점을 인정해야 해요. 번역의 정확도는 다음과 같은 다양한 요인에 따라 달라질 수 있거든요.
- 사용자 쿼리의 복잡성: 명확한 키워드가 포함된 간단한 질문은 복잡하거나 모호한 질문보다 더 정확하게 번역될 가능성이 높아요.
- Gemini에 사용된 훈련 데이터: Gemini 번역의 효율성은 훈련된 데이터에 따라 결정돼요. 변환과 관련된 학습 데이터 구체화텍스트-암호화정확성을 향상시킬 수 있죠. 하지만 이건 정말 어려운 작업이에요.
- 개선의 필요성: "거의 정확한" 번역이라고 해도, 일부 사용자 쿼리는 Neo4j의 쿼리 언어와 완벽하게 일치하도록 약간의 조정이 필요할 수 있어요.
참고: 저는 이 프로젝트에 Gemini 1.0 Pro를 사용했어요.
Hugging Face Spaces에 배포된 사용자 친화적인 챗봇을 직접 사용해 보려면 를 클릭하세요. 복제하는 단계를 찾고 있다면 제 GitHub 저장소로 이동하시면 돼요. 더 나은 결과를 얻고 싶다면 포크해서 Pull Request를 제출해 주세요! 🙂