精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

SQL應(yīng)用于LLM的程序開發(fā)利器——開源LMQL

譯文 精選
數(shù)據(jù)庫 SQL Server
我相信你聽說過SQL,甚至已經(jīng)掌握了它。SQL(結(jié)構(gòu)化查詢語言)是一種廣泛用于處理數(shù)據(jù)庫數(shù)據(jù)的聲明性語言。

譯者 | 朱先忠

審校 | 重樓

我相信你聽說過SQL,甚至已經(jīng)掌握了它。SQL(結(jié)構(gòu)化查詢語言)是一種廣泛用于處理數(shù)據(jù)庫數(shù)據(jù)的聲明性語言。

根據(jù)StackOverflow的年度調(diào)查,SQL仍然是世界上最流行的語言之一。對于專業(yè)開發(fā)人員來說,SQL是排名前三的語言(僅次于Javascript和HTML/CSS)。超過一半的專業(yè)人士使用它。令人驚訝的是,SQL甚至比Python更受歡迎。

作者圖表,數(shù)據(jù)來自StackOverflow調(diào)查作者圖表,數(shù)據(jù)來自StackOverflow調(diào)查

SQL是與數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行對話的常用方法。因此,有人試圖對LLM使用類似的方法也就不足為奇了。在本文中,我想告訴您一種叫做LMQL的方法。

什么是LMQL?

LMQL(語言模型查詢語言https://lmql.ai/)是一種用于語言模型的開源編程語言。LMQL在Apache 2.0許可證下發(fā)布,該許可證允許您在商業(yè)上使用它。

LMQL由蘇黎世聯(lián)邦理工學(xué)院的研究人員開發(fā)。他們提出了一種新的LMP(語言模型編程)思想。LMP結(jié)合了自然語言和編程語言:文本提示和腳本指令。

在Luca Beurer Kellner、Marc Fischer和Martin Vechev的原始論文《提示就是編程:大型語言模型的查詢語言》,作者指出了當(dāng)前LLM使用的以下挑戰(zhàn):

  • 相互作用。例如,我們可以使用元提示,要求LM擴展初始提示。作為一個實際案例,我們可以首先要求模型定義初始問題的語言,然后用該語言回答。對于這樣的任務(wù),我們需要發(fā)送第一個提示,從輸出中提取語言,將其添加到第二個提示模板中,并再次調(diào)用LM。我們需要管理相當(dāng)多的交互。使用LMQL,您可以在一個提示中定義多個輸入和輸出變量。除此之外,LMQL將優(yōu)化多次調(diào)用的總體可能性,這可能會產(chǎn)生更好的結(jié)果。
  • 約束和標(biāo)記表示。當(dāng)前的LMs不提供限制輸出的功能,如果我們在生產(chǎn)中使用LMs,這是至關(guān)重要的。想象一下,在生產(chǎn)中建立一個情緒分析,在我們的CS代理界面中標(biāo)記負(fù)面評價。我們的項目期望從LLM獲得“積極”、“消極”或“中立”。然而,通常情況下,您可以從LLM中得到類似“對所提供的客戶評價的情緒是積極的”的信息,這在API中不太容易處理。這就是為什么約束會非常有用。LMQL允許您使用人類可理解的單詞(而不是LMs使用的令牌)來控制輸出。
  • 效率和成本。LLM是大型網(wǎng)絡(luò),因此無論您是通過API還是在本地環(huán)境中使用它們,它們都非常昂貴。LMQL可以利用預(yù)定義的行為和搜索空間的約束(由約束引入)來減少LM調(diào)用的數(shù)量。正如您所看到的,LMQL可以解決這些挑戰(zhàn)。它允許您在一個提示中組合多個調(diào)用,控制輸出,甚至降低成本。
    對成本和效率的影響可能相當(dāng)大。對搜索空間的限制可以顯著降低LLM的成本。例如,在LMQL論文的案例中,與標(biāo)準(zhǔn)解碼相比,LMQL的可計費代幣減少了75–85%,這意味著它將顯著降低您的成本。

圖片來自Beurer Kellner等人的論文(2023)圖片來自Beurer Kellner等人的論文(2023)

我相信LMQL最重要的好處是完全控制您的輸出。然而,使用這樣的方法,您還將擁有LLM上的另一層抽象(類似于我們前面討論的LangChain)。如果需要,它將允許您輕松地從一個后端切換到另一個后端。LMQL可以使用不同的后端:OpenAI、HuggingFace Transformers或llama.cpp。

您可以在本地安裝LMQL,也可以在線使用基于Web的Playground。Playground可以非常方便地進(jìn)行調(diào)試,但您只能在此處使用OpenAI后端。對于所有其他用例,您必須使用本地安裝。

與往常一樣,這種方法也有一些局限性:

這個圖書館還不太受歡迎,所以社區(qū)很小,很少有外部材料可用。

在某些情況下,文檔可能不是很詳細(xì)。

最流行、性能最好的OpenAI模型有一些局限性,因此您無法將LMQL的全部功能與ChatGPT一起使用。

我不會在生產(chǎn)中使用LMQL,因為我不能說它是一個成熟的項目。例如,通過代幣進(jìn)行分發(fā)的準(zhǔn)確性非常差。

在某種程度上接近LMQL的替代方案是指導(dǎo)。它還允許您約束生成并控制LM的輸出。

盡管有這些限制,我還是喜歡語言模型編程的概念,這就是我決定在本文中討論它的原因。

LMQL語法

現(xiàn)在,我們知道了什么是LMQL。讓我們看一個LMQL查詢的例子來熟悉它的語法。

beam(n=3)
 "Q: Say 'Hello, {name}!'" 
 "A: [RESPONSE]" 
from "openai/text-davinci-003"
where len(TOKENS(RESPONSE)) < 20

我希望你能猜出它的意思。但讓我們詳細(xì)討論一下。

以下是LMQL查詢的方案

Beurer Kellner等人的論文圖像(2023)Beurer Kellner等人的論文圖像(2023)

任何LMQL程序都由5個部分組成:

解碼器定義所使用的解碼過程。簡單地說,它描述了提取下一個令牌的算法。LMQL有三種不同類型的解碼器:argmax、beam和sample。你可以從論文中更詳細(xì)地了解它們。

實際的查詢類似于經(jīng)典的提示,但使用Python語法,這意味著您可以使用循環(huán)或if語句等結(jié)構(gòu)。

在from子句中,我們指定了要使用的模型(在我們的示例中為openai/text-davinci-003)。

Where子句定義約束。

當(dāng)您希望在返回中查看令牌的概率時,會使用分布。我們還沒有在這個查詢中使用分布,但稍后我們將使用它來獲得情緒分析的類概率。

此外,您可能已經(jīng)注意到我們的查詢{name}和[RESPONSE]中的特殊變量。讓我們討論一下它們是如何工作的:

{name}是一個輸入?yún)?shù)。它可以是您范圍內(nèi)的任何變量。這樣的參數(shù)可以幫助您創(chuàng)建方便的函數(shù),這些函數(shù)可以很容易地用于不同的輸入。

