paint-brush
Izveidojiet efektīvus zināšanu grafikus, izmantojot Relik un LlamaIndex: entītiju saistīšana un attiecību iegūšanaautors@neo4j
Jauna vēsture

Izveidojiet efektīvus zināšanu grafikus, izmantojot Relik un LlamaIndex: entītiju saistīšana un attiecību iegūšana

autors Neo4j7m2024/11/05
Read on Terminal Reader

Pārāk ilgi; Lasīt

Uzziniet, kā Relik un LlamaIndex nodrošina efektīvu zināšanu diagrammu izveidi bez lieliem valodu modeļiem. Šī rokasgrāmata aptver entītiju saistīšanu, attiecību izgūšanu un Neo4j integrāciju.
featured image - Izveidojiet efektīvus zināšanu grafikus, izmantojot Relik un LlamaIndex: entītiju saistīšana un attiecību iegūšana
Neo4j HackerNoon profile picture
0-item
1-item


Zināšanu grafiku veidošana no teksta jau ilgu laiku ir bijusi aizraujoša pētniecības joma. Līdz ar lielo valodu modeļu (LLM) parādīšanos šī joma ir ieguvusi lielāku uzmanību. Tomēr LLM var būt diezgan dārgi. Alternatīva pieeja ir precizēt mazākus modeļus, ko atbalsta akadēmiskais pētījums, radot efektīvākus risinājumus. Šodien mēs izpētīsim Relik — ietvaru, kas ļauj darboties ātri un viegliem informācijas ieguves modeļiem, ko izstrādājusi NLP grupa Romas Sapienza Universitātē.


Tipisks informācijas ieguves cauruļvads bez LLM izskatās šādi:


Informācijas ieguves cauruļvads — autora attēls


Attēlā ilustrēts informācijas ieguves cauruļvads, sākot no ievades datiem, kas sastāv no teksta, kurā minēts “Tomazam patīk rakstīt emuāra ierakstus. Viņu īpaši interesē diagrammu zīmēšana. Process sākas ar pamatreferences izšķirtspēju, lai identificētu “Tomaz” un “Viņš” kā vienu un to pašu entītiju. Nosauktā entītiju atpazīšana (NER) pēc tam identificē tādas entītijas kā “Tomaz”, “Blogs” un “Diagram”.


Entītiju saistīšana ir process, kas seko NER, kurā atpazītās entītijas tiek kartētas ar atbilstošiem ierakstiem datu bāzē vai zināšanu bāzē. Piemēram, “Tomaz” ir saistīts ar “Tomaz Bratanic (Q12345)” un “Blogs” ar “Blog (Q321), bet “Diagram” zināšanu bāzē nav atbilstības.


Attiecību iegūšana ir nākamais solis, kurā sistēma identificē un iegūst nozīmīgas attiecības starp atzītajām entītijām. Šis piemērs norāda, ka “Tomaz” ir saistība ar “Blog”, ko raksturo “RAKSTA”, norādot, ka Tomaz raksta emuārus. Turklāt tas norāda, ka “Tomaz” ir saistība ar “diagrammu”, ko raksturo “INTERESTED_IN”, norādot, ka Tomaz interesē diagrammas.


Visbeidzot, šī strukturētā informācija, tostarp entītijas un to attiecības, tiek glabāta zināšanu grafikā, ļaujot sakārtot un pieejamus datus turpmākai analīzei vai izguvei.


Tradicionāli, neizmantojot LLM spēku, viss šis process balstās uz specializētu modeļu komplektu, katrs veic konkrētu uzdevumu no pamatareferences izšķiršanas līdz attiecību iegūšanai. Lai gan šo modeļu integrācija prasa lielāku piepūli un koordināciju, tā piedāvā ievērojamu priekšrocību: samazinātas izmaksas. Precizējot mazākus, uzdevumam raksturīgus modeļus, sistēmas izveides un uzturēšanas kopējos izdevumus var kontrolēt.


Kods ir pieejams vietnē GitHub .

Vides iestatīšana

Es iesaku izmantot atsevišķu Python vidi, piemēram, Google Colab , jo mums būs nedaudz jāspēlējas ar atkarībām. Modeļi ir ātrāki ar GPU, tāpēc varat izmantot ar GPU darbinātu izpildlaiku, ja jums ir Pro versija.


Turklāt mums ir jāiestata Neo4j, vietējā grafiku datu bāze, lai saglabātu iegūto informāciju. Ir daudzi veidi, kā iestatīt datu bāzes gadījumu . Tomēr es iesaku izmantot Neo4j Aura , kas nodrošina bezmaksas mākoņa instanci, kurai var viegli piekļūt no Google Colab piezīmju grāmatiņas.


