更新囚生CYの备忘录(20230216~)

Posted 囚生CY

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了更新囚生CYの备忘录(20230216~)相关的知识,希望对你有一定的参考价值。

序言

阳历生日。今年因为年过得早的缘故,很多事情都相对提前了(比如情人节)。往年过生日的时候基本都还在家,所以一家子出去吃个饭也就罢了。今年承蒙凯爹厚爱,正好也有小半年没聚,他前天也刚正式拿到offer,于是狠狠地宰了他一顿哈哈(srds下个月他过生日还得还回去)。

难得跟人一逛老半天,从乳山四村到正大广场,吃完饭再回来,一路上交换见解与心得,从九点多一直到晚上六点多才走,凯爹的阅历让我受益颇多。我其实很羡慕凯爹这样的人,每一个能从二战走出来的都是勇士中的勇士,就是那种生活很有激情,并且目标明确,矢志不渝,这两个词我觉得是越来越难能可贵。

回来这些天除了泡实验室,每天还是至少会去遛五圈,前天浅浅地跑了5000米,其实也不是很吃力。说起来差不多停跑了有十天,相当致命,不过我发现因为这么多年来屡屡从低谷恢复训练,身体已经习惯了这种节奏,至少今年开始恢复的时候跑起来还是挺轻快的,虽然耐力明显很差,但也没有那么笨重。

初心难追,但是谁又愿意就如此屈服于生活呢?


20230216

因果推断之遐想,今年NSFC的通告里着重强调了这个方向,严格上来说这是一个统计学范畴,但是他越来越受到ML以及DM领域的关注,原因在于数据中难免存在难以捕获的偏见。

最近一篇非常好的CasualLM: Causual Model Explanation Through Counterfactual Language Models,提出了一种基于反事实构造的反事实语言模型,可以修整数据中固有的偏见。

但是现阶段因果推断和NLP的结合的工作大多是基于现有的因果图做检验会调整,其实有一个很关键的核心问题是如何捕获混杂因子(在没有因果图的情况下),一些工作会介绍如何从复合变量中分离得到混杂变量以及调整变量,如http://www.meng-jiang.com/pubs/tee-aaai17/tee-aaai17-paper.pdfhttps://arxiv.org/abs/arXiv:2006.07040,但是这些工作也是建立在因果图已知,候选的变量已经给定的前提下得到的,一般的情况是只给你上下文语料,如何判断一个基于该语料的任务存在混杂因子。

其实在预训练数据是足够充分的条件下,我们应当认可模型预测的结果是无偏的。问题在于预训练数据总是不够充分的,所以我们需要构造反事实来使得它更为均衡。还有就是Pearl的因果推断理论框架是完全建立在因果图之上的,问题在于没有任何理论保证因果图的有效性,这在因果推断与NLP结合时确实是令人费解的事情,这就有点射箭画靶的意思,为了论证存在混杂,特意构建了一个能够导出混杂的因果图。


20230217~20230220

  • 昨天颜烨即兴约我和王凯小聚,在很久以前羊肉串,就很巧,颜烨最近也在看因果推断,不过他是用在推荐上,于是在等王凯时交换了不少意见。吃完去政民路上的一家小酒吧搓了两把以色列麻将,最后险些完成华丽的逆转(7张牌反杀颜烨2张牌,就是有1张怎么想都出不去),狗颜烨手气贼好把把起手百搭,我两把一个百搭都没摸不到(笑)。
  • 下个月19号锡马,说实话把握不是很大,但是目标肯定还是要进95分钟,其实说起来我已经有14个月没有跑过20km以上的距离了。恢复期目前练了六天,但是周末歇了两天,今天是2km+1km+1km的间歇,配速4分整,间歇5分钟,心率上到190,痛苦得要死,但是要快速恢复就必须依赖高强度的变速和间歇,耐力还得靠跑量堆上去。目前水平持平去年九月底,想要跑半马至少也要达到去年十一月底的水平。就过往的经验来看只要能把10km跑到43分钟左右,基本上在最佳状态下就有能力冲击半马。
  • 说实话也许是我最后一次跑步了,我也确实地感觉到各种压力而无法坚持下去,也许赶不上最后的一次校运会,仍是遗憾无比,除非我愿意能够在高压下坚持训练到4月底,以后大概率是以养生跑为主。尽管大概率还是不能在最巅峰的状态下完成比赛,但跑一次半马是最后的倔强,虽然以后有机会我也许会去跑全马,跑铁三,但是我不愿意自己这么三年多以来的阶段性跑步生涯就如此无疾而终,它应该配得上一个荣誉作为句号。

