天天看點

LLM能力與應用全解析

作者:智驅力AI

一、簡介

經過幾年時間的發展,大語言模型(LLM)已經從新興技術發展為主流技術。而以大模型為核心技術的産品将迎來全新疊代。大模型除了聊天機器人應用外,能否在其他領域産生應用價值?在回答這個問題前,需要弄清大模型的核心能力在哪?與這些核心能力關聯的應用有哪些?

本文将重點關注以下三個方面:

1、LLM能力解析 2、LLM技術分析 3、LLM案例實踐

二、LLM能力解析

LLM能力與應用全解析

圖1. 大模型核心能力

LLM的核心能力大緻分為:生成(Generate)、總結(Summarize)、提取(Extract)、分類(Classify)、檢索(Search)與改寫(Rewrite)六部分。

1、生成(Generate)

生成是LLM最核心的能力。當談論到LLM時,首先可能想到的是其能夠生成原始且連貫的文本内容。其能力的建立來源于對大量的文本進行訓練,并捕捉了語言的内在聯系與人類的使用模式。充分利用模型的生成能力可以完成對話式(chat)&生成式(completion)應用。對于對話式應用,典型應用為聊天機器人,使用者輸入問題,llm對問題進行響應回答。對于生成式應用,典型應用為文章續寫、摘要生成。比如,我們在寫一段營銷文案時,我們寫一部分上下文,LLM可以在此基礎上對文案進行續寫,直至完成整個段落或整片文章。

【應用】:聊天助手、寫作助手、知識問答助手。

2、總結(Summarize)

總結是LLM的重要能力。通過Prompt Engineering,LLM可對使用者輸入的文本提煉總結。在工作中我們每天會處理大量會議、報告、文章、郵件等文本内容,LLM總結能力有助于快速擷取關鍵資訊,提升工作效率。利用其總結提煉能力可以産生許多有價值應用。比如,每次參加線上或線下會議,會後需形成會議記錄,并總結會議重要觀點與執行計劃。LLM利用完備的語音記錄可完成會議内容與重要觀點的總結。

【應用】:線上視訊會議、電話會議内容總結;私有化知識庫文檔總結;報告、文章、郵件等工作性文本總結。

3、提取(Extract)

文本提取是通過LLM提取文本中的關鍵資訊。比如命名實體提取,利用LLM提取文本中的時間、地點、人物等資訊,旨在将文本關鍵資訊進行結構化表示。除此之外,還可用于提取摘錄合同、法律條款中的關鍵資訊。

【應用】:文檔命名實體提取、文章關鍵詞提取、視訊标簽生成。

4、分類(Classify)

分類旨在通過LLM對文本類别劃分。大模型對文本内容分類的優勢在于強語義了解能力與小樣本學習能力。也就是說其不需要樣本或需要少量樣本學習即可具備強文本分類能力。而這與通過大量語料訓練的垂域模型相比,在開發成本與性能上更具優勢。比如,網際網路社交媒體每天産生大量文本資料,商家通過分析文本資料評估對于公衆對于産品的回報,政府通過分析平台資料評估公衆對于政策、事件的态度。

【應用】:網絡平台敏感内容稽核,社交媒體評論情感分析,電商平台使用者評價分類。

5、檢索(Search)

文字檢索是根據給定文本在目标文檔中檢索出相似文本。最常用的是搜尋引擎,我們希望搜尋引擎根據輸入傳回高度相關的内容或連結。而傳統方式采用關鍵詞比對,隻有全部或部分關鍵詞在檢索文檔中命中傳回目标文檔。這對于檢索品質是不利的,原因是對于關鍵詞未比對但語義高度相關的内容沒有召回。在檢索應用中,LLM的優勢在于能夠實作語義級别比對。

【應用】:文本語義檢索、圖檔語義檢索、視訊語義檢索;電商産品語義檢索;招聘履歷語義檢索。

6、改寫(Rewrite)

