11월 17일 목요일 1500 GMT/11:00 ET(ET)에 Neo4j의 NODES 2022 라이브 스트리밍 웹캐스트에서 저자 Tomaž Bratanič와 함께 진행된 "Node to Knowledge Graph Embeddings"를 참조하세요.24시간 진행되는 전세계 라이브 이벤트 등록은 무료입니다.

11월 17일 목요일 1500 GMT/11:00 ET(ET)에 Neo4j의 NODES 2022 라이브 스트리밍 웹캐스트에서 저자 Tomaž Bratanič와 함께 진행된 "Node to Knowledge Graph Embeddings"를 참조하세요.24시간 진행되는 전세계 라이브 이벤트 등록은 무료입니다.

오랫동안 데이터 분석가로 일해온 Tomaž Bratanič는 이렇게 설명했어요. "Neo4j가 특별한 이유는 그래프를 구성하고 Neo4j 데이터베이스에서 변환하는 게 정말 쉽다는 점이에요. 일단 그래프만 있으면, 단 두 줄의 Cypher 코드로 임베딩을 만들 수 있다니까요!"
Neo4j의 Niels de Jong과 Adam Cowley가 직장 내 Slack 메시지를 구성하는 데이터 요소 간의 관계를 표현한 모습이에요.
많은 Neo4j 사용자들이 알고 있듯이, Knowledge Graph는 개념과 그 관계를 하나의 시각적인 형태로 표현한 것이죠. 일반적인 그래프는 데이터베이스 스키마의 단순한 관계로는 알 수 없는 방식으로 데이터 세트 요소 간의 관계를 나타낼 수 있어요. Knowledge Graph는 여기서 한 단계 더 나아가 요소들이 모여 일종의 컨텍스트를 형성하도록 관계를 보여준답니다. 이 컨텍스트의 가치는 관계 자체의 가치를 뛰어넘죠. 종합적으로 정보를 *이해*하게 만드는 게 Knowledge Graph가 전달하는 정보에 관한 핵심이에요. 그래서 Knowledge Graph를 사용하면 사람들 사이에 공유될 때 지식을 만들어내는 정보 유형을 나타낼 수 있는 거죠.
그래프 임베딩은 현대 데이터베이스 이전의 개념이에요. 고정밀 값의 간단한 스택, 즉 *벡터*를 통해 복잡한 그래프에 담긴 많은 정보를 효과적으로 인코딩하는 능력을 말하죠.
Knowledge Graph 임베딩은 이 두 가지 개념을 결합한 거예요. 이런 방식으로 여러 집단적 맥락을 포괄하는 매우 복잡한 관계를 좌표계를 사용해서 기하학적으로 표현할 수 있고, 저장 공간, 메모리, 그리고 무엇보다 중요한 시간을 훨씬 절약할 수 있답니다.
Bratanič는 "가장 중요한 부분은 학습 부분이에요."라고 설명했어요. "다른 사람들은 모두 수동적인 기능 엔지니어링을 피하고 싶어하죠." Machine Learning 시스템은 다양한 종류의 데이터 간의 패턴을 인식하도록 훈련되어 있어요. Knowledge Graph의 경우, *사리*의 존재를 인식하는 거죠. 지도 학습 시스템에서는 시간보다 돈으로 정의되는 경우가 더 많은 육체 노동 수준이 필요하다고 그는 말했어요.
"대신 사람들은 이러한 벡터를 자동으로, 마법처럼 구성하는 알고리즘을 설계했어요." 이러한 알고리즘은 연결 값을 연결("2-홉 이웃")으로 인코딩하고, 지도 학습 관리자가 수동으로 해야 하는 많은 힘든 작업들을 처리해 준다고 해요. 예를 들어, *클러스터링 계수* 같은 요소들을 설명할지 여부도 알아서 처리해주죠. 클러스터링 계수는 해당 영역의 "삼중"(3 Node 연결 또는 삼각형) 수에 따라 결정되는 특정 영역 그래프의 상대적인 밀도를 측정한 값이랍니다.
Bratanič는 "많은 입력 없이 '마법을 부려줘!'라고 말하는 것과 같아요."라고 덧붙였어요.

