發佈日期:

LlamaIndex的基礎元件

基礎元件

LlamaIndex 的基礎元件包括:

  1. Nodes(節點):LlamaIndex 的基本單位,是一個包含一段文本的資料結構。當提供一個文件時,可以將其分割成多個片段並存儲在節點中。
  2. Document Loader(文檔加載器):用於從各種來源(如網頁、YouTube 視頻、PDF 等)提取數據的接口。LlamaIndex 支持多種文檔加載器,用於不同類型的數據源。
  3. Indexes(索引):在 LlamaIndex 中,索引是一種組織和存儲來自各種數據源信息的資料結構,使得搜索變得更加容易。索引是建立在多個節點之上的。LlamaIndex 提供不同類型的索引,方便應對不同的使用場景。
  4. Retrievers(檢索器):在 LlamaIndex 中,檢索器幫助從索引中基於給定的查詢檢索一組節點。它類似於一個搜索工具,從大型數據集中找到相關信息以回答用戶的問題。LlamaIndex 提供不同類型的檢索器,以應對不同的檢索需求。
  5. Query Engines(查詢引擎):在 LlamaIndex 中,查詢引擎處理用戶輸入的查詢,與底層數據結構(如索引)交互,並返回一個綜合的響應。LlamaIndex 提供不同類型的查詢引擎,以應對不同的查詢處理需求。

載入資料

使用SimpleDirectoryReader來載入本地端資料

from llama_index import SimpleDirectoryReader

documents = SimpleDirectoryReader('./data').load_data()

將資料分割成節點

節點是基本的資料結構,用於保存輸入。我們將使用以下程式碼將上述輸入分割成多個節點。

from llama_index.node_parser import SimpleNodeParser
parser = SimpleNodeParser()
nodes = parser.get_nodes_from_documents(documents)

產生索引

現在我們已經創建了節點,可以在其上建立索引。我們將使用 VectorStoreIndex,它會從節點中的所有文本創建嵌入,並將其存儲在向量數據庫中。

from llama_index import LLMPredictor, VectorStoreIndex
from langchain import OpenAI
os.environ["OPENAI_API_KEY"] = "api-key"

index = VectorStoreIndex(nodes)

建立檢索器

我們將使用 VectorIndexRetriever,它會根據相似度檢索出前 k 個匹配的文件。在這個例子中,我們將 k 設為 2。

from llama_index.retrievers import VectorIndexRetriever

retriever = VectorIndexRetriever(
    index=index,
    similarity_top_k=2,
)   

建立查詢引擎

現在我們可以在檢索器之上構建一個查詢引擎來開始進行查詢。

from llama_index.query_engine import RetrieverQueryEngine

query_engine = RetrieverQueryEngine(
    retriever=retriever
)

詢問問題

現在我們可以在檢索器上建立一個查詢引擎來開始進行查詢。

response = query_engine.query("What did the author do growing up?")
print(response)

Jupyter Notebook完整範例下載

https://github.com/SamurAIGPT/LlamaIndex-course/blob/main/fundamentals/Fundamentals.ipynb

發佈日期:

LlamaIndex介紹

主要功能

LlamaIndex 專注於將非結構化數據(如文本文件、PDF、網頁內容等)轉換為可以用於查詢和分析的結構化索引。它為用戶提供了一種簡單的方法來構建和查詢這些索引,從而更好地利用大型語言模型進行數據處理和檢索。

LlamaIndex 提供了以下功能來幫忙構建上下文增強 LLM 應用程式:

  • 數據索引和向量化:LlamaIndex 可以將非結構化數據轉換為向量表示,這對於 LLM 來說更易於處理。可以輕鬆地將自己的數據添加到 LlamaIndex 中,並讓 LLM 從中學習。
  • 數據檢索:LlamaIndex 可以根據用戶查詢快速準確地檢索相關數據。這意味著 LLM 應用程式將能夠快速找到其所需的信息,以提供準確的響應。
  • LLM 集成:LlamaIndex 可以與各種 LLM 集成,例如 GPT-3 和 Jurassic-1 Jumbo。這意味著可以選擇最適合的應用程式的 LLM。

使用教學(使用OpenAI的功能)

官方教學: https://docs.llamaindex.ai/en/latest/getting_started/starter_example/

LlamaIndex預設會使用OpenAI的Indexing功能去做文字的索引,以下為一個官方的範例,使用之前需要先安裝llama-index套件

pip install llama-index
pip install python-dotenv

接著下載數據並且放到data資料夾內,然後設定環境變數

設定環境變數的方法為到專案內新增.env檔案,並在其中設定OPENAI_API_KEY(可以到這邊申請)

OPENAI_API_KEY=xxxxxxxxxxxxxxxxxxxxxxx

接著新增一個檔案名為starter.py,內容如下:

from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
import logging
import sys
import os.path
from llama_index.core import (
    VectorStoreIndex,
    SimpleDirectoryReader,
    StorageContext,
    load_index_from_storage,
)
# 載入環境變數
from dotenv import load_dotenv 
load_dotenv()

logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))

# 假如已經有索引了,就不用再重新建立索引
PERSIST_DIR = "./storage"
if not os.path.exists(PERSIST_DIR):
    # 載入文件並建立索引
    documents = SimpleDirectoryReader("data").load_data()
    index = VectorStoreIndex.from_documents(documents)
    # 儲存索引
    index.storage_context.persist(persist_dir=PERSIST_DIR)
else:
    # 載入已存在的索引
    storage_context = StorageContext.from_defaults(persist_dir=PERSIST_DIR)
    index = load_index_from_storage(storage_context)