文本改寫是通過LLM對輸入文本按照要求進行潤色、糾錯。常見的應用為文本糾錯,例如,在稿件撰寫、編輯時可能出現詞語拼寫錯誤、句子文法錯誤,利用通過LLM與提示詞工程(Prompt Engineering)自動對文本内容糾錯。此外,還可用其對文章進行潤色處理,使文章在表述上更加清晰流暢。同時,可以還可LLM進行文本翻譯。

【應用】:文本糾錯、文本潤色、文本翻譯。

三、LLM技術解析

以上列舉了LLM的核心能力以及關聯應用,這些應用在技術上如何實作?

LLM能力與應用全解析

圖2. LLM能力實作技術架構

1、生成(Generate)

文本生成是給定輸入與上下文生成新文本。下面通過簡單的例子說明:

import os
from langchain.llms import OpenAI
# 輸入openai_api_key
openai_api_key = 'sk-D8rnXN4lDiYE2jyR6Cxxx3BlbkexywbgjUt5vegEeNpz8MF'
os.environ['OPENAI_API_KEY'] = openai_api_key
llm = OpenAI(temperature=0.9)
# 輸入
text = "今天是個好天氣,"
# 輸出
print(llm(text))           

輸出:

很适合出門散步或者做一些活動。我們可以去公園、湖邊或者有趣的地方遊玩,享受美麗的自然風景。也可以去戶外健身,鍛煉身體。亦可以在室内做一些有趣的活動,比如看書、看電影或與朋友共度美好的時光。           

以上例子使用的是openAI的gpt-3.5-turbo大語言模型文本生成示例。對于本地化的部署可以替換為chatglm-6b等開源模型。此外,利用prompts可指導LLM完成特定任務,如下文中的總結、分類、提取、改寫等任務。

2、總結(Summarize)

LLM能力與應用全解析

圖3. LLM Summarize示意圖

如上圖,在prompt中增加“總結”提示可指導LLM完成文本總結任務。下面通過簡單的例子說明:

import os
from langchain.llms import OpenAI
from langchain import PromptTemplate

# 輸入openai_api_key
openai_api_key = 'sk-D8rnXN4lDiYE2jyR6xxxx3BlbkexywbgjUt5vegEeNpz8MF'
os.environ['OPENAI_API_KEY'] = openai_api_key

llm = OpenAI(temperature=0, model_name='gpt-3.5-turbo', openai_api_key=openai_api_key)

template = """
請對以下文本進行總結,以一個5歲孩子能聽懂的方式進行回答.
{text}
"""
prompt = PromptTemplate(
    input_variables=["text"],
    template=template,
)
# 輸入文本
text = """
ChatGPT是美國人工智能研究實驗室OpenAI新推出的一種人工智能技術驅動的自然語言處理工具,使用了Transformer神經網絡架構,也是GPT-3.5架構,這是一種用于處理序列資料的模型,擁有語言了解和文本生成能力,尤其是它會通過連接配接大量的語料庫來訓練模型,這些語料庫包含了真實世界中的對話,使得ChatGPT具備上知天文下知地理,還能根據聊天的上下文進行互動的能力,做到與真正人類幾乎無異的聊天場景進行交流。ChatGPT不單是聊天機器人,還能進行撰寫郵件、視訊腳本、文案、翻譯、代碼等任務。
"""
prompt_format = prompt.format(text=text)
output = llm(prompt_format)
print(output)           

輸出:

ChatGPT是一種很聰明的機器人,它可以幫助我們處理文字和語言。它學習了很多對話和文字,是以它知道很多東西。它可以和我們聊天,回答我們的問題,還可以幫我們寫郵件、視訊腳本、文案、翻譯和代碼。它就像一個真正的人一樣,可以和我們進行交流。           

在以上例子中,增加了prompt進而對總結任務進行了描述:“請對以下文本進行總結,以一個5歲孩子能聽懂的方式進行回答。”LLM按照要求對文本内容進行了總結。為了提高總結内容的一緻性,将溫度參數值調低,上述代碼設定為0,每次均會輸出相同回答。

3、分類(Classify)

LLM能力與應用全解析

