| ์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- yum-me
- graphrag
- hin
- food recommendation system
- fooddist
- ์ถ์ฒ์์คํ
- retrieval augmented generation
- Rag
- food recommender system
- graph
- mature-food
- Machine Learning
- nlp
- Neo4j
- Factorization Machine
- DeepFM
- heterogeneous graph neural network
- digital health
- ์ถ์ฒ ์์คํ
- heterogeneous graph attention network
- GenAI
- heterogeneous graph
- gat
- retrieval-augmented generation
- Today
- Total
๐ ์ํ์์ AI ๊ณต๋ถํ๊ธฐ
GraphRAG: Neo4j GenAI ํ์ฉํ์ฌ ๊ตฌํํด๋ณด๊ธฐ ๋ณธ๋ฌธ
๐ก๋ค์ด๊ฐ๋ฉฐ
์ธ๊ณต์ง๋ฅ ๊ธฐ์ ์ ๋ฐ์ ๊ณผ ํจ๊ป ๊ฑด๊ฐ ๋ฐ ์์ ์ ๋ณด์ ์ ๊ทผ์ฑ์ด ํฌ๊ฒ ํฅ์๋๊ณ ์์ต๋๋ค. ์ค๋์ ๊ทธ๋ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค Neo4j์ ์์ฑํ AI๋ฅผ ๊ฒฐํฉํ GraphRAG(Retrieval-Augmented Generation)๋ฅผ ํตํด ์ด๋ป๊ฒ ๋ ์ ํํ๊ณ ๋งฅ๋ฝ์ด ํ๋ถํ ์์ ์ ๋ณด๋ฅผ ์ ๊ณตํ ์ ์๋์ง ์์๋ณด๊ฒ ์ต๋๋ค. ํนํ ํ๊ตญ์ธ ์์์ ์ญ์ทจ๊ธฐ์ค 2020์ ๋ฐํ์ผ๋ก ํ ์ฌ๋ก๋ฅผ ์ค์ฌ์ผ๋ก ์ด ๊ธฐ์ ์ด ๊ฐ์ง ๊ฐ๋ฅ์ฑ์ ํ์ํด ๋ณด๊ฒ ์ต๋๋ค.
I. Neo4j GenAI์ ์ดํด
Neo4j GenAI๋ ๊ทธ๋ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์ถ์ ํตํ ์์ฑํ AI ํ์ฉ์ ๋์์ฃผ๋ ํ์ด์ฌ ํจํค์ง์ ๋๋ค. ์ด ๋๊ตฌ๋ OpenAI์ Neo4j ๋๋ผ์ด๋ฒ๋ฅผ ์ฐ๊ฒฐํ์ฌ ์ง์ ๊ทธ๋ํ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ๊ณ ํ์ง์ AI ์๋ต์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.