# 使用索引的資料詢問問題
query_engine = index.as_query_engine()
response = query_engine.query("What did the author do growing up?")
print(response)

此時文件結構應該像下面這樣子

執行之後,可以看到程式載入了data內的資料,呼叫https://api.openai.com/v1/embeddings來做詞嵌入的動作

以下是訊息中的一些重要部分:

  • connect_tcp.startedconnect_tcp.complete:表示開始和完成 TCP 連接。在這裡,連接成功建立到了 api.openai.com 的 443 端口。
  • start_tls.startedstart_tls.complete:表示開始和完成 TLS 握手過程,確保通信的安全性。
  • send_request_headers.startedsend_request_headers.complete:表示開始和完成發送請求頭的過程。
  • send_request_body.startedsend_request_body.complete:表示開始和完成發送請求主體的過程。
  • receive_response_headers.startedreceive_response_headers.complete:表示開始和完成接收響應頭的過程。響應頭中包含了一些重要的信息,如響應的 HTTP 狀態碼、內容類型、限速等。
  • INFO:httpx:HTTP Request: POST https://api.openai.com/v1/embeddings "HTTP/1.1 200 OK":表示成功發送了 HTTP POST 請求到 https://api.openai.com/v1/embeddings 並收到了 200 OK 的響應。

上面這些訊息則代表已經生成了storage資料夾,儲存詞嵌入的結果

使用索引的資料詢問問題

下面這樣簡短的程式碼可自動載入"./storage"內的嵌入檔案,並且將嵌入的檔案和詢問的問題傳送給OpenAI API的https://api.openai.com/v1/chat/completions文字生成機器人

# 載入已存在的索引
storage_context = StorageContext.from_defaults(persist_dir=PERSIST_DIR)
index = load_index_from_storage(storage_context)

# 使用索引的資料詢問問題
query_engine = index.as_query_engine()
response = query_engine.query("What did the author do growing up?")
print(response)

則可看到得到的回應如下:

The author worked on writing short stories and programming, starting with the IBM 1401 in 9th grade, using an early version of Fortran. Later, the author transitioned to microcomputers, particularly a TRS-80, where they wrote simple games, a rocket prediction program, and a word processor.

檢索增強生成 (RAG)

RAG(檢索增強生成)是一種用於構建大型語言模型 (LLM) 應用程式的架構。它由以下五個關鍵階段組成:

  1. 載入:此階段涉及將數據從其原始位置導入到您的管道中。數據可以來自各種來源,包括文檔、數據庫、API 等。Node 是 LlamaIndex 中數據的原子單位,表示文件中的“chunk”。節點具有將它們與它們所在的文件以及其他節點相關聯的元數據。連接器:資料連接器(通常稱為讀取器),可以從各種數據源和格式,例如資料庫、檔案、網路 API 等,將資料讀取到 LlamaIndex 的文件 (Documents) 和節點 (Nodes) 中。
  2. 索引:取得資料後,LlamaIndex 可以協助您將資料建立索引,變成易於檢索的結構。這通常會包含生成向量嵌入 (vector embeddings),並將它們儲存在稱為向量儲存庫 (vector store) 的特殊數據庫中。索引也可以儲存各種關於資料的元數據(metadata)。
    大型語言模型 (LLMs) 會產生稱為嵌入的資料數值表示。當您根據相關性過濾資料時,LlamaIndex 會將查詢轉換成嵌入,您的向量儲存庫會找到與查詢嵌入數值上相似的資料。
  3. 儲存:此階段涉及將索引數據存儲在持久存儲器中。這使您可以稍後查詢數據,而無需再次重新索引。LlamaIndex 提供了各種存儲選項,可幫助您選擇最適合您的需求的選項。
  4. 查詢:此階段涉及使用 LLM 對索引數據進行查詢。LlamaIndex 提供了各種查詢方法,包括子查詢、多步驟查詢和混合策略。常使用的術語包括RetrieversRoutersNode PostprocessorsResponse Synthesizers
  5. 評估:此階段涉及評估您的管道的性能。這包括測量查詢的準確性、相關性和速度。LlamaIndex 提供了各種評估工具,可幫助您微調您的管道以獲得最佳結果。

官方釋出的範例專案

https://github.com/run-llama/chat-llamaindex

發佈日期:

機器學習的效能衡量指標

混淆矩陣

混淆矩陣(Confusion Matrix)是一種評估分類模型性能的工具,特別適用於監督學習中的分類問題。它能夠幫助你了解模型在不同類別上的預測結果,並提供更多信息來評估模型的準確性。

混淆矩陣是一個方陣,其中每一行代表實際的類別,每一列代表模型預測的類別。以下是一個二元分類問題的混淆矩陣範例:

預測為正類 (Positive)預測為負類 (Negative)
實際為正類 (Positive)真正類 (TP)偽負類 (FN)
實際為負類 (Negative)偽正類 (FP)真負類 (TN)
  • TP(True Positive)是模型將正例正確預測為正例的樣本數量。
  • TN(True Negative)是模型將負例正確預測為負例的樣本數量。
  • FP(False Positive)是模型將負例錯誤預測為正例的樣本數量。
  • FN(False Negative)是模型將正例錯誤預測為負例的樣本數量。

準確率(Accuracy)

預測正確的樣本數量與總樣本數量之比

Accuracy= (tp+tn)/(tp+fp+fn+tn)

精確率(Precision)

指的是在所有被模型預測為正類的樣本中,實際上是正類的比例。換句話說,它衡量了模型正確預測正例的能力,並且避免錯誤地將負例分類為正例

Precision= tp/(tp+fp)

召回率(Recall)