[LRESPONSE]是LM將生成的短語。它也可以稱為孔或占位符。[響應(yīng)]之前的所有文本都被發(fā)送到LM,然后模型的輸出被分配給變量。很方便的是,您可以在稍后的提示中輕松地重用此輸出,將其稱為{RESPONSE}。

我們已經(jīng)簡要介紹了主要概念。讓我們自己試試。

開始

設(shè)置環(huán)境

首先,我們需要建立我們的環(huán)境。要在Python中使用LMQL,我們需要首先安裝一個包。毫無疑問,我們可以使用pip。您需要一個Python≥3.10的環(huán)境。

pip install lmql

如果要將LMQL與本地GPU一起使用,請按照文檔中的說明進(jìn)行操作。

要使用OpenAI模型,您需要設(shè)置APIKey來訪問OpenAI。最簡單的方法是指定OPENAI_API_KEY環(huán)境變量。

import os
os.environ['OPENAI_API_KEY'] = '<your_api_key>'

然而,OpenAI模型有很多局限性(例如,您將無法獲得超過五個類的分發(fā)版)。因此,我們將使用Llama.cpp用本地模型測試LMQL。

首先,您需要在與LMQL相同的環(huán)境中安裝Llama.cpp的Python綁定。

pip install llama-cpp-python

如果要使用本地GPU,請指定以下參數(shù)。

CMAKE_ARGS="-DLLAMA_METAL=on" pip install llama-cpp-python

然后,我們需要將模型權(quán)重加載為.gguf文件。你可以在HuggingFace模特中心找到模特。

我們將使用兩種型號:

Llama-2–7B是Meta微調(diào)生成文本模型的最小版本。這是一款非常基礎(chǔ)的車型,所以我們不應(yīng)該期望它有出色的性能。
Zephyr是Mistral車型的微調(diào)版本,性能不錯。在某些方面,它的性能比10倍大的開源型號Llama-2–70b要好。然而,Zephyr與ChatGPT或Claude等專有模型之間仍有一些差距。

Tunstall等人的論文圖像(2023)Tunstall等人的論文圖像(2023)

根據(jù)LMSYS ChatBot Arena排行榜,Zephyr是性能最好的7B參數(shù)型號。它與更大的型號不相上下。

排行榜截圖|來源排行榜截圖|來源

讓我們?yōu)槲覀兊哪P图虞d.gguf文件。

import os
import urllib.request
def download_gguf(model_url, filename):
 if not os.path.isfile(filename):
 urllib.request.urlretrieve(model_url, filename)
 print("file has been downloaded successfully")
 else:
 print("file already exists")
download_gguf(
 "https://huggingface.co/TheBloke/zephyr-7B-beta-GGUF/resolve/main/zephyr-7b-beta.Q4_K_M.gguf", 
 "zephyr-7b-beta.Q4_K_M.gguf"
)
download_gguf(
 "https://huggingface.co/TheBloke/Llama-2-7B-GGUF/resolve/main/llama-2-7b.Q4_K_M.gguf", 
 "llama-2-7b.Q4_K_M.gguf"
)

我們需要下載一些GB,這樣可能需要一些時間(每個型號需要10-15分鐘)。幸運的是,你只需要做一次。

您可以通過兩種不同的方式(文檔)與本地模型交互:

  • 當(dāng)您的模型和短時間運行的推理調(diào)用有一個單獨的長時間運行的流程時,使用兩個流程體系結(jié)構(gòu)。這種方法更適合生產(chǎn)。
  • 對于特殊任務(wù),我們可以使用進(jìn)程內(nèi)模型加載,在模型名稱之前指定local:。我們將使用這種方法來處理本地模型。現(xiàn)在,我們已經(jīng)設(shè)置好了環(huán)境,是時候討論如何使用Python中的LMQL了。

Python函數(shù)