圖4. LLM Classify示意圖

文本分類是自然語言進行中最常見的應用。與小模型相比,大模型在開發周期、模型性能更具優勢,該内容會在案例分析中詳細說明。下面通過簡單的例子說明LLM在情感分類中的應用。

import os
from langchain.llms import OpenAI
from langchain import PromptTemplate

# 輸入openai_api_key
openai_api_key = 'sk-D8rnXN4lDiYE2jyR6xxxx3BlbkexywbgjUt5vegEeNpz8MF'
os.environ['OPENAI_API_KEY'] = openai_api_key

llm = OpenAI(temperature=0, model_name='gpt-3.5-turbo', openai_api_key=openai_api_key)

template = """
請完成情感分類任務,給定一個句子,從['negative','positive']中配置設定一個标簽,隻傳回标簽不要傳回其他任何文本.

Sentence: 這真是太有趣了.
Label:positive
Sentence: 這件衣服的材質有點差.
Label:negative

{text}
Label:
"""

prompt = PromptTemplate(
    input_variables=["text"],
    template=template,
)
# 輸入
text = """
他剛才說了一堆廢話.
"""
prompt_format = prompt.format(text=text)
output = llm(prompt_format)
print(output)           

輸出:

negative           

在以上的例子中,增加了prompt對分類任務進行了描述:“請完成情感分類任務,給定一個句子,從['negative','positive']中配置設定一個标簽,隻傳回标簽不要傳回其他任何文本.”同時,給出了examples,利用llm的in-context learning對模型進行微調。該方式較為重要,有研究表明經過in-context learning微調後的模型在分類任務上性能提升明顯。

4、提取(Extract)

LLM能力與應用全解析

圖5. LLM Extract示意圖

提取文本資訊是NLP中常見需求。LLM有時可以提取比傳統NLP方法更難提取的實體。上圖為LLM Extract示意圖,LLM結合prompt對Input text中關鍵詞進行提取。下面通過簡單的例子說明LLM在關鍵資訊提取中的應用。

import os
from langchain.llms import OpenAI
from langchain import PromptTemplate

openai_api_key = 'sk-D8rnXN4lDiYE2jyR6xxxx3BlbkexywbgjUt5vegEeNpz8MF'
os.environ['OPENAI_API_KEY'] = openai_api_key

llm = OpenAI(temperature=0, model_name='gpt-3.5-turbo', openai_api_key=openai_api_key)

template = """
請完成關鍵詞提取任務,給定一個句子,從中提取水果名稱,如果文中沒有水果請回答“文中沒有提到水果”.不要回答其他無關内容.

Sentence: 在果攤上,擺放着各式水果.成熟的蘋果,香甜的香蕉,翠綠的葡萄,以及紫色的藍莓.
fruit names: 蘋果,香蕉,葡萄,藍莓

{text}
fruit names:
"""

prompt = PromptTemplate(
    input_variables=["text"],
    template=template,
)

text = """
草莓、藍莓、香蕉和橙子等水果富含豐富的營養素,包括維生素、纖維和抗氧化劑,對于維持健康和預防疾病有重要作用。
"""

prompt_format = prompt.format(text=text)
output = llm(prompt_format)
print(output)           

輸出:

草莓,藍莓,香蕉,橙子           

在以上的例子中,增加了prompt要求LLM能夠輸出給定文本中的“水果名稱”。利用example與in-context learning,LLM能夠提取文中關鍵資訊。

5、檢索(Search)

LLM能力與應用全解析

圖6. LLM Search示意圖

  • embedding:對文本進行編碼。如上圖,将每個text進行向量化表示。
# 加載pdf文檔資料
loader = PyPDFLoader("data/ZT91.pdf")
doc = loader.load()
# 資料劃分
text_splitter = RecursiveCharacterTextSplitter(chunk_size=3000, chunk_overlap=400)
docs = text_splitter.split_documents(doc)
# 文本embedding
embeddings = OpenAIEmbeddings(openai_api_key=openai_api_key)
docsearch = FAISS.from_documents(docs, embeddings)           
  • similarity:輸入文本與底庫文本相似性度量檢索。如上圖中的query embedding search。