實際上被正確預測為正例的樣本數量除以所有實際正類樣本的數量

 Recall = tp/(tp+fn)

F1-score

是一個綜合了精確度(Precision)和召回率(Recall)的指標,使用精確度和召回率的值計算 F1-score

Precision-Recall 曲線

用於評估二元分類器性能的一種圖表。它描述了在不同閾值下模型的精確度(Precision)和召回率(Recall)之間的折衷關係。

在 Precision-Recall 曲線上,x 軸通常表示召回率,y 軸表示精確度。理想情況下,我們希望模型能夠同時實現高精確度和高召回率,即圖表右上角的位置。但是,通常情況下,提高精確度可能會降低召回率,反之亦然。這種權衡關係取決於分類器的閾值設置,可以通過調整閾值來改變精確度和召回率之間的平衡。

ISO-F1 曲線

ISO-F1 曲線是一種評估多類別分類器性能的方法,特別用於不平衡類別數據集。ISO-F1 曲線通過在 F1-score 和類別別不平衡程度之間繪製關係圖來評估分類器的性能。

ISO-F1 曲線以不同的 F1-score 為橫軸,以類別別不平衡程度(通常以每個類別的正例數量比例或類別的預測概率分佈)為縱軸。它通過改變分類器的閾值或類別別的權重來繪製曲線,從而呈現出不同 F1-score 和類別別不平衡程度之間的平衡關係。

ISO-F1 曲線的一個常見應用是用於調整分類器的閾值,從而使得在不同類別別的不平衡情況下都能達到相對均衡的性能。透過該曲線,可以找到一個合適的閾值,以平衡不同類別別之間的性能,從而提高整體的分類器性能。

發佈日期:

LangChain的基礎鏈介紹

甚麼是LangChain

LangChain是根據大型語言模型(LLM) 打造應用程式的框架。LangChain使用基礎鏈來建立由 LLM(大型語言模型)支援的應用程式。這些基本鍊是模組化構建塊,用於在應用程式中執行特定任務。

LangChain 是用於開發由語言模型驅動的應用程式的框架。

  • 具有上下文採集能力:將語言模型連接到上下文來源(提示指令,少量的範例,需要回應的內容等)
  • 具有推理能力:依賴語言模型進行推理(根據提供的上下文如何回答,採取什麼行動等)

教學資源

鏈結構介紹

鏈( Chains )是一個非常通用的概念,它指的是將一系列模組化組件(或其他鏈)以特定方式組合起來,以實現共同的用例。

LLMChain(單鏈)

類別說明: https://api.python.langchain.com/en/latest/chains/langchain.chains.llm.LLMChain.html

最常用的鏈類型,它結合了PromptTemplate(input)、Model(LLM)和Guardrails(output)來接收用戶輸入,進行相應的格式化,將其傳遞給模型並獲取回應,然後驗證和修正(如果需要)模型的輸出。

SequentialChain(循序鏈)

類別說明: https://api.python.langchain.com/en/latest/chains/langchain.chains.sequential.SequentialChain.html


同一次的詢問,至少兩次的與LLM交互,把複雜的問題拆解成小的問題,然後再輸出回應

這邊是一篇說明文章:https://blog.csdn.net/wangjiansui/article/details/137509565

總之就是讓輸入到輸出之間串聯多個LLM系統並依序執行

以下是如何使用 SequentialChain 的一些範例:

  • 機器翻譯: SequentialChain 可用於透過使用專門針對不同語言對的 LLM 呼叫鏈將文字從一種語言翻譯為另一種語言。
  • 文字摘要: SequentialChain 可用於透過使用一系列 LLM 呼叫來摘要文本,這些呼叫從文本中提取關鍵訊息,然後產生摘要。
  • Q&A: SequentialChain 可用於透過使用一系列 LLM 調用來回答問題,這些調用從文本文檔中提取信息,然後生成問題的答案。

TransformChain(轉換鏈)

類別說明: https://api.python.langchain.com/en/latest/chains/langchain.chains.transform.TransformChain.html

這些轉換可以是簡單的文字操作(例如,文字清理)或更複雜的模型。

以下是 TransformChain 工作原理的詳細說明:

  1. 輸入: TransformChain 接收 LLM 的輸出作為輸入。此輸出可以是文字、程式碼或任何其他資料格式。
  2. 轉換:然後 TransformChain 對輸入資料套用一系列轉換。這些轉換由使用者提供的函數或預先定義的 LangChain 轉換定義。
  3. 輸出: TransformChain 的最終輸出是將所有轉換應用於輸入資料的結果。此輸出可以用作另一個鏈的輸入或作為應用程式的最終輸出。

以下是如何使用 TransformChain 的一些範例:

  • 文字清理: TransformChain 可用於透過刪除標點符號、將文字轉換為小寫以及刪除停用詞來清理文字。
  • 特徵提取: TransformChain 可用於從文本中提取特徵,例如詞頻或情緒分數。
  • 數據標準化: TransformChain 可用於標準化數據,例如縮放數值數據或將分類數據轉換為數值表示。
發佈日期:

QLoRA – Efficient Finetuning of Quantized LLMs

QLoRA 擴展了 LoRA,透過量化原始網路的權重值來提高效率,從高解析度資料類型(如 Float32)到較低解析度資料類型(如 int4)。這會減少記憶體需求並加快計算速度。

什麼是QLoRA

QLORA(Quantized LoRA)方法是一種用於大型語言模型(LLMs)的微調的新方法。傳統上,微調大型模型需要龐大的計算資源,而QLORA則提出了一種可以在GPU上進行低成本微調的方法。QLORA的關鍵創新在於使用了4位量化技術,並引入了可訓練的低秩適配器權重,從而大幅降低了微調過程中所需的記憶體,並且在不影響模型性能的情況下實現了相當於16位完全微調基準的預測性能。

