본문 바로가기

Papers/KG

[Review] Text-to-Graph via LLM:pre-training, prompting, or tuning?

지식 그래프는 후속 분석을 위해 데이터를 구조화하는 가장 좋은 방법입니다. 문제는 현재 사용 가능한 대부분의 데이터가 비정형 텍스트 형태라는 것입니다.


LLM은 비정형 텍스트를 Knowledge Graph로 변환하는 기능을 보여주었습니다. 하지만 제가 본 대부분의 예에서는 LLM이 어떤 Ontology/Schema를 사용할지 결정하도록 합니다. 일부는 어떤 속성을 사용할지에 대한 제한을 추가하기도 합니다. 다음과 같은 이유로 특정 Ontology/Schema를 준수하는 그래프를 만들 필요가 있습니다.

 

  • 결과 그래프를 통해 다양한 쿼리를 생성해야 합니다. Schema에 대한 지식 없이 쿼리를 생성하는 것은 불가능에 가깝습니다.
  • 허용 가능한 프롬프트의 크기가 증가함에도 불구하고 하나의 프롬프트로 처리할 수 없을 정도로 많은 수의 문서에서 그래프를 만들어야 합니다. 모든 그래프 응답이 동일한 Ontology에 부합하기를 원합니다.

과거에는 구조화되지 않은 텍스트에서 그래프를 추출하는 데 NLP 도구를 사용할 수 있었지만, 이러한 도구는 일상적인 용도로 쉽게 접근할 수 없었습니다. 이전에 Ontology로 LLM을 호출하여 이 작업을 수행할 수 있음을 보여주었지만 토큰 비용이 많이 듭니다.

 

LLM을 사용하여 비정형 텍스트를 KG로 변환하기
LLM을 사용하여 구조화되지 않은 텍스트를 변환하는 네 가지 접근 방식을 설명하고 비교하고자 합니다. 이 방법을 통해 사전에 정의된 Ontology를 준수하는 KG로 응답합니다:

  1. Text-to-Graph using an LLM with pre-trained ontologies
  2. Text-to-Graph prompted an LLM with an ontology
  3. Text-to-Graph using an LLM fine-tuned with an ontology
  4. Text-to-Graph using a hybrid of a fine-tuned and pre-trained LLM

Approach1: Pre-trained ontology를 활용한 LLM

 

LLM은 SCHEMA.ORG, FOAF, SKOS, RDF, RDFS, OWL 등과 같은 다양한 표준 온톨로지에 대해 사전 교육을 받은 것으로 보입니다. 따라서 이 사전 교육된 온톨로지의 사용을 지시하는 적절한 시스템 프롬프트와 비정형 텍스트를 포함하는 사용자 프롬프트를 통해 원하는 변환된 그래프를 얻을 수 있습니다. 사전 교육을 받은 온톨로지 시스템 프롬프트는 다음과 같습니다:

  • 지정된 온톨로지를 사용하여 제공된 텍스트를 번역해야 합니다
  • 접두사에 관한 특정 지침을 따릅니다.

Pro:

  • 시스템 프롬프트에 제시된 온톨로지에 따라 LLM은 정의된 클래스 및 속성을 사용하거나 자체적으로 생성(및 정의)합니다.
  • 시스템 프롬프트는 매우 간결할 수 있으므로(~41개의 토큰), 토큰 비용의 대부분은 변환할 비정형 텍스트로 구성됩니다.

Con:

  • 변환은 LLM이 사전 교육을 받은 '표준' 온톨로지로 제한됩니다.
    - 저는 ChatGPT가 어떤 표준 온톨로지에 대해 교육을 받았는지 정중하게 물어보려고 했지만, 대답은 회피하는 것이었습니다.
  • 텍스트-그래프 변환에서 생성된 엔티티는 그래프 간에 정렬되어야 합니다

 

Approach2: Ontology로 prompt된 LLM