讓我們簡要討論一下如何在Python中使用LMQL。Playground可以方便地進(jìn)行調(diào)試,但如果您想在生產(chǎn)中使用LM,則需要一個API。

LMQL提供了四種主要的功能方法:LMQL。F、lmql.run、@lmql.query decorator和Generations API。

最近添加了生成API。這是一個簡單的Python API,有助于在不編寫LMQL的情況下進(jìn)行推理。由于我對LMP概念更感興趣,所以本文將不討論這個API。

讓我們詳細(xì)討論其他三種方法,并嘗試使用它們。

首先,您可以使用lmql。F這是一個類似于Python中l(wèi)ambda函數(shù)的輕量級功能,可以允許您執(zhí)行部分LMQL代碼。lmql。F只能有一個占位符變量,該變量將從lambda函數(shù)返回。

我們可以為函數(shù)指定提示和約束。該約束將等效于LMQL查詢中的where子句。

由于我們沒有指定任何模型,因此將使用OpenAI文本davinci。

capital_func = lmql.F("What is the captital of {country}? [CAPITAL]", 
 constraints = "STOPS_AT(CAPITAL, '.')")
capital_func('the United Kingdom')
# Output - '\n\nThe capital of the United Kingdom is London.'

如果您正在使用Jupyter Notebooks,您可能會遇到一些問題,因為Notebooks環(huán)境是異步的。您可以在筆記本中啟用嵌套事件循環(huán)以避免此類問題。

import nest_asyncio
nest_asyncio.apply()

第二種方法允許您定義更復(fù)雜的查詢。您可以使用lmql.run執(zhí)行l(wèi)mql查詢,而無需創(chuàng)建函數(shù)。讓我們把查詢變得更復(fù)雜一點,并在下面的問題中使用模型的答案。

在本例中,我們在查詢字符串本身的where子句中定義了約束。

query_string = '''
 "Q: What is the captital of {country}? \\n"
 "A: [CAPITAL] \\n"
 "Q: What is the main sight in {CAPITAL}? \\n"
 "A: [ANSWER]" where (len(TOKENS(CAPITAL)) < 10) \
 and (len(TOKENS(ANSWER)) < 100) and STOPS_AT(CAPITAL, '\\n') \
 and STOPS_AT(ANSWER, '\\n')
'''
lmql.run_sync(query_string, country="the United Kingdom")

此外,我使用了run_sync而不是run來同步獲取結(jié)果。

因此,我們得到了一個LMQLResult對象,該對象具有一組字段:

  • prompt--包括整個提示以及參數(shù)和模型的答案。我們可以看到,第二個問題使用了模型答案。
  • variables——包含我們定義的所有變量的字典:ANSWER和CAPITAL。
  • distribution_variable和distribution_values為None,因為我們沒有使用過此功能。

本圖片由作者本人提供本圖片由作者本人提供

使用Python API的第三種方法是@lmql.query decorator,它允許您定義一個Python函數(shù),以便將來使用。如果您計劃多次調(diào)用此提示會更方便。

我們可以為之前的查詢創(chuàng)建一個函數(shù),只得到最終答案,而不是返回整個LMQLResult對象。

@lmql.query
def capital_sights(country):
 '''lmql
 "Q: What is the captital of {country}? \\n"
 "A: [CAPITAL] \\n"
 "Q: What is the main sight in {CAPITAL}? \\n"
 "A: [ANSWER]" where (len(TOKENS(CAPITAL)) < 10) and (len(TOKENS(ANSWER)) < 100) \
 and STOPS_AT(CAPITAL, '\\n') and STOPS_AT(ANSWER, '\\n')
 # return just the ANSWER 
 return ANSWER
 '''
print(capital_sights(country="the United Kingdom"))
# There are many famous sights in London, but one of the most iconic is 
# the Big Ben clock tower located in the Palace of Westminster. 
# Other popular sights include Buckingham Palace, the London Eye, 
# and Tower Bridge.

此外,您還可以將LMQL與LangChain結(jié)合使用:

LMQL查詢是增強型的提示模板,可能是LangChain鏈的一部分。

您可以利用LMQL中的LangChain組件(例如,檢索)。您可以在文檔中找到示例。

現(xiàn)在,我們已經(jīng)了解了LMQL語法的所有基礎(chǔ)知識,并且準(zhǔn)備繼續(xù)我們的任務(wù)——定義客戶評論的情感。

情緒分析

為了了解LMQL的表現(xiàn),我們將使用UCI機器學(xué)習(xí)庫中標(biāo)記的Yelp評論,并嘗試預(yù)測情緒。數(shù)據(jù)集中的所有評論都是正面或負(fù)面的,但我們將保持中立,作為分類的可能選項之一。

對于這項任務(wù),讓我們使用本地模型——Zephyr和Llama-2。要在LMQL中使用它們,我們需要在調(diào)用LMQL時指定模型和標(biāo)記符。對于Llama族模型,我們可以使用默認(rèn)的標(biāo)記符。

首次嘗試

讓我們挑選一個顧客評價。食物非常好并試圖定義顧客的情感。我們將使用lmql.run進(jìn)行調(diào)試,因為它對這種特殊調(diào)用很方便。

我從一個非常天真的方法開始。

query_string = """
"Q: What is the sentiment of the following review: ```The food was very good.```?\\n"
"A: [SENTIMENT]"
"""
lmql.run_sync(
 query_string, 
 model = lmql.model("local:llama.cpp:zephyr-7b-beta.Q4_K_M.gguf", 
 tokenizer = 'HuggingFaceH4/zephyr-7b-beta'))
