Zephyr模型的输出相当不错 。
文章插图
图片由作者提供
我们可以对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要好得多 。文章插图
图片由作者提供
在经典的机器学习中,我们通常不仅得到类标签,还得到它们的概率 。我们可以使用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)
现在,我们在输出中得到了概率,我们可以看到模型对积极情绪非常有信心 。如果您只想在模型有信心的情况下使用决策,那么概率在实践中可能会有所帮助 。
文章插图
图片由作者提供
现在 , 让我们创建一个函数,将我们的情绪分析用于各种输入 。比较有分布和没有分布的结果会很有趣,所以我们需要两个函数 。
@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')
模型决定它是中性的 。文章插图
图片由作者提供
这一结论背后是有道理的 , 但我认为这一评论是负面的 。让我们看看是否可以使用其他解码器并获得更好的结果 。
默认情况下,使用argmax解码器 。这是最直接的方法:在每一步,模型都会选择概率最高的令牌 。我们可以尝试其他选择 。
让我们尝试使用n=3和相当高的温度=0.8的波束搜索方法 。结果 , 我们会得到三个按可能性排序的序列,所以我们可以只得到第一个(具有最高可能性) 。
sentiment_analysis('Room was dirty', decoder = 'beam',n = 3, temperature = 0.8)[0]
现在,该模型能够在这篇评论中发现负面情绪 。文章插图
图片由作者提供
值得一提的是,波束搜索解码是有成本的 。由于我们正在处理三个序列(波束),获得LLM结果平均需要3倍的时间:39.55秒vs 13.15秒 。
现在,我们有了我们的功能,可以用我们的真实数据来测试它们 。
推荐阅读
- MySQL的自增主键是连续自增吗?
- MySQL数据库性能优化中常用的方法是什么?
- 实用性极强的MySQL查询优化策略
- MySQL的锁机制是如何防止数据冲突和不一致的?
- 十个高效的MySQL方法,助你更上一层楼
- 数据恢复新姿势:使用MySQL Shell进行更高效灵活的数据恢复
- SQL必须消失的九个理由,你认可吗?
- 生成式人工智能潜力的释放:软件工程师的MLOps和LLM部署策略
- 快速上手 PostgreSQL:掌握PSQL 命令行工具连接技巧
- 如何解决 MySQL 主从延时问题?