Knowledge Graph를 포함한 그래프 임베딩의 결과는 거대한 인접 테이블을 대신하는 정보의 인코딩으로 볼 수 있어요. 일반적으로 메모리나 저장소에 있는 이러한 테이블의 크기는 해당 테이블 요소 수를 제곱한 것과 같아요. 예를 들어, 왼쪽에 보이는 34 Node 행렬에는 1,156개의 요소가 있죠. 따라서 그래프 임베딩과 같은 기술 없이는 백만 개의 Node 매트릭스를 탐색하는 게 사실상 불가능할 거라고 상상할 수 있을 거예요.
하지만 먼저 기능적으로 탐색할 수 없는 테이블을 하나 이상 생성하지 않고 시스템이 임베딩 공간에 대한 벡터 값을 어떻게 얻을 수 있을까요?
"음, 때로는 그렇지 않을 때도 있어요."라고 Bratanič은 인정했어요. "기본적으로 인접 행렬은 네트워크를 표현하는 방식이기 때문에 만들어야 할 때도 있죠. 네트워크를 표현하는 방법은 여러 가지가 있는데, 데이터베이스에 그래프만 있다면 인접 행렬을 가질 수 있어요. 그런 식으로 저장되지는 않지만, 인접 행렬로 노출될 수 있는 거죠."
Neo4j와 다른 곳에서 그래프 인접 행렬로부터 그래프 임베딩 벡터를 생성하기 위해 가장 많이 사용하는 알고리즘 중 하나는 Node2vec이에요. 이건 2013년에 만들어졌고, 아이러니하게도 Word2vec는 오늘날 사람들이 그래프 임베딩의 파생물, 즉 Knowledge Graph라고 생각하는 목적을 위해 Google 연구원에 의해 만들어졌죠. 쉽게 상상할 수 있듯이 Google은 학습 감독 과정에 시간을 들이지 않고도 스캔한 텍스트에 있는 단어 간의 관계를 추론할 수 있어야 해요. Google은 이미 Neural Network에 적용된 표준화된 기술을 사용할 수도 있었지만 PageRank 알고리즘에 적용할 수 있을 만큼 유용한 값을 얻기 위해 항상 따라잡기 위해 노력할 거예요.
Word2vec에 대한 소개 문서 [PDF]에서 Google 팀은 이렇게 썼어요.
우리는 널리 사용되는 Neural Network 모델(피드포워드 및 순환 모두)과 비교했을 때 매우 간단한 모델 아키텍처를 사용하여 고품질 단어 벡터를 훈련하는 것이 가능하다는 것을 확인했어요. 계산 복잡성이 훨씬 낮기 때문에 훨씬 더 큰 데이터 세트에서 매우 정확한 고차원 단어 벡터를 계산하는 것이 가능하죠.
단어 및 단어 의미 데이터 세트의 수가 선형적으로 증가함에 따라 Google 팀의 시험에서는 의미론적 관계와 구문론적 관계 모두에 대한 모델 학습의 난이도가 약간만 증가했어요. 이는 단어 세트가 하나를 가리는 경우에도 계속되었죠. 대조적으로, Neural Network 모델은 주로 인접 행렬 순회 문제로 인해 단어 수가 증가함에 따라 훈련하기가 기하급수적으로 더 어려워졌어요.
Bratanič는 이렇게 말했어요. "텍스트를 간단한 선 그래프로 생각할 수 있어요. 단어 뒤에 다른 단어가 있고 그 뒤에 다른 단어가 오는 훌륭하고 간단한 선 그래프죠. Word2vec은 선 그래프에 임베딩을 생성하는 방법을 알고 있어요. 6년 전에 스탠포드 대학의 일부 사람들이 모든 유형의 네트워크에서 사용할 수 있는 Word2vec의 변형인 Node2vec을 생각해 냈어요. []는 모든 유형의 모양과 크기를 가질 수 있죠.”
Word2vec과 Node2vec 파생물 모두에서 훈련에는 네트워크로 처리되는 그래프 모델이 포함돼요. "랜덤 워크" 프로세스는 해당 네트워크를 통해 가능한 탐색 가능한 경로를 기록하죠.
“Node에서 시작한다고 가정해 볼게요.A, 네트워크를 통해 6개의 홉(순회)을 수행해요.”라고 Bratanič는 계속 말했어요. “이제 6개의 Node로 구성된 시퀀스가 있어요. 이건 6개의 Node로 구성된 시퀀스가 아니라 문장처럼 6개의 단어로 구성된 시퀀스라고 말할 수 있죠. 기본적으로 네트워크에서 시작해서 네트워크를 통해 무작위로 몇 차례 이동해요. 이러한 랜덤 워크는 소위 '문장'을 생성하며 각 문장은 랜덤 워크의 일련의 Node로 구성돼요. 이를 원래 Word2vec 알고리즘에 입력하기만 하면 Node 임베딩을 얻을 수 있어요.”
데이터 엔지니어는 이러한 프로세스의 적용 가능성이 순전히 의미론적 기능으로 제한되는 것처럼 보이지만 특정 유형의 관계를 찾아 격리하는 것이 목표인 모든 종류의 네트워크에 동일한 프로세스를 적용할 수 있다고 설명했어요. 예를 들어 검색어와 검색된 텍스트 사이의 유사성을 찾는 데 사용되는 동일한 알고리즘을 전력망에 적용하면 스트레스를 받는 전력선과 잠재적인 오류 지점을 찾을 수 있죠.
“여기서 다운스트림 Machine Learning 모델이 작동하게 돼요.”라고 그는 계속 말했어요. "이러한 Vector Embedding을 모델에 적용해서 원하는 것을 예측할 수 있어요. 식별뿐 아니라 인코딩도 가능하죠. 정말 강력해요."

에이치시스템즈의 LogTree는 Neo4j 기반 GraphRAG 플랫폼으로, 데이터를 자동으로 지식그래프화하고 자연어 질의로 즉시 답을 제공합니다.