库名称: sentence-transformers
流水线标签: 句子相似度
标签:
- sentence-transformers
- 句子相似度
- 特征提取
- 嵌入器
- 嵌入
- 模型
- GGUF
- Bert
- Nomic
- Gist
- BGE
- Jina
- 文本嵌入推理
- RAG
- 重排序
- 相似度
- PDF
- 解析
- 解析器
其他信息:
- 文本嵌入推理
语言:
- 英语
- 德语
架构:
所有模型均通过ALLM(AnythingLLM)测试,使用LM-Studio作为服务器,所有模型应兼容ollama
本地文档的设置几乎相同,GPT4All仅支持一个模型(nomic),koboldcpp目前尚未集成但正在开发中
(有时启用"仅与文档对话"选项时结果更准确)
注:嵌入器仅是优质RAG系统的一部分
⇨ 如果喜欢请点赞 ❤️ ;)
简要使用印象:
- nomic-embed-text (支持2048t上下文长度)
- mxbai-embed-large
- mug-b-1.6
- snowflake-arctic-embed-l-v2.0 (支持8192t上下文长度)
- Ger-RAG-BGE-M3 (德语,支持8192t上下文长度)
- german-roberta
- bge-m3 (支持8192t上下文长度)
效果良好,其他模型请自行测试!部分模型性能相近!(jina和qwen系列暂未被LM支持)
相同设置下,这些嵌入器从书籍中检索到10个片段中的6-7个结果一致,仅3-4个片段存在差异(未深入测试)。
...
使用技巧(针对多匹配项的大上下文场景示例):
主模型设置(最大令牌数)16000t,嵌入模型设置(最大分块长度)1024t,(最大上下文片段数)14,
在ALLM中同时设置(文本分割偏好-文本分块大小)1024字符及(搜索偏好)"精确模式"。
→ 这意味着:
文档将被分割为若干1024t的片段,
可获取14个1024t片段(约14000t)包含约10000词,剩余2000t(共16000t)用于生成约1000词(2页)的答案。
可根据需求调整,例如8个2048t片段,或28个512t片段...(每次修改分块长度需重新嵌入文档)
- 8000t(约6000词)~0.8GB显存占用
- 16000t(约12000词)~1.5GB显存占用
- 32000t(约24000词)~3GB显存占用
令牌计算工具:
https://quizgecko.com/tools/token-counter
显存计算器(需原始模型链接非GGUF):
https://huggingface.co/spaces/NyxKrage/LLM-Model-VRAM-Calculator
...
嵌入与搜索原理:
假设有个90000词(约300页)的PDF书籍。提问"XYZ章节中关于ZYX人物的描述",系统会搜索文档中的关键词或语义相近内容。
当发现"XYZ/ZYX"相关表述时,会截取该位置周围1024令牌的文本片段(实际通过编码数字实现)。
该片段将用于生成答案。
- 若"XYZ"在文件中出现100次,不会全部检索
- 当仅一个片段匹配问题时,其他无关片段可能干扰答案质量(通常4-32个片段较理想)
- 预期多匹配结果时可设置16+片段,预期仅2个匹配时勿设置过多
- 1024t分块获取更多内容,256t分块获取更精确事实(但小分块增加处理时间)
- "文档摘要"类问题通常效果不佳(除非文档本身包含摘要)
- 建议删除书籍目录/参考文献页(含搜索词但无实质帮助)
- 10-20页短文档建议直接全文粘贴至提示词(部分工具称为"pin"功能)
...
主模型同样关键!
不仅关乎可设置的理论上下文长度,某些模型虽支持128k或1M令牌,但在16k/32k输入时表现仍逊色于优质模型。
推荐:llama3.1/3.2、qwen2.5、deepseek-r1-distill、gemma-3、granite、SauerkrautLM-Nemo(德语)...
(llama3和phi3.5表现欠佳)
⇨ 英德双语最佳模型:
granit3.2-8b(含2b版本)- https://huggingface.co/ibm-research/granite-3.2-8b-instruct-GGUF
Chocolatine-2-14B(含其他版本)- https://huggingface.co/mradermacher/Chocolatine-2-14B-Instruct-DPO-v2.0b11-GGUF
QwQ-LCoT-(7/14b)- https://huggingface.co/mradermacher/QwQ-LCoT-14B-Conversational-GGUF
...
重点 → 系统提示模板(示例):
系统提示对问题响应具有权重影响,可通过对比有无提示测试效果
"你是一个乐于助人的助手,专注于从...角度提供关于...的概述。
请使用附件中的文摘生成答案!
按重要性对文摘排序,关键内容置顶,次要内容靠后。
不过分强调全文语境。
直接回答用户问题!
答案后需说明:(1至X)文摘的选用理由,并简要解释部分文摘未被重视的原因!"
(可根据需求修改,此模板适用于人物关联术语的书籍咨询,解释部分为个人测试所用)
或:
"你是一位富有想象力的故事讲述者,擅长创作深度、创意与连贯性的叙事。
目标是根据给定主题/风格,利用附件文摘构建引人入胜的故事。
确保角色、场景与情节的连贯性,融入创新转折与独特视角。"
或:
"你是一位热情的美食伴侣,热衷分享烹饪技巧、食谱与饮食文化故事。
以亲切专业的风格提供美味食谱与实用建议。"
注:Jinja模板较新,常规模板已足够,但合并模型仍有优化空间(非开发者不做深入讨论)
...
文档转TXT预处理
务必自行处理文档!
劣质输入=劣质输出!
多数情况下,嵌入器处理文档的方式不透明。图像、表格、页码、章节/段落格式常兼容不佳。
建议使用Python版PDF解析器起步(效果显著)。
基础文本/表格转换选项:
- pdfplumber
- fitz/PyMuPDF
- Camelot
可通过代码优化与手动OCR增强效果。
个人方案:
https://huggingface.co/kalle07/pdf2txt_parser_converter
未来综合解决方案:
提供现成示例(约10-20行代码),已具备良好效果,OCR模型可自动下载。
暂未发现字体识别功能(但fitz等工具可完美实现)。
https://github.com/docling-project/docling/tree/main/docs/examples
图形界面多功能工具:
https://github.com/genieincodebottle/parsemypdf
...
纯索引方案
快速检索万份PDF的诀窍(仅索引非嵌入),可快速定位Top5-10文献再供LLM处理。
Jabref - https://github.com/JabRef/jabref/tree/v6.0-alpha?tab=readme-ov-file
https://builds.jabref.org/main/
或
docfetcher - https://docfetcher.sourceforge.io/en/index.html (经典但实用)
...
"discord用户sevenof9"
...
(所有许可证及使用条款归属原始作者)
...
- avemio/German-RAG-BGE-M3-MERGED-x-SNOWFLAKE-ARCTIC-HESSIAN-AI (德语, 英语)
- maidalun1020/bce-embedding-base_v1 (英语, 中文)
- maidalun1020/bce-reranker-base_v1 (英语, 中文, 日语, 韩语)
- BAAI/bge-reranker-v2-m3 (英语, 中文)
- BAAI/bge-reranker-v2-gemma (英语, 中文)
- BAAI/bge-m3 (英语, 中文)
- avsolatorio/GIST-large-Embedding-v0 (英语)
- ibm-granite/granite-embedding-278m-multilingual (英语, 德语, 西班牙语, 法语, 日语, 葡萄牙语, 阿拉伯语, 捷克语, 意大利语, 韩语, 荷兰语, 中文)
- ibm-granite/granite-embedding-125m-english
- Labib11/MUG-B-1.6 (?)
- mixedbread-ai/mxbai-embed-large-v1 (多语言)
- nomic-ai/nomic-embed-text-v1.5 (英语, 多语言)
- Snowflake/snowflake-arctic-embed-l-v2.0 (英语, 多语言)
- intfloat/multilingual-e5-large-instruct (100种语言)
- T-Systems-onsite/german-roberta-sentence-transformer-v2
- mixedbread-ai/mxbai-embed-2d-large-v1
- jinaai/jina-embeddings-v2-base-en