paint-brush
ከመይ ጌርና $70K ንቑጥብ ንRAG ዝኸውን ናይ ፍልጠት ግራፍ ኣብ 6M ዊኪፒዲያ ገጻት ንምህናጽ@datastax
ሓድሽ ታሪኽ

ከመይ ጌርና $70K ንቑጥብ ንRAG ዝኸውን ናይ ፍልጠት ግራፍ ኣብ 6M ዊኪፒዲያ ገጻት ንምህናጽ

DataStax4m2024/10/15
Read on Terminal Reader

ኣዝዩ ነዊሕ፤ ንምንባብ

ትሕዝቶ ማእከል ዝገበረ ፍልጠት ግራፍ – ኣብ መንጎ ቁንጣሮ ምትእስሳር ዘፍቅድ ቬክተር-መደበር – ንውጽኢት ራግ ንምምሕያሽ ዝቐለለን ስሉጥን ኣገባብ ምዃኑ ተማጒትና ኣለና። ኣብዚ፡ ነዚ ኣብ ፈተና ኣእቲናዮ።
featured image - ከመይ ጌርና $70K ንቑጥብ ንRAG ዝኸውን ናይ ፍልጠት ግራፍ ኣብ 6M ዊኪፒዲያ ገጻት ንምህናጽ
DataStax HackerNoon profile picture
0-item



