paint-brush
Հաղթահարեք LLM հալյուցինացիաները՝ օգտագործելով գիտելիքների հիմքերըկողմից@kattasundeep110
569 ընթերցումներ
569 ընթերցումներ

Հաղթահարեք LLM հալյուցինացիաները՝ օգտագործելով գիտելիքների հիմքերը

կողմից Sundeep Goud Katta7m2024/11/07
Read on Terminal Reader

Չափազանց երկար; Կարդալ

LLM-ներում հալյուցինացիաները կարելի է խուսափել կամ նվազեցնել՝ ուժեղացնելով արձագանքը՝ օգտագործելով գիտելիքների հիմքերը: Գիտելիքների հիմքերը կարող են լինել կազմակերպության ցանկացած տվյալ: LLM-ի պատասխանը հիմնավորված է, և ընդլայնված պատասխանը մատուցվում է օգտագործողին:
featured image - Հաղթահարեք LLM հալյուցինացիաները՝ օգտագործելով գիտելիքների հիմքերը
Sundeep Goud Katta HackerNoon profile picture
0-item

Ի՞նչ:

Եթե դուք հուշում եք LLM-ին «առաջարկեք հիանալի ծրագրավորման լեզու մեքենայական ուսուցման համար»


LLM-ների պատասխանը կլինի. «Մեքենայական ուսուցման համար ամենաառաջարկվող ծրագրավորման լեզուներից մեկը Python-ն է: Python-ը բարձր մակարդակի…»


Ի՞նչ անել, եթե ցանկանում եք, որ ձեր կազմակերպությունը տրամադրի հաստատված կազմակերպության հատուկ տեղեկատվություն, այսինքն՝ ուժեղացնեք պատասխանը կազմակերպության վավերական տեղեկություններով:


Եկեք դա իրականացնենք LLM-ի հետ շփվելիս

Ինչո՞ւ։

Հանրաճանաչ LLM-ները, ինչպիսիք են OpenAI-ի chatGPT-ն, Google-ի Gemini-ն, վերապատրաստվում են հանրությանը հասանելի տվյալների վրա: Նրանք հաճախ զուրկ են կազմակերպության կոնկրետ տեղեկատվությանից: Կան որոշակի ժամանակներ, երբ կազմակերպությունները ցանկանում են ապավինել LLM-ներին: Այնուամենայնիվ, կցանկանայի ուժեղացնել որոշակի կազմակերպությանը հատուկ արձագանքը կամ ավելացնել հերքումներ, երբ հիմնավորման տվյալներ չկան:


Դա անելու գործընթացը հայտնի է որպես LLM-ի պատասխանի հիմնավորում՝ օգտագործելով Գիտելիքի հիմքերը:

Ինչպե՞ս:

Մինչդեռ ես կարող եմ պարզապես խոսել այդ մասին:


Քանի որ ինժեները, նայելով որոշ կոդի հատվածներ, ինձ վստահություն է տալիս:


Դրանց կատարումը բարձրացնում է իմ վստահությունը և նաև երջանկություն է տալիս: Կիսվելն ինձ բավականություն է պատճառում 😄