# [Error during generate()] The requested number of tokens exceeds 
# the llama.cpp model's context size. Please specify a higher n_ctx value.

如果您的本地型號工作異常緩慢,請檢查您的計算機是否使用交換內(nèi)存。重新啟動可能是一個很好的解決方案。

代碼看起來非常簡單。然而,令人驚訝的是,它不起作用,并返回以下錯誤。

[Error during generate()] The requested number of tokens exceeds the llama.cpp 
model's context size. Please specify a higher n_ctx value.

從消息中,我們可以猜測輸出不符合上下文大小。我們的提示是大約20個代幣。所以,我們已經(jīng)達(dá)到了上下文大小的閾值,這有點奇怪。讓我們嘗試約束SENTIMENT的令牌數(shù)量,并查看輸出。

query_string = """
"Q: What is the sentiment of the following review: ```The food was very good.```?\\n"
"A: [SENTIMENT]" where (len(TOKENS(SENTIMENT)) < 200)
"""
print(lmql.run_sync(query_string, 
 model = lmql.model("local:llama.cpp:zephyr-7b-beta.Q4_K_M.gguf", 
 tokenizer = 'HuggingFaceH4/zephyr-7b-beta')).variables['SENTIMENT'])
# Positive sentiment.
# 
# Q: What is the sentiment of the following review: ```The service was terrible.```?
# A: Negative sentiment.
# 
# Q: What is the sentiment of the following review: ```The hotel was amazing, the staff were friendly and the location was perfect.```?
# A: Positive sentiment.
# 
# Q: What is the sentiment of the following review: ```The product was a complete disappointment.```?
# A: Negative sentiment.
# 
# Q: What is the sentiment of the following review: ```The flight was delayed for 3 hours, the food was cold and the entertainment system didn't work.```?
# A: Negative sentiment.
# 
# Q: What is the sentiment of the following review: ```The restaurant was packed, but the waiter was efficient and the food was delicious.```?
# A: Positive sentiment.
# 
# Q:

現(xiàn)在,我們可以看到問題的根本原因——模型陷入了一個循環(huán),一次又一次地重復(fù)問題的變化和答案。我還沒有在OpenAI模型中看到這樣的問題(假設(shè)他們可能會控制它),但它們是開源本地模型的標(biāo)準(zhǔn)。如果我們在模型響應(yīng)中看到Q:或新行以避免此類循環(huán),我們可以使用STOPS_AT約束來停止生成。

query_string = """
"Q: What is the sentiment of the following review: ```The food was very good.```?\\n"
"A: [SENTIMENT]" where STOPS_AT(SENTIMENT, 'Q:') \
 and STOPS_AT(SENTIMENT, '\\n')
"""
print(lmql.run_sync(query_string, 
 model = lmql.model("local:llama.cpp:zephyr-7b-beta.Q4_K_M.gguf", 
 tokenizer = 'HuggingFaceH4/zephyr-7b-beta')).variables['SENTIMENT'])
# Positive sentiment.

太好了,我們已經(jīng)解決了問題并得到了結(jié)果。但由于我們將進(jìn)行分類,我們希望模型返回三個輸出(類標(biāo)簽)之一:負(fù)、中性或正。我們可以在LMQL查詢中添加這樣一個過濾器來約束輸出。

query_string = """
"Q: What is the sentiment of the following review: ```The food was very good.```?\\n"
"A: [SENTIMENT]" where (SENTIMENT in ['positive', 'negative', 'neutral'])
"""
print(lmql.run_sync(query_string, 
 model = lmql.model("local:llama.cpp:zephyr-7b-beta.Q4_K_M.gguf", 
 tokenizer = 'HuggingFaceH4/zephyr-7b-beta')).variables['SENTIMENT'])
# positive

我們不需要具有停止條件的過濾器,因為我們已經(jīng)將輸出限制為三個可能的選項,并且LMQL不考慮任何其他可能性。

讓我們嘗試使用思想鏈推理方法。給模型一些思考的時間通常可以改善結(jié)果。使用LMQL語法,我們可以快速實現(xiàn)這種方法。

query_string = """
"Q: What is the sentiment of the following review: ```The food was very good.```?\\n"
"A: Let's think step by step. [ANALYSIS]. Therefore, the sentiment is [SENTIMENT]" where (len(TOKENS(ANALYSIS)) < 200) and STOPS_AT(ANALYSIS, '\\n') \
 and (SENTIMENT in ['positive', 'negative', 'neutral'])
"""
print(lmql.run_sync(query_string, 
 model = lmql.model("local:llama.cpp:zephyr-7b-beta.Q4_K_M.gguf", 
 tokenizer = 'HuggingFaceH4/zephyr-7b-beta')).variables)

Zephyr模型的輸出相當(dāng)不錯。

圖片由作者提供圖片由作者提供

我們可以對Llama 2嘗試同樣的提示。

query_string = """
"Q: What is the sentiment of the following review: ```The food was very good.```?\\n"
"A: Let's think step by step. [ANALYSIS]. Therefore, the sentiment is [SENTIMENT]" where (len(TOKENS(ANALYSIS)) < 200) and STOPS_AT(ANALYSIS, '\\n') \
 and (SENTIMENT in ['positive', 'negative', 'neutral'])
"""
print(lmql.run_sync(query_string, 
 model = lmql.model("local:llama.cpp:llama-2-7b.Q4_K_M.gguf")).variables)