QLoRA 技術所做的三個面向改進

  • 4-bit 常態浮點(NormalFloat):這是一種資訊理論上最優的量化資料類型,適用於服徠常態分佈的資料。與4-bit 整數和4-bit 浮點相比,它在實踐中能取得更好的效果。量化是指用更少的位數來表示數據,從而降低記憶體佔用。
  • 雙量化(Double Quantization):這種方法會量化量化常數本身,可以節省大約每個參數0.37 位(例如對於一個65B 參數的模型,可以節省大約3GB 內存)。量化常數是量化過程中產生的一些中間值。
  • 分頁優化器(Paged Optimizers):這利用了NVIDIA 統一記憶體的功能,避免在處理包含長序列的迷你批次資料時梯度檢查點(gradient checkpointing) 造成的記憶體激增。梯度檢查點是一種訓練技巧,可以節省內存,但可能會降低精度。

由上圖可知,QLoRA 利用了nVidia 統一記憶體功能,當GPU 記憶體不足時,該功能允許GPU->CPU 無縫頁面傳輸,從而管理GPU 中突然出現的記憶體峰值,並協助解決記憶體溢出/超限問題。

利用QLoRA所做的研究

由於 QLORA 的高效性,可以進行深入的指令微調和聊天機器人效能研究,所涉及的模型規模是常規微調因記憶體開銷而無法企及的。 因此,提出論文的團隊針對多個指令微調資料集、模型架構以及參數規模介於 80M 到 65B 的模型訓練了超過 1000 個模型。 除了證明 QLORA 能恢復 16 位元精度效能(§4)以及訓練出最先進的聊天機器人 Guanaco(§5)之外,還分析了訓練模型的趨勢。

首先,他們發現資料品質比資料集大小重要得多,例如,一個包含9k 個樣本的資料集(OASST1) 在聊天機器人效能方面優於一個包含45 萬個樣本的資料集(子集化的FLAN v2 ),即使兩者都旨在支持遵循指令泛化。

其次,他們展示了強大的大規模多任務語言理解(MMLU) 基準測試性能並不意味著強大的Vicuna 聊天機器人基準測試性能,反之亦然- 換句話說,對於給定任務而言,數據集的適用性比大小更重要

相關資源:

發佈日期:

LoRA (Low-Rank Adaptation)

LoRA(Low-Rank Adaptation)是什麼

LoRA是一種有效的參數微調技術,可幫助改善大型語言模型在特定任務上的效能表現,並且具有較低的運算和儲存成本。它是一種用於在大型語言模型(LLM)上進行參數微調的技術。 它旨在透過降低模型參數的秩(rank)來減少模型的複雜度,從而提高模型的泛化能力和適應性。

在傳統的參數微調過程中,常常會遇到過擬合的問題,特別是當訓練資料較少或訓練資料與目標任務不符時。 LoRA透過引入一個低秩的參數矩陣,將原始的高維參數矩陣分解成兩個低秩矩陣的乘積,從而降低模型的複雜度。 這種降維的方式可以有效地減少模型的參數量,減緩過度擬合的情況,並提高模型的泛化能力。

LoRA的主要優點

  • 更快的訓練速度 :將原始的高維度參數矩陣分解成低秩矩陣,可以大幅減少模型的參數數量。
  • 更低的計算成本 : 將原始的高維度參數矩陣分解成低秩矩陣,進而降低模型的計算和儲存成本。它不是添加層,而是為參數添加值,不會導致推理延遲。
  • 更少的泛化損失: LoRA能夠提高模型的泛化能力,使其更能適應不同的任務和領域。

LoRA流程說明

  • 使用預訓練的 LLM 權重初始化 A 和 B 矩陣。
  • 將 LLM 應用於特定任務的訓練數據集。
  • 在訓練過程中,只有 A 矩陣會針對訓練數據集(輸入資料(X))進行微調。
  • 訓練完成後,獲得了針對特定任務適應的 LLM,也就是H(輸出)。

運作原理

在LoRA中,一組新參數同時加入了網路WA和中WB。這些網路利用低秩權重向量,其向量的維度表示為dxr和rxd。在這裡,「d」代表原始凍結網路參數向量的維度,而「r」表示所選的低秩或更低維度。值得注意的是,「r」的值越小,模型訓練過程就越加速和簡化。確定適當的「r」值是LoRA中的關鍵決策。選擇較低的值會導致更快且更具成本效益的模型訓練,但可能不會產生最佳結果。相反,選擇較高的「r」值會增加訓練時間和成本,但會增強模型處理更複雜任務的能力。

LoRA的運作方式是,首先需要一個預先訓練的LLM,並凍結其大部分參數。然後,將這些凍結的預訓練模型權重與可訓練的秩分解矩陣一起注入到變壓器的每一層中。這樣做有助於精細化模型,特別是在低資源硬體上調整模型。

從上表可以看出,LoRA 方法的結果與經典的微調方法相當,可以用更少的時間和資源獲得或多或少相同的結果,並且有更快的執行時間和更短的訓練時間,真是太棒了!

結論

  • LoRA 是一種模型適應技術,可減少 LLM 中的參數數量,同時保持其效能。
  • 它透過將LLM的權重分解為低秩矩陣(共同特徵)和隨機矩陣(特定於任務的變體)來實現這一點。
  • 低秩矩陣和隨機矩陣相結合產生一個特定於任務的適配器,該適配器可以根據特定任務自訂 LLM。
  • LoRA 在訓練速度、運算效率和模型大小方面具有優勢,使其適合資源受限的環境。
  • LoRA 多數的成果比 Fine-tuning 的成果還要好,並且訓練的參數量遠小於 Fine-tuning。

