基于GLM-6B对话模型的实体属性抽取项目实现解析:对Zero-shot与In-Context Learning的若干思考...

来自:老刘说NLP

进NLP群—>加入NLP交流群

Zero-shot、One-shot以及Few-shot让人傻傻分不清,读了很多文章,也没搞清楚他们的差别,究竟什么叫zero-shot,其在应用过程中的no gradient update是什么含义,zero-shot是否为一个伪命题,成为了一些有趣的问题。‍‍‍‍‍‍‍

目前,直接使用以chatgpt为代表的大模型进行nlp任务处理成为了一个潮流,直接拼接prompt进行问答,就可拿到相应答案,例如最近的文章《ChatGPT+NLP下的Prompt模板工具:PromptSource、ChatIE代表性开源项目介绍》中所介绍的chatie,直接来解决zeroshot的任务。

但是,我们发现,如果引入incontext-learning这一思想,作为一个fewshot任务来提升ChatIE这类模型的性能,可能是一个很好的思路,在此基础上个配上一个开源项目进行解释能够增强了解。‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

因此,带着这个问题,本文先谈谈Zero-shot、One-shot以及Few-shot、从ChatIE:面向RE\EE\NER三种任务的伪zero-shot prompt说起、从伪zeroshot看In-Context Learning类比学习、将In-Context Learning引入伪zero-shot完成信息抽取任务四个方面进行介绍,供大家一起参考。

一、先谈谈Zero-shot、One-shot以及Few-shot

1、Zero-shot

Zero-shot就是希望模型能够对其从没见过的类别进行分类,是指对于要分类的类别对象,一次也不学习。

f23fe43633955948dfee8e2f47e7aaee.png

也就是说,只有推理阶段,没有训练阶段。这个常见于chatgpt中qa形式,直接通过问题prompt,基于已训练好的大模型,进行直接预测。

2、Few-shot与One-shot

如果训练集中,不同类别的样本只有少量,则成为Few-shot,如果参与训练学习,也只能使用较少的样本数。‍‍‍‍‍‍‍‍‍

2e2b7815d2f9538ce97ed24288834c68.png

如果训练集中,不同类别的样本只有一个,则成为One-shot, 属于Few-shot的一种特殊情况。

1a0d0851d7fbf745338be0f1fba15d3c.png

但其中的“no gradient update让人费解”,后面想了想,有2种理解:

1)单次微调,参数更新,但微调后模型不保存。‍‍‍‍‍‍‍‍‍‍‍

LLM由于参数量巨大,导致更新起来困难(费钱--费卡)。因此很少对训练好的LLM做微调。但是为了在特殊任务上有较好的表现(微调效果肯定要好于不微调的),但是又不固定微调后的模型,所以提出了one-shot、few-shot的方式,通过加入偏置,影响模型的最终输出。

而one-shot、few-shot可以变相的理解成用一个/多个example进行模型微调,但是微调后的模型不保存。每次提供inference都要微调一遍(输入一个example或者多个example来模拟微调过程),No gradient updates are performed.就是说提供inference的模型参数保持不变,但这其实是tuning的范畴。

2)直接不微调,参数直接不更新‍‍‍‍‍‍

如果不更新参数,那么这种学习就是瞬间的,不构成learning。预训练模型自身训练完后本身有一套参数,finetune就是在预训练基础上继续训练,肯定会有梯度更新,因为finetune后参数会变,参数变了梯度必然会更新。直接推理出答案,后台梯度也不更新。

不过,需要注意的是,如果以这个模型到底有没有见过标注样本,来划分zero-shot与其他的差别,就是主要见过,无论是在推理阶段(作为prompt)用【不更新梯度】,还是加入finetune阶段参与训练【更新参数】,那就肯定不是zero-shot,否则就是数据泄漏。

这也就是说,如果在prompt中是否加入一个或者多个正确的例子,例如分类任务中,加入一些正确的任务描述例子,都不能算作是zero-shot,但是问题是你怎么能保证模型训练没有用过这些数据,他们当时训练就可能搜集到了,模型说不定都见过,也就是说至少不存在严格意义的zero shot。

二、从ChatIE:面向RE\EE\NER三种任务的伪zero-shot prompt说起