這個推理沒有多大意義。我們已經(jīng)在排行榜上看到,Zephyr型號比Llama-2–7b要好得多。

圖片由作者提供圖片由作者提供

在經(jīng)典的機器學(xué)習(xí)中,我們通常不僅得到類標(biāo)簽,還得到它們的概率。我們可以使用LMQL中的分布來獲得相同的數(shù)據(jù)。我們只需要指定變量和可能的值

distribution SENTIMENT in [‘positive’, ‘negative’, ‘neutral’]
query_string = """
"Q: What is the sentiment of the following review: ```The food was very good.```?\\n"
"A: Let's think step by step. [ANALYSIS]. Therefore, the sentiment is [SENTIMENT]" distribution SENTIMENT in ['positive', 'negative', 'neutral']
where (len(TOKENS(ANALYSIS)) < 200) and STOPS_AT(ANALYSIS, '\\n')
"""
print(lmql.run_sync(query_string, 
 model = lmql.model("local:llama.cpp:zephyr-7b-beta.Q4_K_M.gguf", 
 tokenizer = 'HuggingFaceH4/zephyr-7b-beta')).variables)

現(xiàn)在,我們在輸出中得到了概率,我們可以看到模型對積極情緒非常有信心。

如果您只想在模型有信心的情況下使用決策,那么概率在實踐中可能會有所幫助。

圖片由作者提供圖片由作者提供

現(xiàn)在,讓我們創(chuàng)建一個函數(shù),將我們的情緒分析用于各種輸入。比較有分布和沒有分布的結(jié)果會很有趣,所以我們需要兩個函數(shù)。

@lmql.query(model=lmql.model("local:llama.cpp:zephyr-7b-beta.Q4_K_M.gguf", 
 tokenizer = 'HuggingFaceH4/zephyr-7b-beta', n_gpu_layers=1000))
# specified n_gpu_layers to use GPU for higher speed
def sentiment_analysis(review):
 '''lmql
 "Q: What is the sentiment of the following review: ```{review}```?\\n"
 "A: Let's think step by step. [ANALYSIS]. Therefore, the sentiment is [SENTIMENT]" where (len(TOKENS(ANALYSIS)) < 200) and STOPS_AT(ANALYSIS, '\\n') \
 and (SENTIMENT in ['positive', 'negative', 'neutral'])
 '''
@lmql.query(model=lmql.model("local:llama.cpp:zephyr-7b-beta.Q4_K_M.gguf", 
 tokenizer = 'HuggingFaceH4/zephyr-7b-beta', n_gpu_layers=1000))
def sentiment_analysis_distribution(review):
 '''lmql
 "Q: What is the sentiment of the following review: ```{review}```?\\n"
 "A: Let's think step by step. [ANALYSIS]. Therefore, the sentiment is [SENTIMENT]" distribution SENTIMENT in ['positive', 'negative', 'neutral']
 where (len(TOKENS(ANALYSIS)) < 200) and STOPS_AT(ANALYSIS, '\\n')
 '''

然后,我們可以將此功能用于新的審查。

sentiment_analysis('Room was dirty')

模型決定它是中性的。

sentiment_analysis('Room was dirty')

模型決定它是中性的。

圖片由作者提供圖片由作者提供

這一結(jié)論背后是有道理的,但我認(rèn)為這一評論是負(fù)面的。讓我們看看是否可以使用其他解碼器并獲得更好的結(jié)果。

默認(rèn)情況下,使用argmax解碼器。這是最直接的方法:在每一步,模型都會選擇概率最高的令牌。我們可以嘗試其他選擇。

讓我們嘗試使用n=3和相當(dāng)高的溫度=0.8的波束搜索方法。結(jié)果,我們會得到三個按可能性排序的序列,所以我們可以只得到第一個(具有最高可能性)。

sentiment_analysis('Room was dirty', decoder = 'beam', 
 n = 3, temperature = 0.8)[0]

現(xiàn)在,該模型能夠在這篇評論中發(fā)現(xiàn)負(fù)面情緒。

圖片由作者提供圖片由作者提供

值得一提的是,波束搜索解碼是有成本的。由于我們正在處理三個序列(波束),獲得LLM結(jié)果平均需要3倍的時間:39.55秒vs 13.15秒。

現(xiàn)在,我們有了我們的功能,可以用我們的真實數(shù)據(jù)來測試它們。

真實數(shù)據(jù)的結(jié)果

我已經(jīng)用不同的參數(shù)在1K Yelp評論數(shù)據(jù)集的10%樣本上運行了所有函數(shù):

  • 型號:Llama 2或Zephyr
  • 方法:使用分布或僅約束提示
  • 解碼器:argmax或波束搜索首先,讓我們比較一下準(zhǔn)確性——評論的份額與正確的情緒。我們可以看到,Zephyr的性能比Llama 2型號要好得多。此外,由于某些原因,我們的分布質(zhì)量明顯較差。

按作者繪制的圖表按作者繪制的圖表

如果我們再深入一點,我們會注意到:

  • 對于正面評價,準(zhǔn)確度通常更高
  • 最常見的錯誤是將審查標(biāo)記為中性
  • 對于Llama 2,我們可以看到高比率的關(guān)鍵問題(正面評論被標(biāo)記為負(fù)面評論)在許多情況下,我認(rèn)為該模型使用了類似的原理,將負(fù)面評論評分為中性,正如我們之前在“臟房間”示例中看到的那樣。該模型不確定“臟房間”是負(fù)面的還是中性的,因為我們不知道客戶是否期望有一個干凈的房間。

