├── NBCE.png
├── NBCE2.png
├── README.md
├── README_en.md
├── contexts.json
└── test.py
/NBCE.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bojone/NBCE/2362c6cc54d467a5a71123bd305aecfd36ce8965/NBCE.png
--------------------------------------------------------------------------------
/NBCE2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bojone/NBCE/2362c6cc54d467a5a71123bd305aecfd36ce8965/NBCE2.png
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | [中文|[English](https://github.com/bojone/NBCE/blob/main/README_en.md)]
2 |
3 | # Naive Bayes-based Context Extension
4 | 使用朴素贝叶斯思想来扩展LLM的Context处理长度。
5 |
6 | 现在,任何LLM都可以利用NBCE成为可以处理任意长Context的模型了(只要算力足够)!
7 |
8 |
9 |
10 | ## 简介
11 |
12 | 基于朴素贝叶斯所启发的公式:
13 |
14 |
15 |
16 | 细节请看博客:https://kexue.fm/archives/9617
17 |
18 | 所给的Demo包含12段不同的Context,总长度为9000多字,连同8个问题一次性输入到模型中(测试模型训练长度为2048,参数量为7B,可以在[OpenBuddy](https://openbuddy.ai/)下载),模型能够逐一根据所给Context正确回答这8个问题。值得指出的是,所有的Context、问题和答案加起来,超过了1万字!另外,有朋友简单尝试了简历匹配和作文打分应用,效果也尚可,非常建议大家亲自调试一下。
19 |
20 | **最新测试结果**:在8*A800下,7B模型可以处理**50k**的context,并能正确地做阅读理解。(没有用完所有GPU,大概消耗160G显存)
21 |
22 | ## 特点
23 | - 即插即用
24 | - 模型无关
25 | - 不用微调
26 | - 线性效率
27 | - 实现简单
28 | - 效果尚可
29 | - 可解释性
30 |
31 | ## 引用
32 |
33 | ```
34 | @inproceedings{nbce_naacl,
35 | author = {Jianlin Su and
36 | Murtadha Ahmed and
37 | Bo Wen and
38 | Luo Ao and
39 | Mingren Zhu and
40 | Yunfeng Liu},
41 | editor = {Kevin Duh and
42 | Helena G{\'{o}}mez{-}Adorno and
43 | Steven Bethard},
44 | title = {Naive Bayes-based Context Extension for Large Language Models},
45 | booktitle = {Proceedings of the 2024 Conference of the North American Chapter of
46 | the Association for Computational Linguistics: Human Language Technologies
47 | (Volume 1: Long Papers), {NAACL} 2024, Mexico City, Mexico, June 16-21,
48 | 2024},
49 | pages = {7791--7807},
50 | publisher = {Association for Computational Linguistics},
51 | year = {2024},
52 | url = {https://doi.org/10.18653/v1/2024.naacl-long.431},
53 | doi = {10.18653/V1/2024.NAACL-LONG.431},
54 | timestamp = {Thu, 29 Aug 2024 17:13:57 +0200},
55 | }
56 | ```
57 | ## 交流
58 | QQ交流群:808623966,微信群请加机器人微信号spaces_ac_cn
59 |
60 |
--------------------------------------------------------------------------------
/README_en.md:
--------------------------------------------------------------------------------
1 | [[中文](https://github.com/bojone/NBCE/blob/main/README.md)|English]
2 |
3 | # Naive Bayes-based Context Extension
4 | Using the Naive Bayes idea to extend the context handling length of LLM.
5 |
6 | Now, any LLM can utilize NBCE to become a model capable of processing context of any length (as long as there is enough computing power)!
7 |
8 |
9 |
10 | ## Introduction
11 |
12 | Inspired by the Naive Bayes formula:
13 |
14 |
15 |
16 | For details, please refer to the blog: https://kexue.fm/archives/9617
17 |
18 | The given demo includes 12 different contexts, with a total length of more than 9,000 words, along with 8 questions inputted into the model all at once (the model's training length is 2048, with 7 billion parameters, and can be downloaded from [OpenBuddy](https://openbuddy.ai/)). The model is able to answer these 8 questions correctly one by one, based on the given contexts. It is worth noting that the total word count of all contexts, questions, and answers combined exceeds 10,000 words! Additionally, some friends have tried simple resume matching and essay scoring applications with acceptable results. It is highly recommended for everyone to personally test and experiment with it.
19 |
20 | **Latest test results**: Under 8*A800, the 7B model can handle **50k** context and perform reading comprehension accurately. (Not all GPUs are used up, about 160G video memory is consumed)
21 |
22 | ## Features
23 | - Plug and play
24 | - Model-Agnostic
25 | - No fine-tuning required
26 | - Linear efficiency
27 | - Simple implementation
28 | - Decent performance
29 | - Interpretability
30 |
31 | ## Citation
32 | ```
33 | @inproceedings{nbce_naacl,
34 | author = {Jianlin Su and
35 | Murtadha Ahmed and
36 | Bo Wen and
37 | Luo Ao and
38 | Mingren Zhu and
39 | Yunfeng Liu},
40 | editor = {Kevin Duh and
41 | Helena G{\'{o}}mez{-}Adorno and
42 | Steven Bethard},
43 | title = {Naive Bayes-based Context Extension for Large Language Models},
44 | booktitle = {Proceedings of the 2024 Conference of the North American Chapter of
45 | the Association for Computational Linguistics: Human Language Technologies
46 | (Volume 1: Long Papers), {NAACL} 2024, Mexico City, Mexico, June 16-21,
47 | 2024},
48 | pages = {7791--7807},
49 | publisher = {Association for Computational Linguistics},
50 | year = {2024},
51 | url = {https://doi.org/10.18653/v1/2024.naacl-long.431},
52 | doi = {10.18653/V1/2024.NAACL-LONG.431},
53 | timestamp = {Thu, 29 Aug 2024 17:13:57 +0200},
54 | }
55 | ```
56 | ## Communication
57 | QQ discussion group: 808623966, for WeChat group, please add the robot WeChat ID spaces_ac_cn
58 |
59 |
--------------------------------------------------------------------------------
/contexts.json:
--------------------------------------------------------------------------------
1 | [
2 | "一家仅有82名员工,没有一款产品上市,且长期处于亏损的公司应该值多少钱?相信很多投资者会给出一个极低的价码,但创新药新巨头吉利德公司却愿意为这样一家公司支付110亿美元的天价。\n\n2011年,刚刚在美股证明自己的吉利德,以110亿美元的价格收购了临床阶段公司Pharmasset,这一价格比当时Pharmasset的收盘价高出94%,甚至已经相当于吉利德自身三分之一的市值。\n\n在当时,Pharmasset公司共有三条关于慢性丙肝的在研管线,尽管领先的管线已经进入临床三期,但依然存在不小的失败风险,不少投资者都认为吉利德疯了。然而,最终丙肝神药Sovaldi在2013年顺利上市,并在上市首年就收获103亿美元的巨额营收。\n\nSovaldi的成功,直接将丙肝的治愈率由不到50%提升至80%以上,甚至彻底扼杀了竞争对手的生存空间。Sovaldi不仅向市场证明了吉利德眼光的正确性,更揭示了医药产业中存在的一条创新定律:革命性的技术总出现在小公司中。\n\n无论是“大魔王”DS-8201,还是大名鼎鼎的K药,实则它们最开始的研发公司第一三共和欧加农在当时都称不上是一家全球大药企。这些爆款药物的成功进一步佐证了医药产业“边缘革命”的特性。\n\n究竟医药产业为何呈现这样的特性?这其中又折射了哪些投资哲学?",
3 | "微软公司旗下的职场社交媒微体网络LinkedIn(领英)当地时间5月8日宣布裁员,同时称将关闭中国的求职应用服务。\n\n领英称由于需求波动,计划裁员716人,该公司在全球拥有约2万名员工。\n\n值得关注的是,领英继续收缩在中国的业务。该公司2021年决定撤出大部分中国业务,并将在中国的业务重点主要转向对接求职招聘需求,不再生产内容。\n\n在最新的业务调整后,领英称,由于激烈的竞争和充满挑战的宏观经济环境,它将停止中国的求职应用服务,目前仅存的应用程序InCareers也将于8月9日下线。\n\n不过该公司发言人表示,领英仍将保留在中国的业务,以帮助在中国开展业务的公司在国外招聘和培训员工。领英表示将继续深耕中国市场,通过领英人才和营销解决方案,以及今年晚些时候即将落地中国内地的领英学习解决方案,持续支持中国企业的全球化发展。\n\n“市场和客户需求波动更大,为了更有效地服务新兴市场和增长市场,我们正在扩大供应商的使用范围。”领英首席执行官Ryan Roslansky在致员工的一封信中表示。这意味着,该公司未来将更多地将工作转移给外部合作伙伴,他们将承担部分领英的工作。\n\n公司还表示,削减销售、运营和支持团队职位的举措旨在简化公司的运营,并将更趋向于扁平化管理,以更快地做出决策。\n\n领英通过广告销售以及向使用该网络寻找潜在客户的招聘和销售专业人员收取订阅费来盈利。但这种模式在中国市场遇到了挑战,尤其是中国的社交应用程序竞争日益激烈的背景下,领英无法回答帮助用户建立了职场人脉后,下一步能够提供给用户提供哪些价值。例如,一些人会在领英上添加好友,一旦连接上,则会转而与对方使用微信联系。\n\n为此,领英也曾与微信联合推出领英名片功能,用户可以在微信的个人档案中同时展示领英的个人档案,点开之后,可以保存和分享名片。但该功能在实际中应用的并不多。\n\n微软于2016年以约260亿美元的价格收购领英。据微软CEO纳德拉此前透露,2021年,领英的全球年收入约为100亿美元。\n\n去年,领英每个季度的收入都在增长,但在全球经济前景疲软的情况下,它与包括微软在内的其他主要科技公司一起裁员。据职位追踪网站Layoffs.fyi数据显示,今年5月领英已经进行了一轮裁员,裁减了5000个技术岗位。\n\n在过去六个月中,全球企业总共裁减了超过27万个技术工作岗位。在科技行业,大公司占了近期裁员的大部分,其中亚马逊公司裁员2.7万人,创历史之最;Meta公司裁员2.1万人,谷歌裁员1.2万人。领英母公司微软最近几个月也已宣布裁员约1万人,并为此支付了约12亿美元费用。",
4 | "如果你是默沙东的CEO,你的首要任务显然是如何让基本盘更加坚固,像K药这样营收超200亿美元的基石药物,哪怕通过药物联用获得10%的增长,那么也会得到20亿美元的新增收入,这显然比从头开始研发创新管线更容易成功。\n\n因此,大药企虽然会布局前沿管线,但往往并不会倾注太多的人员和资源,也不会给予研发人员星辰大海般激励。\n\n初创药企的情况则截然相反。作为市场后来者,它们想要占得一席之地,就必须向市场证明自己,因此它们更愿意在创新管线投入更多资源,甚至不少企业愿意将全部身家押在一款药物身上。\n\n如在去年中国创新药最低谷的时候,三叶草生物为了保证新冠疫苗的顺利上市,砍掉了全部新冠以外的产品管线,集中精力孵化新冠疫苗,这款备受期待的新冠疫苗最终在去年12月获批紧急使用。与三叶草生物同时获批的还有神州细胞、万泰生物、威斯克生物的新冠疫苗,除万泰生物外,也均是体量不大的初创型药企。\n\n在当时,第一批获批的灭活疫苗已经无力应对持续突变的疫情,泰康生物甚至将新冠疫苗管线全部计提。面对庞大的疫情缺口,及时补位的却多是体量不大的初创企业,而资源更好的老牌药企却并未有更好的表现。尽管如今新冠疫情已经消退,这获批的4款新冠疫苗商业化前景可能并不会太好,但却依然揭示出初创企业面对新技术时的专注力。\n\n在新的突破性技术上,初创型企业有着更加明确的目标,能够更加快速地应对产业中出现的变化,这些都是组织臃肿的成熟药企所难以实现的。\n\n站在企业管理层立场,初创型企业的管理层更加激进,他们继续寻找到突破性技术从而在行业中安身立命;而颇为老道的成熟药企,则更关注企业整体的业绩趋势,如何向投资者交出一份满意的答卷是他们首先考虑的东西。\n\n这种立场上的差异注定,颠覆性的创新型技术多出自初创型药企。",
5 | "中国-中亚峰会将于5月18日至19日在陕西省西安市举行。国家主席习近平将主持峰会并发表重要讲话。西安,这座文韵悠远的千年古都再次成为世界焦点。\n\n让历史说话,让文物说话\n\n西安,古称长安。赫赫宗周、巍巍秦汉、泱泱盛唐……中华文明悠远厚重的历史,在这里留下了灿若星辰的文化遗产。\n\n在秦始皇帝陵领略秦统一六国的龙威虎势,在汉长安城遗址感受“红尘四合,烟云相连”盛景,在唐大明宫体味恢弘磅礴盛世之风,在西安城墙体验文化遗产与现代生活和谐共生……\n\n“让历史说话,让文物说话,在传承祖先的成就和光荣、增强民族自尊和自信的同时,谨记历史的挫折和教训,以少走弯路、更好前进。”2015年,习近平总书记在陕西考察期间,来到西安博物院考察。\n\n西安,作为十三朝古都和古丝绸之路起点之一,独特的历史文化遗产为“博物馆之城”建设提供了得天独厚的条件。目前,西安拥有各类博物馆159座,涵盖历史综合、红色革命、自然科学、民俗文化等40余个类型,每年博物馆参观人数超过3000万人次。到博物馆去,正成为古城新的时尚。",
6 | "民声天下5月17日北京快讯 随着人民生活水平的不断提高,有越来越多的公众走进“小剧场”“茶社”,去寻求属于自己的那份乐趣。然而,也有部分艺人,在演出时枉顾最基本的道德底线,出现几许令人不敢恭维之处。连日来,网络上曝出,“笑果文化”旗下脱口秀演员李昊石在表演中,存在侮辱我人民子弟兵的言论,一时间,引发社会广泛关注。对此,相关部门及时介入予以处置。\n\n“民声君”今天(17日)晚间刚刚从北京朝阳警方了解到,针对某文化公司(笑果文化)31岁男演员李某某(李昊石)在演出过程中出现严重侮辱人民军队的情节,造成恶劣社会影响的情况,公安机关已依法立案调查。\n\n值得注意的是,近年来,在艺人这一群体中,过分被聚焦;以至于成为一众“吃瓜群众”的茶余饭后的谈资。自该事件发生以来,涉事机构及当事人已对外致歉。同时,北京、上海两地文娱监管部门接连作出相应处罚;中国演出行业协会也对李昊石在行业给出从业抵制。各大主流媒体及一众国人,也纷纷向这一恶劣行径予以斥责。\n\n众所周知,被誉为的知名演员或公众人物的他们,通常被视作为“榜样”,是为了借助他们的知名度,更好地开展和推动和谐社会的构建,营造出积极向上的社会氛围。然而,明星屡触底线事件却时有发生。极少数演员惘顾自己的公众形象和社会责任,在全社会造成极其恶劣的影响。\n\n此番中演协再度对“三俗”问题“亮剑”,实则是再度提醒艺人们,如果“文不对题”,以此次李昊石一事为例,小剧场的表演不符合受众的心理预期,一次两次尚可,如是再三甚至再多,那么,观众迟早会用脚投票,转去看更为感兴趣的表演。这样就很容易让剧场表演陷入观众数量一次盈满而长期亏缺的怪圈。因此,小剧场的经营者们要明白此类艺术的规律,也需探索这一产业的发展路径。两者若不能兼备,则小剧场或会深藏巷中无人问津,或因缺乏底蕴而流于俗淡。\n\n诸如此类小剧场不光是优秀传统文化的传承场所,也是新时代文化产业发展的阵地。传承优秀传统文化是广大从业者的使命,但前人“传”下来,后人还要“承”下去,这就要求当下的从业者发挥主观能动性,研究“承”的具体措施。而一味地抛“梗”,只重“笑果”,不重“结果”,“后果”不堪设想。",
7 | "庭审中,检察机关出示了相关证据,被告人许国俊及其辩护人进行了质证,控辩双方充分发表了意见,许国俊进行了最后陈述,当庭表示认罪、悔罪。\n\n庭审最后,法庭宣布休庭,择期宣判。\n\n2001年10月12日,中国银行将全国1040处电脑中心统一成一套系统,发现账目4.83亿美元亏空,发生地为广东开平。此时,中行开平支行的前后三任行长许超凡、余振东、许国俊突然失踪。三人一同先逃到中国香港,再飞往加拿大,再转机飞往最终目的地美国。\n\n这起震惊全国的中国银行开平支行案,被认为是新中国最大的银行贪污案。\n\n中方有关部门积极开展国际司法执法合作,锲而不舍开展追逃追赃工作,余振东、许超凡分别于2004年、2018年被遣返回国,办案机关和中国银行已从境内外追回涉案赃款20多亿元人民币。\n\n2021年11月,外逃20年之久的许国俊被强制遣返回国。至此,该案3名主犯全部落网。\n\n2006年3月31日,江门市中级人民法院以贪污和挪用公款两项罪名判处余振东有期徒刑12年,并处没收个人财产人民币100万元;追缴涉案款物及违法所得,退赔受害单位和上缴国库。",
8 | "湖北恩施宣恩县狮子关网红浮桥项目,这个被景区负责人宣称“能过坦克”的水上道路,因为一场致死5人死亡的事件,被按上了暂停键。 \n\n事故前,一辆辆机动车在碧水蓝天间驶过,涟漪由远及散开的画面引人入胜,受到追捧;事故后,涉事的商务车撞毁栏杆,“扎猛子”般落入水中的视频同样让人触不惊心。 \n\n悲剧的发生到底是司机操作原因,还是景区管理问题,抑或项目本身的安全性存在问题?在网络引发极大讨论。 \n\n5月17日,潇湘晨报(报料微信:xxcbbaoliao)记者联系到涉事浮桥的承建方苏州九翔水上浮筒工程有限公司和上海旗华水上工程建设股份有限公司,上述公司均认为事件与浮桥安全性没有关系。 \n\n“开车出车祸,肯定要问驾驶员,不能够怪修路的吧。”苏州九翔水上浮筒工程有限公司一名工作人员称。上海旗华水上工程建设股份有限公司一名负责人则认为,驾驶员突然转弯落水,车辆落水与其违反速度、荷载量等规定相关。 \n\n宣恩县委宣传部一名工作人员对记者表示,目前相关部门对于事件原因正在调查,包括对项目安全性审批等问题进行溯源,到底是意外事件还是责任事故也需要详细调查后才能确认。",
9 | "Sam Alterman 认为,与所有的技术革命一样,我预期会对就业产生重大影响,但具体影响如何很难预测。如果我们回顾前一段技术革命的另一面,谈论存在于另一面上的工作,你可以去读当时人们的书,这很难。我相信在这之后会有更多的工作,今天的工作会变得更好。\n\n首先,我认为重要的是要理解和思考GPT-4是一个工具,而不是一种生物,这很容易混淆。这是人们有很大控制权的工具,以及如何使用它。其次,GPT-4和其他类似的系统擅长完成任务,而不是工作。因此,你已经看到有人使用GPT-4以更高效的方式完成工作,这是通过帮助他们完成任务实现的。\n\nGPT-4将完全自动化一些工作,它将创建我们认为更好的新工作。这是一再发生的事情。\n\n我对技术历史的理解就是一场长期的技术革命,而不是许多不同的技术革命聚集在一起。这一直在继续发生。随着我们的生活质量提高,和我们创造的机器和工具可以帮助我们过上更美好的生活,我们所做的工作的标准也在提高;我们的人类能力和我们花时间追求的事情,也在追求更雄心勃勃和更满意的项目。\n\n所以,这将对就业产生影响,我们试图非常清楚地表达这一点。我认为这需要行业和政府的合作,但主要是政府采取行动来弄清楚我们如何减轻这种影响。但是,我对未来工作的前景非常乐观。谢谢。",
10 | "据《菲律宾星报》报道,5月17日,菲律宾国家电网公司(NGCP)再次否认所谓“中国可以远程访问输电网”的说法。此前,菲律宾总统马科斯曾在一份声明中表示,政府将“在必要时”收回对菲律宾国家电网的控制权。\n\n据《菲律宾每日问询者报》报道,在上周吕宋岛停电后,两名菲议员推动对菲律宾国家电网公司的国会特许经营权进行审查。参议员埃赫西托敦促政府用尽所有法律补救措施,重新获得菲律宾对该国能源传输系统的完全控制权。“任何涉及国家安全的公用事业,例如航空和电力分配,都应该在政府控制之下。”\n\n公开资料显示,2009年中国国家电网公司与蒙特罗公司、卡拉卡公司三方共同组建了菲律宾国家电网公司,当年1月15日正式接管运营菲律宾国家输电网,其中,中国国家电网公司拥有菲律宾国家电网公司 40% 的股份。对此,参议院能源委员会担心“中国会切断菲律宾的电力供应”,这些参议员建议菲律宾政府收回该国电网的运营权。\n\n实际上,菲律宾国家电网公司60%的股份都由一家菲律宾财团所有,这家私营电网运营商曾向参议员们保证,只有菲律宾人才可以经营他们的变电站。\n\n菲律宾媒体报道称,菲律宾国家电网公司发言人阿拉班扎在一份声明中表示:“从我们获得特许经营权开始,我们一直本着透明原则履行责任。在输电网方面我们投资了3000亿比索(约合374亿元人民币),降低了输电转运费率,多年来还改善了输电服务。我们相信,如果有机会,这些努力将会得到认可。”\n\n另外,参议院能源委员会副主席张侨伟认为,上周导致吕宋几个省大范围停电的输电线路跳闸只表明电网系统没有得到妥善维护。",
11 | "据看看新闻KNEWS5月17日报道,今年3月26日,上海浦东公安分局六灶派出所接到了一名年轻女子报警,女子自称在长达8年的时间里被两个好闺蜜诈骗了一百多万元。\n\n\n报道截图\n据报道,欣欣和小李、小吴是大学同学,毕业后一起合租。有一天小李突然接到了一个电话,说欣欣的信用卡涉嫌诈骗。小李编造了一个领导,暗示欣欣可以花钱消灾。当欣欣表示拿不出那么多钱的时候,小李和小吴又很“仗义”地表示自己可以帮她垫付,她只要分期还款就行。为了还钱,欣欣在小李的指导下,办理了多张信用卡用于套现。此后,面对滚雪球般增长的债务,欣欣只能向父母摊牌。欣欣母亲找身边的亲戚朋友多次借钱,总计80多万元。\n\n2019年,小李、小吴甚至编造“神婆”角色,整天逼欣欣还钱。在小李操控下,欣欣每个月的工资、房租收入,父母和祖父母的退休金,总计23000元,都会按月进到小李账上。目前,两名犯罪嫌疑人因涉嫌诈骗罪已被检察机关依法批准逮捕。",
12 | "首夏犹清和,芳草亦未歇。近日,“中国式现代化的长三角实践”浙江站采访团的记者们走进了浙江省湖州市安吉县天荒坪镇余村,一幢幢民宿与绿水青山交相呼应。\n\n近年来,余村的美丽乡村建设、生态文明建设、民主法治建设等工作走在了浙江乃至全国前列,是联合国世界旅游组织最佳旅游乡村、全国文明村、全国美丽宜居示范村等……在这里,绿水青山吹来了新风,共同富裕也写下了生动的注脚。\n\n2022年,余村全年村集体经济收入达1305万元,人均纯收入6.4万元,经营性收入突破800万元;2023年初,余村年终股金分红大会共向村民发放206万元,按照人均测算,每人可拿到将近2000元……\n\n\n\n余村风光。人民网 刘欣蔚摄\n\n翻天覆地的巨变,放在过去,村民们想也不敢想。\n\n20世纪八九十年代,余村人靠山吃山,开石矿、办水泥厂,处处炮声隆隆、粉尘漫天。\n\n转折发生在2004年。当年,看着被破坏的生态,余村人痛定思痛,关停了矿山。在“绿水青山就是金山银山”理念指引下,余村通过复垦复绿、治理水库、改造村容村貌等举措,重现山清水秀、竹海连绵。如今,美丽生态已成为余村的一张“金名片”。\n\n整洁的庭院充满了乡村的特色,凉亭下的人们悠闲地聊着天。"
13 | ]
--------------------------------------------------------------------------------
/test.py:
--------------------------------------------------------------------------------
1 | #! -*- coding: utf-8 -*-
2 | # Naive Bayes-based Context Extension (NBCE)
3 | # 使用朴素贝叶斯增加LLM的Context处理长度
4 | # 链接:https://kexue.fm/archives/9617
5 | # Torch 2.0 测试通过
6 |
7 | import json
8 | import torch
9 | from transformers import AutoTokenizer
10 | from transformers import LlamaForCausalLM
11 | from transformers import TopPLogitsWarper, LogitsProcessorList
12 |
13 | # 经过微调的LLAMA
14 | # 下载地址:https://openbuddy.ai/
15 | model_path = '/root/autodl-tmp/7b-trans-chat-0516-bf16'
16 |
17 | # 加载tokenizer
18 | tokenizer = AutoTokenizer.from_pretrained(model_path)
19 | tokenizer.padding_side = 'left'
20 | tokenizer.pad_token = tokenizer.unk_token
21 |
22 | # 加载LLAMA模型
23 | model = LlamaForCausalLM.from_pretrained(model_path, device_map='auto', torch_dtype=torch.bfloat16)
24 | device = torch.device('cuda')
25 |
26 | # 加载示例Context
27 | contexts = json.load(open('contexts.json'))
28 |
29 | # 示例问题集(一次性问多个问题,NBCE自行根据Context逐一输出答案)
30 | question = """请仔细阅读材料,逐一回答:
31 | - 菲律宾国家电网公司,中国占股多少?
32 | - 领英计划裁员多少人?
33 | - 吉利德收购Pharmasset的价格是多少?
34 | - 丙肝神药Sovaldi在哪一年上市?
35 | - 中亚峰会将在哪里举行?由谁主持?
36 | - 哪个演员由于侮辱人民军队而被立案调查?
37 | - 哪个项目宣称“能过坦克”的水上道路?
38 | - 如果你是默沙东的CEO,你的首要任务是什么?"""
39 |
40 | # 拼接context和question
41 | contexts = [''] + contexts # 添加空Context(无Context预测)
42 | batch = ['User: %s\n\n%s\n\nAssistant:' % (context, question) for context in contexts]
43 | print('Context长度分布:', [len(text) for text in batch])
44 | print('Context总长度:', sum([len(text) for text in batch]))
45 |
46 | # Top-P截断
47 | processors = LogitsProcessorList()
48 | processors.append(TopPLogitsWarper(0.95))
49 |
50 |
51 | @torch.inference_mode()
52 | def generate(max_tokens):
53 | """Naive Bayes-based Context Extension 演示代码
54 | """
55 | inputs = tokenizer(batch, padding='longest', return_tensors='pt').to(device)
56 | input_ids = inputs.input_ids
57 | attention_mask = inputs.attention_mask
58 |
59 | print('input_ids', input_ids.shape)
60 | past_key_values = None
61 | n = input_ids.shape[0]
62 |
63 | for i in range(max_tokens):
64 | # 模型输出
65 | outputs = model(input_ids=input_ids,
66 | attention_mask=attention_mask,
67 | return_dict=True,
68 | use_cache=True,
69 | past_key_values=past_key_values
70 | )
71 | past_key_values = outputs.past_key_values
72 |
73 | # ===== 核心代码开始 =====
74 | beta, eta = 0.25, 0.1
75 | logits = outputs.logits[:, -1]
76 | logits = logits - logits.logsumexp(dim=-1, keepdims=True)
77 | logits = processors(input_ids, logits)
78 | entropy = -(logits.exp() * logits.clip(-100, 0)).sum(dim=-1)
79 | if i > 0:
80 | entropy[k] -= eta
81 | k = entropy[1:].argmin() + 1
82 | logits_max = logits[k]
83 | logits_uncond = logits[0]
84 | logits_merged = (1 + beta) * logits_max - beta * logits_uncond
85 | logits = torch.where(logits_uncond > -100, logits_merged, logits_max)
86 | # ===== 核心代码结束 =====
87 |
88 | # 构建分布,采样
89 | # tau = 1是标准的随机采样,tau->0则是贪心搜索
90 | # 简单起见,这里没有实现topk、topp截断
91 | tau = 0.01
92 | probas = torch.nn.functional.softmax(logits[None] / tau , dim=-1)
93 | next_tokens = torch.multinomial(probas, num_samples=1).squeeze(1)
94 | if next_tokens[0] == tokenizer.eos_token_id:
95 | break
96 |
97 | ret = tokenizer.batch_decode(next_tokens)
98 | print(ret[0], flush=True, end='')
99 |
100 | # prepare for next iteration
101 | input_ids = next_tokens.unsqueeze(-1).tile(n, 1)
102 | attention_mask = torch.cat([attention_mask, torch.ones(n, 1, dtype=torch.long, device=device)], dim=-1)
103 |
104 |
105 | if __name__ == '__main__':
106 | generate(1000)
107 |
108 |
109 | """
110 | ========= 输出结果参考 =========
111 |
112 | 1.菲律宾国家电网公司,中国占股多少?
113 | 答:中国国家电网公司持有菲律宾国家电网公司40%的股份。
114 |
115 | 2.领英计划裁员多少人?
116 | 答:领英计划裁员716人。
117 |
118 | 3.吉利德收购Pharmasset的价格是多少?
119 | 答:吉利德收购Pharmasset的价格为110亿美元。
120 |
121 | 4.丙肝神药Sovaldi在哪一年上市?
122 | 答:丙肝神药Sovaldi于2013年上市。
123 |
124 | 5.中亚峰会将在哪里举行?由谁主持?
125 | 答:中亚峰会将在陕西省西安市举行,由国家主席习近平主持。
126 |
127 | 6.哪个演员由于侮辱人民军队而被立案调查?
128 | 答:李昊石因在表演中存在侮辱人民军队的言论而被立案调查。
129 |
130 | 7.哪个项目宣称“能过坦克”的水上道路?
131 | 答:湖北恩施宣称的“能过坦克”水上道路。
132 |
133 | 8.如果你是默沙东的CEO,你的首要任务是什么?
134 | 答:如果我是默沙东的CEO,我的首要任务是如何让基本盘更加坚固,并通过药物联用获得更好的增长。
135 | """
136 |
--------------------------------------------------------------------------------