最近有篇文章《Zero-Shot Information Extraction via Chatting with ChatGPT》很有趣,该工作将零样本IE任务转变为一个两阶段框架的多轮问答问题(Chat IE),并在三个IE任务中广泛评估了该框架:实体关系三元组抽取、命名实体识别和事件抽取。在两个语言的6个数据集上的实验结果表明,Chat IE取得了非常好的效果,甚至在几个数据集上(例如NYT11-HRL)上超过了全监督模型的表现。

地址:https://github.com/cocacola-lab/ChatIE
2866aa286f39d87dae0325974109b6a5.png

9e444ef2a16558771850176f896c32cc.png

其实现基本原理为,通过制定任务实体关系三元组抽取、命名实体识别和事件抽取,并为每个任务设计了2个步骤的prompt-pattern,第一步用于识别类型,第二步用于识别指定类型的值。将抽取的任务定义(抽取要素)进行prompt填充,然后调用chatgpt接口,在取得结果后进行规则解析,结构化相应答案。

例如,关系抽取的具体执行步骤包括:针对每类prompt,分别调用prompt-pattern,得到相应结果,以事件抽取prompt为例,

1)任务要素定义:

df_eet = {'chinese': {'灾害/意外-坠机': ['时间', '地点', '死亡人数', '受伤人数'], '司法行为-举报': ['时间', '举报发起方', '举报对象'], '财经/交易-涨价': ['时间', '涨价幅度', '涨价物', '涨价方'], '组织关系-解雇': ['时间', '解雇方', '被解雇人员'], '组织关系-停职': ['时间', '所属组织', '停职人员'], '财经/交易-加息': ['时间', '加息幅度', '加息机构'], '交往-探班': ['时间', '探班主体', '探班对象'], '人生-怀孕': ['时间', '怀孕者'], '组织关系-辞/离职': ['时间', '离职者', '原所属组织'], '组织关系-裁员': ['时间', '裁员方', '裁员人数'], '灾害/意外-车祸': ['时间', '地点', '死亡人数', '受伤人数'], '人生-离婚': ['时间', '离婚双方'], '司法行为-起诉': ['时间', '被告', '原告'], '竞赛行为-禁赛': ['时间', '禁赛时长', '被禁赛人员', '禁赛机构'], '人生-婚礼': ['时间', '地点', '参礼人员', '结婚双方'], '财经/交易-涨停': ['时间', '涨停股票'], '财经/交易-上市': ['时间', '地点', '上市企业', '融资金额'], '组织关系-解散': ['时间', '解散方'], '财经/交易-跌停': ['时间', '跌停股票'], '财经/交易-降价': ['时间', '降价方', '降价物', '降价幅度'], '组织行为-罢工': ['时间', '所属组织', '罢工人数', '罢工人员'], '司法行为-开庭': ['时间', '开庭法院', '开庭案件'], '竞赛行为-退役': ['时间', '退役者'], '人生-求婚': ['时间', '求婚者', '求婚对象'], '人生-庆生': ['时间', '生日方', '生日方年龄', '庆祝方'], '交往-会见': ['时间', '地点', '会见主体', '会见对象'], '竞赛行为-退赛': ['时间', '退赛赛事', '退赛方'], '交往-道歉': ['时间', '道歉对象', '道歉者'], '司法行为-入狱': ['时间', '入狱者', '刑期'], '组织关系-加盟': ['时间', '加盟者', '所加盟组织'], '人生-分手': ['时间', '分手双方'], '灾害/意外-袭击': ['时间', '地点', '袭击对象', '死亡人数', '袭击者', '受伤人数'], '灾害/意外-坍/垮塌': ['时间', '坍塌主体', '死亡人数', '受伤人数'], '组织关系-解约': ['时间', '被解约方', '解约方'], '产品行为-下架': ['时间', '下架产品', '被下架方', '下架方'], '灾害/意外-起火': ['时间', '地点', '死亡人数', '受伤人数'], '灾害/意外-爆炸': ['时间', '地点', '死亡人数', '受伤人数'], '产品行为-上映': ['时间', '上映方', '上映影视'], '人生-订婚': ['时间', '订婚主体'], '组织关系-退出': ['时间', '退出方', '原所属组织'], '交往-点赞': ['时间', '点赞方', '点赞对象'], '产品行为-发布': ['时间', '发布产品', '发布方'], '人生-结婚': ['时间', '结婚双方'], '组织行为-闭幕': ['时间', '地点', '活动名称'], '人生-死亡': ['时间', '地点', '死者年龄', '死者'], '竞赛行为-夺冠': ['时间', '冠军', '夺冠赛事'], '人生-失联': ['时间', '地点', '失联者'], '财经/交易-出售/收购': ['时间', '出售方', '交易物', '出售价格', '收购方'], '竞赛行为-晋级': ['时间', '晋级方', '晋级赛事'], '竞赛行为-胜负': ['时间', '败者', '胜者', '赛事名称'], '财经/交易-降息': ['时间', '降息幅度', '降息机构'], '组织行为-开幕': ['时间', '地点', '活动名称'], '司法行为-拘捕': ['时间', '拘捕者', '被拘捕者'], '交往-感谢': ['时间', '致谢人', '被感谢人'], '司法行为-约谈': ['时间', '约谈对象', '约谈发起方'], '灾害/意外-地震': ['时间', '死亡人数', '震级', '震源深度', '震中', '受伤人数'], '人生-产子/女': ['时间', '产子者', '出生者'], '财经/交易-融资': ['时间', '跟投方', '领投方', '融资轮次', '融资金额', '融资方'], '司法行为-罚款': ['时间', '罚款对象', '执法机构', '罚款金额'], '人生-出轨': ['时间', '出轨方', '出轨对象'], '灾害/意外-洪灾': ['时间', '地点', '死亡人数', '受伤人数'], '组织行为-游行': ['时间', '地点', '游行组织', '游行人数'], '司法行为-立案': ['时间', '立案机构', '立案对象'], '产品行为-获奖': ['时间', '获奖人', '奖项', '颁奖机构'], '产品行为-召回': ['时间', '召回内容', '召回方']},'english': {'Justice:Appeal': ['Defendant', 'Adjudicator', 'Crime', 'Time', 'Place'], 'Justice:Extradite': ['Agent', 'Person', 'Destination', 'Origin', 'Crime', 'Time'], 'Justice:Acquit': ['Defendant', 'Adjudicator', 'Crime', 'Time', 'Place'], 'Life:Be-Born': ['Person', 'Time', 'Place'], 'Life:Divorce': ['Person', 'Time', 'Place'], 'Personnel:Nominate': ['Person', 'Agent', 'Position', 'Time', 'Place'], 'Life:Marry': ['Person', 'Time', 'Place'], 'Personnel:End-Position': ['Person', 'Entity', 'Position', 'Time', 'Place'], 'Justice:Pardon': ['Defendant', 'Prosecutor', 'Adjudicator', 'Crime', 'Time', 'Place'], 'Business:Merge-Org': ['Org', 'Time', 'Place'], 'Conflict:Attack': ['Attacker', 'Target', 'Instrument', 'Time', 'Place'], 'Justice:Charge-Indict': ['Defendant', 'Prosecutor', 'Adjudicator', 'Crime', 'Time', 'Place'], 'Personnel:Start-Position': ['Person', 'Entity', 'Position', 'Time', 'Place'], 'Business:Start-Org': ['Agent', 'Org', 'Time', 'Place'], 'Business:End-Org': ['Org', 'Time', 'Place'], 'Life:Injure': ['Agent', 'Victim', 'Instrument', 'Time', 'Place'], 'Justice:Fine': ['Entity', 'Adjudicator', 'Money', 'Crime', 'Time', 'Place'], 'Justice:Sentence': ['Defendant', 'Adjudicator', 'Crime', 'Sentence', 'Time', 'Place'], 'Transaction:Transfer-Money': ['Giver', 'Recipient', 'Beneficiary', 'Money', 'Time', 'Place'], 'Justice:Execute': ['Person', 'Agent', 'Crime', 'Time', 'Place'], 'Justice:Sue': ['Plaintiff', 'Defendant', 'Adjudicator', 'Crime', 'Time', 'Place'], 'Justice:Arrest-Jail': ['Person', 'Agent', 'Crime', 'Time', 'Place'], 'Justice:Trial-Hearing': ['Defendant', 'Prosecutor', 'Adjudicator', 'Crime', 'Time', 'Place'], 'Movement:Transport': ['Agent', 'Artifact', 'Vehicle', 'Price', 'Origin'], 'Contact:Meet': ['Entity', 'Time', 'Place'], 'Personnel:Elect': ['Person', 'Entity', 'Position', 'Time', 'Place'], 'Business:Declare-Bankruptcy': ['Org', 'Time', 'Place'], 'Transaction:Transfer-Ownership': ['Buyer', 'Seller', 'Beneficiary', 'Artifact', 'Price', 'Time', 'Place'], 'Justice:Release-Parole': ['Person', 'Entity', 'Crime', 'Time', 'Place'], 'Conflict:Demonstrate': ['Entity', 'Time', 'Place'], 'Contact:Phone-Write': ['Entity', 'Time'], 'Justice:Convict': ['Defendant', 'Adjudicator', 'Crime', 'Time', 'Place'], 'Life:Die': ['Agent', 'Victim', 'Instrument', 'Time', 'Place']},
}

