前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LangChain学习:评估

LangChain学习:评估

作者头像
Michael阿明
发布2023-07-21 21:38:27
4310
发布2023-07-21 21:38:27
举报
文章被收录于专栏:Michael阿明学习之路

文章目录

learn from https://learn.deeplearning.ai/langchain

1. 加载数据

代码语言:javascript
复制
import os
import pandas as pd
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv()) # read local .env file

from langchain.chains import RetrievalQA
from langchain.chat_models import ChatOpenAI
from langchain.document_loaders import CSVLoader
from langchain.indexes import VectorstoreIndexCreator
from langchain.vectorstores import DocArrayInMemorySearch

自己编造的数据

代码语言:javascript
复制
file = 'goods.csv'
csv_data = '''name,review
小米平衡车,这款小米平衡车的造型简洁大方,携带方便。车身采用铝合金材质,感觉很有质感。车轮较大,站在上面稳定性不错,可以平稳行驶在坚硬路面上。电池续航里程约在20公里左右,符合平衡车的标准配置。转向 precisio较高,控制敏捷,转向灵活。上手学习难度小,很快就可以自如驾驭。但是车身有些重,如果要携带乘坐地铁可能不太方便。总体而言,这款小米平衡车性价比很高,很适合城市短途出行使用。
阿迪达斯休闲鞋,这双阿迪达斯休闲鞋的款式简单大方,很适合日常休闲装扮。鞋身采用轻量 Mesh材质,保证通风性。鞋底较厚,但是轻量弹性,带来舒适的缓冲体验。穿着跑步和长时间行走也不会很疲惫。内部空间较大,不会有束缚感。款式时尚,有多种颜色可选。OEM工艺和品质都有保证。唯一不足可能是防水性能一般,不太适合在雨天长时间穿着。
保温杯,这款保温杯的保温性能非常好,一天下来冷饮依然冰冷,热饮也很滚烫。杯盖设计严密,完全防漏。杯身不透明,不太容易沾污。容量约500ml,带一点开水喝一天没问题。杯口和手柄设计合理,方便口饮。清洗也很方便。杯身磨砂处理,手感不错。比较推荐在办公室中使用。可能唯一的缺点是没有泡茶过滤功能,不太适合放茶叶。
耐克跑步鞋,这双耐克跑步鞋的底部反弹力很好,提供足够的缓冲效果。鞋面采用网眼设计,通气性好。内部空间充足,不会有局促感。全天候跑步都可以,防滑性能也不错。唯一要注意的是,由于是轻薄款式,走路时稍微有点不太稳定。建议专门用作跑步训练使用,不太适合走路或长时间站立。
华为手表,这款华为手表的屏幕显示效果很清晰,色彩还原度高。表带和表扣设计考究,戴着舒适,可以准确测量心率和血氧。支持手机控制播放音乐和相机。续航能力强,正常使用一周左右才需要充电一次。表盘样式也比较丰富。可能的缺点是防水性能一般,只能涉及短时间淋雨或者手洗,不能完全浸水。总体而言,这款手表的外观设计和智能功能表现都比较出色。
ThinkPad笔记本,这款ThinkPad笔记本的外观设计简洁大方,不会很容易沾灰指纹。屏幕视野角度广,颜色还原度高,长时间使用也不会很疲劳。内置的Placketsoft触控板灵敏度高,手感顺滑。键盘手感出色,键行间距宽,打字非常舒适。内部散热性能优异,发热量低。预装Windows系统干净流畅。唯一需要注意的可能是机身较重,不太适合频繁携带外出。
苹果iPhone手机,iPhone的工业设计一如既往的出色,背面玻璃打磨工艺精良。屏幕色彩还原性强,采用Amoled材质,展示效果明亮夺目。iOS系统流畅稳定,各种常用App兼容性强。支持无线充电,电池续航表现不俗。拍照和摄像效果优异,夜景模式拍摄清晰度高。可能唯一的遗憾是已取消耳机插孔,需要另外购买适配器或蓝牙耳机。
联想笔记本电脑,这款联想笔记本电脑的屏幕视野角度很够,色彩表现还算不错。内部散热系统设置得当,发热量低。键盘手感舒适,键位间距合理。机身较轻薄,携带出行不会觉得非常沉重。预装软件不多,比较干净。电池续航能力也可以,日常使用电量基本够用。唯一要注意的是,D盘容量只有256GB,如果存储需要大可以选择在其他位置加装硬盘。
微波炉,这款微波炉选材考究,微波炉门关闭严密,能够隔绝微波辐射。智能程序设定种类较多,操作简便。可以通过旋转盘调节火力大小。内部容积大,够一个大碗。设有除味功能。烹饪食物的效果不错。使用过程中安全可靠,没有出现过故障。'''
rows = csv_data.split('\n')
headers = rows[0].split(',')
data_rows = [row.split(',') for row in rows[1:]]
df = pd.DataFrame(data_rows, columns=headers)
print(df)
df.to_csv(file, index=False)
代码语言:javascript
复制
loader = CSVLoader(file_path=file)
data = loader.load()