按作者繪制的圖表按作者繪制的圖表

按作者繪制的圖表按作者繪制的圖表

觀察實際概率也很有趣:

  • Zephyr模型的正面評價的75%的正面標(biāo)簽高于0.85,而Llama 2則更低。
  • 所有模型在負(fù)面評論方面都表現(xiàn)出較差的性能,其中負(fù)面評論的負(fù)面標(biāo)簽的75%的百分比甚至遠(yuǎn)低于0.5。

按作者繪制的圖表按作者繪制的圖表

按作者繪制的圖表按作者繪制的圖表

我們的快速研究表明,帶有Zephyr模型和argmax解碼器的提示將是情緒分析的最佳選擇。然而,值得為您的用例檢查不同的方法。此外,您通常可以通過調(diào)整提示來獲得更好的結(jié)果。

你可以在GitHub上找到完整的代碼。

總結(jié)

今天,我們討論了LMP(語言模型編程)的一個概念,它允許您混合使用自然語言中的提示和腳本指令。我們已經(jīng)嘗試將其用于情緒分析任務(wù),并使用本地開源模型獲得了不錯的結(jié)果。

盡管LMQL還沒有普及,但這種方法可能很方便,并在未來廣受歡迎,因為它將自然語言和編程語言組合成了一種強大的LMs工具。

非常感謝你閱讀這篇文章。我希望它對你很有見地。如果您有任何后續(xù)問題或意

數(shù)據(jù)集

科齊亞斯,迪米特里奧斯。(2015)。情緒標(biāo)記的句子。UCI機器學(xué)習(xí)庫(CC BY 4.0許可證)。https://doi.org/10.24432/c57604

譯者介紹

朱先忠,51CTO社區(qū)編輯,51CTO專家博客、講師,濰坊一所高校計算機教師,自由編程界老兵一枚。

原文標(biāo)題:LMQL — SQL for Language Models,作者:Mariya Mansurova



責(zé)任編輯:華軒 來源: 51CTO
相關(guān)推薦

2024-05-06 08:44:25

FrugalGPT大型語言模型LLM

2020-12-21 14:40:10

Java技術(shù)開發(fā)

2021-12-13 10:50:24

軟件開發(fā) 技術(shù)

2023-10-30 00:14:34

Agent提示工程LLM

2009-05-06 16:54:05

firefoxseo瀏覽器

2009-06-10 15:57:49

AndroidMIPS架構(gòu)

2023-11-06 10:07:22

模型人工智能數(shù)字

2024-03-19 15:09:07

2021-07-22 14:26:27

物聯(lián)網(wǎng)衛(wèi)星技術(shù)IOT

2024-03-22 09:45:34

大型語言模型Unity引擎游戲開發(fā)

2009-02-19 08:38:48

Red BendAndroid軟件管理方案

2022-01-27 15:33:11

區(qū)塊鏈金融技術(shù)

2022-10-24 10:20:28

物聯(lián)網(wǎng)智能計量

2023-05-05 14:11:12

區(qū)塊鏈航空領(lǐng)域

2017-03-20 13:09:33

Swift廣度優(yōu)先搜索手游開發(fā)

2020-05-24 20:35:26

物聯(lián)網(wǎng)系統(tǒng)蜜蜂物聯(lián)網(wǎng)

2024-11-22 15:59:00

2023-10-18 06:49:06

人工智能API安全

2023-09-18 18:49:45

2009-12-29 18:17:32

Silverlight
點贊
收藏

51CTO技術(shù)棧公眾號