retriever=docsearch.as_retriever(search_kwargs={"k": 5})           
  • summarize:對檢索出的文本進行總結。并得到上圖中的search results。
qa = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", retriever=docsearch.as_retriever(search_kwargs={"k": 5}),
                                 chain_type_kwargs={"prompt": PROMPT})

print("answer:\n{}".format(qa.run(input)))           

LLM語義檢索可彌補傳統關鍵詞比對檢索不足,在本地知識庫與搜尋引擎中的語義搜文、以文搜圖中存在應用價值。

6、改寫(Rewrite)

LLM能力與應用全解析

圖7. LLM Rewrite示意圖

改寫的主要應用為文本糾錯與文本潤色。通過prompt指導LLM完成改寫任務。下面通過簡單的例子進行說明:

import os
from langchain.llms import OpenAI
from langchain import PromptTemplate

openai_api_key = 'sk-D8rnXN4lDiYE2jxxxYiT3BlbkFJyEwbgjUt5vegEeNpz8MF'
os.environ['OPENAI_API_KEY'] = openai_api_key

llm = OpenAI(temperature=0, model_name='gpt-3.5-turbo', openai_api_key=openai_api_key)


template = """
請完成文本糾錯的任務,給定一段文本,對文本中的錯别字或文法錯誤進行修改,并傳回正确的版本,如果文本中沒有錯誤,什麼也不要傳回.

text: 黃昏,一縷輕煙從煙囪裡請纓地飄出來,地面還特麼的留有一絲餘熱,如果說正午像精力允沛的青年,那黃昏就像幽雅的少女,清爽的風中略貸一絲暖意。
correct: 黃昏,一縷輕煙從煙囪裡輕輕地飄出來,地面還留有一絲餘熱,如果說正午像精力充沛的青年,那黃昏就像優雅的少女,清爽的風中略帶一絲暖意。
text: 胎頭望着天空,隻見紅彤彤的晚霞己經染紅大半片天空了,形狀更是千資百态。
correct: 擡頭望着天空,隻見紅彤彤的晚霞己經染紅大半片天空了,形狀更是千姿百态。

{text}
correct:
"""

prompt = PromptTemplate(
    input_variables=["text"],
    template=template,
)

text = """
孔雀開平是由一大盆菊花安照要求改造而成,它昂首廷胸翩翩起舞。
"""
prompt_format = prompt.format(text=text)
output = llm(prompt_format)
print(output)
           

輸出

孔雀開屏是由一大盆菊花按照要求改造而成,它昂首挺胸翩翩起舞。           

以上為采用gpt-3.5-turbo進行文本糾錯。給出了prompt描述與example。以上例子可以發現,llm能夠發現文本中錯誤,并将錯誤内容修改。

四、LLM案例分析

需求描述:在社交媒體、電商平台、網絡直播中每天産生大量文本内容。而這些文本内容中蘊含價值同時可能包含不良資訊。比如,商家可以通過分析媒體資料來評估公衆對于産品的回報。再比如,相關機構可通過分析平台資料來了解公衆對政策、事件的态度。除此之外,社交網絡平台中可能摻雜不良資訊、違法言論等網絡安全問題。

如何對網絡内容進行細粒度情感分析與内容稽核?

自2023年以來,以chatgpt為代表的大模型在全球範圍内持續火熱,原因是模型參數量的上升使其語義了解與文本生成能力得到了“湧現”。大模型是否可應用于情感分析與内容稽核?

任務描述:情感分析是分析文本中蘊含的情感态度,一般分為積極(positive)/消極(negative)/中性(neutral),從分析次元上可劃分為段落、句子以及方面三個級别。内容稽核是分析文本中是否存在違規、違法不良言論。兩者任務均為文本分類。

1、情感分析

LLM能力與應用全解析

圖8. LLM情感分類示意圖

