SQL应用于LLM的程序开发利器——开源LMQL( 五 )

Zephyr模型的输出相当不错 。

SQL应用于LLM的程序开发利器——开源LMQL

文章插图
图片由作者提供
我们可以对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)这个推理没有多大意义 。我们已经在排行榜上看到 , Zephyr型号比Llama-2–7b要好得多 。
SQL应用于LLM的程序开发利器——开源LMQL

文章插图
图片由作者提供
在经典的机器学习中,我们通常不仅得到类标签,还得到它们的概率 。我们可以使用LMQL中的分布来获得相同的数据 。我们只需要指定变量和可能的值:
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)现在,我们在输出中得到了概率,我们可以看到模型对积极情绪非常有信心 。
如果您只想在模型有信心的情况下使用决策,那么概率在实践中可能会有所帮助 。
SQL应用于LLM的程序开发利器——开源LMQL

文章插图
图片由作者提供
现在 , 让我们创建一个函数,将我们的情绪分析用于各种输入 。比较有分布和没有分布的结果会很有趣,所以我们需要两个函数 。
@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 speeddef 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')模型决定它是中性的 。
SQL应用于LLM的程序开发利器——开源LMQL

文章插图
图片由作者提供
这一结论背后是有道理的 , 但我认为这一评论是负面的 。让我们看看是否可以使用其他解码器并获得更好的结果 。
默认情况下,使用argmax解码器 。这是最直接的方法:在每一步,模型都会选择概率最高的令牌 。我们可以尝试其他选择 。
让我们尝试使用n=3和相当高的温度=0.8的波束搜索方法 。结果 , 我们会得到三个按可能性排序的序列,所以我们可以只得到第一个(具有最高可能性) 。
sentiment_analysis('Room was dirty', decoder = 'beam',n = 3, temperature = 0.8)[0]现在,该模型能够在这篇评论中发现负面情绪 。
SQL应用于LLM的程序开发利器——开源LMQL

文章插图
图片由作者提供
值得一提的是,波束搜索解码是有成本的 。由于我们正在处理三个序列(波束),获得LLM结果平均需要3倍的时间:39.55秒vs 13.15秒 。
现在,我们有了我们的功能,可以用我们的真实数据来测试它们 。


推荐阅读