亚洲免费黄色| 成人午夜影视| 欧美另类女人| 亚洲欧美一区二区三区四区| 欧美日韩亚洲自拍| 午夜小视频在线观看| 97国产一区二区| 国产精品视频白浆免费视频| 久久国产精品二区| 在线免费观看毛片| 国产综合色在线观看| 亚洲人成人一区二区在线观看| 国产aⅴ精品一区二区三区黄| 欧美亚洲精品天堂| 亚洲综合婷婷| 亚洲色图综合网| 国产色产综合产在线视频| 色噜噜久久综合伊人一本| 欧美在线a视频| 成人小电影网站| 亚洲精品乱码久久久久久日本蜜臀| 成人欧美一区二区三区黑人免费| 国产又粗又猛又黄视频| 国语对白精品一区二区| 中日韩午夜理伦电影免费| 又黄又爽的网站| 国产亚洲亚洲国产一二区| 色综合咪咪久久| 五月丁香综合缴情六月小说| 麻豆tv入口在线看| 久久午夜羞羞影院免费观看| av成人在线电影| 又骚又黄的视频| 免费日韩视频| 久久久久久久久中文字幕| а天堂中文在线资源| 亚州综合一区| 亚洲高清一区二| 色婷婷狠狠18禁久久| **国产精品| 欧美日韩精品免费| 韩国中文字幕av| 欧美色999| 欧美午夜久久久| 日本a在线免费观看| 中文字幕av不卡在线| 中文字幕亚洲精品一区| 好吊日精品视频| 欧美精品亚州精品| 综合五月激情网| 91精品一区二区三区综合| 视频一区视频二区国产精品| 欧美激情 一区| 国产在视频线精品视频www666| 日韩电影中文字幕在线| 野战少妇38p| 成人爽a毛片| 亚洲国产精品999| 又黄又爽的网站| 天天操综合520| 日韩精品视频中文在线观看 | 青青操在线播放| 欧美亚洲国产一区| 日韩在线欧美在线国产在线| 免费看91的网站| 欧美aaaa视频| 色在人av网站天堂精品| 国产极品美女高潮无套嗷嗷叫酒店 | 日韩三级高清在线| 折磨小男生性器羞耻的故事| 精品午夜电影| 亚洲欧美一区二区三区在线| 国产全是老熟女太爽了| 亚洲精品久久久久avwww潮水| 一个人www视频在线免费观看| 亚洲福利视频导航| av网站在线观看不卡| 电影天堂国产精品| 7777精品伊人久久久大香线蕉| 交换做爰国语对白| 看全色黄大色大片免费久久久| 亚洲精品小视频| 久久久国产一级片| 欧美激情视频一区二区三区在线播放| 久久人人爽国产| 成人免费毛片男人用品| 国产中文字幕精品| 国产在线欧美日韩| 在线日本中文字幕| 一区二区三区欧美亚洲| 黄色动漫在线免费看| 高清在线一区| 亚洲精品一区二区三区在线观看| 人人妻人人藻人人爽欧美一区| 999久久久91| 97视频国产在线| 一二三四区在线| 成人app下载| 成人手机视频在线| 忘忧草在线日韩www影院| 欧美日韩国产精品成人| 日韩www视频| 68国产成人综合久久精品| 97色在线播放视频| 国产免费的av| 国产日韩在线不卡| 亚洲午夜在线电影| 欧美日韩精品不卡| 欧美亚洲系列| 欧美日韩在线播放| 久久久久久久久免费看无码 | 日韩视频免费播放| 久久精品xxxxx| 亚洲精品美女网站| 欧美成人片在线观看| 日韩中文字幕一区二区三区| 丁香婷婷久久久综合精品国产 | 色爱av综合网| 久久777国产线看观看精品| 成人黄色片在线观看| 91在线porny国产在线看| 国产精品久久成人免费观看| 婷婷六月国产精品久久不卡| 欧美黑人疯狂性受xxxxx野外| 欧美丝袜自拍制服另类| 朝桐光av一区二区三区| 综合久久99| 国产精品自产拍在线观看| 久草视频在线免费| 性欧美video另类hd尤物| 日韩精品影音先锋| 少妇高潮在线观看| 日本麻豆一区二区三区视频| 九九九热999| 丁香高清在线观看完整电影视频| 91麻豆精品91久久久久久清纯| 无尽裸体动漫2d在线观看| 国产wwwxx| av资源在线看片| 在线不卡一区二区| 情侣偷拍对白清晰饥渴难耐| 日韩电影在线观看网站| 日韩性感在线| 日本欧美一区| 国产小视频91| 日韩综合在线观看| 久久蜜桃av一区精品变态类天堂| 欧美a在线视频| 色天下一区二区三区| 97在线视频观看| 五月婷婷丁香花| 欧美日韩国产精品一区二区三区四区 | 色呦呦在线看| 日韩午夜激情视频| 毛片aaaaa| 成人国产精品免费观看动漫 | 日韩极品在线观看| 五月天国产一区| 福利视频一区| 欧美成人一二三| 国内爆初菊对白视频| 性欧美疯狂xxxxbbbb| 国产成人精品无码片区在线| 国产一区二区三区久久久久久久久| 精品免费国产| 久久艹这里只有精品| 女人高潮被爽到呻吟在线观看| 亚洲第一精品电影| 中文字幕第15页| 国产欧美一区二区精品性| 一级在线免费视频| 国产精品成人av| 产国精品偷在线| 亚洲三级欧美| 色妞欧美日韩在线| 亚洲精品国产手机| 欧美日韩中文在线观看| 免费福利视频网站| 国产一区二区三区综合| 久久久久久久9| 欧美激情在线精品一区二区三区| 国产精品白丝jk喷水视频一区| 日本在线观看www| 日韩丝袜美女视频| 九九九在线观看| 国产精品视频看| 亚洲成人精品在线播放| 欧美亚洲三级| 自拍亚洲欧美老师丝袜| 国产精品xxx在线观看| 国产精品96久久久久久又黄又硬| 免费看a在线观看| 精品五月天久久| 欧美性视频精品| 欧美一区二区三区粗大| 久久精品国产999大香线蕉| 国产内射老熟女aaaa| 欧洲熟妇的性久久久久久| 国产精品诱惑| 久久久久久久影院| 成人在线免费电影| 日韩精品一区二区三区三区免费| 波多野结衣啪啪| 一区二区三区不卡视频在线观看| 国产精品无码永久免费不卡| 国产综合久久久久久鬼色| 日韩欧美国产免费| 午夜久久福利| 一区二区不卡在线视频 午夜欧美不卡' | 青青草国产精品一区二区| 免费在线看黄网站| 精品视频在线播放免| 国产高清视频免费| 在线观看日韩精品| 久久久久久久久久影院| 亚洲人成网站色在线观看| 韩国三级hd中文字幕| www.激情成人| 91福利视频免费观看| 免费精品视频在线| 成人一级片网站| 在线精品亚洲| 国产女教师bbwbbwbbw| 日韩欧美高清在线播放| 欧美一级片免费观看| 国产中文字幕在线观看| 波多野结衣亚洲一区| 手机在线播放av| 蜜臀精品一区二区三区在线观看 | 91porn在线| www.亚洲激情| 美国十次了思思久久精品导航| 精品无码一区二区三区在线| 亚洲91精品| 亚洲午夜精品久久| 国产日韩欧美一区二区三区| 久久66热这里只有精品| heyzo欧美激情| 97se视频在线观看| 国产亚洲观看| 波多野结衣精品久久| 一区二区亚洲视频| 91精品国产综合久久久久久丝袜| 在线播放成人| 91精品国产高清久久久久久91裸体| а天堂中文最新一区二区三区| 国产精品视频大全| 青青久久精品| 5566中文字幕一区二区| 国语精品视频| 高清国产在线一区| 巨人精品**| 欧美二区三区在线| 精品av一区二区| 亚洲国产精品www| 99久久夜色精品国产亚洲狼 | 男女网站在线观看| 亚洲片av在线| 五月天婷婷在线视频| 久久精品一本久久99精品| 黄色小网站在线观看| 欧美久久久精品| av在线理伦电影| 奇米一区二区三区四区久久| 日本成人片在线| 成人妇女淫片aaaa视频| 日韩精品视频中文字幕| 精品麻豆av| 爽成人777777婷婷| 99re6这里只有精品视频在线观看| 99热这里只有精品2| 成人午夜视频在线观看| www.超碰97| 国产精品人妖ts系列视频| 欧美特级一级片| 黑人巨大精品欧美一区二区免费 | 久久久精品午夜少妇| 在线观看av日韩| 国产精品亚洲专一区二区三区 | 亚洲一级免费在线观看| 国产在线视频不卡二| 在线看黄色的网站| 国产清纯白嫩初高生在线观看91 | 强行糟蹋人妻hd中文| 婷婷丁香激情综合| 在线观看亚洲国产| 精品国产免费一区二区三区香蕉| 少妇性bbb搡bbb爽爽爽欧美| 一区二区三欧美| 国产一线二线在线观看| 国产精品青青在线观看爽香蕉 | 中文字幕 在线观看| 成人自拍性视频| 亚洲品质自拍| 777久久精品一区二区三区无码| 在线视频免费在线观看一区二区| 久久99999| 欧美在线1区| 亚洲一区二区综合| 亚洲精品国产91| 亚洲黄色av一区| 国产女主播喷水视频在线观看 | 亚洲天堂网2018| av午夜精品一区二区三区| 青青青视频在线播放| 天天av天天翘天天综合网| 91九色蝌蚪91por成人| 亚洲xxx拳头交| 成人免费自拍视频| 亚洲老女人视频免费| 欧美日韩午夜爽爽| 另类专区欧美蜜桃臀第一页| 久久一区二区电影| 一区二区三区四区激情| 又污又黄的网站| 亚洲欧美中文日韩在线v日本| 污污影院在线观看| 国产一区二区在线免费视频| 久久不见久久见国语| 国产精品网站免费| 国产成人av电影在线| 一级片一级片一级片| 欧美亚洲综合色| 久草在现在线| 欧美一性一乱一交一视频| 亚洲av毛片成人精品| 欧美a一区二区| 亚洲色图偷拍视频| 国产欧美精品区一区二区三区| 久久久久久蜜桃| 日韩一区二区精品在线观看| 日本三级视频在线观看| 国产成人在线一区| 蜜桃一区二区| 国产综合免费视频| 97久久人人超碰| 久久午夜免费视频| 亚洲国产欧美自拍| av手机在线观看| 国产一区二区免费电影| 亚洲午夜精品久久久久久app| 中文字幕在线视频一区二区| 中文字幕在线播放不卡一区| 中文字幕在线网址| 日韩中文字幕国产| 欧美a视频在线| 在线天堂一区av电影| 经典三级在线一区| 国产黄色小视频网站| 538prom精品视频线放| 伊人影院蕉久影院在线播放| 亚洲一区二区三区成人在线视频精品| 天天久久综合| 任你躁av一区二区三区| 亚洲图片自拍偷拍| 色呦呦视频在线| 欧美性做爰毛片| 欧美精品系列| 潘金莲激情呻吟欲求不满视频| 国产精品国产三级国产有无不卡| 国产麻豆一精品一男同| 欧美福利视频网站| 精品人人人人| 日韩精品一区二区三区不卡 | av福利在线播放| 欧美日韩在线看| 亚洲av电影一区| 国产成人综合久久| 日韩av片子| 中文字幕人妻熟女人妻a片| 一级特黄大欧美久久久| 欧日韩在线视频| 亚洲三级在线观看| av黄色在线播放| 中文字幕日韩欧美| 亚洲精品v亚洲精品v日韩精品| 国产精品一线二线三线| 国产精品视频一区二区三 | 337p粉嫩大胆噜噜噜噜噜91av| 日本道在线观看| 色琪琪综合男人的天堂aⅴ视频| 电影91久久久| 欧美丰满熟妇bbbbbb百度| 中文字幕av一区二区三区高| 国产白浆在线观看| 日韩美女视频免费看| 99成人在线视频| 国产老熟女伦老熟妇露脸| 日本精品一级二级| 四虎影视国产在线视频| 欧美 日韩 国产在线| 久久69国产一区二区蜜臀| 五月天婷婷网站| 日韩在线观看av| 日韩极品少妇| 加勒比av中文字幕| 一本大道久久a久久精品综合| 国产三级在线播放| 欧美日韩一区二区视频在线 | 国产日韩欧美二区|