Neo4j GenAI์ ์ฃผ์ ํน์ง
Neo4j GenAI๋ ๋ฒกํฐ ๊ฒ์, ์ง์ ๊ทธ๋ํ, ๋ฐ์ดํฐ ์ฌ์ด์ธ์ค๋ฅผ ํตํฉํ์ฌ ๋ค์๊ณผ ๊ฐ์ ์ฅ์ ์ ์ ๊ณตํฉ๋๋ค:
- ๋์ ์ ํ๋์ ์๋ต ์์ฑ
- ํ๋ถํ ๋งฅ๋ฝ ์ ๋ณด ์ ๊ณต
- ๊น์ ์ค๋ช ๊ฐ๋ฅ์ฑ(explainability) ํ๋ณด
์ด๋ฌํ ํน์ง๋ค์ ์์ ์ ๋ณด์ ๊ฐ์ด ์ ํ์ฑ๊ณผ ๋งฅ๋ฝ์ด ์ค์ํ ๋ถ์ผ์์ ํนํ ๊ฐ์น๊ฐ ์์ต๋๋ค. ์์์ ๊ฐ์ ๋ณต์กํ ๊ด๊ณ์ ๊ฑด๊ฐ ์ํ์ ๋ฏธ์น๋ ์ํฅ์ ๊ทธ๋ํ ๊ตฌ์กฐ๋ก ํํํจ์ผ๋ก์จ ๋ ๋ช ํํ ์ ๋ณด ์ ๋ฌ์ด ๊ฐ๋ฅํด์ง๋๋ค.
# OpenAI ์ฐ๊ฒฐ ์์
import os
os.environ["OPENAI_API_KEY"] = "sk-your-api-key"
# Neo4j ๋๋ผ์ด๋ฒ ์ฐ๊ฒฐ ์์
from neo4j import GraphDatabase
# Neo4j์ ์ฐ๊ฒฐ
uri = "bolt://localhost:7687" # Neo4j Bolt URL
user = "neo4j" # Neo4j ์ฌ์ฉ์ ์ด๋ฆ
password = "password" # ๋น๋ฐ๋ฒํธ
driver = GraphDatabase.driver(uri, auth=(user, password))
II. ์์ ๋ฐ์ดํฐ์ GraphRAG ๊ตฌํ ๊ณผ์
1. ์์ค ๋ฌธ์ ์ค๋น ๋ฐ ํ ์คํธ ์ฒญํฌ ๋ถํ
์ด๋ฒ ํ๋ก์ ํธ์์๋ 'ํ๊ตญ์ธ ์์์ ์ญ์ทจ๊ธฐ์ค 2020(๋ค๋์์์)'๋ฅผ ์์ค ๋ฌธ์๋ก ํ์ฉํ์ต๋๋ค. ์ด ์๋ฃ์๋ ์๋์ง, ํ์ํ๋ฌผ, ์์ด์ฌ์ , ๋จ๋ฐฑ์ง, ์ง์ง ๋ฑ ์ฃผ์ ์์์์ ๋ํ ๊ถ์ฅ ์ญ์ทจ๋๊ณผ ๊ด๋ จ ์ ๋ณด๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
๋ฌธ์ ์ฒ๋ฆฌ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- PDF ํ์์ ์๋ณธ ๋ฌธ์๋ฅผ ๋งํฌ๋ค์ด์ผ๋ก ๋ณํ
- ํ ์คํธ๋ฅผ '\n\n'์ ๊ธฐ์ค์ผ๋ก ๋ฌธ๋จ ๋จ์๋ก ๋ถํ
- ๊ฐ ์ฒญํฌ์ ๊ธธ์ด๋ฅผ 2000์๋ก ์ ํํ์ฌ ๊ด๋ฆฌ ๊ฐ๋ฅํ ํฌ๊ธฐ๋ก ์กฐ์
- ํ ํ์์ ๋ฐ์ดํฐ๋ ๋งํฌ๋ค์ด ํ์์ผ๋ก ๋ณํํ์ฌ ๊ตฌ์กฐํ๋ ์ ๋ณด ๋ณด์กด
| ์ฒ๋ฆฌ ๋จ๊ณ | ์ค๋ช |
| ์์ค ๋ฌธ์ ์์ง | ํ๊ตญ์ธ ์์์ ์ญ์ทจ๊ธฐ์ค 2020 PDF ํ๋ณด |
| ํ์ ๋ณํ | PDF์์ ๋งํฌ๋ค์ด์ผ๋ก ๋ณํ |
| ํ ์คํธ ์ฒญํน | ๋ฌธ๋จ ๊ธฐ์ค ๋ถํ ๋ฐ ๊ธธ์ด ์ ํ ์ ์ฉ |
2. ํ ์คํธ ์ฒญํฌ์์ ์ํฐํฐ ์ธ์คํด์ค ์ถ์ถ
๋ถํ ๋ ํ ์คํธ ์ฒญํฌ์์ ์๋ฏธ ์๋ ์ ๋ณด๋ฅผ ๊ตฌ์กฐํํ๊ธฐ ์ํด LLM(Large Language Model)์ ํ์ฉํ์ฌ ์ํฐํฐ, ๊ด๊ณ, ์ฃผ์ฅ(claim)์ ์ถ์ถํฉ๋๋ค. ์ด ๊ณผ์ ์์ Neo4j์์ ์ ๊ณตํ๋ ํ ํ๋ฆฟ์ ํ๊ตญ์ด๋ก ์์ ํ๊ณ , ์์ ๋ถ์ผ์ ํนํ๋ ์ง์์ฌํญ์ ์ถ๊ฐํ์ต๋๋ค.
ํนํ ๋ค์๊ณผ ๊ฐ์ ์์ ๊ด๋ จ ์ถ๊ฐ ๊ณ ๋ ค์ฌํญ์ ๋ฐ์ํ์ต๋๋ค:

- ์์์์ ๋ถ๋ฅ์ฒด๊ณ(๋ค๋์์์/๋ฏธ๋์์์ ๋ฑ) ๊ณ ๋ ค
- ์์์ ๊ฐ์ ์ํธ์์ฉ ๊ด๊ณ ํ์
- ์ฐ๋ น๋๋ณ/์ฑ๋ณ ๊ถ์ฅ์ญ์ทจ๋ ์ ๋ณด
- ๊ฑด๊ฐ์ํ์์ ๊ด๋ จ์ฑ
class KoreanNutritionTemplate:
def __init__(self):
self.base_prompt = """๋น์ ์ ์ง์ ๊ทธ๋ํ ๊ตฌ์ถ์ ์ํด ์ ๋ณด๋ฅผ ์ถ์ถํ๋ ์ต๊ณ ์์ค์ ์๊ณ ๋ฆฌ์ฆ์
๋๋ค.
์
๋ ฅ๋ ํ
์คํธ๋ ํ์์ ๋ค์ ์ ๋ณด๋ฅผ ์ถ์ถํด์ฃผ์ธ์:
1. ์ํฐํฐ(๋
ธ๋) ์ถ์ถ ๋ฐ ์ ํ ์ง์
2. ์ํฐํฐ ๊ฐ์ ๊ด๊ณ ํ์
3. ๊ฐ ๋
ธ๋๋ณ ๊ณ ์ ID ํ ๋น
4. ๋
ธ๋์ ๊ด๊ณ์ ๋ํ ๊ด๋ จ ์์ฑ ํฌํจ
ํ ํ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๋๋ ํนํ:
1. ์ด ์ ๋ชฉ๊ณผ ๊ฐ์์ ์ฃผ์ ์ํฐํฐ ์๋ณ
2. ํ ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ด๊ณ ๊ฒฐ์
3. ํ ์ ๋ชฉ๊ณผ ๋งฅ๋ฝ์ ๊ณ ๋ คํ์ฌ ์ํฐํฐ ์ ํ ๊ฒฐ์
# ์คํค๋ง์ ์ถ๋ ฅ ํ์
์ฌ์ฉํ ์คํค๋ง: {schema}
๋ค์ JSON ํ์์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํด์ฃผ์ธ์:
{{
"nodes": [{{
"id": "๋ฌธ์์ด",
"label": "์ํฐํฐ์ ํ",
"properties": {{}}
}}],
"relationships": [{{
"type": "๊ด๊ณ์ ํ",
"start_node_id": "๋ฌธ์์ด",
"end_node_id": "๋ฌธ์์ด",
"properties": {{}}
}}]
}}
์ฃผ์์ฌํญ:
- ๊ณ ์ ํ ID๋ฅผ ํ ๋นํ๊ณ ๊ด๊ณ ์ ์์ ์ฌ์ฌ์ฉ
- ์คํค๋ง์ ์ ์๋ ๋
ธ๋์ ๊ด๊ณ ์ ํ๋ง ์ฌ์ฉ
- ๊ด๋ จ๋ ๋ชจ๋ ์์ฑ ํฌํจ
- JSON ํ์์ผ๋ก๋ง ์ถ๋ ฅ
์์: {examples}
์
๋ ฅ: {text}"""
def format(self, schema='', text='', examples=''):
has_table = bool(re.search(r'(โํ\s+\d+โ|<table>)', text, re.MULTILINE))
if has_table:
prompt = f"{self.base_prompt}\nํ
์คํธ์ ํ ๋ชจ๋์์ ์ ๋ณด๋ฅผ ์ถ์ถํด์ฃผ์ธ์."
else:
prompt = self.base_prompt
return prompt.format(schema=schema, text=text, examples=examples)
def add_domain_specific_instructions(self, domain_type='์์ํ'):
"""๋๋ฉ์ธ๋ณ ํนํ ์ง์์ฌํญ ์ถ๊ฐ ๋ฉ์๋"""
if domain_type == '์์ํ':
self.base_prompt += """
์์ํ ๊ด๋ จ ์ถ๊ฐ ๊ณ ๋ ค์ฌํญ:
- ์์์์ ๋ถ๋ฅ์ฒด๊ณ (๋ค๋์์์/๋ฏธ๋์์์ ๋ฑ)
- ์์์ ๊ฐ์ ์ํธ์์ฉ ๊ด๊ณ
- ์ฐ๋ น๋๋ณ/์ฑ๋ณ ๊ถ์ฅ์ญ์ทจ๋
- ๊ฑด๊ฐ์ํ์์ ๊ด๋ จ์ฑ
"""
def split_by_paragraphs(text, max_chars=2000):
paragraphs = re.split(r'\n\n(?!<)', text)
chunks = []
current = ""
for p in paragraphs:
if len(current) + len(p) < max_chars:
current += p + "\n\n"
else:
chunks.append(current.strip())
current = p + "\n\n"
if current:
chunks.append(current.strip())
return chunks
def extract_and_process_tables(md_text):
chunks = split_by_paragraphs(md_text, max_chars=2000)
processed_chunks = []
for chunk in chunks:
tables = re.findall(r'<table>.*?</table>', chunk, re.DOTALL)
processed_chunk = chunk
for table in tables:
soup = BeautifulSoup(table, 'html.parser')
df = pd.read_html(StringIO(str(soup)))[0]
markdown_table = df.to_markdown()
processed_chunk = processed_chunk.replace(table, markdown_table)
processed_chunks.append(processed_chunk)
return '\n\n'.join(processed_chunks)
def estimate_cost(text):
input_tokens = len(text) // 4
expected_output_tokens = 1000
input_cost = input_tokens * 0.03 / 1000
output_cost = expected_output_tokens * 0.06 / 1000
total_cost = input_cost + output_cost
return input_tokens, expected_output_tokens, total_cost
def process_er_extraction(text):
template = KoreanNutritionTemplate()
llm = OpenAILLM(model_name="gpt-4o", model_params={"temperature": 0})
chunks = split_by_paragraphs(text)
total_cost = sum(estimate_cost(chunk)[2] for chunk in chunks)
if input(f"์์ ๋น์ฉ: ${total_cost:.2f}, ์งํ? (y/n): ").lower() != 'y':
return []
responses = []
for chunk in chunks:
processed = preprocess_and_process_tables(chunk)
prompt = template.format(text=processed)
responses.append(llm.invoke(prompt).content)
return responses
3. Neo4j์ ๋ฐ์ดํฐ ์คํค๋ง ํ์ธ
์ถ์ถ๋ ์ํฐํฐ์ ๊ด๊ณ๋ Neo4j ๊ทธ๋ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ฉ๋๋ค. ์์ ๋ฐ์ดํฐ๋ฅผ ์ํ ์ฃผ์ ๋ ธ๋ ํ์ ๊ณผ ๊ด๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ๋ ธ๋ ํ์ : ์์์(Nutrient), ์ํ(Food), ๊ฑด๊ฐ์ํ(HealthCondition), ์ฐ๋ น๋(AgeGroup) ๋ฑ
- ๊ด๊ณ ํ์ : HAS_NUTRIENT(ํจ์ ํ๋ค), DECREASES_RISK_OF(์ํ์ ๊ฐ์์ํจ๋ค), BELONGS_TO(์ํ๋ค) ๋ฑ
์ด๋ฌํ ๊ตฌ์กฐ๋ '์ด๋ค ์ํ์ด ์ด๋ค ์์์๋ฅผ ํจ์ ํ๊ณ ์์ผ๋ฉฐ, ๊ทธ ์์์๊ฐ ์ด๋ค ๊ฑด๊ฐ์ํ์ ์ํฅ์ ๋ฏธ์น๋๊ฐ'์ ๊ฐ์ ๋ณต์กํ ๊ด๊ณ๋ฅผ ํํํ ์ ์๊ฒ ํฉ๋๋ค.