更多資訊請見

LoRA: Low-Rank Adaptation of Large Language Models:

發佈日期:

Retrieval-Augmented LLMs

檢索增強生成(RAG)的工作流程

從使用者查詢開始,透過向量資料庫檢索,到填入提示,最終形成回答的整個過程。

RETA-LLM框架可以看作是實現RAG目標的一種具體實現方式,它提供了一套模組化的工具和方法來將外部知識整合到語言模型中,以提升其產生答案的能力。

RETA-LLM Framework

研究論文: https://arxiv.org/pdf/2306.05212v1

過去通用的LLM增強工具包(如LangChain)與RETA-LLM有所不同,RETA-LLM專注於檢索增強LLMs,並提供更多的插件模組。

檢索增強LLMs使用兩個模組的檢索和生成策略:

  • 根據用戶的請求檢索文件或段落(文件檢索模組)
  • 利用這些相關文件作為參考生成答案(答案生成模組)。

除了這兩個基本模組外,RETA-LLM還提供了三個可選模組:

  • 請求重寫模組,以使用戶當前的請求更完整和清晰
  • 萃取模組,從檢索到的整個文件內容中提取相關段落或片段
  • 事實檢查模組,以驗證生成答案中是否存在事實錯誤

這些可選模組可以使IR系統和LLMs之間的交互更加有效和順暢。RETA-LLM中LLMs和IR系統之間的解綁更加徹底,這使得搜索引擎和LLMs的定制更加方便。

RETA-LLM的框架圖

RETA-LLM的工作流程如下:

  • 使用請求重寫模組修改目前使用者請求,使其完整且清晰。 由於使用者可能向RETA-LLM提出一系列問題,目前使用者請求的語意可能不完整。 例如,使用者可能會問「經濟學院怎麼樣?」而歷史請求是「介紹資訊學院的專業」。 在這種情況下,使用者的準確意思是「介紹經濟學院的專業」。 由於LLMs在對話式密集檢索中顯示出出色的重寫查詢能力,RETA-LLM將當前使用者請求和先前的對話歷史提供給LLMs進行重寫。
  • 然後,RETA-LLM使用文件檢索模組根據修訂後的使用者請求從外部語料庫中檢索相關文件。 文檔檢索模組是與IR系統連接的模組。 它從外部知識語料庫中檢索相關文件並傳回前K個。 。
  • 接下來,RETA-LLM使用段萃取模組從檢索到的文件中提取與使用者請求相關的片段,以形成參考文獻。 由於LLMs的輸入長度限制(通常為2048或4096個標記),因此不可能直接將所有前K個相關文件內容連接起來作為它們產生答案的參考文獻。 透過截斷文件內容的瑣碎方法可能會遺失其中的重要資訊。 因此,RETA-LLM重複使用LLMs自身從修訂後的請求中提取相關片段。 由於一個文件的長度也可能超出限制,RETA-LLM採用滑動視窗策略逐步擷取片段。 在我們的預設配置中,滑動視窗大小和步長設定為512和256。 然後,這些片段被連接在一起作為參考文獻。
  • 此外,RETA-LLM使用答案產生模組為使用者請求產生答案。 如同先前的研究所建議的,透過提供來自外部語料庫檢索到的參考文獻,LLMs可以產生更準確的答案。
  • 最後,RETA-LLM使用事實檢查模組驗證產生的答案是否包含事實錯誤,並為使用者要求輸出最終回應。 儘管提供了產生的額外證據,LLMs也可能出現幻覺。 有必要設計一個模組進行進一步的事實驗證。 由於LLMs具有強大的自然語言理解能力,我們將參考文獻和生成的答案提供給它們進行判斷。 因此,RETA-LLM可以決定是否輸出產生的答案,或只是說「我無法回答這個問題」。

請注意,LLMs的所有輸入都包含在指示或提示中。 如圖1所示,在RETA-LLM中完全解開了IR系統和LLMs之間的連結。 我們RETA-LLM中的這種分離設計使用戶可以自訂自己的個人搜尋引擎和LLMs。

知識檢索的過程

  • 內建工具增強助手功能: 內建的工具可以將上傳的文件中的外部知識與助手功能結合起來,使助手能夠存取並利用這些外部知識來回答使用者的問題。
  • 內容分塊、索引和嵌入儲存: 上傳的檔案內容將被分成區塊,然後進行索引和嵌入儲存。 這意味著文件內容將被切割成較小的片段,每個片段都會被賦予一個特定的標識,並且會轉換成向量表示,以便更有效地處理和檢索。
  • 檢索嵌入以回答輸入查詢: 當使用者提出查詢時,系統會將檢索嵌入的向量表示以尋找與查詢相關的內容區塊。 這些內容區塊中包含的知識將被用來回答使用者的查詢,以提供更準確和全面的答案。

RAG的挑戰

  • 檢索模型: 選擇合適的檢索模型是一項挑戰。 不同的檢索模型可能適用於不同的場景,因此需要仔細選擇以確保檢索的效果和效率。
  • 稠密或稀疏表示: 在RAG中,可以使用稠密或稀疏的表示來表示檢索到的內容。 稠密表示通常具有更高的維度和更多的信息,但也可能更加計算密集。 稀疏表示則可能更加高效,但可能會遺失某些細節資訊。
  • 內容區塊的單位: 將內容分成適當的區塊是一個挑戰。 區塊的大小和粒度會影響到檢索和處理的效率,因此需要找到一個合適的單位來平衡資訊的完整性和處理的複雜性。
  • 類似的參考引入噪音: 當有多個相似的參考資料時,可能會引入噪音,使系統難以確定哪個參考是最相關的。 這可能會影響答案的準確性和一致性。
  • 有些問題需要跨文件引用來回答: 某些問題可能需要引用多個文件中的資訊才能進行回答。 這增加了檢索和整合資訊的複雜性,需要係統能夠有效地處理跨文件的引用和關聯資訊。