비표준 또는 커스텀 Ontology를 사용하고자 하는 상황이 많이 발생합니다. LLM이 이러한 Ontology에 대해 사전 교육을 받았을 가능성은 낮으므로 전체 Ontology를 시스템 프롬프트에 포함시켜야 할 것입니다.
프롬프트-Ontology 시스템 프롬프트는 다음과 같이 표시됩니다:

  • 포함된 Ontology를 사용하여 번역합니다.
  • 접두사에 관한 특정 지침을 따릅니다.
  • 프롬프트 온톨로지에서 미리 정의된 속성과 클래스만 사용하라는 지침을 따릅니다(이는 LLM이 자체적으로 생성되는 것을 방지하기 위한 것입니다)
  • TTL 형식의 전체 온톨로지 포함합니다.

다음은 이 시스템 프롬프트의 잘린 버전입니다. 실제 시스템 프롬프트에는 전체 온톨로지가 포함됩니다.

 

이 Ontology에 대해 알아야할 부분이 있습니다:

 

 

Pro:

  • LLM은 시스템 프롬프트에 포함될 때 RDF, RDFS 및 OWL로 표현되는 온톨로지를 이해하는 것 같습니다.
  • LLM은 구조화되지 않은 텍스트를 사용자 정의 온톨로지로 완벽하게 변환합니다.
    - 그러나 GPT-4와 같은 더 '고급' LLM은 결혼의 2차(다대다) 개념을 만드는 데 더 효과적입니다

Con:

  • 이렇게 하면 처리할 토큰에 비례하기 때문에 응답 시간이 느려집니다.
  • 텍스트-그래프 변환에서 생성된 엔티티는 그래프 간에 정렬되어야 합니다

 

Approach3: Ontology로 prompt된 LLM

사전에 훈련된 온톨로지로 제한되거나 시스템 프롬프트에 사용자 지정 온톨로지를 포함할 때 토큰 오버헤드가 발생하는 것은 이전 두 가지 접근 방식에서 상당한 문제입니다.


우리는 잘 교육된 LLM이 온톨로지를 이해하고, LLM은 이러한 이해를 사용하여 비정형 텍스트를 변환할 수 있다는 것을 알고 있습니다. 따라서 다른 온톨로지에 대해 LLM을 훈련할 수 있어야 합니다. 안타깝게도 예산이 전체 Pre-train까지 확장되지는 않지만 Fine-tuning은 가능한 범위에 있습니다. 그러나 이로 인해 적절한 튜닝 데이터 세트를 만드는 문제가 발생합니다.

 

이전 논문에서 LLM이 graph를 활용해 쉽게 fine-tuning될 수 있다는 것을 보였습니다. graph를 통해 다음 triple을 뽑아내는 것입니다.

{:subject :predicate :object}

 

학습을 위한 다음의 system-user-assistant prompt를 맵핑할 수 있는 것입니다. 이는 graph를 통해 자동으로 생성할 수 있습니다.

{ “messages”: [
  {"role": "system", "content": "Complete the following graph edge"},
  {"role": "user", "content": "What is <:subject> <predicate>?"},
  {"role": "assistant", "content": " <:subject> is <:predicate> <:object>."}]
}

 

해결해야 할 부분은 그래프 쿼리에 응답하기 위해 그래프의 edge를 완성하는 것이 아니라 비정형 텍스트를 사용자 정의 온톨로지에 부합하는 그래프로 변환하는 것입니다. 이 문제는 LLM이 한 언어(비정형 영어 텍스트)에서 다른 언어(Fine-tuned된 Ontology의 Semantic을 사용하여 고도로 구조화된 RDF 그래프)로 번역하도록 Train시키는 것에 더 가깝습니다.
다른 곳에서 사용된 언어 번역 데이터 세트의 예를 사용하여 다음과 같은 적절한 내용의 데이터 세트를 만들어야 합니다:

messages”: [
  {"role": "system", "content": "Translate the following user text to an RDF graph using the Schema1 ontology."
},
  {"role": "user", "content": "{example unstructured text}"},
  {"role": "assistant", "content": "{RDF graph using custom Schema1 ontology semantics}"}]
}

 

