In-context Learning
是一种上下文学习,在 LLM
出现之后,这种学习方式变得更加实用。 因为 LLM
是训练好的模型,并不了解我们当前需要解决的问题背景是什么,但是 LLM
本身具有很强的分析推理能力,
在这种情况下,我们只需要将我们的问题和上下文传递给
LLM,它就可以帮我们进行分析推理,从而得到答案。
对于大语言模型而言,我们可以通过在输入的 Prompt
中给出关于解决问题方式的描述或者示例,而不需要利用大量数据对模型进行训练。
In-context Learning
包括了
Zero-shot Learning
和 Few-shot Learning
两种方式。
Zero-shot Learning
一种机器学习方法,它允许模型在没有见过任何训练样本的情况下,对新类别的数据进行分类或识别。
这种方法通常依赖于模型在训练过程中学到的知识,以及对新类别的一些描述性信息,如属性或元数据。
意图识别
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 from langchain_core.messages import SystemMessage, HumanMessagefrom langchain_openai import ChatOpenAIllm = ChatOpenAI( model_name="gpt-3.5-turbo" , temperature=0.3 , api_key='your key' , base_url="https://api.openai-hk.com/v1" ) def recognize_intent (text: str ): response = llm.invoke([ SystemMessage("""Recognize the intent from the user's input and format output as JSON string. The output JSON string includes: "intention", "parameters" """ ), HumanMessage(text) ]) return response.content print (recognize_intent("订8月19日北京到上海的飞机" ))
输出:
1 2 3 4 5 6 7 8 { "intention": "flight_booking", "parameters": { "departure_date": "8月19日", "departure_city": "北京", "destination_city": "上海" } }
情感分类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 from langchain_core.messages import SystemMessage, HumanMessagefrom langchain_openai import ChatOpenAIllm = ChatOpenAI( model_name="gpt-3.5-turbo" , temperature=0.3 , api_key='your key' , base_url="https://api.openai-hk.com/v1" ) def classify_sentiment (text: str ): response = llm.invoke([ SystemMessage("""根据给定文字所表述的情感,将文字分为三类:正面,中立,负面。请将用户给定的文字进行分类,并输出分类。""" ), HumanMessage(text) ]) return response.content print (classify_sentiment("通过前面的课程我对大模型的认识提高了很多。" ))print (classify_sentiment("今天是2024年7月17日" ))print (classify_sentiment("最近感觉很累" ))
输出:
Few-shot Learning
教导模型使用非常有限的训练数据来识别新的对象、类或任务。
在这里是通过在 Prompt
里加入少量示例,来实现模型学习。
示例的作用有时可以超过千言万语,Few-shot Learning
通常可以帮助我们描述更复杂的模式。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 from langchain_openai import ChatOpenAIllm = ChatOpenAI( model_name="gpt-3.5-turbo" , temperature=0.3 , api_key='your key' , base_url="https://api.openai-hk.com/v1" ) def book_flight (text: str ): messages = [ {"role" : "system" , "content" : """ 通过用户描述,提取航班信息并以 JSON 格式输出。 以下是一些示例: 示例1 输入:“订8月9日上海到北京的航班,上午出发 输出:"{"date":"0809","dispatch_time":"6-12","from":"上海","to":"北京"}" 示例2 输入:“订8月9日上海到北京的航班,下午出发 输出:"{"date":"0809","dispatch_time":"12-18","from":"上海","to":"北京"}" 示例3 输入:“订8月9日上海到北京的航班,晚上出发 输出:"{"date":"0809","dispatch_time":"21-18","from":"上海","to":"北京"}" 示例4 输入:“订8月9日上海到北京的航班 输出:"{"date":"0809","dispatch_time":"unknown","from":"上海","to":"北京"}" ”""" }, {"role" : "user" , "content" : text} ] response = llm.invoke(messages) return response.content print (book_flight("预定9月1日广州到北京的航班,下午出发。" ))print (book_flight("预定9月1日广州到北京的航班" ))print (book_flight("预定9月1日夜里广州到北京的航班" ))print (book_flight("预定广州到北京的航班" ))
输出:
1 2 3 4 {"date":"0901","dispatch_time":"12-18","from":"广州","to":"北京"} {"date":"0901","dispatch_time":"unknown","from":"广州","to":"北京"} {"date":"0901","dispatch_time":"21-6","from":"广州","to":"北京"} {"date":"unknown","dispatch_time":"unknown","from":"广州","to":"北京"}
总结
应用大语言模型要从传统机器学习思维切换为上下文学习的思路。
上下文学习包括 Zero-shot Learning
和
Few-shot Learning
,两者并无明显界限,可以根据实际需要灵活运用。