值得一看的小模型技术全面总结及RAG文档处理及切分小模型工具

文摘   2024-11-09 11:34   北京  

今天是2024年11月09日,星期六,北京,天气晴,

本文还是来看看RAG,不过是从另一个角度,从小模型(其实这个小不太好说,7B或者以下?)角度;

因此,讲两件事,一个是回顾下小模型,推荐一个写的很好的小模型进展技术总结综述,里面提到的几个关键点都值得索引;再看小模型用于RAG文本切分的一些小模型工具,包括文档处理、文档切分等。

仔细读,会有收获,供大家一起参考。

一、特别直接推荐的小模型进展技术总结

关于小模型综述,我们之前其实有说过,例如《What is the Role of Small Models in the LLM Era: A Survey》(https://github.com/tigerchen52/role_of_small_models, https://arxiv.org/pdf/2409.06857),而进一步的, 老刘说NLP技术社区在11月07日早报中提到了另一个小模型综述,《A Comprehensive Survey of Small Language Models in the Era of Large Language Models: Techniques, Enhancements, Applications, Collaboration with LLMs, and Trustworthiness》(https://arxiv.org/pdf/2411.03350),周末有空,温习了下,感觉很不错,十分推荐给大家,可以重点看几个点:

1、当前都有哪些小模型

2、小模型的发展时间线

3、Representative quantization methods当前一些量化的方法

4、当前一些模型压缩压缩的方法对比

5、小模型的领域应用

尤其是这个,小模型用于websearch上的结合方式

6、小模型的部署成本消耗

7、小模型协助大模型的一些代表工作

二、再看小模型用于RAG文档处理及切分

关于RAG切分,可以看看小模型用在RAG领域的一些工作,也是昨晚看到的,JinaAI在这方面做了不少工作。

先说文档清洗阶段,将html转换为markdown(reader-lm-0.5b: https://huggingface.co/jinaai/reader-lm-0.5b,reader-lm-1.5b: https://huggingface.co/jinaai/reader-lm-1.5b)

使用方式也很简单:

# pip install transformers
from transformers import AutoModelForCausalLM, AutoTokenizer
checkpoint = "jinaai/reader-lm-0.5b"
device = "cuda" # for GPU usage or "cpu" for CPU usage
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
model = AutoModelForCausalLM.from_pretrained(checkpoint).to(device)
# example html content
html_content = "<html><body><h1>Hello, world!</h1></body></html>"
messages = [{"role""user""content": html_content}]
input_text=tokenizer.apply_chat_template(messages, tokenize=False)
inputs = tokenizer.encode(input_text, return_tensors="pt").to(device)
outputs = model.generate(inputs, max_new_tokens=1024, temperature=0, do_sample=False, repetition_penalty=1.08)

print(tokenizer.decode(outputs[0]))

再说文档切分阶段,将文档进行切割,这里还会涉及到一个wiki-segment数据集,https://github.com/koomri/text-segmentation) ,从维基百科文章中提取的大规模结构化文本片段集合,包含超过727,000个文本块,每个片段代表维基百科文章的不同部分,例如引言、章节或子章节。

基于这个数据,可以训练出来一些小模型进行切割,例如:

simple-qwen-0.5(https://huggingface.co/jinaai/text-seg-lm-qwen2-0.5b),根据文档的结构元素进行切分;

topic-qwen-0.5(https://huggingface.co/jinaai/text-seg-lm-qwen2-0.5b-cot-topic-chunking):借鉴来自Chain-of-Thought)推理,先识别文本中的主题,再根据主题进行切分,确保每个段落主题连贯最适合复杂的多主题文档;

summary-qwen-0.5(https://huggingface.co/jinaai/text-seg-lm-qwen2-0.5b-summary-chunking):能切分文档,并生成每个分块的摘要,适合长文档问答任务需要更多训练数据,这个就很有趣,还需要用到GPT4-O进行增强:

Generate a five to ten words topic and a one sentence summary for this chunk of text.
#
{text}
#
Make sure the topic is concise and the summary covers the main topic as much as possible.

Please respond in the following format:
#
Topic: ...
Summary: ...
#
Directly respond with the required topic and summary, do not include any other details, and do not surround your response with quotes, backticks or other separators.
   """.strip()

总结

本文主要从围绕小模型这个话题做了回顾,一个是回顾下小模型,推荐一个写的很好的小模型进展技术总结综述,里面提到的几个关键点都值得索引;再看小模型用于RAG文本切分的一些小模型工具,包括文档处理、文档切分等。

最近,在做文档处理结合落地的一些事情,尤其是表格解析,目前最大的问题是稳定性和速度的问题,而为了解决速度和成本问题,所以大模型(甚至是Transformer级)的方案都要舍弃掉,所以也是在看一些传统的cv方案,比如yolo做检测这些,做一些组合策略,其实效果还不错,所以也在想,当前很多大模型这股潮流其实将大家的思维固化了,觉得除了大模型就没有其他方案【其实这个的确如此,比如实体识别这些经典任务,bert-crf这些很多人竟然都不知道了,不去往那方面想,这其实问题挺大的】,因此,之前已经被验证的经典方案,还是要捡起来,这样,才不会过于被动,技术思维不要固化。

参考文献

1、https://arxiv.org/pdf/2411.03350

2、https://mp.weixin.qq.com/s/p2KrZKpcYnkc28geheInVA

3、https://mp.weixin.qq.com/s/_8aStJchSoHN6jYVMb0Hkw

关于我们

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

对大模型&知识图谱&RAG&文档理解感兴趣,并对每日早报、老刘说NLP历史线上分享、心得交流等感兴趣的,欢迎加入社区,社区持续纳新。

加入会员方式:关注公众号,在后台菜单栏中点击会员社区->会员入群加入


老刘说NLP
老刘,NLP开源爱好者与践行者。主页:https://liuhuanyong.github.io。老刘说NLP,将定期发布语言资源、工程实践、技术总结等内容,欢迎关注。
 最新文章