2)构造prompt的pattern:

ee_s1_p = {'chinese': '''给定的句子为:"{}"\n\n给定事件类型列表:{}\n\n在这个句子中,可能包含了哪些事件类型?\n请给出事件类型列表中的事件类型。\n如果不存在则回答:无\n按照元组形式回复,如 (事件类型1, 事件类型2, ……):''','english': '''The given sentence is "{}"\n\nGiven a list of event types: {}\n\nWhat event types in the given list might be included in this given sentence?\nIf not present, answer: none.\nRespond as a tuple, e.g. (event type 1, event type 2, ......):'''
}ee_s2_p = {'chinese': '''事件类型"{}"对应的论元角色列表为:{}。\n在给定的句子中,根据论元角色提取出事件论元。\n如果论元角色没有相应的论元内容,则论元内容回答:无\n按照表格形式回复,表格有两列且表头为(论元角色,论元内容):''','english': '''The list of argument roles corresponding to event type "{}" is: {}.\nIn the given sentence, extract event arguments according to their role.\nIf the argument role does not have a corresponding argument content, then the argument content answer: None\nRespond in the form of a table with two columns and a header of (argument role, argument content):'''
}

三、从伪zeroshot看In-Context Learning类比学习

In Context Learning(ICL)的关键思想是从类比中学习。《A Survey on In-context Learning》一文(https://arxiv.org/pdf/2301.00234.pdf)对In Context Learning(ICL)进行了综述。

该工作认为,ICL的强大性能依赖于两个阶段:(1)培养LLMsICL能力的训练阶段,以及LLMs根据特定任务演示进行预测的推理阶段。就训练阶段而言,LLMs直接接受语言建模目标的训练,如从左到右的生成,并将整个研究分成了训练和推理两个部分,如下图所示。

512af597e5a6700039318dda0d93352d.png

如下图所示:给出了一个描述语言模型如何使用ICL进行决策的例子。首先,ICL 需要一些示例来形成一个演示上下文。这些示例通常是用自然语言模板编写的。然后 ICL 将查询的问题(即你需要预测标签的 input)和一个上下文演示(一些相关的 cases)连接在一起,形成带有提示的输入,并将其输入到语言模型中进行预测。

9aa5d874a3aa6367b467ddc9811ad31f.png

值得注意的是,首与需要使用后向梯度来更新模型参数的训练阶段的监督学习不同,ICL不进行参数更新,而是直接对语言模型进行预测。

四、将In-Context Learning引入伪zero-shot完成信息抽取任务

开源项目(https://github.com/HarderThenHarder/transformers_tasks/tree/main/LLM)中,借鉴In-Context Learning思想,给出了一个基于GLM-6B的zero-shot信息抽取方案,最终效果如下:

bbfde2356e34d0f67e88c9327324261c.png

其本质思想在于,针对zero-shot问题,使用同一个大模型,对不同任务设计其独有的 prompt,以解决不同的任务问题针对信息抽取任务,则采用2轮问答的方式进行抽取,首先进行实体类型分类,给定句子以及实体类别,要求识别出其中的实体类型,其次根据识别出的实体类型,再进行实体属性要素抽取。在构造prompt的过程中,通过列举一些正确的例子,作为In-Context Learning学习的上下文。(按照第一节的理解,这其实不能算作zero-shot,已经是fewshot)

因此,如何设计指定任务的promt,以及如何合理的引入In-Context是整个工作的一个核心。

1、调用chatglm6b进行推理抽取

加载chatglm-6b模型,对模型进行预测,下面是使用huggingface调用chatglm6b的代码(https://github.com/THUDM/ChatGLM-6B/blob/main/cli_demo.py):

from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().cuda()
response, history = model.chat(tokenizer, "你好", history=[])
print(response)
response, history = model.chat(tokenizer, "晚上睡不着应该怎么办", history=history)
print(response)

其中,整个history会作为一个部分,拼接进行prompt当中,从中可以看到,多轮对话最多做到8轮。

def build_prompt(history):prompt = "欢迎使用 ChatGLM-6B 模型,输入内容即可进行对话,clear 清空对话历史,stop 终止程序"for query, response in history:prompt += f"\n\n用户:{query}"prompt += f"\n\nChatGLM-6B:{response}"return promptdef main():history = []print("欢迎使用 ChatGLM-6B 模型,输入内容即可进行对话,clear 清空对话历史,stop 终止程序")while True:query = input("\n用户:")if query == "stop":breakif query == "clear":history = []os.system(clear_command)print("欢迎使用 ChatGLM-6B 模型,输入内容即可进行对话,clear 清空对话历史,stop 终止程序")continuecount = 0for response, history in model.stream_chat(tokenizer, query, history=history):count += 1if count % 8 == 0:os.system(clear_command)print(build_prompt(history), flush=True)os.system(clear_command)print(build_prompt(history), flush=True)

最后,我们对模型进行推理,将上述构造的两个任务作为history

def inference(sentence,custom_settings):with console.status("[bold bright_green] Model Inference..."):sentence_with_cls_prompt = CLS_PATTERN.format(sentence)cls_res, _ = model.chat(tokenizer, sentence_with_cls_prompt, history=custom_settings['cls_pre_history'])if cls_res not in schema:print(f'The type model inferenced {cls_res} which is not in schema dict, exited.')exit()properties_str = ', '.join(schema[cls_res])schema_str_list = f'“{cls_res}”({properties_str})'sentence_with_ie_prompt = IE_PATTERN.format(sentence, schema_str_list)ie_res, _ = model.chat(tokenizer, sentence_with_ie_prompt, history=custom_settings['ie_pre_history'])ie_res = clean_response(ie_res)print(f'>>> [bold bright_red]sentence: {sentence}')print(f'>>> [bold bright_green]inference answer: ')print(ie_res)def test():console = Console()device = 'cuda:0'tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True)model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half()model.to(device)sentence = '张译(原名张毅),1978年2月17日出生于黑龙江省哈尔滨市,中国内地男演员。1997年至2006年服役于北京军区政治部战友话剧团。2006年,主演军事励志题材电视剧《士兵突击》。',custom_settings = init_prompts()inference(sentence,custom_settings)

2、第一步:实体类型识别

先做实体类型识别(这个有点像事件抽取中的事件检测),其中需要构造

1)sentence_with_cls_prompt

sentence_with_cls_prompt = CLS_PATTERN.format(sentence),先对句子进行实体类型识别,构造prompt:

CLS_PATTERN = f"“{{}}”是 {class_list} 里的什么类别?"

例如,针对句子:“张译(原名张毅),1978年2月17日出生于黑龙江省哈尔滨市,中国内地男演员。1997年至2006年服役于北京军区政治部战友话剧团。2006年,主演军事励志题材电视剧《士兵突击》。”

构造prompt后变为:

“张译(原名张毅),1978年2月17日出生于黑龙江省哈尔滨市,中国内地男演员。1997年至2006年服役于北京军区政治部战友话剧团。2006年,主演军事励志题材电视剧《士兵突击》。”是 
['人物', '书籍', '电视剧'] 里的什么类别?

2)cls_pre_history实体类型识别的例子

