NLP 相關知識
- NLP
- LLM
- Prompt Chaining
- LangChain
NLP
NLP(Natuarl Language Processing)是人工智能的一個分支,中文名自然語言處理,專注于處理和理解人類使用的自然語言。它涵蓋了多個子領域,如文本分類、情感分析、機器翻譯、問答系統、語音識別、語義解析等
NLP 的常見技術范式如下:
全監督學習(非神經網絡):僅在目標任務的輸入輸出樣本數據集上訓練特定任務模型
全監督學習(神經網絡):使用特征學習與模型訓練相結合,通過網絡架構學習數據特征
全監督學習(Fully Supervised Learning)是機器學習中的一種基本學習范式,其中每個訓練樣本都帶有完整的標簽信息。在全監督學習中,算法的目標是從給定的輸入數據(特征)和對應的正確輸出(標簽)中學習一個函數或模型,使得該模型能夠在新的未知數據上準確預測標簽
第三種技術范式詩預訓練(Pretraining),預訓練是機器學習,特別是深度學習中的一種重要技術,特別是在自然語言處理(NLP)領域。預訓練是指在大規模未標注數據集上先進行學習,然后將學到的知識轉移到特定任務的微調階段。這個過程通常分為兩個階段:
- 預訓練階段: 在這個階段,模型(如 Transformer 架構的 BERT、GPT 或 T5 等)會在一個非常大的文本數據集上進行訓練,這個數據集通常是互聯網抓取的網頁、書籍、新聞等。模型的目標是學習語言的一般規律和模式,而不是針對特定任務。這個過程通常使用無監督學習任務,如自動生成下一個單詞(自回歸預訓練)或填充被遮蔽的單詞(掩碼語言模型預訓練)。大模型的本質,是基于大樣本訓練出的預測模型。模型基于給它輸入的語料,根據概率預測可能的回答。模型的預測結果受語料限制
- 微調階段: 預訓練完成后,模型已經具備了一定的語言理解能力。在微調階段,模型會針對特定的下游任務(如文本分類、問答系統、機器翻譯等)進行進一步的訓練,這個階段叫 Fine-tuning。這時,我們會用到帶有標簽的小型數據集,調整模型的參數以優化特定任務的性能。具體來說,是通過人類的反饋來約束模型,從而讓模型回答出人類滿意的答案。當預測模型執行某個任務時,人類可以提供正面或負面的反饋(手動去選擇對錯),以指導模型的行為
預訓練的好處在于,它允許模型在大量數據上學習通用的語言表示,這些表示可以捕捉到語言的豐富結構和語義信息。這樣,在微調時,模型只需要少量的標記數據就能達到較好的性能,尤其對于那些標記數據稀缺的任務來說,預訓練極大地提高了效率和效果
LLM
LLM 是近年來隨著深度學習發展而出現的一種特定類型的 NLP 模型。這些模型非常大,擁有數億甚至數千億個參數
LLM通過訓練大規模的文本數據集(如互聯網上的網頁、書籍、文章等)來學習語言模式和結構。著名的 LLM 包括 Google 的 BERT、Facebook 的 RoBERTa、OpenAI 的 GPT 系列以及阿里云的 Qwen 等
這些模型能夠執行多種 NLP 任務,如回答問題、生成文本、翻譯等,并且由于其規模和復雜性,它們在許多任務上表現出優秀的性能
Prompt Chaining
鏈允許我們將多個組件組合在一起以創建一個單一的、連貫的任務。例如,我們可以創建一個鏈,它接受用戶輸入,使用 PromptTemplate 對其進行格式化,然后將格式化的響應傳遞給 LLM。另外我們也可以通過將多個鏈組合在一起,或者將鏈與其他組件組合來構建更復雜的鏈
熟悉 openai 的都知道,openai 提供的聊天接口 api,本身是不具備“記憶的”能力。如果想要使聊天具有記憶功能,則需要我們自行維護聊天記錄,即每次把聊天記錄發給 gpt 發送的內容也越來越多,那很可能就碰到 token 的限制。聰明的同學會發現,其實我們只保留最近幾次的聊天記錄就可以了,這確實是一種解法,但是不夠完美
Prompt Chaining 確實涉及到使用對話歷史來指導模型生成連貫的響應,但它不僅僅是簡單地將用戶和模型之間的完整對話歷史拼接在一起并一次性發送給模型。在實際應用中,Prompt Chaining 通常更加復雜和精細
LangChain
LangChain 作為一個大語言模型開發框架,是 LLM 應用架構的重要一環。那什么是 LLM 應用架構呢?其實就是指基于語言模型的應用程序設計和開發的架構
LangChian 可以將 LLM 模型、向量數據庫、交互層 Prompt、外部知識、外部工具整合到一起,進而可以自由構建 LLM 應用
LangChain 為使用聊天模型提供了一個標準接口。聊天模型是語言模型的一種變體。雖然聊天模型在內部使用語言模型,但它們所提供的接口略有不同。它們不是暴露一個 “輸入文本,輸出文本” 的 API,而是提供了一個以 “聊天消息” 作為輸入和輸出的接口
聊天模型的接口是基于消息而不是原始文本。LangChain 目前支持的消息類型有 AIMessage、HumanMessage、SystemMessage 和 ChatMessage,其中 ChatMessage 接受一個任意的角色參數。大多數情況下,您只需要處理 HumanMessage、AIMessage 和 SystemMessage
但是如果只是這樣的話,那為什么不直接調用大模型接口呢。所以 LangChain 還提供了很多其他功能,比如緩存 LLM 返回結果。上面介紹了聊天的角色處理以及如何進行批量處理消息。我們都知道向 openAI 調用接口都是要花錢的,如果用戶問同一個問題,對結果進行了緩存,這樣就可以減少接口的調用并且也能加快接口返回的速度
那么怎么判斷用戶下次問了相似的問題呢,這就需要使用到向量庫了,比如 ES。這個更多的是用于文檔、文本或者大量數據的總結、問答場景,一般是和向量庫一起使用,實現向量匹配。其實就是把文本等內容轉成多維數組,可以后續進行相似性的計算和檢索
他相比 fine-tuning 最大的優勢就是,不用進行訓練,并且可以實時添加新的內容,而不用加一次新的內容就訓練一次,并且各方面成本要比 fine-tuning 低很多
向量庫:將一段文本、圖像、音頻拆分成多個緯度的數據,根據用戶傳入,錨定坐標然后選擇最近的點做返回,這大概就是向量數據庫在 LLM 工程(langchain)中的使用,簡單來說就是做緩存