谈谈我对chatGPT的看法,昨天也跟yy和wk探讨了这个问题。其实去年十一二月的时候,就已经可以在B站上刷到不少chatGPT大战弱智吧的视频,当时我也不是很关注,总觉得是跟以前那种废话文学生成器是一样的toy model。直到今年一月搞科技部课题申报的时候事实上接触chatGPT时才真正震惊于其恐怖的性能。

现在网络上的评价趋于两级分化,有的人奉chatGPT为神,有的人对之嗤之以鼻。就我浅薄的认知而言,假若chatGPT的背后确实没有任何人类技术员的干预(或者说白了就是人工作弊),我认为chatGPT将是一个划时代的产物,以2017年BERT横空出世作对比,chatGPT的创新性至少比BERT要高出一个档次。

因为就我所理解,chatGPT在许多NLP任务上(问答、对话、代码改错、目标文本生成、自然语言推断、阅读理解、文本综述)都远远超过了目前相应领域SOTA模型的性能。具体的细节我也不想写太多,因为我是做这方面工作的,这种效果让我非常震惊。

以前说强AI会取代很多工作,现在看来强AI的出现,第一批失业的或许就是我们这批踩着末流踏进AI研究的,就有点像49年假如guo军的感觉(苦笑)。试想,你针对一个特定任务的做的模型,做得再好也比不过chatGPT,chatGPT在广度和深度上已经超过了大部分研究者的上限,这是一件非常可怕的事情。很多大企业追逐潮流,就会对业务和人员进行结构性调整,谁又能确保之后不会出现第二个chatGPT呢,特别特别有危机感。说实话,保守估计我觉得国内近一年不可能有产品可以超越chatGPT。

所以现在很多的想法就是去做chatGPT做不了的事情,即要跳出NLP,比如图像、推荐等,如果还是要和NLP挂钩,那么要么在方法论上创新,要么只能向多模态发展。这可能也是为什么因果推断成为今年NSFC的一个重要突出领域。

提一个,写开题看到VisualMRC,一开始以为就是VQA,结果VisualMRC竟然是所有的上下文就是一张图像,不过图像中包含区块性的文字以及贴图,VQA是直接给一张图(可能会有简短的描述),然后直接答题。VisualMRC提出的动机是因为大部分现实世界文本都不是以纯文本出现的(比如PDF和html),所以只能处理包含文本的图片,不过总觉得只是用OCR识别一下即可划归到一般的VQA,感觉又是为了发paper画靶射箭。


20230221

  • 昨晚wyl破天荒开组会从六点开到十点半,我跟黄名媛实在是顶不住了,黄名媛本来晚上约人吃饭,我说估计一个多小时就结束了,可以等结束再去吃。结果她连晚饭都没吃到,离大谱。
  • 降温,长袖长裤拉耐力,10圈17’20",配速4’20",其实挺满意的,一周就可以上到4km,比九月份恢复得快(那时候挣扎了半个多月都没能跑10圈)。结识了一下经常来跑的光头大叔,我一直以为他是老师,原来是家属,上周也偷偷跟他跑了几次,发现三年来一点长进没有,配速还是4’40"~4’50"的水平,有点失望,要不然就可以找个pace差不多又看起来很专业的一起练。他都是每天下午三点半之后到操场,我一般是四点,但他拉伸时间很长,所以起跑时间很接近。他不跑比赛,单纯是锻炼身体,但是今年还是本着10km跑进45min在训练,有个目标跑起来确实更有动力一些,这也是我一直拒绝养生跑的原因。如果真的只是以锻炼身体去养生跑,根本是无法坚持长久的。

SQuAD1.1和2.0的下载链接:

https://data.deepai.org/squad1.1.zip
https://rajpurkar.github.io/SQuAD-explorer/dataset/train-v2.0.json

然后NewsQA直接可以在https://download.microsoft.com/download/1/D/8/1D830CEE-F8D1-4807-9224-DE35A8F08DC4/newsqa-data-v1.zip下载,问题是NewsQA里没有上下文(story),只有storyid,因为story的版权不在微软,在CNN,那个要翻墙(https://cs.nyu.edu/~kcho/DMQA/),给翻不了墙的留个门cnn_stories&&dailymail_stories.7z