利用cls_pre_history作为incontext-learning学习的上下文,进行拼接,例如,cls_pre_history形式为:

cls_pre_history:
[("现在你是一个文本分类器,你需要按照要求将我给你的句子分类到:['人物', '书籍', '电视剧']类别中。", '好的。'),("“岳云鹏,本名岳龙刚,1985年4月15日出生于河南省濮阳市南乐县,中国内地相声、影视男演员。2005年,首次登台演出。2012年,主演卢卫国执导的喜剧电影《就是闹着玩的
》。2013年在北京举办相声专场。”是 ['人物', '书籍', '电视剧'] 里的什么类别?",'人物'),("“《三体》是刘慈欣创作的长篇科幻小说系列,由《三体》《三体2:黑暗森林》《三体3:死神永生》组成,第一部于2006年5月起在《科幻世界》杂志上连载,第二部于2008年5
月首次出版,第三部则于2010年11月出版。”是 ['人物', '书籍', '电视剧'] 里的什么类别?",'书籍'),("“《狂飙》是由中央电视台、爱奇艺出品,留白影视、中国长安出版传媒联合出品,中央政法委宣传教育局、中央政法委政法综治信息中心指导拍摄,徐纪周执导,张译、
张颂文、李一桐、张志坚、吴刚领衔主演,倪大红、韩童生、李建义、石兆琪特邀主演,李健、高叶、王骁等主演的反黑刑侦剧。”是 ['人物', '书籍', '电视剧'] 里的什么类别?",'电视剧')
]

3、第2步:实体属性抽取

根据识别的实体类型结果做实体属性抽取(这个有点像事件抽取中的事件要素抽取),

根据上一步得到的实体类型,进一步生成问句sentence_with_ie_prompt和in-context learning上下文,其中:

1)sentence_with_ie_prompt