Neo4j Aura — pilnībā pārvaldīts mākoņa risinājums


Pēc datu bāzes izveidošanas mēs varam definēt savienojumu, izmantojot LlamaIndex:


 from llama_index.graph_stores.neo4j import Neo4jPGStore username="neo4j" password="rubber-cuffs-radiator" url="bolt://54.89.19.156:7687" graph_store = Neo4jPGStore( username=username, password=password, url=url, refresh_schema=False )

Datu kopa

Mēs izmantosim ziņu datu kopu, ko pirms kāda laika ieguvu, izmantojot Diffbot API . Datu kopa ir ērti pieejama vietnē GitHub, lai mēs varētu atkārtoti izmantot:


 import pandas as pd NUMBER_OF_ARTICLES = 100 news = pd.read_csv( "https://raw.githubusercontent.com/tomasonjo/blog-datasets/main/news_articles.csv" ) news = news.head(NUMBER_OF_ARTICLES)

Korekcijas izšķirtspēja

Pirmais solis izstrādes procesā ir pamatareferences izšķirtspējas modelis. Korekcijas izšķirtspēja ir uzdevums identificēt visas teksta izteiksmes, kas attiecas uz vienu un to pašu entītiju.


Cik man zināms, pamatreferences izšķirtspējai nav pieejams daudz atvērtā pirmkoda modeļu. Es izmēģināju maverick-coref , bet manos testos Coreferee no spaCy darbojās labāk, tāpēc mēs to izmantosim. Vienīgais Coreferee lietošanas trūkums ir tas, ka mums ir jātiek galā ar atkarības elli, kas ir atrisināta piezīmjdatorā, taču mēs to nepārskatīsim.


Varat ielādēt pamatreferences modeli spaCy ar šādu kodu:


 import spacy, coreferee coref_nlp = spacy.load('en_core_web_lg') coref_nlp.add_pipe('coreferee')


Coreferee modelis nosaka izteiksmju kopas, kas attiecas uz vienu un to pašu entītiju vai entītijām. Lai pārrakstītu tekstu, pamatojoties uz šīm kopām, mums ir jāievieš sava funkcija:


 def coref_text(text): coref_doc = coref_nlp(text) resolved_text = "" for token in coref_doc: repres = coref_doc._.coref_chains.resolve(token) if repres: resolved_text += " " + " and ".join( [ t.text if t.ent_type_ == "" else [e.text for e in coref_doc.ents if t in e][0] for t in repres ] ) else: resolved_text += " " + token.text return resolved_text


Pārbaudīsim funkciju, lai pārliecinātos, vai modeļi un atkarības ir iestatītas pareizi:


 print( coref_text("Tomaz is so cool. He can solve various Python dependencies and not cry") ) # Tomaz is so cool . Tomaz can solve various Python dependencies and not cry


Šajā piemērā modelis identificēja, ka “Tomaz” un “Viņš” attiecas uz vienu un to pašu entītiju. Izmantojot funkciju coref_text, mēs aizstājam “Viņš” ar “Tomaz”.


Ņemiet vērā, ka pārrakstīšana ne vienmēr atgriež gramatiski pareizus teikumus, jo klastera entītijām tiek izmantota vienkārša aizstāšanas loģika. Tomēr tam vajadzētu būt pietiekami labam vairumam scenāriju.


Tagad mūsu ziņu datu kopai piemērojam pamatreferences izšķirtspēju un apkopojam rezultātus kā LlamaIndex dokumentus:


 from llama_index.core import Document news["coref_text"] = news["text"].apply(coref_text) documents = [ Document(text=f"{row['title']}: {row['coref_text']}") for i, row in news.iterrows() ]

Entītiju saistīšana un attiecību iegūšana

Relik ir bibliotēka ar entītiju saistīšanas (EL) un attiecību iegūšanas (RE) modeļiem, un tā atbalsta arī modeļus, kas apvieno abus. Entītiju saistīšanā Vikipēdija tiek izmantota kā mērķa zināšanu bāze, lai kartētu entītijas tekstā ar to atbilstošajiem ierakstiem enciklopēdijā.


Entītiju saistīšana ar Vikipēdiju — autora attēls



No otras puses, attiecību iegūšana ietver attiecību identificēšanu un kategorizēšanu starp entītijām tekstā, ļaujot iegūt strukturētu informāciju no nestrukturētiem datiem.


Attiecību izvilkšana — autora attēls