2. 硬编码测试样例

代码语言:javascript
复制
examples = [
    {
        "query": "小米平衡车只适合短途出行",
        "answer": "是"
    },
    {
        "query": "阿迪达斯休闲鞋防水性能很好",
        "answer": "否"
    }
]

3. LLM生成测试样例

代码语言:javascript
复制
from langchain.evaluation.qa import QAGenerateChain
from langchain.output_parsers import RegexParser
from langchain.prompts import PromptTemplate

template = """请你根据文档,生成一些提问
文档格式:
<文档开始>
...
<文档结束>
QUERY: query here
ANSWER: answer here

提的问题必须是文档中显而易见的,开始!

<文档开始>
{doc}
<文档结束>"""
output_parser = RegexParser(
    regex=r"QUERY: (.*?)\n+ANSWER: (.*)", output_keys=["query", "answer"]
)
prompt = PromptTemplate(
    input_variables=["doc"], template=template, output_parser=output_parser
)
example_gen_chain = QAGenerateChain.from_llm(llm)
example_gen_chain.prompt = prompt

new_examples = []
for d in data:
    res = example_gen_chain.apply_and_parse([{"doc": d}])
    print(res[0])
    new_examples.append(res[0])
print(new_examples)

自动添加了一些问题

代码语言:javascript
复制
{'query': '这款小米平衡车的特点有哪些?', 'answer': '简洁大方的造型,铝合金材质车身,稳定性不错的大车轮,20公里左右的电池续航里程,高精度的转向,上手学习难度小。'}
{'query': '这双阿迪达斯休闲鞋的鞋身采用了什么材质?', 'answer': '鞋身采用轻量 Mesh材质,保证通风性。'}
{'query': '这款保温杯的保温性能如何?', 'answer': '这款保温杯的保温性能非常好,一天下来冷饮依然冰冷,热饮也很滚烫。'}
{'query': '这双耐克跑步鞋的底部有什么特点?', 'answer': '底部反弹力很好,提供足够的缓冲效果。'}
{'query': '这款华为手表有哪些优点?', 'answer': '屏幕显示效果清晰,色彩还原度高,表带和表扣设计考究,戴着舒适,可以准确测量心率和血氧,支持手机控制播放音乐和相机,续航能力强,表盘样式丰富。'}
{'query': '这款ThinkPad笔记本的外观如何?', 'answer': '外观设计简洁大方,不会很容易沾灰指纹。'}
{'query': '这款手机的屏幕采用了什么材质? ', 'answer': '屏幕采用了Amoled材质。 '}
{'query': '这款联想笔记本电脑的屏幕表现如何?', 'answer': '屏幕视野角度很够,色彩表现还算不错。'}
{'query': '这款微波炉有哪些特点?', 'answer': '微波炉选材考究,微波炉门关闭严密,能够隔绝微波辐射。智能程序设定种类较多,操作简便。可以通过旋转盘调节火力大小。内部容积大,够一个大碗。设有除味功能。烹饪食物的效果不错。使用过程中安全可靠,没有出现过故障。'}

4. 评估

代码语言:javascript
复制
examples += new_examples

index = VectorstoreIndexCreator(
    vectorstore_cls=DocArrayInMemorySearch
).from_loaders([loader])

llm = ChatOpenAI(temperature = 0.0)
qa = RetrievalQA.from_chain_type(
    llm=llm, 
    chain_type="stuff", 
    retriever=index.vectorstore.as_retriever(), 
    verbose=True,
    chain_type_kwargs = {
        "document_separator": "<<<<>>>>>"
    }
)

执行 index 那行,报错了

代码语言:javascript
复制
Retrying langchain.embeddings.openai.embed_with_retry.<locals>._embed_with_retry 
in 4.0 seconds as it raised RateLimitError: exceeded quota for this month.
代码语言:javascript
复制
openai.error.InvalidRequestError: Too many inputs. The max number of inputs is 1.  
We hope to increase the number of inputs per request soon. 
Please contact us through an Azure support request at: https://go.microsoft.com/fwlink/?linkid=2213926 for further questions.

意思就是资源不够用。。。不能同时对多个文档进行操作,换了个账号,可以了

手动评估

代码语言:javascript
复制
import langchain
langchain.debug = True
qa.run(examples[0]["query"])

输出:'是的,根据评论,小米平衡车适合城市短途出行使用。它的电池续航里程约为20公里左右,所以对于长途旅行可能不太方便。但对于日常的短途出行,它是一个很好的选择。'

对比 输出answer 是否一致

LLM评估

代码语言:javascript
复制
predictions = qa.apply(examples)
from langchain.evaluation.qa import QAEvalChain
llm = ChatOpenAI(temperature=0)
eval_chain = QAEvalChain.from_llm(llm)
graded_outputs = eval_chain.evaluate(examples, predictions)