sentence_with_ie_prompt指的是对任务的描述,其中需要用到不同实体对应的属性schema以及问题的promt模版。

schema如下:

schema = {'人物': ['姓名', '性别', '出生日期', '出生地点', '职业', '获得奖项'],'书籍': ['书名', '作者', '类型', '发行时间', '定价'],'电视剧': ['电视剧名称', '导演', '演员', '题材', '出品方']
}

属性抽取的prompt如下:

IE_PATTERN = "{}\n\n提取上述句子中{}类型的实体,并按照JSON格式输出,上述句子中不存在的信息用['原文中未提及']来表示,多个值之间用','分隔。"

变成:

张译(原名张毅),1978年2月17日出生于黑龙江省哈尔滨市,中国内地男演员。1997年至2006年服役于北京军区政治部战友话剧团。2006年,主演军事励志题材电视剧《士兵突击》。提取上述句子中“人物”(姓名, 性别, 出生日期, 出生地点, 职业, 获得奖项)类型的实体,并按照JSON格式输出,上述句子中不存在的信息用['原文中未提及']来表示,多个值之间用','分隔。

2)ie_pre_history属性抽取的例子

ie_pre_history属性抽取的例子给定了一些正确抽取的实际例子,如下所示:

[("现在你需要帮助我完成信息抽取任务,当我给你一个句子时,你需要帮我抽取出句子中三元组,并按照JSON的格式输出,上述句子中没有的信息用['原文中未提及']来表示,多
个值之间用','分隔。",'好的,请输入您的句子。'),("岳云鹏,本名岳龙刚,1985年4月15日出生于河南省濮阳市南乐县,中国内地相声、影视男演员。\n\n提取上述句子中“人物”(姓名, 性别, 出生日期, 出生地点, 职业, 
获得奖项)类型的实体,并按照JSON格式输出,上述句子中不存在的信息用['原文中未提及']来表示,多个值之间用','分隔。",'{"姓名": ["岳云鹏"], "性别": ["男"], "出生日期": ["1985年4月15日"], "出生地点": ["河南省濮阳市南乐县"], "职业": ["相声演员", "影视演员"], "获得奖项": 
["原文中未提及"]}'),("《三体》是刘慈欣创作的长篇科幻小说系列,由《三体》《三体2:黑暗森林》《三体3:死神永生》组成,第一部于2006年5月起在《科幻世界》杂志上连载,第二部于2008年5月首
,第三部则于2010年11月出版。\n\n提取上述句子中“书籍”(书名, 作者, 类型, 发行时间, 
定价)类型的实体,并按照JSON格式输出,上述句子中不存在的信息用['原文中未提及']来表示,多个值之间用','分隔。",'{"书名": ["《三体》"], "作者": ["刘慈欣"], "类型": ["长篇科幻小说"], "发行时间": ["2006年5月", "2008年5月", "2010年11月"], "定价": ["原文中未提及"]}')
]