4. Text2CypherRetriever ๊ตฌํ
์ฌ์ฉ์์ ์์ฐ์ด ์ง๋ฌธ์ Neo4j์์ ์คํํ Cypher ์ฟผ๋ฆฌ๋ก ๋ณํํ๋ ๊ธฐ๋ฅ์ GraphRAG์ ํต์ฌ์ ๋๋ค. ์ด๋ฅผ ์ํด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง์ ํจ๊ป few-shot learning์ ์ํ ์์๋ค์ ํ๋กฌํํธ์ ํฌํจ์์ผฐ์ต๋๋ค.
์์์ ์ธ ์์ฐ์ด ์ฟผ๋ฆฌ ๋ณํ ์ฌ๋ก:
# Text2CypherRetriever ์ด๊ธฐํ
retriever = Text2CypherRetriever(
driver=driver,
llm=llm,
neo4j_schema=neo4j_schema,
examples=examples,
)
# ์ฌ์ฉ์ ์ฟผ๋ฆฌ ์ฒ๋ฆฌ
query_text = "20๋ ์ฌ์ฑ์ ์ํ ์นผ์์ด ํ๋ถํ ์๋จ ์ถ์ฒํด์ค."
search_result = retriever.search(query_text=query_text)
# ์์ฑ๋ Cypher ์ฟผ๋ฆฌ ํ์ธ
print(search_result.metadata['cypher'])
# ๊ฒฐ๊ณผ: MATCH (a:AgeGroup)-[:HAS_INTAKE]->(n:NutrientIntake),
# (g:Gender)-[:HAS_AGE_GROUP]->(a), (f:Food)-[:HAS_NUTRIENT]->(n)
# WHERE a.age_range = '20-29' AND g.gender = 'Female'
# RETURN f.name LIMIT 10
์ด ๋ฐฉ์์ ํตํด ์ฌ์ฉ์์ ์ง๋ฌธ์ ์๋์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ๋ก ๋ณํ๋์ด ๊ด๋ จ ๋ ธ๋ ์ ๋ณด๋ฅผ ์ถ์ถํ๊ณ , ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ ์ ํํ ๋ต๋ณ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
III. ๊ฒฐ๊ณผ์ ํ๊ณ์
๊ฒฐ๊ณผ ํ์ธ
์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌํ์์๋ ์ํ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ ํ ์คํธ ์ผ์ด์ค์์ ์ข์ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ ์ ์์์ต๋๋ค. ์๋ฅผ ๋ค์ด "Titanic๊ณผ ๋น์ทํ ์ฅ๋ฅด์ ์ํ ์ถ์ฒํด์ค"๋ผ๋ ์ฟผ๋ฆฌ์ ๋ํด ์ฅ๋ฅด ๊ธฐ๋ฐ์ ๊ด๋ จ ์ํ ๋ชฉ๋ก์ ์ ํํ ๋์ถํ์ต๋๋ค.
๊ทธ๋ฌ๋ ํ์ฌ ์์ ๋ฐ์ดํฐ ๊ตฌํ์์๋ ๊ทธ๋ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์ ์ ๋ณด๊ฐ ์ต์ ์ ์คํค๋ง๋ก ์ ์ฌ๋์ง ์์ ์ผ๋ถ ์ฟผ๋ฆฌ์์ ๊ธฐ๋ํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ง ๋ชปํ๋ ํ๊ณ๊ฐ ์์์ต๋๋ค.
ํ๊ณ์ ๊ณผ ๊ฐ์ ๋ฐฉํฅ
ํ์ฌ ๊ตฌํ์ ์ฃผ์ ํ๊ณ์ ๊ณผ ํฅํ ๊ฐ์ ๋ฐฉํฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ์์ ๋ฐ์ดํฐ์ ๋ณต์ก์ฑ์ ๋ ์ ๋ฐ์ํ ์ ์๋ ๊ทธ๋ํ ์คํค๋ง ์ค๊ณ ํ์
- ํ๊ตญ์ด ์์ ์ฉ์ด์ ์ต์ ํ๋ ์ํฐํฐ ์ถ์ถ ํ ํ๋ฆฟ ๊ฐ์
- ์์์ ๊ฐ์ ์ํธ์์ฉ๊ณผ ๊ฐ์ ๋ณต์กํ ๊ด๊ณ๋ฅผ ๋ ํจ๊ณผ์ ์ผ๋ก ํํํ ๋ฐฉ๋ฒ ๋ชจ์
- ๋ค์ํ ์ฌ์ฉ์ ์ง๋ฌธ ํจํด์ ํฌ๊ดํ ์ ์๋ few-shot ์์ ํ์ฅ
IV. ๊ฒฐ๋ก ๐ฏ
GraphRAG๋ฅผ ํ์ฉํ Neo4j GenAI ๊ตฌํ์ ์์ ์ ๋ณด์ ๊ฐ์ ๋ณต์กํ ์ง์ ์์ญ์์ ๋งฅ๋ฝ์ด ํ๋ถํ๊ณ ์ ํํ ์ ๋ณด ์ ๊ณต์ ๊ฐ๋ฅ์ฑ์ ๋ณด์ฌ์ค๋๋ค. ํนํ ์์์ ๊ฐ์ ๊ด๊ณ, ์ํ๊ณผ ๊ฑด๊ฐ ๊ฐ์ ์ฐ๊ด์ฑ๊ณผ ๊ฐ์ ๋ณต์กํ ์ ๋ณด๋ฅผ ๊ทธ๋ํ ๊ตฌ์กฐ๋ก ํํํจ์ผ๋ก์จ ๋จ์ํ ํค์๋ ๊ฒ์์ด๋ ์ผ๋ฐ AI ์๋ต๋ณด๋ค ๋ ์๋ฏธ ์๋ ์ ๋ณด๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค.
ํ์ฌ์ ํ๊ณ์๋ ๋ถ๊ตฌํ๊ณ , ์ด ์ ๊ทผ ๋ฐฉ์์ ๊ฐ์ธํ๋ ์์ ๊ถ์ฅ์ฌํญ, ํน์ ๊ฑด๊ฐ ์ํ์ ๋ง๋ ์๋จ ๊ณํ, ์์์ ์ํธ์์ฉ์ ๋ํ ์ฌ์ธต์ ์ดํด์ ๊ฐ์ ๋ค์ํ ์์ฉ ๊ฐ๋ฅ์ฑ์ ์ ์ํฉ๋๋ค. ์์ผ๋ก ๋ ์ ๊ตํ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง๊ณผ ์ต์ ํ๋ ์ฟผ๋ฆฌ ๋ณํ์ ํตํด ์์ ๋ฐ ๊ฑด๊ฐ ๋ถ์ผ์์ ๋์ฑ ๊ฐ์น ์๋ ๋๊ตฌ๋ก ๋ฐ์ ํ ์ ์์ ๊ฒ์ ๋๋ค.
์ฐธ๊ณ ๋ฌธํ:
- ํ๊ตญ์ธ ์์์ ์ญ์ทจ๊ธฐ์ค 2020, ๋ณด๊ฑด๋ณต์ง๋ถ·ํ๊ตญ์์ํํ
- Neo4j for GenAI ๊ณต์ ๋ฌธ์, https://neo4j.com/docs/genai/
- Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks, Lewis et al. (2020)
'Food_Health_AI > RAG' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| GraphRAG: ์ ๋ณด์ ์ ํ์ฑ์ ๋์ด๋ ๊ทธ๋ํ ๊ธฐ๋ฐ ๊ฒ์ ์ฆ๊ฐ ์์ฑ ๊ธฐ์ (3) | 2025.04.10 |
|---|---|
| RAG(Retrieval-Augmented Generation): ์ ํํ ์ ๋ณด ์ ๊ณต์ ์ํ AI ๊ธฐ์ (1) | 2025.04.07 |