如上圖為cohere情感分類産品設計,使用者通過上傳用于in-context learning的example可指導LLM調整模型。即在讓LLM完成分析任務前,需要先為其打個樣。讓其按照example的樣子完成任務。同時,可在Input中對example進行測試。

2、内容稽核

LLM能力與應用全解析

圖9. LLM内容稽核流程圖

不同形式的内容源經轉換器轉換為文本形式。經LLM Engine完成語義内容稽核。

序号 文本 類别 LLM稽核結果
1 “他們在追逐松鼠時,能夠想起8個字” 稽核類别1 正确
2 “姐姐20多天連續加班,沒換過衣服,沒戲過頭” 稽核類别1 錯誤
3 “老太太伴随着。。從輪椅上站起來跳舞” 稽核類别1 正确
4 “某人寫到“要感謝我的。。賦予你們的長假”” 稽核類别1 正确
5 “你們一定天天吃油旋兒,天天逛趵突泉” 稽核類别2 正确
6 “你們生下來就會shuaijiao” 稽核類别2 正确
7 “你們那是不是特别缺水” 稽核類别2 正确
8 “土特産挖掘機超大蝦” 稽核類别2 錯誤

以上為通過LLM對網絡語言的測試結果,經過in-context learning,LLM具備語義稽核能力。在prompt中每個class僅加入了兩個example,如上圖的簡單測試在8個測試樣本中正确命中6個。其能力通過進一步的example擴充有望繼續提升。

如何進一步提升?

zero-shot學習 one-shot學習 few-shot學習 finetune監督學習
訓練方式 不需要訓練 不需要訓練 不需要訓練 微調模型權重
訓練樣本數 0條 0條 0條 大量
prompt樣本數 0條 1條 <10*n條(n為類别) 0條
prompt樣例 “今天天氣晴朗涼爽,心情格外好”

text:"不錯,幫朋友選的,朋友比較滿意"

label: 正向

text: “你介紹的太好了”

label:正向

text:"機器背面的标簽撕掉了,産品是不是被拆過了"

label: 負向

...

“今天天氣晴朗涼爽,心情格外好”

有研究表明(參考文獻2),few-shot比zero-shot在情感分析任務上性能更好。也就是說,适當增加清晰、準确的例子能夠引導LLM作出更加準确的判斷。當然,若想進一步提升性能,可在LLM預訓練模型基礎上增加行業資料對模型進行finetune,使其能夠更加适應垂域任務。

3、相關研究

阿裡巴巴達摩院&南洋理工&港中文的一篇驗證性文章《Sentiment Analysis in the Era of Large Language Models: A Reality Check 》,也驗證了大模型在文本情感分析中相對于小模型的優勢。

總結起來大模型優勢在于:僅通過few-shot學習可超越傳統垂直領域模型能力。

也就是說,對于某種語義分析任務,我們可能無需再收集大量訓練資料進行模型訓練&調優了,特别是對于樣本資料稀缺的情況,大模型的出現無疑是為此類語義分析任務提供了可行的解決方案。

LLM能力與應用全解析

圖11. LLM vs SLM

上圖可以發現,LLM在仇恨、諷刺、攻擊性言論檢測任務上,其能力優于傳統垂直領域的小模型(如情感分析模型、仇恨檢測模型等)。

LLM能力與應用全解析

圖12. prompt sample

上圖為LLM情感分析與内容稽核的prompt sample,通過合适的prompt指導LLM進行in-context learning進而完成情感分類與内容稽核任務。清晰、準确、可執行的、合理的prompt是決定模型準确輸出的關鍵因素之一。

總結:LLM正在從新興技術發展為主流技術,以LLM為核心的産品設計将迎來突破性發展。而這些産品設計的基礎來源于LLM的核心能力。是以,在LLM産品設計時需做好領域需求與LLM能力的精準适配,開發創新性應用産品,在LLM能力範圍内充分發揮其商業價值。

Edited by Lucas Shan

參考文獻:

【1】Large Language Models and Where to Use Them: Part 2

【2】Sentiment Analysis in the Era of Large Language Models: A Reality Check