返回文章列表

大語言模型實體擷取與主題建模技術

本文探討大語言模型(LLM)在實體擷取、主題建模和自然語言生成等任務中的應用,包含程式碼範例與技術細節。LLM 無需額外訓練即可執行實體擷取和主題建模,並能生成創意文字和摘要。文章也討論了 LLM 的限制,例如細微實體識別的困難、模糊性處理以及長尾實體的識別挑戰。此外,文章比較了 LLM 與傳統方法(如

自然語言處理 機器學習

大語言模型在自然語言處理領域展現了強大的能力,尤其在實體擷取、主題建模和自然語言生成方面。利用預訓練模型和精心設計的提示,開發者可以有效地提取文字中的關鍵實體、生成主題、進行創意寫作、產生文字摘要,甚至構建對話系統。然而,LLM 並非完美無缺,仍存在一些限制,例如在處理細微實體、歧義和長尾實體時可能遇到困難。開發者需要了解這些限制,並根據實際應用場景選擇合適的策略和引數設定,才能更好地發揮 LLM 的優勢。實務上,透過調整引數如 max_new_tokensdo_sampletop_ktemperature,可以控制生成文字的長度、多樣性和創造性,以滿足不同任務的需求。此外,Few-Shot Prompting 等進階技術也能提升 LLM 在特定任務上的表現,但同時也需要注意其潛在的挑戰,例如複雜推理任務的處理和計算資源的消耗。

使用大語言模型進行實體擷取與主題建模

實體擷取任務的執行與限制

在自然語言處理(NLP)領域,實體擷取是一項至關重要的任務,其目的是從文字中識別出具有特定意義的實體,例如人名、地名、組織名稱等。大語言模型(LLM)如Falcon 7B,在實體擷取任務中展現了出色的能力,無需額外的訓練或微調即可有效工作。

程式碼範例:實體擷取

# 設定隨機種子以確保結果可重現
torch.manual_seed(1)

# 定義提示,要求模型從文字中提取命名實體
prompt = """Identify the named entities from the text.
Text: Mount Everest, also known as Chomolungma or Sagarmatha, is the highest mountain on Earth.
Named entities:
"""

# 使用管道函式處理提示,限制生成的token數量
sequences = pipe(
    prompt,
    max_new_tokens=15,
    return_full_text=False,
)

# 輸出模型識別出的命名實體
for seq in sequences:
    print(f"{seq['generated_text']}")

內容解密:

  1. torch.manual_seed(1):設定隨機種子以確保實驗結果的可重現性。
  2. prompt:定義輸入模型的文字,要求模型識別文字中的命名實體。
  3. pipe函式:處理定義好的提示,並限制生成的token數量不超過15個,以保持回應的簡潔性。
  4. return_full_text=False:確保模型只傳回生成的文字,而不包含原始提示。
  5. 迴圈輸出:遍歷生成的序列,列印預出模型識別出的命名實體。

大語言模型在實體擷取中的限制

儘管LLM在實體擷取任務上表現出色,但仍存在一些限制,包括:

  • 細微的實體識別:對於需要深入領域知識或上下文的實體,LLM可能難以準確識別。
  • 模糊性和歧義:當實體名稱與常見語言混淆時,LLM可能會誤解這些實體,特別是在缺乏上下文的情況下。
  • 長尾實體:出現頻率較低的實體(長尾實體)由於訓練資料的偏向,可能不太被準確識別。
  • 領域特定的適應:對於專業領域的實體識別,LLM可能需要透過領域特定的資料進行微調,以提高識別準確率。
  • 演變中的實體:語言的動態性質意味著新的實體會不斷出現,特別是在技術和流行文化等快速發展的領域。LLM可能無法識別這些新實體,直到它們被納入訓練資料並重新訓練模型。

主題建模

大語言模型同樣可以用於主題建模任務,無需額外的訓練。以下是一個使用LLM進行主題建模的例子:

程式碼範例:主題建模

# 設定隨機種子以確保結果可重現
torch.manual_seed(0)

# 定義提示,要求模型提取文字的主要主題
prompt = """Extract the main topic from the text.
Text: As the digital age accelerates, the domain of cybersecurity is becoming increasingly paramount...
Main topic:
"""

# 使用管道函式處理提示,限制生成的token數量
sequences = pipe(
    prompt,
    max_new_tokens=15,
)

# 輸出模型提取的主題
for seq in sequences:
    print(f"Result: {seq['generated_text']}")

內容解密:

  1. 設定隨機種子以確保結果可重現。
  2. 定義一個提示,要求模型從給定的文字中提取主要主題。
  3. 使用pipe函式處理提示,並限制生成的token數量,以保持回應的簡潔性。
  4. 遍歷生成的序列,輸出模型提取的主題。

LLM與傳統方法比較

將LLM用於主題建模與傳統方法(如潛在狄利克雷分配,LDA)相比,具有不同的優勢。LDA需要大量的訓練資料和預定義的主題數量,而LLM則能夠提供更為直觀和簡潔的主題描述,並且能夠捕捉到文字中的細微差別和上下文資訊。

此圖示

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

title 大語言模型實體擷取與主題建模技術

package "LLM 實體擷取與主題建模" {
    package "實體擷取" {
        component [命名實體識別] as ner
        component [人名地名擷取] as entity
        component [組織名稱識別] as org
    }

    package "主題建模" {
        component [主題生成] as topic
        component [關鍵詞提取] as keyword
        component [文字摘要] as summary
    }

    package "自然語言生成" {
        component [創意寫作] as creative
        component [對話系統] as dialog
        component [Few-Shot Prompting] as fewshot
    }
}

ner --> entity : 文字分析
entity --> org : 實體分類
org --> topic : 語義理解
topic --> keyword : 主題提取
keyword --> summary : 摘要生成
summary --> creative : 文字生成
creative --> dialog : 對話構建
dialog --> fewshot : 進階技術

note right of ner
  實體擷取限制:
  - 細微實體困難
  - 歧義性處理
  - 長尾實體挑戰
end note

note right of creative
  生成控制參數:
  - max_new_tokens
  - temperature
  - top_k
end note

@enduml

圖表翻譯: 此圖表比較了LLM和LDA在主題建模任務中的流程。LLM能夠直接從輸入文字中輸出簡潔的主題,而LDA則需要訓練資料和預定義的主題數量,可能需要額外的解釋來確定最終的主題。

總之,大語言模型在實體擷取和主題建模等NLP任務中展現了強大的能力,但瞭解其限制並根據具體任務選擇合適的方法至關重要。

使用大語言模型進行自然語言生成任務

本章節將探討大語言模型(LLMs)在自然語言生成(NLG)任務中的應用,使其更接近人工智慧。首先,我們將從創意寫作任務開始。

創意寫作

創意寫作是一種藝術表達形式,利用文字的力量喚起情感、塑造形象和講述故事。與更正式的寫作形式不同,創意寫作著重於敘事技巧、人物發展和文學典故或各種詩歌傳統。這種寫作方式無法透過傳統的機器學習/深度學習模型來實作。讓我們使用之前建立的流程來寫一首關於北極光的詩。

程式碼範例:

# 設定隨機種子以確保可重複性
torch.manual_seed(0)

# 定義一個新的創意提示來寫一首詩
prompt = """寫一首關於北極光的詩。
詩:
"""

# 使用給定的提示生成序列
sequences = pipe(
    prompt,
    max_new_tokens=50,  # 增加新詞元的限制以允許更詳細的創意輸出
)

# 列印結果
for seq in sequences:
    print(f"結果:{seq['generated_text']}")

內容解密:

  1. 設定隨機種子torch.manual_seed(0) 確保每次執行程式碼時都能獲得相同的結果,便於重複實驗。
  2. 定義創意提示:我們定義了一個提示,要求模型寫一首關於北極光的詩。
  3. 生成序列:使用 pipe 函式根據提示生成詩歌,允許最多 50 個新詞元以確保詩歌有足夠的細節。
  4. 列印結果:輸出生成的詩歌,展示模型對北極光的不同解讀。

為特定型別和風格進行微調

雖然預訓練的大語言模型為創意寫作提供了基礎,但透過微調可以釋放其真正潛力。以下是如何調整大語言模型以生成特定型別或寫作風格的文字:

  • 精選訓練資料:編譯高品質文字的資料集,這些文字屬於您期望的型別(例如,科幻小說用於科幻風格,莎士比亞十四行詩用於戲劇風格)。這有助於模型內化定義該型別或風格的獨特詞彙、句子結構和主題元素。
  • 具有型別特異性的提示工程:設計提示,不僅描述所需的輸出(例如,“寫一個偵探故事”),還包含與該型別相關的特定細節或典故。您可以提及著名作者、標誌性場景或典型的情節轉折,以引導模型朝正確的方向發展。
  • 溫度控制:溫度引數控制生成文字的隨機性。較高的溫度鼓勵更多的創意探索,可能導致新穎的表達或想法。較低的溫度則使輸出更保守,更貼近訓練資料的風格。透過實驗找到平衡創意與型別一致性的最佳溫度。

範例:為科幻型別進行微調

  • 型別:“科幻”
  • 訓練資料:精選的多本科幻小說,涵蓋不同子型別(例如,賽博朋克、反烏託邦、太空探索)。
  • 提示:“以 Isaac Asimov 的風格寫一個短篇故事,設定在一個機器人和人類共存卻關係緊張的殖民星球上。當一個故障的機器人被懷疑進行破壞活動時,緊張局勢升級。”

文字摘要

摘要可以分為兩種型別:抽象摘要和提取摘要。由於大語言模型的生成特性,我們可以使用它來進行抽象摘要。讓我們使用相同的文字生成流程來總結一個示例檔案。

程式碼範例:

# 設定隨機種子以確保可重複性
torch.manual_seed(3)

# 新的提示,專注於可再生能源
prompt = """像太陽能和風能這樣的可再生能源對於應對氣候變化至關重要。它們提供乾淨、無窮無盡的能源,減少了對化石燃料的依賴,而化石燃料是全球變暖和環境惡化的主要原因。轉向可再生能源不僅有助於減少碳排放,還促進了能源獨立和支援了可持續發展。世界各地的政府和企業正在投資可再生能源技術,以確保一個更綠色的未來。
總結上述文字。
摘要:
"""

# 使用指定的引數生成摘要序列
sequences = pipe(
    prompt,
    max_new_tokens=30,  # 限制摘要長度
    do_sample=True,  # 啟用抽樣以獲得多樣化的結果
    top_k=10,  # 從最可能的10個下一個詞元中抽樣
    return_full_text=False,  # 只傳回生成的摘要
)

# 列印每個生成的摘要
for seq in sequences:
    print(f"{seq['generated_text']}")

內容解密:

  1. 設定隨機種子torch.manual_seed(3) 確保實驗的可重複性。
  2. 定義提示:我們定義了一個提示,要求模型總結一篇關於可再生能源重要性的文章。
  3. 生成摘要:使用 pipe 函式根據提示生成摘要,透過引數控制摘要的長度和多樣性。
  4. 列印結果:輸出生成的摘要,展示模型對原文的理解和總結能力。

大語言模型在自然語言生成任務中的應用

大語言模型(LLM)在自然語言生成(NLG)任務中展現了卓越的能力,特別是在文字摘要和對話生成方面。本章節將探討LLM在這些任務中的應用及其相關挑戰。

文字摘要

文字摘要是NLG的一個重要任務,旨在將長篇文字壓縮成簡潔的摘要。LLM透過學習大量的文字資料,能夠生成高品質的摘要。

實作文字摘要的技術細節

要實作文字摘要,需要將詳細的提示(prompt)輸入到管道函式(pipe function)中,並設定特定的引數以最佳化輸出。例如,限制摘要的長度為30個新生成的詞元(tokens),使用取樣(sampling)以產生多樣化的結果,並聚焦於最可能的10個詞元以保持摘要的相關性和聚焦性。

torch.manual_seed(3)  # 確保結果的可重現性
prompt = """再生能源如太陽能和風能對於應對氣候變化至關重要。它們提供清潔、無窮盡的能源,減少對化石燃料的依賴,而化石燃料是全球變暖和環境惡化的主要原因。轉向再生能源不僅有助於減少碳排放,還能促進能源獨立和支援可持續發展。全球政府和企業都在投資再生能源技術,以確保更美好的未來。
請寫出上述文字的事實摘要,不得新增新資訊。
摘要:
"""
sequences = pipe(
    prompt,
    max_new_tokens=30,  # 限制摘要長度
    do_sample=False,  # 停用取樣以減少幻覺
    top_k=0,  # 移除取樣引數,專注於確定性輸出
    return_full_text=False,  # 僅傳回生成的摘要
)
for seq in sequences:
    print(f"{seq['generated_text']}")

內容解密:

  1. torch.manual_seed(3):設定隨機種子以確保實驗結果的可重現性。
  2. prompt:定義了輸入提示,要求模型生成給定文字的摘要。
  3. max_new_tokens=30:限制模型生成的最大詞元數量,以控制摘要的長度。
  4. do_sample=False:停用取樣,轉而使用貪婪解碼或束搜尋,以減少生成內容的不確定性。
  5. top_k=0:當do_sample=False時,此引數無效;否則,它用於控制下一詞元的取樣範圍。
  6. return_full_text=False:指示管道函式僅傳回生成的文字,而不包含原始輸入。

對話生成

對話生成是LLM的另一個重要應用,能夠為聊天機器人等對話式AI系統提供自然、連貫的回應。

對話生成的技術實作

透過設計特定的提示和調整模型引數,可以實作自然、吸引人的對話。

torch.manual_seed(3)  # 確保結果的可重現性
prompt = """以下是一段關於再生能源好處的對話。
Person A: 為什麼你認為再生能源很重要?
Person B:"""
sequences = pipe(
    prompt,
    max_new_tokens=50,  # 允許更長的回應以促進更自然的對話
    do_sample=True,  # 啟用取樣以獲得更多樣化的回應
    top_k=50,  # 擴大下一詞元的取樣池以增加創造性
    temperature=0.9,  # 稍微提高溫度以增加回應的多樣性
    return_full_text=False,  # 僅傳回生成的對話內容
)
for seq in sequences:
    print(f"{seq['generated_text']}")

內容解密:

  1. torch.manual_seed(3):確保實驗結果的一致性。
  2. prompt:定義了對話的起始內容,引導模型繼續對話。
  3. max_new_tokens=50:允許模型生成較長的回應,以模擬更自然的對話流程。
  4. do_sample=True:啟用取樣,增加生成內容的多樣性和創造性。
  5. top_k=50:擴大取樣範圍,讓模型考慮更多的可能詞元。
  6. temperature=0.9:調整溫度引數,在創造性和連貫性之間取得平衡。

將LLM生成的對話整合到虛擬助手

將LLM生成的對話整合到虛擬助手和聊天機器人中,需要考慮技術整合和使用者經驗兩個方面。

技術整合要點

  1. 介面LLM與對話管理系統:確保對話的連貫性和上下文理解。
  2. 設計對話流程:引導對話朝向高效滿足使用者需求的方向發展。
  3. 實施後備機制:當LLM不確定時,無縫轉接到人工客服等後備選項。

透過這些方法,可以充分發揮LLM在NLG任務中的潛力,為使用者提供更自然、更豐富的互動體驗。

LLM 整合的對話系統開發與應用

使用者經驗考量

開發一個自然且有幫助的對話系統需要考慮以下幾點:

  • 個人化:根據使用者的歷史互動和偏好調整LLM的回應。
  • 上下文感知:確保LLM能夠參考過去的對話內容並理解上下文,以維持連貫的對話。
  • 語氣和個性:根據品牌和受眾調整聊天機器人的個性。LLM可以根據所需的語氣正式、隨意或幽默地回應。

實際佈署

佈署LLM整合的聊天機器人時,需要考慮以下幾點:

  • 效能監控:定期評估機器人的效能,使用諸如使用者滿意度、解決率和平均處理時間等指標。
  • 持續學習:收集回饋並用於改進模型。特別注意使用者表達挫折或對話脫軌的情況。
  • 倫理和法律合規:對AI的使用保持透明,並遵守資料保護法規。確保LLM不會生成有害或偏見的內容。

整合LLM至聊天機器人的範例

以下是一個將LLM整合到永續能源公司聊天機器人的範例:

import torch

# 確保可重現性
torch.manual_seed(3)

# 定義聊天機器人的初始提示
chatbot_prompt = """以下是一個永續能源公司的客戶服務對話。
客戶:我有興趣轉換到太陽能板。我應該瞭解什麼?
聊天機器人:"""

# 生成聊天機器人的回應
chatbot_sequences = pipe(
    chatbot_prompt,
    max_new_tokens=100,  # 允許詳細回應
    do_sample=True,  # 啟用抽樣以產生多樣化的對話
    top_k=40,  # 多樣化的詞彙取樣池
    temperature=0.8,  # 中等溫度以產生連貫且多樣化的回應
    return_full_text=False,  # 只傳回聊天機器人的對話內容
)

# 列印聊天機器人的回應
for seq in chatbot_sequences:
    print(f"聊天機器人的回應:{seq['generated_text']}")

內容解密:

  1. torch.manual_seed(3):設定隨機種子以確保結果的可重現性。
  2. chatbot_prompt:定義了客戶服務對話的初始提示,模擬客戶詢問關於太陽能板的資訊。
  3. pipe()函式:用於生成聊天機器人的回應,引數控制生成文字的長度、多樣性和連貫性。
    • max_new_tokens=100:允許聊天機器人生成最多100個新詞元。
    • do_sample=True:啟用抽樣機制,使生成的回應更具多樣性。
    • top_k=40:在每個生成步驟中,考慮前40個最可能的詞元。
    • temperature=0.8:控制生成文字的隨機性。較低的值使輸出更確定,而較高的值增加多樣性。
    • return_full_text=False:只傳回生成的回應,而不是完整的輸入和輸出文字。

先進提示技術

Few-Shot Prompting

Few-shot prompting透過在提示中加入範例來提供額外的上下文,從而提高模型的表現。這些範例幫助模型生成符合範例模式的輸出。

torch.manual_seed(0)
prompt = """描述:這個原理指出能量不能被創造或銷毀,只能從一種形式轉換為另一種形式。
原理:能量守恆
描述:每一個作用力都有一個相等且相反的反作用力。
原理:"""
sequences = pipe(
    prompt,
    max_new_tokens=8,  # 限制回應長度
    do_sample=True,  # 啟用抽樣以產生多樣化的結果
    top_k=10,  # 在每個步驟中考慮前10個詞元以產生多樣化的回應
)
for seq in sequences:
    print(f"結果:{seq['generated_text']}")

內容解密:

  1. prompt:包含了範例描述和對應的原理,用於引導模型生成正確的原理名稱。
  2. pipe()函式引數
    • max_new_tokens=8:限制生成的最大詞元數量為8。
    • do_sample=Truetop_k=10:控制生成的隨機性和多樣性。

Few-Shot Prompting 的挑戰與工業應用

挑戰:

  • 複雜推理任務:LLM可能難以處理需要複雜推理的任務。
  • 計算需求:較長的提示會增加計算需求和處理時間。
  • 無意的模式推斷:模型可能會推斷出無意的模式,例如將特定的情感與範例中的特定位置相關聯。

工業應用:

  • 客戶服務聊天機器人:透過提供少數成功的互動範例,可以指導LLM產生更有幫助和準確的回應。
  • 程式碼生成:在軟體開發中,透過提供相關的程式碼範例,few-shot prompting可以顯著提高生成的程式碼品質和相關性。

圖表翻譯:

此處沒有圖表需要翻譯。