또는 train message format은 다음과 같아야 합니다.

messages”: [
   {"role": "system" , "content" : "Translate the following user text to an RDF gr
   {"role": "user" , "content" : "{example unstructured text}" },
   {"role": "assistant" , "content" : "{RDF graph using custom Schema1 ontology se
}

따라서 RDF에 대한 예제 및 번역의 representative set (100~200)을 만드는 것이 과제입니다. 예제 데이터 세트를 성공적으로 만들기 위한 과정은 다음 두 섹션에서 설명합니다.

 

Fine-tuning 데이터셋 generator: Ontology templates을 활용하기

첫 번째 접근법은 Ontology의 'fragment'에서 비정형 텍스트를 알고리즘적으로 생성하는 것이었습니다.
예를 들어, 다음 개체 속성 'fragment'에서

:of
  rdf:type owl:ObjectProperty ;
  rdfs:domain :CC ;
  rdfs:label "has profession" ;
  rdfs:comment  "The people who do a particular type of work, considered as a group.Any type of work that needs special training or a particular skill, often one that is respected because it involves a high level of education" ;
  rdfs:range :CF .

 

User의 '비정형' 텍스트는 다음 template으로 생성되었습니다.

{randomDomainInstance},
   which is a {synonymDomainLabel},
   has {synonymPropertyLabel} {randonRangeInstance},
   which is a {synonymRangeLabel}.

 

이 예시는 알고리즘적으로 다음과 같이 user-text를 생성하였습니다.

EpentheticShowed,
   which is a Person,
   has profession ShelffulKnuckleheads,
   which is a Profession.

 

다음 템플릿을 사용하여 다음과 같이 합성된 RDF 샘플 어시스턴트 응답이 됩니다:

ex : { randomDomainInstance } rdf : type { domain } ; rdfs : label { randomDomainInstance } { property } ex : { randonRangeInstance } . ex : { randonRangeInstance } rdf : type { range } ; rdfs : label { randomRangeInstance } . { domain } rdfs : label { domainLabel } . { range } rdfs : label { rangeLabel } . { property } rdfs : label { propertyLabel } .

 

알고리즘적으로 생성된 어시스턴트 텍스트의 실제 예는 다음과 같습니다:

ex : EpentheticShowed a : CC ; rdfs : label "EpentheticShowed" ; : of ex : ShelffulKnuckleheads . ex : ShelffulKnuckleheads a : CF ; rdfs : label "ShelffulKnuckleheads" ; : CC rdfs : label "Person" . : CF rdfs : label "Profession" . : of rdfs : label "has profession" .

 

dataset의 샘플은 다음 링크에서 확인이 가능합니다: https://huggingface.co/datasets/PeterLawrence/inova8.schema.1

3, 10, 15 epoch으로 gpt-4를 fine-tuning한 결과입니다. 모든 경우의 결과는 매우 실망스러웠고, 반복할 가치가 없었습니다!

 

알고리즘을 활용한 데이터셋 생성 및 tuning의 결과

좋지 않은 결과를 보면, 여기서 접근 방식을 제시한 것은 무슨 의미가 있었을까요? 샘플 dataset을 검토해보면, 생성된 텍스트는 영어 구조가 정확하다는 점에서 구문론적으로 정확합니다. 하지만 의미론적으로는 더 의미가 있을 수 있습니다. 예를 들어, 사람은 에펜테틱쇼우드나 셸풀너클헤드가 각각 사람과 직업의 이름이라고 추측하지 않을 것입니다. 이런 부분에서 LLM 또한 그들이 사람과 직업일 가능성이 높다고 추론할 수 있다고 기대할 수 없습니다.

 

다음의 의미는

EpentheticShowed , which is a Person , has profession ShelffulKnuckleheads , which is a Profession.

 

더 의미 있는 이 예시와는 거리가 있습니다.

Peter, who is a Person, has a profession Developer, which is a Profession.

 

 

Fine-tuning 데이터셋 generator: LLM을 활용하기

그래서 알고리즘 접근법은 실패했습니다. 어떻게 하면 존재론에서 의미 있는 사례를 만들 수 있을까요? LLM을 활용하는 것입니다. 적합한 튜닝 예제를 생성하라는 요청은 다음과 같이 공식화되었습니다:


system-prompt는 우리가 LLM이 수행하기를 원하는 역할, 즉 텍스트를 그래프로 변환하는 역할을 포함하며 RDF TTL에 LLM이 tuning되기를 원하는 Ontology를 포함합니다.
그래서 사용된 시스템 프롬프트는 (온톨로지의 전체 텍스트를 포함하지 않음) 다음과 같습니다:

 

사용자 프롬프트는 LLM에 LLM을 미세 조정하고 싶다고 말하고, 번역되는 RDF 그래프와 함께 사용자 텍스트의 예시를 원합니다.

 

fine-tuning 시, 3 epoch과 10 epoch 간에는 번역의 질적인 차이가 거의 없는 것으로 보였습니다. 이것은 우리가 과도한 tuning으로 'catastrophic forgetting'을 유도하지 않기 위해 확인해야 하는 점입니다.

 

Pro:

  • LLM은 사용자 정의 온톨로지에 대응하는 미세 조정 데이터 세트를 생성할 수 있습니다.
  • 사용자 지정 온톨로지로 LLM을 미세 조정할 수 있습니다.
  • 미세 조정된 LLM에 대한 시스템 프롬프트는 매우 간결할 수 있으므로(~41개의 토큰) 토큰 비용의 대부분은 변환할 비정형 텍스트로 구성됩니다.

Con:

  • fine-tuning 프롬프트를 생성해야 합니다.
  • LLM을 fine-tuning해야 합니다.
  • 사용자 정의 온톨로지를 이해하는 데 있어 LLM의 정확성과 그래프 변환의 정확성을 측정하는 지표가 필요합니다
    텍스트-그래프 변환에서 생성된 엔티티는 그래프 간에 정렬되어야 합니다

Approach4: fine-tune과 pre-train의 Hybrid

하나의 Ontology/Schema으로는 텍스트의 전체 의미를 파악하기에 부족한 경우가 많습니다. 따라서 두 개 이상의 온톨로지를 사용하고자 할 수 있습니다. 다행히 다음 예에서 알 수 있듯이 사용자 정의 온톨로지로 LLM을 fine-tuning해도 FOAF와 같은 pre-train된 온톨로지를 잊지 못한 것으로 보입니다.

 

System-promt

Translate the following user text to an RDF graph using both the FOAF, and Sche
Use the prefix ex: with IRI < http: / / example.com / > for any created entities.

 

User-prompt:

Peter Jones and Beth Hampton both studied at Brunel University, then got marrie
Peter, email address peter.jones @inova8 .com, has been friends with Paul William

 

그리고 LLM assistant-response는 두 Ontology를 활용합니다:

@prefix ex : < http ://example.com/> . ex :PeterJones a schema1:Thing, foaf :Person ; schema1:email "peter.jones@inova8.com" ; foaf:name "Peter Jones" ; foaf:interest ex:Ornithology . ex:BethHampton a schema1:Thing, foaf:Person ; foaf:name "Beth Hampton" . ex:GeorgeJones a schema1:Thing, foaf:Person ; foaf:name "George Jones" ; foaf:maker ex:PeterJones . ex:JamesJones a schema1:Thing, foaf:Person ; foaf:name "James Jones" ; foaf:maker ex:PeterJones . ex:HaroldJones a schema1:Thing, foaf:Person ; foaf:name "Harold Jones" ; foaf:maker ex:PeterJones . ex:BrunelUniversity a schema1:Thing, foaf:Document ; foaf:name "Brunel University" . ex:JonesHamptonMarriage a schema1:Thing ; schema1:spouse ex:PeterJones, ex:BethHampton . ex:JonesHamptonFamily a schema1:Thing ; schema1:parent ex:PeterJones, ex:BethHampton ; schema1:child ex:GeorgeJones, ex:JamesJones, ex:HaroldJones . ex:PeterJones foaf:knows ex:PaulWilliams .
ex:PaulWilliams a schema1:Thing, foaf:Person ; foaf:name "Paul Williams" .

 

Pro:

  • 사용자 정의 온톨로지로 미세 조정된 LLM은 사전에 훈련된 온톨로지를 잊지 않습니다.
  • Text-to-graph 변환은 pre-train과 fine-tune의 조합을 활용할 수 있습니다.

 

Con:

  • 온톨로지 간에 개념이 겹칠 경우 LLM이 사용할 변환을 제어해야 합니다.
  • 텍스트-그래프 변환에서 생성된 엔티티는 그래프 간에 정렬되어야 합니다.

 

배운 점

  • LLM은 구조화되지 않은 텍스트를 효과적으로 RDF 그래프로 변환할 수 있습니다.
    - FOAF, SCHAME.ORG 등 미리 트레이닝된 온톨로지 사용
    - 프롬프트에서 사용자 지정 온톨로지 사용
    - 사용자 정의 온톨로지를 사용하여 LLM 미세 조정
    - 사전 훈련된 온톨로지와 미세 조정된 온톨로지의 혼합물입니다.
  • LLM은 RDFTTL 형식의 온톨로지가 주어진 상태에서 미세 조정 예제를 성공적으로 생성할 수 있습니다.
  • ~160개의 예제로 fine-tuning을 3 epoch 만에 완료할 수 있습니다
    - 이를 통해 튜닝 비용 절감
    - 또한 catastrophic forgetting의 위험을 줄여줍니다
  • 사용자 정의 온톨로지 미세 조정 모델은 각 번역 요청이 있는 프롬프트에서 전체 온톨로지의 오버헤드가 필요하지 않으므로 토큰 효율성이 훨씬 뛰어납니다
    - 따라서 여러 텍스트를 변환해야 하는 프로덕션 환경에서 번역 비용이 절감됩니다
    - 또한 번역 성능을 향상시킵니다.

더 확인해야 할 점

  • Fine-tuning을 '최적화'하기 위한 tuning 예제 및 tuning epoch 수는 얼마입니까?
  • 텍스트-그래프 변환 '정확도' 테스트를 구축하여 정량적 테스트를 수행할 수 있습니까?
  • 변환된 텍스트에는 새로 생성된 엔티티가 포함됩니다. 이러한 엔티티는 여러 응답에 걸쳐 정렬되어야 합니다.
    - SILK와 같은 entity 정렬 tool을 위한 task입니까?
    - 이것이 그래프 후처리의 일부로 LLM에 요청할 수 있는 것입니까?

다음으로 나아가야할 점

  • 텍스트를 RDF 그래프로 변환하는 LLM 기능은 최첨단 LLM을 사용하여 탐구되었습니다.
    - 우리는 이러한 학습을 가지고 Mistral-7B와 OpenHermes와 같은 오픈 소스 및 소규모 LLM에 적용해야 합니다. 초기 결과는 매우 유망해 보입니다.
  • 정량의 텍스트-그래프 변환 성능을 측정할 수 있는 방법이 있으면 좋을 것입니다. 예를 들어:
    - fine-tuning을 위해 Ontology 개념당 몇 개의 샘플(이 예에서는 160/54)이 필요합니까?
    - 몇 번의 epoch가 필요합니까(이 예에서 사용되는 3번과 10번)?
    - 응답 토큰 비율은 사전 교육, 미세 조정 및 프롬프트 간에 어떻게 달라집니까?

[출처]

https://medium.com/@peter.lawrence_47665/text-to-graph-via-llm-pre-training-prompting-or-tuning-3233d1165360

'Papers > KG' 카테고리의 다른 글

[Review] Evaluating Very Long-Term Conversational Memory of LLM Agents  (0) 2024.03.21