3、第三步:对模型输出进行后处理

def clean_response(response: str):if '```json' in response:res = re.findall(r'```json(.*?)```', response)if len(res) and res[0]:response = res[0]response.replace('、', ',')try:return json.loads(response)except:return response

总结

本文先谈谈Zero-shot、One-shot以及Few-shot、从ChatIE:面向RE\EE\NER三种任务的伪zero-shot prompt说起、从伪zeroshot看In-Context Learning类比学习、将In-Context Learning引入伪zero-shot完成信息抽取任务四个方面进行介绍,供大家一起参考。

其中关于zeroshot的想法,欢迎大家一起讨论。‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

参考文献

1、https://blog.csdn.net/weixin_41862755/article/details/125623018
2、https://arxiv.org/pdf/2301.00234.pdf
3、(https://github.com/HarderThenHarder/transformers_tasks/tree/main/LLM)

关于我们

老刘,刘焕勇,NLP开源爱好者与践行者,主页:https://liuhuanyong.github.io。

就职于360人工智能研究院、曾就职于中国科学院软件研究所。


进NLP群—>加入NLP交流群

持续发布自然语言处理NLP每日优质论文解读、相关一手资料、AI算法岗位等最新信息。

加入星球,你将获得:

1. 每日更新3-5篇最新最优质的的论文速读。用几秒钟就可掌握论文大致内容,包含论文一句话总结、大致内容、研究方向以及pdf下载。

2. 最新入门和进阶学习资料。包含机器学习、深度学习、NLP等领域。

3. 具体细分NLP方向包括不限于:情感分析、关系抽取、知识图谱、句法分析、语义分析、机器翻译、人机对话、文本生成、命名实体识别、指代消解、大语言模型、零样本学习、小样本学习、代码生成、多模态、知识蒸馏、模型压缩、AIGC、PyTorch、TensorFlow等细方向。

4. 每日1-3个NLP、搜广推、CV等AI岗位招聘信息。可安排模拟面试。

25164addd501c26aa3ad209a6b8561d3.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/24285.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在疯狂三月之后,深入浅出分析AIGC的核心价值 (下篇)|【AI行研商业价值分析】

Rocky Ding 公众号:WeThinkIn 写在前面 【AI行研&商业价值分析】栏目专注于分享AI行业中最新热点/风口的思考与判断。也欢迎大家提出宝贵的优化建议,一起交流学习💪 大家好,我是Rocky。 本文是《在疯狂三月之后,深…

软件开发最难的不是编码,而是需求,你认同吗?

【编者按】文章主要讨论了在软件开发过程中,编码并不是最困难的部分,而是需求的定义。作者通过自己的经验和例子,强调了需求的不明确、不一致或错误是导致软件问题的主要原因。文章还讨论了人工智能在软件开发中的应用,指出虽然 A…

ChatGPT-5发布时间已定!又要炸了!

文 / 高扬(微信公众号:量子论) 今天轻松一下,不写干货了,扯点ChatGPT最新进展。 刚在reddit上看到一则消息,说OpenAI今年12月份完成GPT-5的训练,这预示着可能将在2024年某个时候正式发布。 预计…

10、InstructGPT:Training language models to follow instructions with human feedback

简介 GPT的发展历程 GPT-1用的是无监督预训练有监督微调。GPT-2用的是纯无监督预训练。GPT-3沿用了GPT-2的纯无监督预训练,但是数据大了好几个量级。InstructGPT在GPT-3上用强化学习做微调,内核模型为PPO-ptx GPT-1比BERT诞生略早几个月。它们都是采用…

5个不可不知的Python自动化脚本利器

用这5个Python自动化脚本,提升你的Python变成效率。 微信搜索关注《Python学研大本营》,加入读者群,分享更多精彩 为了提升Python编程的效率,我总结了一份Python脚本的独家秘籍,并对一些Python的功能进行了提升。 简介…

ChatGPT相关指令使用大全之一

1.写报告 1)选定切入角度 产生数字个具有说服力和描述性的文章主题想法,主题为「某个主题」 例:产生3个具有说服力和描述性的文章主题想法,主题为「社交媒体如何影响青少年」 2)报告开头 我现在正在报告的情境与目的。我的简报主题是某个…