for i, eg in enumerate(examples):
    print(f"Example {i}:")
    print("Question: " + predictions[i]['query'])
    print("Real Answer: " + predictions[i]['answer'])
    print("Predicted Answer: " + predictions[i]['result'])
    print("Predicted Grade: " + graded_outputs[i]['text'])
    print()

输出:

代码语言:javascript
复制
Example 0:
Question: 小米平衡车只适合短途出行
Real Answer: 是
Predicted Answer: 是的,根据评论,小米平衡车适合城市短途出行使用。它的电池续航里程约为20公里左右,所以对于长途旅行可能不太方便。但对于日常的短途出行,它是一个很好的选择。
Predicted Grade: CORRECT

Example 1:
Question: 阿迪达斯休闲鞋防水性能很好
Real Answer: 否
Predicted Answer: 不好
Predicted Grade: CORRECT

Example 2:
Question: 这款小米平衡车的特点有哪些?
Real Answer: 简洁大方的造型,铝合金材质车身,稳定性不错的大车轮,20公里左右的电池续航里程,高精度的转向,上手学习难度小。
Predicted Answer: 这款小米平衡车的特点包括:造型简洁大方,携带方便;车身采用铝合金材质,质感好;车轮较大,稳定性好,可以在坚硬路面上平稳行驶;电池续航里程约在20公里左右,符合平衡车的标准配置;转向精准,控制敏捷,转向灵活;上手学习难度小,很快就可以自如驾驭。但是车身有些重,如果要携带乘坐地铁可能不太方便。总体而言,这款小米平衡车性价比很高,很适合城市短途出行使用。
Predicted Grade: CORRECT

Example 3:
Question: 这双阿迪达斯休闲鞋的鞋身采用了什么材质?
Real Answer: 鞋身采用轻量 Mesh材质,保证通风性。
Predicted Answer: 这双阿迪达斯休闲鞋的鞋身采用了轻量的Mesh材质。
Predicted Grade: CORRECT

Example 4:
Question: 这款保温杯的保温性能如何?
Real Answer: 这款保温杯的保温性能非常好,一天下来冷饮依然冰冷,热饮也很滚烫。
Predicted Answer: 这款保温杯的保温性能非常好,一天下来冷饮依然冰冷,热饮也很滚烫。
Predicted Grade: CORRECT

Example 5:
Question: 这双耐克跑步鞋的底部有什么特点?
Real Answer: 底部反弹力很好,提供足够的缓冲效果。
Predicted Answer: 这双耐克跑步鞋的底部具有很好的反弹力,可以提供足够的缓冲效果。
Predicted Grade: CORRECT

Example 6:
Question: 这款华为手表有哪些优点?
Real Answer: 屏幕显示效果清晰,色彩还原度高,表带和表扣设计考究,戴着舒适,可以准确测量心率和血氧,支持手机控制播放音乐和相机,续航能力强,表盘样式丰富。
Predicted Answer: 这款华为手表的优点包括:
1. 屏幕显示效果清晰,色彩还原度高。
2. 设计考究,表带和表扣舒适。
3. 可以准确测量心率和血氧。
4. 支持手机控制播放音乐和相机。
5. 续航能力强,正常使用一周左右才需要充电一次。
6. 表盘样式丰富。
7. 外观设计和智能功能表现出色。
Predicted Grade: CORRECT

Example 7:
Question: 这款ThinkPad笔记本的外观如何?
Real Answer: 外观设计简洁大方,不会很容易沾灰指纹。
Predicted Answer: 这款ThinkPad笔记本的外观设计简洁大方,不会很容易沾灰指纹。
Predicted Grade: CORRECT

Example 8:
Question: 这款手机的屏幕采用了什么材质? 
Real Answer: 屏幕采用了Amoled材质。 
Predicted Answer: 这款手机的屏幕采用了Amoled材质。
Predicted Grade: CORRECT

Example 9:
Question: 这款联想笔记本电脑的屏幕表现如何?
Real Answer: 屏幕视野角度很够,色彩表现还算不错。
Predicted Answer: 这款联想笔记本电脑的屏幕视野角度很够,色彩表现还算不错。
Predicted Grade: CORRECT

Example 10:
Question: 这款微波炉有哪些特点?
Real Answer: 微波炉选材考究,微波炉门关闭严密,能够隔绝微波辐射。智能程序设定种类较多,操作简便。可以通过旋转盘调节火力大小。内部容积大,够一个大碗。设有除味功能。烹饪食物的效果不错。使用过程中安全可靠,没有出现过故障。
Predicted Answer: 这款微波炉的特点包括选材考究、微波炉门关闭严密、能够隔绝微波辐射、智能程序设定种类较多、操作简便、可以通过旋转盘调节火力大小、内部容积大、设有除味功能、烹饪食物的效果不错、使用过程中安全可靠,没有出现过故障。
Predicted Grade: CORRECT

使用模型进行了批量评估

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-07-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 1. 加载数据
  • 2. 硬编码测试样例
  • 3. LLM生成测试样例
  • 4. 评估
    • 手动评估
      • LLM评估
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档