Կոդ? Ինչու՞ ոչ։ → Python? Իհարկե!!

  1. Տեղադրեք անհրաժեշտ գրադարանները

     pip install openai faiss-cpu numpy python-dotenv
  • openai . OpenAI-ի GPT մոդելների և ներկառուցումների հետ փոխազդելու համար:
  • faiss-cpu . Գրադարան Facebook AI-ի կողմից արդյունավետ նմանության որոնման համար, որն օգտագործվում է ներկառուցված նյութերը պահելու և որոնելու համար:
  • numpy . թվային գործողությունների համար, ներառյալ ներկառուցումները որպես վեկտորներ:
  • python-dotenv . միջավայրի փոփոխականները (օրինակ՝ API ստեղները) .env ֆայլից ապահով բեռնելու համար:


  1. Սահմանեք շրջակա միջավայրի փոփոխականները

    • Նավարկեք դեպի https://platform.openai.com/settings/organization/api-keys
    • Կտտացրեք «Ստեղծել նոր գաղտնի բանալի», ինչպես ցույց է տրված ստորև նկարում:
    • Տրամադրեք մանրամասներ, Դուք կարող եք օգտագործել Ծառայության հաշիվը: Նշեք «Ծառայության հաշվի ID»-ի անունը և ընտրեք նախագիծ:
    • Գաղտնի բանալին պատճենեք clipboard-ում
    • Ստեղծեք .env ֆայլ ձեր նախագծի գրացուցակում: Ավելացրեք ձեր OpenAI API բանալին այս ֆայլին:
     OPENAI_API_KEY=your_openai_api_key_here
    • Այս ֆայլը պահպանում է ձեր API բանալին ապահով և անջատված կոդից:


  2. Նախաձեռնել հաճախորդի և բեռնել միջավայրի փոփոխականները

    • load_dotenv() բեռնում է .env ֆայլը, իսկ os.getenv("OPENAI_API_KEY") առբերում է API ստեղնը: Այս կարգավորումն ապահով է պահում ձեր API բանալին:
 import os from openai import OpenAI from dotenv import load_dotenv import faiss import numpy as np # Load environment variables load_dotenv() client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))


  1. Սահմանեք հիմնավորման տվյալների/գիտելիքների բազան
    • Այս բառարանը պարունակում է հիմնավոր տեղեկություններ թեմաների համար: Իրականում սա կարող է լինել ավելի մեծ տվյալների բազա կամ տվյալների բազա:
 # Grounding data grounding_data = { "Python": "Python is dynamically typed, which can be a double-edged sword. While it makes coding faster and more flexible, it can lead to runtime errors that might have been caught at compile-time in statically-typed languages.", "LLMs": "Large Language Models (LLMs) are neural networks trained on large text datasets.", "Data Science": "Data Science involves using algorithms, data analysis, and machine learning to understand and interpret data.", "Java": "Java is great, it powers most of the machine learning code, and has a rich set of libraries available." }


  1. Ստեղծեք տեքստային ներկառուցումներ

    • Տվյալ տեքստի համար ներկառուցումներ ստեղծելու գործառույթ՝ օգտագործելով OpenAI-ի ներդրման մոդելը: Այս ֆունկցիան կանչում է OpenAI API-ն՝ տեքստային մուտքագրում ստանալու համար, որն այնուհետև վերադարձվում է որպես NumPy զանգված:
     # Function to generate embedding for a text def get_embedding(text): response = client.embeddings.create( model="text-embedding-ada-002", input=text ) return np.array(response.data[0].embedding)


  2. FAISS ինդեքս և ներկառուցումներ հիմնավորման տվյալների համար

    • Ստեղծեք FAISS ինդեքս, կառուցվածք, որը օպտիմիզացված է արագ նմանությունների որոնումների համար և լրացրեք այն հիմնավորման տվյալների ներկառուցմամբ:
     # Create FAISS index and populate it with grounding data embeddings dimension = len(get_embedding("test")) # Dimension of embeddings index = faiss.IndexFlatL2(dimension) # L2 distance index for similarity search grounding_embeddings = [] grounding_keys = list(grounding_data.keys()) for key, text in grounding_data.items(): embedding = get_embedding(text) grounding_embeddings.append(embedding) index.add(np.array([embedding]).astype("float32"))

    • dimension . յուրաքանչյուր ներկառուցման չափը, որն անհրաժեշտ է FAISS ինդեքսը սկզբնավորելու համար:
    • index = faiss.IndexFlatL2(dimension) : Ստեղծում է FAISS ինդեքս, որն օգտագործում է Էվկլիդյան հեռավորությունը (L2) նմանության համար:
    • grounding_data ում յուրաքանչյուր մուտքի համար այս կոդը ստեղծում է ներկառուցում և ավելացնում այն FAISS ինդեքսում:


  3. Վեկտորային որոնման գործառույթ

    • Գործառույթը որոնում է FAISS ինդեքսը հարցմանը ամենանման հիմնավորման տվյալների մուտքագրման համար:
 # Function to perform vector search on FAISS def vector_search(query_text, threshold=0.8): query_embedding = get_embedding(query_text).astype("float32").reshape(1, -1) D, I = index.search(query_embedding, 1) # Search for the closest vector if I[0][0] != -1 and D[0][0] <= threshold: return grounding_data[grounding_keys[I[0][0]]] else: return None # No similar grounding information available
  • Query Embedding . փոխակերպում է հարցման տեքստը ներկառուցվող վեկտորի:
  • FAISS Search . որոնում է հարցմանը ամենամոտ վեկտորի ինդեքսը:
  • Threshold Check . Եթե ամենամոտ վեկտորի հեռավորությունը (D) ցածր է շեմից, այն վերադարձնում է հիմնավորման տեղեկատվությունը: Հակառակ դեպքում դա ցույց է տալիս, որ հուսալի հիմնավորում չի հայտնաբերվել:
  1. Հարցրեք LLM-ին

    Մենք հարցում ենք անում LLM-ին՝ օգտագործելով OpenAI-ի chatgpt api և gpt-4 մոդելը:

     # Query the LLM def query_llm(prompt): response = client.chat.completions.create( model="gpt-4", messages=[ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": prompt} ] ) return response.choices[0].message.content


  1. Ընդլայնված արձագանք

    • Ավելացնում է հիմնավորող տեղեկատվություն, եթե այն առկա է, կամ
    • Ավելացնում է ժխտում, եթե համապատասխան հիմնավոր տեղեկատվություն չի գտնվել:
     def enhance_response(topic, llm_response): grounding_info = vector_search(llm_response) if grounding_info: # Check if the LLM's response aligns well with grounding information return f"{llm_response}\n\n(Verified Information: {grounding_info})" else: # Add a disclaimer when no grounding data is available return f"{llm_response}\n\n(Disclaimer: This information could not be verified against known data and may contain inaccuracies.)"
  2. Սահմանեք հիմնական գործառույթը

    Հիմնական գործառույթը միավորում է ամեն ինչ՝ թույլ տալով մուտքագրել թեմա, հարցումներ կատարել LLM-ում և ստուգել, թե արդյոք պատասխանը համապատասխանում է հիմնավորման տվյալներին:

     # Main function to execute the grounding check def main(): topic = input("Enter a topic: ") llm_response = query_llm(f"What can you tell me about {topic}?") grounding_info = vector_search(llm_response, threshold=0.8) print(f"LLM Response: {llm_response}") print(f"Grounding Information: {grounding_info}") if grounding_info != "No grounding information available": print("Response is grounded and reliable.") else: print("Potential hallucination detected. Using grounded information instead.") print(f"Grounded Answer: {grounding_info}") if __name__ == "__main__": main()