發佈日期:

提示工程框架的概念

明確具體的提問

  • 請求模型採用一個人物角色
  • 使用分隔符清楚地指示輸入的不同部分
  • 指定完成任務所需的步驟
  • 提供示例
  • 指定輸出的期望長度

以下為一個範例

In-Context Learning和Chain-of-Thought

  • In-Context Learning(上下文學習): 這是指模型在學習和處理文字時能夠考慮上下文資訊的能力。 在上下文學習中,模型不僅僅關注單字或短語的訊息,而是根據前後文的內容來理解當前文本的含義。 這種能力使得模型能夠更好地理解文本的語境,從而產生更準確和連貫的輸出。
  • Chain-of-Thought(思維鏈): 這指的是模型在生成文本時能夠保持連貫性和邏輯性的能力。 在思維鏈中,模型可以根據前面產生的內容來決定後續產生的內容,並保持文字的一致性和邏輯性。 這種能力使得模型能夠產生更連貫和有意義的文字輸出。
圖片來源: https://arxiv.org/pdf/2205.11916.pdf

Tree-of-Thoughts思維樹

思考樹(ToT)是一種透過將複雜問題分解為更易於解決的小問題,為LLM推理提供了更結構化的提示框架。

與在鏈中推理的CoT不同,ToT以樹的形式組織其解決問題的策略。每個節點都被稱為“思維”,是一個連貫的語言序列,是通往最終答案的一步。

透過將問題劃分為離散的「思想」單元——從填字遊戲中的一系列簡短單字到數學方程式的一個組成部分——ToT確保問題的每個階段都得到系統的解決。

圖片來源: https://arxiv.org/pdf/2305.10601.pdf

在「oracle模式」下,ToT的表現比CoT還要好

發佈日期:

基於神經網路的語言模型

基於神經網路的語言模型

基於神經網路的語言模型是一種利用深度學習技術,特別是透過循環神經網絡(RNN)或注意力機制(Transformer)的模型,來處理自然語言文本並生成下一個詞彙的模型。相較於傳統的方法,這種模型具有以下特點:

  1. 直接學習預測下一個詞彙: 這些模型直接從大量的文本資料中學習,不需要手動設計特徵或規則。它們通過觀察先前的詞彙序列,學習預測接下來的詞彙。
  2. 利用詞彙相量表徵語意資訊: 在進行預測時,這些模型使用詞彙的向量表示,這些向量捕捉了詞彙之間的語意關係。這使得模型能夠捕捉到詞彙之間的語義相似性,而不僅僅是單純的字符匹配。
  3. 克服死板的字符匹配: RNN和Transformer網絡並不僅僅是計算連續N個詞彙的頻率,它們能夠捕捉到更複雜的詞彙之間的關係,包括不同詞彙之間的語義相似性和語境相依性。
  4. 減少稀疏性: 由於詞彙向量化,模型能夠減少稀疏性,從而可以從有限的資料中學習到更豐富的詞彙組合和上下文意義。這意味著即使在有限的資料情況下,模型也能夠產生更加流暢和自然的文本。

依據用戶的指示,LLMs可以執行各種從所未見的新任務,甚至不需要任何樣本、範例。

T5 (Text-to-Text Transfer Transformer) 模型

所有自然語言處理的任務,都可以化為序列對序列的生成任務

缺點包括:

  • 只能執行已經學過的任務
  • 對提示極其敏感,無法泛化
  • 缺乏推理能力,無法處理新任務
  • 即使在已知任務上,性能也可能有限
  • 有著輸入和輸出長度的限制。

LLM的演化歷史


大型語言模型具有以下特別能力:

  1. In-context learning(上下文學習): 這些模型能夠通過理解輸入文本的上下文來進行學習和產生輸出。它們能夠利用先前的信息和對話歷史來生成更加連貫和相關的回應。
  2. Instruction following(遵循指示): 大型語言模型能夠理解和遵循輸入中的指示或命令。它們能夠從自然語言描述中抽取出指示的含義,並執行相應的操作或生成符合指示的輸出。
  3. Step-by-step reasoning(逐步推理): 這些模型能夠通過逐步推理的方式來解決複雜的問題。它們能夠理解問題的各個步驟,從中推斷出答案或採取相應的行動,進而解決問題。

微調過程

微調過程如下:

  1. 從預訓練的 GPT 模型開始。
  2. 使用反向傳播算法訓練模型以最小化誤差。
  3. 使用上下文學習技術提高模型的性能。
  4. 使用元梯度 AWICL 算法進一步提高模型的性能。

此圖表顯示了微調過程的各個步驟

Dual View 是一種 上下文學習 技術,允許模型考慮輸入句子和查詢句子的上下文。它通過向模型提供兩個視圖來實現:

發佈日期:

Phi-2 vs Phi-3大語言模型初探

Phi-2 模型介紹

官方介紹: https://www.microsoft.com/en-us/research/blog/phi-2-the-surprising-power-of-small-language-models/