Ja izmantojat Colab bezmaksas versiju, izmantojiet relik-ie/relik-relation-extraction-small modeli, kas veic tikai attiecību izgūšanu. Ja jums ir Pro versija vai jūs to izmantosit spēcīgākā vietējā datorā, varat pārbaudīt relik-ie/relik-cie-small modeli, kas veic entītiju saistīšanu un attiecību izgūšanu.


 from llama_index.extractors.relik.base import RelikPathExtractor relik = RelikPathExtractor( model="relik-ie/relik-relation-extraction-small" ) # Use on Pro Collab with GPU # relik = RelikPathExtractor( # model="relik-ie/relik-cie-small", model_config={"skip_metadata": True, "device":"cuda"} # )


Turklāt mums ir jādefinē iegulšanas modelis, kas tiks izmantots entītiju iegulšanai, un LLM jautājumu atbilžu plūsmai:


 import os from llama_index.embeddings.openai import OpenAIEmbedding from llama_index.llms.openai import OpenAI os.environ["OPENAI_API_KEY"] = "sk-" llm = OpenAI(model="gpt-4o", temperature=0.0) embed_model = OpenAIEmbedding(model_name="text-embedding-3-small")


Ņemiet vērā, ka LLM netiks izmantots grafika veidošanas laikā.


Tagad, kad viss ir izveidots, mēs varam izveidot PropertyGraphIndex un izmantot ziņu dokumentus kā ievades datus zināšanu diagrammā.


Turklāt mums ir jānodod relik modelis kā kg_extractors vērtība, lai iegūtu attiecības:


 from llama_index.core import PropertyGraphIndex index = PropertyGraphIndex.from_documents( documents, kg_extractors=[relik], llm=llm, embed_model=embed_model, property_graph_store=graph_store, show_progress=True, )



Pēc grafika izveidošanas varat atvērt pārlūkprogrammu Neo4j, lai apstiprinātu importēto grafiku. Jums vajadzētu iegūt līdzīgu vizualizāciju, izpildot šādu Cypher paziņojumu:


 MATCH p=(:__Entity__)--(:__Entity__) RETURN p LIMIT 250


Rezultāti


Grafika vizualizācija — autora attēls


Atbildēšana uz jautājumu

Izmantojot LlamaIndex, tagad ir viegli atbildēt uz jautājumiem. Lai izmantotu noklusējuma grafiku retrīverus, varat uzdot tik vienkāršus jautājumus kā:


 query_engine = index.as_query_engine(include_text=True) response = query_engine.query("What happened at Ryanair?") print(str(response))


Šeit tiek izmantots definētais LLM un iegulšanas modelis. Protams, jūs varat arī ieviest pielāgotus retrīverus, lai nodrošinātu potenciāli labāku precizitāti.

Kopsavilkums

Zināšanu grafiku veidošana, nepaļaujoties uz LLM, ir ne tikai iespējama, bet arī rentabla un efektīva. Precīzi pielāgojot mazākus, uzdevumam raksturīgus modeļus, piemēram, tos, kas iekļauti Relik sistēmā, varat sasniegt augstas veiktspējas informācijas ieguvi savām izguves paplašinātās paaudzes (RAG) lietojumprogrammām.


Entītiju saistīšana, kas ir būtisks solis šajā procesā, nodrošina, ka atpazītās entītijas tiek precīzi kartētas ar atbilstošajiem ierakstiem zināšanu bāzē, tādējādi saglabājot zināšanu diagrammas integritāti un lietderību.


Izmantojot tādus ietvarus kā Relik un tādas platformas kā Neo4j, ir iespējams izveidot progresīvu zināšanu grafikus, kas atvieglo sarežģītus datu analīzes un izguves uzdevumus, bez lielām izmaksām, kas parasti saistītas ar LLM izvietošanu. Šī metode ne tikai padara jaudīgus datu apstrādes rīkus pieejamākus, bet arī veicina inovāciju un efektivitāti informācijas ieguves darbplūsmās.


Noteikti piešķiriet Relik bibliotēkai zvaigznīti . Kods ir pieejams vietnē GitHub .


Lai uzzinātu vairāk par šo tēmu, pievienojieties mums NODES 2024 7. novembrī — mūsu bezmaksas virtuālajā izstrādātāju konferencē par viedajām lietotnēm, zināšanu diagrammām un AI. Reģistrējies TAGAD !

L O A D I N G
. . . comments & more!

About Author

Neo4j HackerNoon profile picture
Neo4j@neo4j
Neo4j is the world's leading graph database, with native graph storage and processing..

PAKARINĀT TAGUS

ŠIS RAKSTS TIKS PĀRSTRĀDĀTS...