ውጽኢት ናይ ሪትሪቫል-ኣግመንትድ ጀነሬሽን (RAG) ኣፕሊኬሽናት ንምምሕያሽ ናይ ፍልጠት ግራፍ ምጥቃም ውዑይ ኣርእስቲ ኮይኑ ኣሎ። መብዛሕትኦም ኣብነታት ብተዛማዲ ውሑድ ቁጽሪ ሰነዳት ተጠቒምካ ከመይ ጌርካ ናይ ፍልጠት ግራፍ ትሃንጽ ዘርእዩ እዮም። እዚ ክኸውን ዝኽእል እቲ ልሙድ ኣገባብ – ረቂቕ እኽሊ ዘለዎ፡ ኣካል ማእከል ዝገበረ ሓበሬታ ምውጻእ – በቃ ስኬል ስለዘይገብር ክኸውን ይኽእል። ነፍሲ ወከፍ ሰነድ ብሞዴል ኣቢልካ ነቶም ኣካላት (ኖድስ)ን ዝምድናታትን (ወሰናት) ንምውጻእ ኣብ ዓበይቲ ዳታሴታት ንምስራሕ ኣዝዩ ነዊሕ ግዜ ይወስድ (ኣዝዩ ድማ ብዙሕ ወጻኢታት ይሓትት።


ከምኡ ኢልና ተኻቲዕና ኢና። ትሕዝቶ ማእከል ዝገበረ ናይ ፍልጠት ግራፍ – ኣብ መንጎ ቸንክስ ምትእስሳር ዘፍቅድ ቬክተር-ስቶር – ንኽትጥቀመሉ ዝቐለለን ዝያዳ ስሉጥን ኣገባብ እዩ። ኣብዚ፡ ነዚ ኣብ ፈተና ኣእቲናዮ። ንኡስ ስብስብ ናይ ዊኪፒዲያ ጽሑፋት ካብቲ... 2wikimultihop ዝብል ጽሑፍ ኣሎ። dataset ንኽልቲኡ ሜላታት ተጠቒምካ እዚ ንብምሉኡ ዳታሴት ንምጽዓን እንታይ ማለት ምዃኑ ምዝታይ። ውጽኢት ገለ ሕቶታት ኣብ ልዕሊ እቲ ዝተጻዕነ ዳታ ነርኢ። ብተወሳኺ ምሉእ ዳታሴት - ዳርጋ 6 ሚልዮን ሰነዳት - ናብ ትሕዝቶ ማእከል ዝገበረ ክንጽዕኖ ኢና። ግራፍቬክተርስቶር .

ኣካል ማእከል ዝገበረ: LLMGraphTransformer

ሰነዳት ናብ ከም Neo4j ዝኣመሰለ ኣካል ማእከል ዝገበረ ግራፍ ስቶር ምጽዓን ናይ LangChain LLMGraphTransformer ተጠቒምካ እዩ ተኻይዱ። እቲ ኮድ ኣብ LangChain's ዝተመርኮሰ እዩ። "ከመይ ጌርና ናይ ፍልጠት ግራፍ ንሃንጽ።"

 from langchain_core.documents import Document from langchain_experimental.graph_transformers import LLMGraphTransformer from langchain_openai import ChatOpenAI llm = ChatOpenAI(temperature=0, model_name="gpt-4-turbo") llm_transformer = LLMGraphTransformer(llm=llm) from time import perf_counter start = perf_counter() documents_to_load = [Document(page_content=line) for line in lines_to_load] graph_documents = llm_transformer.convert_to_graph_documents(documents_to_load) end = perf_counter() print(f"Loaded (but NOT written) {NUM_LINES_TO_LOAD} in {end - start:0.2f}s")

ትሕዝቶ ማእከል ዝገበረ: GraphVectorStore

ነቲ ዳታ ናብ GraphVectorStore ምጽዓን ብግምት ምስቲ ናብ ቬክተር ስቶር ምጽዓን ሓደ እዩ። እቲ እንኮ ተወሳኺ ነፍሲ ወከፍ ገጽ ምስ ካልኦት ገጻት ብኸመይ ከም ዝራኸብ ዝሕብር ሜታዳታ ምሕሳብ እዩ።


 import json from langchain_core.graph_vectorstores.links import METADATA_LINKS_KEY, Link def parse_document(line: str) -> Document:    para = json.loads(line)    id = para["id"]    links = {        Link.outgoing(kind="href", tag=id)        for m in para["mentions"]        if m["ref_ids"] is not None        for id in m["ref_ids"]    }    links.add(Link.incoming(kind="href", tag=id))    return Document(        id = id,        page_content = " ".join(para["sentences"]),        metadata = {            "content_id": para["id"],            METADATA_LINKS_KEY: list(links)        },    )


እዚ ውን ኣብ መንጎ ኖድታት ናይ ገዛእ ርእስኻ ምትእስሳር ክትውስኽ ከም እትኽእል ጽቡቕ ኣብነት እዩ።


 from langchain_openai import OpenAIEmbeddings from langchain_community.graph_vectorstores.cassandra import CassandraGraphVectorStore import cassio cassio.init(auto=True) TABLE_NAME = "wiki_load" store = CassandraGraphVectorStore( embedding = OpenAIEmbeddings(), node_table=TABLE_NAME, insert_timeout = 1000.0, ) from time import perf_counter start = perf_counter() from datasets.wikimultihop.load import parse_document kg_documents = [parse_document(line) for line in lines_to_load] store.add_documents(kg_documents) end = perf_counter() print(f"Loaded (and written) {NUM_LINES_TO_LOAD} in {end - start:0.2f}s")

ናይ ምጽዓን መዐቀኒታት

ኣብ 100 መስርዕ ዝጎዪ፡ GPT-4o ዝጥቀም ኣካል ማእከል ዝገበረ ኣገባብ፡ GraphDocuments ንምውጻእ 405.93s፡ ናብ Neo4j ንምጽሓፍ ድማ 10.99s ክወስድ እንከሎ፡ እቲ ትሕዝቶ ማእከል ዝገበረ ኣገባብ ድማ 1.43s ወሲዱ። ንደገ እንተርኢናዮ፡ ንኹሎም 5,989,847 ገጻት ብኣካል ማእከል ዝገበረ ኣገባብ ንምጽዓን 41 ሰሙናት፡ ትሕዝቶ ማእከል ዝገበረ ኣገባብ ድማ ኣስታት 24 ሰዓታት ክወስድ እዩ። ሳላ ምምስሳል ግን እቲ ትሕዝቶ ማእከል ዝገበረ ኣገባብ ኣብ 2.5 ሰዓታት ጥራይ እዩ ዝጎዪ! ተመሳሳሊ ረብሓታት ምምስሳል እንተገሚቱ፡ ሕጂ’ውን ነቲ ኣካል ማእከል ዝገበረ ኣገባብ ተጠቒምካ ንኹሉ ንምጽዓን ልዕሊ ኣርባዕተ ሰሙን ምወሰደ። እቲ ግምታዊ ወጻኢታት 58,700 ዶላር ስለ ዝኸውን ኣይፈተንኩዎን — ኩሉ ንመጀመርታ ግዜ ከም ዝሰርሐ ጌርካ ብምውሳድ!



ታሕተዋይ መስመር፡ እቲ ኣካል ማእከል ዝገበረ ኣገባብ፡ LLM ተጠቒምካ ካብ ትሕዝቶ ናይ ፍልጠት ግራፍ ምውጻእ፡ ብመጠን ግዜን ወጻኢታትን ዝኽልክል እዩ ነይሩ። ብኻልእ ወገን ድማ GraphVectorStore ምጥቃም ቅልጡፍን ርካሽን እዩ ነይሩ።

ኣብነታዊ መልስታት

ኣብዚ ክፍሊ፡ ካብቲ ንኡስ ስብስብ ዝተጻዕኑ ሰነዳት ዝተወስዱ ውሑዳት ሕቶታት፡ ንጽሬት መልስታት ንምምላስ ይሕተቱ።


ኣካል ማእከል ዝገበረ 7324 ፕሮምፕት ቶከናት ተጠቒሙ ብመሰረቱ ዘይጠቅም መልስታት ንምፍራይ $0.03 ወጻኢታት ክጥቀም እንከሎ፡ ትሕዝቶ ማእከል ዝገበረ ድማ 450 ፕሮምፕት ቶከናት ተጠቒሙ፡ ብቐጥታ ንሕቶታት ዝምልስ ጽፉፍ መልሲ ንምፍራይ ድማ $0.002 ወጻኢታት ገይሩ።


እቲ ረቂቕ ዝኾነ Neo4j ግራፍ ዘይጠቅም መልሲ ምምላሱ ከገርም ይኽእል እዩ። ካብቲ ሰንሰለት ዝግበር ምቑራጽ ኦም ክንርኢ ከለና፡ ገለ ካብቲ ስለምንታይ ከምዚ ከም ዝኸውን ንርኢ፤


 > Entering new GraphCypherQAChain chain... Generated Cypher: cypher MATCH (a:Album {id: 'The Circle'})-[:RELEASED_BY]->(r:Record_label) RETURN a.id, r.id Full Context: [{'a.id': 'The Circle', 'r.id': 'Restless'}] > Finished chain. {'query': "When was 'The Circle' released?", 'result': "I don't know the answer."}


ስለዚ፡ እቲ ረቂቕ ስኬማ ብዛዕባ እቲ ትካል መዝገብ ጥራይ እዩ ዚመልስ ነይሩ። LLM ኣብቲ ዝተረኽበ ሓበሬታ መሰረት ብምግባር ነቲ ሕቶ ክምልሶ ዘይምኽኣሉ ትርጉም ኣለዎ።

መደምደምታ

ረቂቕ እኽሊ ዘለዎም፣ ንኣካል ዝምልከቱ ናይ ፍልጠት ግራፍ ምውጻእ ብመጠን ግዜን ወጻኢታትን ዝኽልክል እዩ። ብዛዕባ እቲ ዝተጻዕነ ንኡስ ስብስብ ዳታ ሕቶታት ምስ ተሓተተ፡ እቲ ተወሳኺ ግራኑላሪቲ (ከምኡ’ውን ተወሳኺ ወጻኢታት ምጽዓን ናይቲ ረቂቕ-እኽሊ ዘለዎ ግራፍ) ነቲ ቅልጡፍ ንምሕዋስ ዝያዳ ቶከናት ይመልስ ግን ከኣ ዘይጠቅም መልስታት ፈጢሩ!


GraphVectorStore ንፍልጠት ግራፍ ንምህናጽ ቅልጡፍን ቀሊልን ዝገብሮ ረጒድ-እኽሊ ዘለዎ፡ ትሕዝቶ ማእከል ዝገበረ ኣገባብ ይወስድ። LangChain ተጠቂምካ ንሓደ VectorStore ንምምላእ በቲ ዝጸንሐ ኮድካ ክትጅምርን ኣብ መንጎ chunks መላግቦታት (ወሰናት) ክትውስኽን ትኽእል ኢኻ ንመስርሕ ምውሳድ ንምምሕያሽ።


ግራፍ ራግ ንጀነሬቲቭ ኤኣይ ራግ ኣፕሊኬሽናት ዝያዳ ብዕምቆት ዝምልከቱ ዓውድታት ንምርካብ ዘኽእል ጠቓሚ መሳርሒ እዩ። ረቂቕ እኽሊ ዘለዎ፡ ኣካል ማእከል ዝገበረ ኣገባብ ምጥቃም ግን ምስ ድሌታት ምፍራይ ኣይመጣጠንን እዩ። ኣብ ናይ RAG መተግበሪኻ ናይ ፍልጠት ግራፍ ዓቕሚ ክትውስኽ ትደሊ እንተኾንካ፡ ፈትን። ግራፍቬክተርስቶር .


ብቤን ቻምበርስ ፣ ዳታስታክስ