AI周报-一周发生两次Ai事件;DragGAN 问世

🚀 AI 图像编辑技术 DragGAN 问世,用户可以通过拖拽改变汽车大小或人物表情等 近日,马克斯・普朗克计算机科学研究所研究者们推出了一种控制GAN的新方法DragGAN,用户可以通过拖拽改变汽车大小或人物表情等。 DragGAN类似于Photo…

家用洗地机哪种好?怎么选购家用洗地机

在这个高度关注环境、健康和安全的时代,洗地机已成为多种设施不可或缺的清洁工具。它不仅可以提高清洁速度和质量,还可以协助您提高生产效率和管理流程。洗地机的优点在于它易于使用,具有多种高效能力和灵活性,是一个为现代清洁服…

北京科技大学 工科物理实验 大二下

前言 本文由20级学生整理,包括实验目的和仪器、实验原理、实验步骤三个部分。主要是想节约一下大家手机拍照扫描、语音输入或手打的时间。(可能有些任课老师要求手写,那就爱莫能助了) 【5.4 实验原理部分缺失】 使用方法 点击“…

美创科技四个行业数据安全治理实践案例

自《数据安全法》、《个人信息保护法》等法律法规出台以来,数据安全治理,作为体系化提升数据安全保障能力的重要抓手,得到越来越多的重视,“具体该如何有效落地”也成为不少单位组织普遍关注的话题。 从率先推出数据安全治理咨询…