然后就是昨晚复旦大学对话机器人MOSS,我是真的服了,第一次看到这么能蹭热度的,哗众取宠,还同时蹭两个。国内最先能接近chatGPT的模型肯定不可能是高校首先发布,如果能做出来一定是BAT,学校再有钱也不可能这么去烧。


20230222~20230224

  • 周三订酒店,锡马也就上周日才官宣定档,两三天时间周边的酒店预定就已全部售罄,最后好不容易抢到一个距离起点2km以内的,还只剩一个家庭房。毕竟算是疫情后的第一场高规格赛事,可见一斑。
  • 这周基本上每天都有5km的量,但是想要从突破到10km依然十分困难,最后三周,尽力而为罢。

SQuAD process:

# -*- coding: utf-8 -*-
# @author: caoyang
# @email: caoyang@163.sufe.edu.cn

import json
import pandas

from setting import (SQuAD_JSON_PATH_SUMMARY,
					 SQuAD_ARTICLE_PATH,
					 SQuAD_QUESTION_PATH,
					 )

def SQuAD_to_csv(article_export_path=SQuAD_ARTICLE_PATH, question_export_path=SQuAD_QUESTION_PATH):
	
	article_dict = 'article_id'	: list(),
					'title'			: list(),
					'article'		: list(),
					'type'			: list(),
					'version'		: list(),
					
	question_dict = 'question_id'		: list(),
					 'article_id'		: list(),
					 'question'			: list(),
					 'answers'			: list(),
					 'answer_starts'	: list(),
					 'answer_ends'		: list(),
					 'type'				: list(),
					 'version'			: list(),
					 
	
	for key, data_path in SQuAD_JSON_PATH_SUMMARY.items():
		type_, version = key.split('-')
		with open(data_path, 'r', encoding='utf8') as f:
			data = json.load(f)
		count = -1
		for sample in data['data']:
			title = sample['title']
			paragraphs = sample['paragraphs']
			for paragraph in paragraphs:
				count += 1
				article_id = f'type_-version-str(count).zfill(5)'
				article = paragraph['context']
				for question_and_answer in paragraph['qas']:
					question_id = question_and_answer['id']
					question = question_and_answer['question']
					candidate_answers = question_and_answer['answers']
					answer_starts = list()
					answer_ends = list()
					answers = list()
					for candidate_answer in candidate_answers:
						answer_start = int(candidate_answer['answer_start'])
						answer = candidate_answer['text']
						answer_end = answer_start + len(answer)
						# assert answer == article[answer_start: answer_end]
						answer_starts.append(answer_start)
						answer_ends.append(answer_end)
						answers.append(answer)
					# Write question Dictionary
					question_dict['question_id'].append(question_id)
					question_dict['article_id'].append(article_id)
					question_dict['question'].append(question)
					question_dict['answers'].append(answers)
					question_dict['answer_starts'].append(answer_starts)
					question_dict['answer_ends'].append(answer_ends)
					question_dict['type'].append(type_)
					question_dict['version'].append(version)
				# Write article dictionary
				article_dict['article_id'].append(article_id)
				article_dict['title'].append(title)
				article_dict['article'].append(article)
				article_dict['type'].append(type_)
				article_dict['version'].append(version)
	# Convert to dataframe
	article_dataframe = pandas.DataFrame(article_dict, columns=list(article_dict.keys()))
	question_dataframe = pandas.DataFrame(question_dict, columns=list(question_dict.keys()))
	# Export dataframe
	article_dataframe = article_dataframe[['article_id', 'title', 'article', 'type', 'version']]
	question_dataframe = question_dataframe[['question_id', 'article_id', 'question', 'answers', 'answer_starts', 'answer_ends', 'type', 'version']]
	if article_export_path is not None:
		article_dataframe.to_csv(article_export_path, sep='\\t', header=True, index=False)
	if question_export_path is not None:
		question_dataframe.to_csv(question_export_path, sep='\\t', header=True, index=False)
	return article_dataframe, question_dataframe

以上是关于更新囚生CYの备忘录(20230216~)的主要内容,如果未能解决你的问题,请参考以下文章

更新囚生CYの备忘录(20221121-)

更新囚生CYの备忘录(20221121-)

继续更新囚生CYの备忘录(20220906-)

完结囚生CYの备忘录(20220525-20220813)

完结囚生CYの备忘录(20220525-20220813)

连载囚生CYの备忘录(20220906-)