Արդյունք

Կատարեք սցենարը

Կանչեք այս հատվածը՝ օգտագործելով

 python groundin_llm.py


Պատասխան.

Հիմնավորված ուժեղացված արձագանք

Բացատրություն

Եթե նկատում եք պատասխանը, չնայած LLM-ի պատասխանը եղել է «Առավել առաջարկվող ծրագրավորման լեզուներից մեկը մեքենայական ուսուցման համար…», հիմնավորված պատասխանը եղել է «Java-ն հիանալի է, այն ապահովում է մեքենայական ուսուցման կոդի մեծ մասը, այն ունի հարուստ շարք: մատչելի գրադարաններ»:


Դա հնարավոր է օգտագործելով Meta-ի FAISS գրադարանը վեկտորի որոնման համար՝ հիմնված նմանության վրա:

Գործընթացը :

  1. Նախ առբերեք LLM-ի պատասխանը:
  2. Ստուգեք՝ արդյոք մեր գիտելիքների բազան ունի համապատասխան տեղեկատվություն՝ օգտագործելով վեկտորային որոնումը:
  3. Եթե կա, վերադարձրեք պատասխանը «գիտելիքների բազայից»
  4. Եթե ոչ, վերադարձրեք LLM պատասխանը, ինչպես կա:


Ահա կոդը՝ https://github.com/sundeep110/groundingLLMs

Happy Grounding!!