Phi-2 是一個擁有27 億個參數的 Transformer。它使用與Phi-1.5相同的資料來源進行訓練,並使用由各種 NLP 合成文字和過濾網站組成的新資料來源進行了增強(出於安全性和教育價值)。當根據測試常識、語言理解和邏輯推理的基準進行評估時,Phi-2 在參數少於 130 億的模型中展示了近乎最先進的性能。

Phi-3模型介紹

官方介紹: https://azure.microsoft.com/en-us/blog/introducing-phi-3-redefining-whats-possible-with-slms/

Phi-3-Mini-128K-Instruct 是一個擁有 38 億參數的輕量級最先進的開放模型,使用 Phi-3 資料集進行訓練。該數據集包括合成數據和經過過濾的公開網站數據,重點是高品質和推理密集屬性。

在初始訓練後,該模型經歷了訓練後過程,其中包括監督微調和直接偏好優化,以增強其遵循指令和遵守安全措施的能力。當根據測試常識、語言理解、數學、編碼、長期上下文和邏輯推理的基準進行評估時,Phi-3 Mini-128K-Instruct 在模型中展示了強大且最先進的性能130 億個參數。

指令實測

模型角色設定: You are a data organizer and will summarize the entered articles.

輸入文字:

Spotlight on Disability:IN Partners using technology to enhance the accessibility of products we use every day.
Amtrak
Amtrak Provides Accessibility Upgrades at Utah Stations

WASHINGTON, DC – Amtrak customers can enjoy a more accessible and comfortable experience at the Green River and Helper, Utah stations following the completion of $5 million in upgrades. Amtrak’s California Zephyr stops twice daily at each station while traveling between Chicago and Emeryville,

Apple
The Right Shortcuts Can Give Your iPhone Superpowers. Here’s How.| WashingtonPost.com

Take the pain out of tedious tasks with Apple’s Shortcuts app.

Aira
Free Aira Access Offers by State & Province | Aira.io

At Aira, we are committed to expanding access to visual information for everyone. In this spirit, we work with Access Partners all over who provide Aira for free to their students, customers, residents, and visitors. This means anyone who is at one of the below Access locations can open the Aira app on their smartphone and instantly be connected to a professional visual interpreter. If you’re interested in finding out where you can connect with a visual interpreter for free in your state of province, read on.

AWS
Announcing Accessibility Conformance Reports (ACRs) in AWS Artifact

Accessibility Conformance Reports (ACRs) for AWS products and services are now available on AWS Artifact, a self-service portal for AWS compliance-related information. ACRs are documents that demonstrate the accessibility of AWS services.

Through AWS Artifact, you can download ACRs on-demand to understand the accessibility of a specific AWS product or service. AWS ACRs utilize the ITI Voluntary Product Accessibility Templates (VPAT®) and reference various accessibility standards including Section 508 (U.S.), EN 301 549 (EU), and Web Content Accessibility Guidelines (WCAG).

Google
The Best Google Docs Keyboard Shortcuts for Boosting Your Productivity | Wired.com

Learn how to use keyboard shortcuts instead of mouse clicks for common tasks in Google Docs. You might be surprised at how much time you save.

Starbucks
All the Changes Starbucks Made to Its Cold Cups and Lids to Reduce Plastic and Help Visually Impaired People

The Starbucks tall, grande and venti cups will now all use the same lid.

輸出回應 – phi-2-GGUF

模型名稱: TheBloke/phi-2-GGUF/phi-2.Q2_K.gguf

模型首頁: https://huggingface.co/TheBloke/phi-2-GGUF

模型回應:

心得: 看不出關聯性…這根本不相關吧?

To remove a tree stump, cut down the tree first

How can you make sure the tree is cut off completely? Cut it with a chainsaw.

If you’re like most people, your backyard has an old tree stump that took up too much space and is now dead wood waiting for you to get rid of. Or perhaps you have a dead tree stump in front of your house that needs to come down soon. Either way, it’s time for the stump to go.

But before you can cut down that old tree stump and remove it, you need to know how to cut it correctly.

The first step is removing all branches from around the trunk. This will make your cutting easier.

Once your tree has been removed and all of its branches have been cut off, it’s time to start thinking about removing that stump. You can either rent a stump grinder or cut down the tree yourself. If you decide to do this, remember that there are two main ways in which to remove a tree:

  • Using a chainsaw
  • With an axe

The first method is easy to figure out and we’ll discuss it here. The second option requires a lot more experience (and, yes, a bit of courage), so if you don’t know how to use an axe or a chainsaw then you might want to leave that stump alone until you can call in the experts.

But first, what is a tree stump? Well, a tree stump is the portion of the tree that has been cut off after the entire trunk and branches have fallen. This is important because it lets you know when your tree has died or if it’s time to remove that tree from the ground. So how can you get this done?

Before we get into removing a tree, let’s talk about what happens inside trees during their lifetime (when they’re alive and not dead). As trees grow, their branches start out as leaves but eventually turn into woody tissue that is called “wood.” When the time comes for the tree to die, it starts shedding its old leafy leaves in order to let new ones emerge.

To cut down the entire tree, you have two options: cutting or grinding. Cutting requires a chainsaw and involves cutting branches one by one until all are gone. This is a much faster method if your tree is already dead or dying but it can also be dangerous if not done correctly. You’ll need to be very careful when you use the cutting method, especially if you don’t have experience in cutting down trees (or at least not with chainsaws).

Grinding a tree involves using an axe and/or chainsaw to cut through the trunk of the tree. This is one of the more dangerous methods because it involves cutting into the woody tissue that surrounds your living tree. It’s also time-consuming, requiring patience and skill in order to remove the stump completely.

When you need to cut down your tree (or even a branch), look out for branches and leaves around the trunk of the tree. If they aren’t there anymore, then it’s time to get cutting!

