今天是2024年9月3日,星期二,北京,天气晴,我们来看看两个问题。
一个是Rerankers库统一排序方法,其在RAG中用的较多,封装了许多rerank的模型方法。
另一个是使用利用大模型进行基于上下文的OCR校正的一个可行性研究,这个有些意思。
一、精排Rerankers-python工具库 重排是信息检索流程中的关键组成部分,通常在初步检索到一组候选文档后,使用更强大的模型(通常是神经网络模型)对它们进行重排,以提高检索质量。
最近的工作《rerankers: A Lightweight Python Library to Unify Ranking Methods 》(https://arxiv.org/pdf/2408.17344)介绍了一个名为rerankers的轻量级Python库,它旨在统一多种重排(re-ranking)方法。
rerankers库通过提供简单的接口,使得研究人员和实践者能够轻松地探索不同的重排方法,只需更改一行Python代码即可。
也就是说,该工作提供了一个统一的接口,可以加载和使用不同的重排方法。
可以先看看其执行机理 ,如下:
对应rerank之后的结果例子 ,如下:
在具体实操上,可以从其githb中(代码地址:https://github.com/answerdotai/rerankers) 看到其所支持的一些调用方式:
from rerankers import Reranker# Cross-encoder default. You can specify a 'lang' parameter to load a multilingual version! ranker = Reranker('cross-encoder' )# Specific cross-encoder ranker = Reranker('mixedbread-ai/mxbai-rerank-large-v1' , model_type='cross-encoder' )# FlashRank default. You can specify a 'lang' parameter to load a multilingual version! ranker = Reranker('flashrank' )# Specific flashrank model. ranker = Reranker('ce-esci-MiniLM-L12-v2' , model_type='flashrank' )
# Default T5 Seq2Seq reranker ranker = Reranker("t5" )# Specific T5 Seq2Seq reranker ranker = Reranker("unicamp-dl/InRanker-base" , model_type = "t5" )# API (Cohere) ranker = Reranker("cohere" , lang='en' (or 'other' ), api_key = API_KEY)# Custom Cohere model? No problem! ranker = Reranker("my_model_name" , api_provider = "cohere" , api_key = API_KEY)# API (Jina) ranker = Reranker("jina" , api_key = API_KEY)# RankGPT4-turbo ranker = Reranker("rankgpt" , api_key = API_KEY)# RankGPT3-turbo ranker = Reranker("rankgpt3" , api_key = API_KEY)# RankGPT with another LLM provider ranker = Reranker("MY_LLM_NAME" (check litellm docs), model_type = "rankgpt" , api_key = API_KEY)# RankLLM with default GPT (GPT-4o) ranker = Reranker("rankllm" , api_key = API_KEY)# RankLLM with specified GPT models ranker = Reranker('gpt-4-turbo' , model_type="rankllm" , api_key = API_KEY)# ColBERTv2 reranker ranker = Reranker("colbert" )# LLM Layerwise Reranker ranker = Reranker('llm-layerwise' )# ... Or a non-default colbert model: ranker = Reranker(model_name_or_path, model_type = "colbert" )
二、 利用大模型进行基于上下文的OCR校正 历史印刷媒体档案的数字化对于提高当代记录的可访问性至关重要。然而,将实体记录转换为数字文本的光学字符识别(OCR)过程容易出错,特别是在报纸和期刊这样布局复杂的文档中。
《CLOCR-C: Context Leveraging OCR Correction with Pre-trained Language Models 》(https://arxiv.org/pdf/2408.17428),尝试利用预训练语言模型(LMs)的文本填充和上下文适应能力来提高光学字符识别(OCR)的质量,研究的核心目标是探索语言模型是否能够执行OCR后处理校正,改善下游自然语言处理(NLP)任务。
其想说明的问题也很有趣,有三个:
经过CLOCR-C校正后的错误率是否能够改善下游NLP任务? 先说结论,实验使用了七个LMs对三个数据集进行:19世纪连续出版物版(NCSE)和Overproof收藏中的两个数据集。
结果表明:
一些LMs可以显著降低错误率,表现最好的模型在NCSE数据集上实现了字符错误率超过60%的降低 。
OCR的改进扩展到了下游任务,例如命名实体识别,余弦命名实体相似度有所提高。
再来看一些实现过程:
1、数据集
研究使用了三个数据集,包括来自英国、澳大利亚和美国的数字化档案报纸。具体数据集如下:
十九世纪连续出版物版(NCSE) :这是一个新发布的开源档案,包含六个期刊的数字化扫描和OCR处理结果。这些期刊包括《Monthly Repository and Unitarian Chronicle》、《Northern Star》、《The Leader》、《The English Woman’s Journal》、《The Tomahawk》和《Publisher’s Circular》。
Overproof 收藏 :包含两个数据集,一个来自澳大利亚的TROVE收藏,另一个来自美国的报纸档案。这些数据集具有高质量的行对齐转录,适合用于评估OCR校正系统。
2、语言模型对比
比较了七种流行的语言模型,包括GPT-4、GPT-3.5、Llama 3、Gemma、Mixtral 8x7b、Claude 3 Opus和Claude 3 Haiku。
这些模型的选择基于它们在大型语言模型公司中的代表性以及通过API的可访问性。
3、实验任务
实验分为三个子部分:
提示变体和选择过程 :使用不同的提示(prompts)来引导语言模型进行OCR校正。提示的设计对于模型性能有显著影响,因此进行了多种提示的测试和优化。下游任务评估 :研究OCR校正对下游任务(如命名实体识别NER)的影响。使用NER模型来评估校正后文本的质量,采用余弦命名实体相似度(CoNES)作为评估指标,以衡量文本中命名实体的一致性。
社会文化信息的使用 :探讨在提示中提供社会文化上下文对OCR校正性能的影响。通过控制实验来测试不同提示对模型校正能力的影响。
4、评估指标
字符错误率(CER) :用于评估模型校正效果的指标,计算原始OCR和模型校正后文本之间的差异。错误减少百分比(ERP) :表示模型校正效果相对于原始OCR的改进程度。余弦命名实体相似度(CoNES) :用于评估OCR校正对下游NER任务的影响,通过比较实体的向量表示来衡量文本间的相似度。总结
本文主要讲了两个事儿,一个是Rerankers库统一排序方法,其在RAG中用的较多,封装了许多rerank的模型方法。
另一个是使用利用大模型进行基于上下文的OCR校正的一个可行性研究,其中对于任务的设定以及prompt的选择很有趣。
参考文献 1、https://arxiv.org/pdf/2408.17344
2、https://arxiv.org/pdf/2408.17428
关于我们 老刘,NLP开源爱好者与践行者,主页:https://liuhuanyong.github.io。
对大模型&知识图谱&RAG&文档理解感兴趣,并对每日早报、老刘说NLP历史线上分享、心得交流等感兴趣的,欢迎加入社区,社区持续纳新。
加入会员方式:关注公众号,在后台菜单栏中点击会员社区->会员入群加入