家用洗地机哪个好用?家用洗地机分享

洗地机是一种代表现代化清洁的设备,它具有高效、环保、经济、智能等多种特点。洗地机可以为您提供先进的清洁技术和设备,为您的清洁工作提供有力的支持。洗地机可以适应不同场所和建筑物的需求,提高工作效率和卫生形象。因此,选择…

洗地机怎么选?高性价比家用洗地机推荐

洗地机是一款高效、智能的清洁设备,可轻松去除地面污渍,免除了传统清洁方式的繁琐和费时。采用高科技材料和技术,可快速有效地将地面污物清除,保持环境卫生和清爽。但是面对市场上众多的洗地机品牌,许多家人们都不知道…

哪款洗地机适合家用?家用洗地机型号分享

洗地机采用多种清洁方式,如湿拖、干拖、热水清洗等,可针对不同使用场合和地面类型进行清洁。而且洗地机无需手工操作,智能感应地面脏污,自动适应地面清洁程度,保证了清洁效率和效果。本文将为大家推荐几款性价比较高、…

基于Java+SpringBoot+Vue前后端分离网上银行系统设计与实现(视频讲解)

博主介绍:✌全网粉丝3W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

中关村论坛 | 金融业从增量到存量博弈背后两大原因 更重要的是……

在数字经济浪潮下,中国金融业正在经历数字化转型的深刻变革。为研判金融科技行业发展趋势和前景,探索金融创新与监管安全的边界,“2023中关村论坛金融科技论坛”于5月29日召开。 中电金信常务副总经理冯明刚与中国银行软件中心副总经理康钧伟…

17、Health Check 健康检查

强大的自愈能力是kubernetes容器编排引擎的重要特性。 自愈的默认实现方式是自动重启发生故障的容器。除此之外,还可通过 Liveness和Readiness探测机制设置更精细的健康检查,进而实现如下要求: 零停机部署 避免部署无效的镜像 更加安全的滚动…

玩与学 | 《乐高EV3机器人搭建与编程》

如果你正在寻找不需要焊接电线或学习高深的编程语言就能够一窥机器人奥妙的方法,那么LEGO MINDSTORMS EV3正是你要找的。你可以通过LEGO连接部件和图形界面来搭建机器人并为其编程。当你准备好接受新挑战的时候,你还可以破解操作系统并使用更高级的编程语…

像玩乐高一样玩simpletun

netcat小巧而灵活,能应付各种你需要的网络测试。 但要明白netcat所能应对的网络场景基本都和端到端有关,比如和TCP,UDP有关。 网络还有另一面,即链路本身。如果你想模拟一个防火墙,模拟一个NAT怎么办?用n…

LeGO-LOAM学习

前言 在学习了LOAM之后,了解到LeGO-LOAM(面向复杂情况的轻量级优化地面的雷达里程计),进行了一个学习整理。 Github:https://github.com/RobustFieldAutonomyLab/LeGO-LOAM 论文:https://github.com/Robu…

乐高大颗粒作品10:滑板车的搭建

温馨提示 如果你喜欢本文,请点击收藏、在看并分享到朋友圈,想要获得更多乐高大颗粒图纸,请点击蓝字关注“Scratch青少儿编程课堂”,不定期更新更多优质作品。 ⭐ 详细步骤图 -end- 乐高大颗粒作品9:水井的搭建 2021-01…