If you don’t have experience with cutting or grinding, start by removing branches from the outside until the inside is exposed. This will be helpful when you come to cut down your tree because once it dies or has been completely removed, there won’t be any leaves left on its trunk that could fall off and cause damage.

If you do have experience with cutting or grinding, make sure you get the whole job done right the first time around! If not, then look up some tips online about how to cut down your tree without damaging yourself or others. Remember, safety is key!

Finally, if you don’t know whether you can use a chainsaw or axe and you want to make sure that you’ll be safe when you do the job, talk to an expert first. They will guide you through the process of removing that tree stump before it’s too late!

輸出回應 – Phi-3-mini-4k-instruct-gguf

模型名稱: Phi-3-mini-4k-instruct-GGUF/Phi-3-mini-4k-instruct-Q8_0.gguf

模型首頁: https://huggingface.co/microsoft/Phi-3-mini-4k-instruct-gguf

模型回應:

心得: 還不賴,phi-3試滿多次不同的輸入,成果真的還不錯,而且token長度可以到128k

Accessibility Improvements in Transportation: Upgrades at Utah Amtrak Stations

Amtrak has completed $5 million in accessibility upgrades for Green River and Helper stations in Utah, enhancing travelers’ experiences with the California Zephyr service. This investment ensures a more inclusive transportation system that caters to passengers with disabilities by improving station facilities.

Apple Shortcuts App: Streamlining iPhone Tasks for Enhanced Accessibility and Efficiency

The Apple Shortcuts app allows users to automate various tasks on their iPhones, providing a way to simplify daily routines and make technology more accessible to individuals with disabilities. The application’s customization options enable the creation of personalized shortcuts tailored for specific accessibility needs.

Aira: Connecting Visually Impaired Individuals Through Free AI-Powered Visual Interpretation Services

Aira, an innovative visual assistance platform, offers free access to its services through partnerships with Access Partners in various states and provinces. By connecting users of the Aira app with professional visual interpreters via their smartphones, visually impaired individuals can receive real-time guidance, making daily activities more manageable.

AWS Accessibility Conformance Reports: Enhancing Cloud Compliance and Inclusivity

Amazon Web Services (AWS) introduces the AWS Artifact platform to provide users with Accessibility Conformance Reports (ACRs), showcasing how each service adheres to accessibility standards like Section 508, EN 301 549, and WCAG. Users can download ACRs on-demand for a better understanding of AWS’ commitment to inclusivity in cloud computing services.

Google Docs Keyboard Shortcuts: Elevating Productivity with Accessibility Features

Adopting keyboard shortcuts in Google Docs reduces reliance on mouse clicks, improving accessibility and efficiency for users with motor disabilities or those who prefer a streamlined approach to document creation. Utilizing these shortcuts can significantly enhance workflow by reducing time spent navigating menus.

Starbucks’ Efforts in Reducing Plastic Waste and Enhancing Accessibility through Unified Cup Design

In its commitment to sustainability, Starbucks redesigned cold cups and lids across various sizes (tall, grande, venti) for reduced plastic waste. Moreover, the new uniform design also benefits visually impaired customers by simplifying identification of cup types and improving their overall experience at Starbucks outlets.

輸出回應 – phi-2-GGUF

模型名稱: TheBloke/phi-2-GGUF/phi-2.Q8_0.gguf

模型首頁: https://huggingface.co/TheBloke/phi-2-GGUF

模型回應:

心得: 雖然沒有太好但至少和原文有相關

  1. Amtrak customers can enjoy a more accessible and comfortable experience at the Green River and Helper, Utah stations following the completion of $5 million in upgrades.
  2. Aira offers free Visual Interpreter Access to their customers, residents, visitors at specific Access locations.
  3. All Starbucks’ tall, grande and venti cups will now use the same lid.
  4. Apple’s Shortcuts app can be used to take the pain out of tedious tasks with shortcuts and commands.
  5. ACRs are documents that demonstrate the accessibility of AWS services.
  6. Google Docs has keyboard shortcuts for common tasks which can save users time.
  7. Starbucks has made changes to their cold cups and lids in order to reduce plastic waste and help visually impaired people.

輸出回應 – phi-2-GGUF

模型名稱: kroonen/phi-2-GGUF/phi-2_Q8_0.gguf

模型首頁: https://huggingface.co/TheBloke/phi-2-GGUF

模型回應:

心得: 只剩下最後一項星巴克的內容了…

The article reports on the changes made by Starbucks to its cups and lids in order to reduce plastic waste and improve accessibility for visually impaired customers. The new design features a single lid that fits across most sizes of cups, eliminating the need for different types of lids. The article also mentions some of the other benefits of the new design, such as reducing foam leakage and making it easier to recycle.

輸出回應 – dolphin-2_6-phi-2.Q8_0.gguf

模型名稱: TheBloke/dolphin-2_6-phi-2-GGUF/dolphin-2_6-phi-2.Q8_0.gguf

模型首頁: https://huggingface.co/TheBloke/dolphin-2_6-phi-2-GGUF

模型回應:

心得: 摘要能力算還不錯

Disability:IN Partners is using technology to enhance accessibility of products we use every day. For example, Amtrak has upgraded its stations in Utah to make it more accessible for customers with disabilities. Apple’s Shortcuts app helps users save time by automating tedious tasks on their iPhones. Aira offers free access to visual information through their app for those who need it, and AWS provides Accessibility Conformance Reports (ACRs) to demonstrate the accessibility of their products and services. Google Docs keyboard shortcuts can boost productivity while Starbucks has made changes to its cups and lids to reduce plastic waste and help visually impaired people.