RAG中late chunking的实验效果测试

news/2024/11/20 11:58:39/文章来源:https://www.cnblogs.com/bonelee/p/18556574

代码:

import os
import json
import torch
import numpy as npimport spacy
from spacy.tokens import Doc
from spacy.language import Languageimport transformers
from transformers import AutoModel
from transformers import AutoTokenizerdef sentence_chunker2(document, batch_size=10000):"""Given a document (string), return the sentences as chunks and span annotations (start and end indices of chunks).Using spacy to do this sentence chunking."""# Batch with spacynlp = spacy.blank("en")nlp.add_pipe("sentencizer", config={"punct_chars": None})doc = nlp(document)docs = []for i in range(0, len(document), batch_size):batch = document[i: i + batch_size]docs.append(nlp(batch))doc = Doc.from_docs(docs)span_annotations = []chunks = []for i, sent in enumerate(doc.sents):span_annotations.append((sent.start, sent.end))chunks.append(sent.text)return chunks, span_annotationsdef sentence_chunker(document, batch_size=128):"""修改分块策略,使用更合理的分句方式"""nlp = spacy.blank("zh")  # 改用中文模型nlp.add_pipe("sentencizer")# 使用更细粒度的分句规则doc = nlp(document)chunks = []span_annotations = []current_chunk = []current_start = 0for sent in doc.sents:# 如果当前句子加入后长度合适,就加入当前chunkif len(''.join(current_chunk)) + len(sent.text) < batch_size:current_chunk.append(sent.text)else:# 否则保存当前chunk并开始新的chunkif current_chunk:text = ' '.join(current_chunk)chunks.append(text)span_annotations.append((current_start, len(text)))current_start = len(text) + 1current_chunk = [sent.text]# 处理最后一个chunkif current_chunk:text = ' '.join(current_chunk)chunks.append(text)span_annotations.append((current_start, len(text)))return chunks, span_annotationsdef document_to_token_embeddings(model, tokenizer, document, batch_size=4096):"""Given a model and tokenizer of jinaai/jina-embeddings-v2-base-en, return token embeddings of the input text document."""if batch_size > 8192:raise ValueError("Batch size is too large. Please use a batch size of 8192 or less.")tokenized_document = tokenizer(document, return_tensors="pt")tokens = tokenized_document.tokens()# Batch in sizes of batch_sizeoutputs = []for i in range(0, len(tokens), batch_size):start = iend = min(i + batch_size, len(tokens))# subset huggingface tokenizer outputs to i : i + batch_sizebatch_inputs = {k: v[:, start:end] for k, v in tokenized_document.items()}with torch.no_grad():model_output = model(**batch_inputs)outputs.append(model_output.last_hidden_state)model_output = torch.cat(outputs, dim=1)return model_outputdef late_chunking(token_embeddings, span_annotation, max_length=None):"""Given the token-level embeddings of document and their corresponding span annotations (start and end indices of chunks in terms of tokens),late chunking pools the token embeddings for each chunk."""outputs = []for embeddings, annotations in zip(token_embeddings, span_annotation):if (max_length is not None):  # remove annotations which go beyond the max-length of the modelannotations = [(start, min(end, max_length - 1))for (start, end) in annotationsif start < (max_length - 1)]pooled_embeddings = []for start, end in annotations:if (end - start) >= 1:pooled_embeddings.append(embeddings[start:end].sum(dim=0) / (end - start))# print("pooled_embeddings:", pooled_embeddings)pooled_embeddings = [embedding.numpy() for embedding in pooled_embeddings]outputs.append(pooled_embeddings)return outputstokenizer = AutoTokenizer.from_pretrained('jinaai/jina-embeddings-v2-base-zh', trust_remote_code=True)
model = AutoModel.from_pretrained('jinaai/jina-embeddings-v2-base-zh', trust_remote_code=True)import numpy as np
cos_sim = lambda x, y: np.dot(x, y) / (np.linalg.norm(x) * np.linalg.norm(y))# with open("temp.md", "r", encoding="utf8") as f:
#     document = f.read()
#
# print(f"{document[:150]}...")
# chunks, span_annotations = sentence_chunker(document)
# token_embeddings = document_to_token_embeddings(model, tokenizer, document)
# chunk_embeddings = late_chunking(token_embeddings, [span_annotations])[0]
#
# def late_chunking_query_by_cosine_sim(query, k=3):
#     cos_sim = lambda x, y: np.dot(x, y) / (np.linalg.norm(x) * np.linalg.norm(y))
#     query_vector = model(**tokenizer(query, return_tensors="pt")).last_hidden_state.mean(
#         1).detach().cpu().numpy().flatten()
#
#     results = np.empty(len(chunk_embeddings))
#     for i, (chunk, embedding) in enumerate(zip(chunks, chunk_embeddings)):
#         results[i] = cos_sim(query_vector, embedding)
#
#     results_order = results.argsort()[::-1]
#     return np.array(chunks)[results_order].tolist()[:k]
#
#
# print(late_chunking_query_by_cosine_sim("What are new features in milvus 2.4.13", 3))
# embeddings_traditional_chunking = model.encode(chunks[:10])
#
#
# milvus_embedding = model.encode('milvus 2.4.13')
#
# for chunk, late_chunking_embedding, traditional_embeddings in zip(chunks[4:8], chunk_embeddings[4:8],
#                                                                   embeddings_traditional_chunking[4:8]):
#     print(f'similarity_late_chunking("milvus 2.4.13", "{chunk}"):', cos_sim(milvus_embedding, late_chunking_embedding))
#     print(f'similarity_traditional("milvus 2.4.13", "{chunk}"):', cos_sim(milvus_embedding, traditional_embeddings))# 使用示例
print("*"*88)
context_test_documents = ["""OpenAI的发展历程充满戏剧性。这家公司成立于2015年,最初是作为非营利组织运营。随着GPT系列模型的推出,它逐渐成为AI领域的领军企业。特别是在2022年底推出ChatGPT后,它的影响力达到了顶峰。然而,就在这个AI助手风靡全球的时候,公司内部却出现了意想不到的变故。董事会突然宣布解雇CEO Sam Altman,这一决定在科技界引起轩然大波。虽然它的这个决定充满争议,但董事会认为这是维护公司使命的必要之举。有趣的是,在随后的几天里,它又经历了戏剧性的反转。数百名员工威胁集体辞职,微软对这位被解雇的CEO伸出橄榄枝。最终,在各方压力下,董事会不得不收回成命。这一系列事件充分说明,它在AI领域的影响力已经远超一般科技公司。如今,它正在积极推进GPT-5的研发,据报道,这个新模型的性能将远超现有版本。业内专家预测,它可能会在明年推出,届时必将再次改变AI行业格局。""","""特斯拉的Cybertruck终于在2023年底开始交付,这款酷似科幻电影道具的电动皮卡让人过目难忘。从2019年首次发布概念车到现在,它经历了无数次延期和设计改进。马斯克称它是一款革命性的产品,因为它采用了创新的不锈钢外壳设计。然而,这种特殊的材料选择也给它的生产带来了巨大挑战。据工厂工人透露,它的组装过程异常复杂,每一个焊接点都需要特殊处理。更具争议的是,它的实际售价远超最初承诺的39,900美元起步价。尽管如此,它仍然吸引了大量订单。有意思的是,它的外观设计虽然争议不断,但却因其独特性在社交媒体上获得了超高关注度。分析师指出,它的成功与否将直接影响特斯拉在皮卡市场的地位。目前,它已经开始小批量生产,但产能爬坡面临诸多挑战。马斯克表示,要到2024年底,它才能实现每周一万台的生产目标。与此同时,它的竞争对手们也没有闲着。福特F-150 Lightning和雪佛兰Silverado EV都在积极扩大产能,这使得电动皮卡市场的竞争更加激烈。""","""中国最早的词典《说文解字》对汉字的研究影响深远。它由东汉许慎编撰完成,前后耗时数十载。这部巨著不仅系统地分析了汉字的构造原理,更开创了形声字的理论体系。在古代文人的著作中,它常常被引用作为考据的重要依据。值得注意的是,它采用了独特的部首分类法,按照540个部首将9353个字分门别类。这种分类方法影响了后世众多字典的编撰。宋代的《类篇》就是在它的基础上改进而来。明清时期,它更是成为了科举考试的必备参考书。随着时代发展,它的一些观点虽然被现代语言学家质疑,但它对汉字研究的系统性方法仍然具有重要的参考价值。特别是在考古发现中,它的许多论述都得到了甲骨文和金文的印证。现代学者在研究它的时候发现,许多当时被认为是臆测的字源解释,竟然与后来出土的古文字材料相吻合。这种惊人的准确性,使得它在数字化时代依然保持着极高的学术价值。近年来,随着人工智能技术的发展,它的数字化版本为计算机处理古文献提供了重要依据。""",
]# 测试查询,特别关注指代词相关的上下文
test_queries = [# OpenAI相关查询"OpenAI董事会解雇CEO的原因是什么","OpenAI在AI领域的影响力体现在哪里",  # 指代OpenAI"董事会的决定造成了什么后果",# Cybertruck相关查询"Cybertruck的生产面临什么挑战","Cybertruck的售价情况如何",  # 指代Cybertruck"Cybertruck的竞争对手有哪些",  # 指代Cybertruck# 说文解字相关查询"说文解字的编撰过程","说文解字的分类方法有什么特点",  # 指代说文解字"说文解字对后世产生了什么影响"  # 指代说文解字
]def process_all_documents(documents):"""处理所有文档,返回所有chunks和对应的embeddings"""all_chunks = []all_chunk_embeddings = []  # Late Chunking方法的embeddingsall_traditional_embeddings = []  # 传统方法的embeddingsdoc_boundaries = []  # 记录每个文档的起始位置start_idx = 0for doc in documents:print(f"\n处理文档 (前100字): {doc[:100]}...\n")# Late chunking 处理chunks, span_annotations = sentence_chunker(doc)token_embeddings = document_to_token_embeddings(model, tokenizer, doc)chunk_embeddings = late_chunking(token_embeddings, [span_annotations])[0]# 传统方法:直接对chunks进行embeddingtraditional_embeddings = []for chunk in chunks:with torch.no_grad():inputs = tokenizer(chunk, return_tensors="pt", truncation=True, max_length=512)outputs = model(**inputs)embedding = outputs.last_hidden_state.mean(1).cpu().numpy().flatten()traditional_embeddings.append(embedding)# 保存结果all_chunks.extend(chunks)all_chunk_embeddings.extend(chunk_embeddings)all_traditional_embeddings.extend(traditional_embeddings)# 记录文档边界doc_boundaries.append((start_idx, start_idx + len(chunks)))start_idx += len(chunks)print(f"文档被分割成 {len(chunks)} 个片段")return all_chunks, all_chunk_embeddings, all_traditional_embeddings, doc_boundariesdef search_across_documents(query, chunks, chunk_embeddings, traditional_embeddings, top_k=3):"""在所有文档中搜索相关内容"""# 获取查询的embeddingwith torch.no_grad():query_inputs = tokenizer(query, return_tensors="pt", truncation=True, max_length=512)query_outputs = model(**query_inputs)query_embedding = query_outputs.last_hidden_state.mean(1).cpu().numpy().flatten()# Late Chunking方法的相似度计算late_chunking_similarities = []for i, (chunk, emb) in enumerate(zip(chunks, chunk_embeddings)):sim = cos_sim(query_embedding, emb)late_chunking_similarities.append((sim, chunk, i))# 传统方法的相似度计算traditional_similarities = []for i, (chunk, emb) in enumerate(zip(chunks, traditional_embeddings)):sim = cos_sim(query_embedding, emb)traditional_similarities.append((sim, chunk, i))return (sorted(late_chunking_similarities, reverse=True)[:top_k],sorted(traditional_similarities, reverse=True)[:top_k])def context_understanding_with_references(documents, queries, top_k=3):"""主函数:处理所有文档并执行查询"""print("\n===== 开始处理所有文档 =====")# 处理所有文档all_chunks, all_chunk_embeddings, all_traditional_embeddings, doc_boundaries = process_all_documents(documents)print(f"\n总共处理了 {len(documents)} 个文档,产生了 {len(all_chunks)} 个文本片段")# 执行查询for query in queries:print(f"\n\n查询: {query}")print("-" * 50)# 在所有文档中搜索late_results, trad_results = search_across_documents(query,all_chunks,all_chunk_embeddings,all_traditional_embeddings,top_k)# 显示Late Chunking结果print(f"\n=== Late Chunking方法的top {top_k} 结果 ===")for sim, chunk, idx in late_results:# 找出该chunk属于哪个文档doc_id = next(i for i, (start, end) in enumerate(doc_boundaries) if start <= idx < end)print(f"\n相似度 {sim:.4f} (文档 #{doc_id}, 片段 #{idx}):")print(f"内容: {chunk}")# 显示传统方法结果print(f"\n=== 传统Embedding方法的top {top_k} 结果 ===")for sim, chunk, idx in trad_results:doc_id = next(i for i, (start, end) in enumerate(doc_boundaries) if start <= idx < end)print(f"\n相似度 {sim:.4f} (文档 #{doc_id}, 片段 #{idx}):")print(f"内容: {chunk}")# 使用示例
if __name__ == "__main__":context_understanding_with_references(context_test_documents, test_queries, top_k=3)

  

运行结果: 

===== 开始处理所有文档 =====处理文档 (前100字): OpenAI的发展历程充满戏剧性。这家公司成立于2015年,最初是作为非营利组织运营。随着GPT系列模型的推出,它逐渐成为AI领域的领军企业。特别是在2022年底推出ChatGPT...文档被分割成 4 个片段处理文档 (前100字): 特斯拉的Cybertruck终于在2023年底开始交付,这款酷似科幻电影道具的电动皮卡让人过目难忘。从2019年首次发布概念车到现在,它经历了无数次延期和设计改进。马斯克称它是一款...文档被分割成 5 个片段处理文档 (前100字): 中国最早的词典《说文解字》对汉字的研究影响深远。它由东汉许慎编撰完成,前后耗时数十载。这部巨著不仅系统地分析了汉字的构造原理,更开创了形声字的理论体系。在古代文人的著作中,它常常被...文档被分割成 5 个片段总共处理了 3 个文档,产生了 14 个文本片段查询: OpenAI董事会解雇CEO的原因是什么
--------------------------------------------------=== Late Chunking方法的top 3 结果 ===相似度 0.6403 (文档 #0, 片段 #0):
内容: OpenAI的发展历程充满戏剧性。 这家公司成立于2015年,最初是作为非营利组织运营。 随着GPT系列模型的推出,它逐渐成为AI领域的领军企业。 特别是在2022年底推出ChatGPT后,它的影响力达到了顶峰。相似度 0.6076 (文档 #0, 片段 #1):
内容: 然而,就在这个AI助手风靡全球的时候,公司内部却出现了意想不到的变故。 董事会突然宣布解雇CEO Sam Altman,这一决定在科技界引起轩然大波。 虽然它的这个决定充满争议,但董事会认为这是维护公司使命的必要之举。相似度 0.6068 (文档 #0, 片段 #2):
内容: 有趣的是,在随后的几天里,它又经历了戏剧性的反转。 数百名员工威胁集体辞职,微软对这位被解雇的CEO伸出橄榄枝。 最终,在各方压力下,董事会不得不收回成命。 这一系列事件充分说明,它在AI领域的影响力已经远超一般科技公司。=== 传统Embedding方法的top 3 结果 ===相似度 0.6042 (文档 #0, 片段 #1):
内容: 然而,就在这个AI助手风靡全球的时候,公司内部却出现了意想不到的变故。 董事会突然宣布解雇CEO Sam Altman,这一决定在科技界引起轩然大波。 虽然它的这个决定充满争议,但董事会认为这是维护公司使命的必要之举。相似度 0.5376 (文档 #0, 片段 #2):
内容: 有趣的是,在随后的几天里,它又经历了戏剧性的反转。 数百名员工威胁集体辞职,微软对这位被解雇的CEO伸出橄榄枝。 最终,在各方压力下,董事会不得不收回成命。 这一系列事件充分说明,它在AI领域的影响力已经远超一般科技公司。相似度 0.4302 (文档 #0, 片段 #0):
内容: OpenAI的发展历程充满戏剧性。 这家公司成立于2015年,最初是作为非营利组织运营。 随着GPT系列模型的推出,它逐渐成为AI领域的领军企业。 特别是在2022年底推出ChatGPT后,它的影响力达到了顶峰。查询: OpenAI在AI领域的影响力体现在哪里
--------------------------------------------------=== Late Chunking方法的top 3 结果 ===相似度 0.5866 (文档 #0, 片段 #0):
内容: OpenAI的发展历程充满戏剧性。 这家公司成立于2015年,最初是作为非营利组织运营。 随着GPT系列模型的推出,它逐渐成为AI领域的领军企业。 特别是在2022年底推出ChatGPT后,它的影响力达到了顶峰。相似度 0.4603 (文档 #0, 片段 #1):
内容: 然而,就在这个AI助手风靡全球的时候,公司内部却出现了意想不到的变故。 董事会突然宣布解雇CEO Sam Altman,这一决定在科技界引起轩然大波。 虽然它的这个决定充满争议,但董事会认为这是维护公司使命的必要之举。相似度 0.4260 (文档 #0, 片段 #2):
内容: 有趣的是,在随后的几天里,它又经历了戏剧性的反转。 数百名员工威胁集体辞职,微软对这位被解雇的CEO伸出橄榄枝。 最终,在各方压力下,董事会不得不收回成命。 这一系列事件充分说明,它在AI领域的影响力已经远超一般科技公司。=== 传统Embedding方法的top 3 结果 ===相似度 0.5795 (文档 #0, 片段 #0):
内容: OpenAI的发展历程充满戏剧性。 这家公司成立于2015年,最初是作为非营利组织运营。 随着GPT系列模型的推出,它逐渐成为AI领域的领军企业。 特别是在2022年底推出ChatGPT后,它的影响力达到了顶峰。相似度 0.4472 (文档 #0, 片段 #3):
内容: 如今,它正在积极推进GPT-5的研发,据报道,这个新模型的性能将远超现有版本。 业内专家预测,它可能会在明年推出,届时必将再次改变AI行业格局。 相似度 0.3685 (文档 #0, 片段 #2):
内容: 有趣的是,在随后的几天里,它又经历了戏剧性的反转。 数百名员工威胁集体辞职,微软对这位被解雇的CEO伸出橄榄枝。 最终,在各方压力下,董事会不得不收回成命。 这一系列事件充分说明,它在AI领域的影响力已经远超一般科技公司。查询: 董事会的决定造成了什么后果
--------------------------------------------------=== Late Chunking方法的top 3 结果 ===相似度 0.2884 (文档 #0, 片段 #2):
内容: 有趣的是,在随后的几天里,它又经历了戏剧性的反转。 数百名员工威胁集体辞职,微软对这位被解雇的CEO伸出橄榄枝。 最终,在各方压力下,董事会不得不收回成命。 这一系列事件充分说明,它在AI领域的影响力已经远超一般科技公司。相似度 0.2657 (文档 #0, 片段 #1):
内容: 然而,就在这个AI助手风靡全球的时候,公司内部却出现了意想不到的变故。 董事会突然宣布解雇CEO Sam Altman,这一决定在科技界引起轩然大波。 虽然它的这个决定充满争议,但董事会认为这是维护公司使命的必要之举。相似度 0.2361 (文档 #0, 片段 #0):
内容: OpenAI的发展历程充满戏剧性。 这家公司成立于2015年,最初是作为非营利组织运营。 随着GPT系列模型的推出,它逐渐成为AI领域的领军企业。 特别是在2022年底推出ChatGPT后,它的影响力达到了顶峰。=== 传统Embedding方法的top 3 结果 ===相似度 0.3913 (文档 #0, 片段 #2):
内容: 有趣的是,在随后的几天里,它又经历了戏剧性的反转。 数百名员工威胁集体辞职,微软对这位被解雇的CEO伸出橄榄枝。 最终,在各方压力下,董事会不得不收回成命。 这一系列事件充分说明,它在AI领域的影响力已经远超一般科技公司。相似度 0.3709 (文档 #0, 片段 #1):
内容: 然而,就在这个AI助手风靡全球的时候,公司内部却出现了意想不到的变故。 董事会突然宣布解雇CEO Sam Altman,这一决定在科技界引起轩然大波。 虽然它的这个决定充满争议,但董事会认为这是维护公司使命的必要之举。相似度 0.0477 (文档 #1, 片段 #6):
内容: 更具争议的是,它的实际售价远超最初承诺的39,900美元起步价。 尽管如此,它仍然吸引了大量订单。 有意思的是,它的外观设计虽然争议不断,但却因其独特性在社交媒体上获得了超高关注度。查询: Cybertruck的生产面临什么挑战
--------------------------------------------------=== Late Chunking方法的top 3 结果 ===相似度 0.5581 (文档 #0, 片段 #3):
内容: 如今,它正在积极推进GPT-5的研发,据报道,这个新模型的性能将远超现有版本。 业内专家预测,它可能会在明年推出,届时必将再次改变AI行业格局。 相似度 0.3901 (文档 #1, 片段 #4):
内容: 特斯拉的Cybertruck终于在2023年底开始交付,这款酷似科幻电影道具的电动皮卡让人过目难忘。 从2019年首次发布概念车到现在,它经历了无数次延期和设计改进。相似度 0.3771 (文档 #1, 片段 #5):
内容: 马斯克称它是一款革命性的产品,因为它采用了创新的不锈钢外壳设计。 然而,这种特殊的材料选择也给它的生产带来了巨大挑战。 据工厂工人透露,它的组装过程异常复杂,每一个焊接点都需要特殊处理。=== 传统Embedding方法的top 3 结果 ===相似度 0.5505 (文档 #1, 片段 #4):
内容: 特斯拉的Cybertruck终于在2023年底开始交付,这款酷似科幻电影道具的电动皮卡让人过目难忘。 从2019年首次发布概念车到现在,它经历了无数次延期和设计改进。相似度 0.4893 (文档 #1, 片段 #8):
内容: 福特F-150 Lightning和雪佛兰Silverado EV都在积极扩大产能,这使得电动皮卡市场的竞争更加激烈。 相似度 0.4592 (文档 #1, 片段 #7):
内容: 分析师指出,它的成功与否将直接影响特斯拉在皮卡市场的地位。 目前,它已经开始小批量生产,但产能爬坡面临诸多挑战。 马斯克表示,要到2024年底,它才能实现每周一万台的生产目标。 与此同时,它的竞争对手们也没有闲着。查询: Cybertruck的售价情况如何
--------------------------------------------------=== Late Chunking方法的top 3 结果 ===相似度 0.6429 (文档 #1, 片段 #4):
内容: 特斯拉的Cybertruck终于在2023年底开始交付,这款酷似科幻电影道具的电动皮卡让人过目难忘。 从2019年首次发布概念车到现在,它经历了无数次延期和设计改进。相似度 0.6216 (文档 #1, 片段 #5):
内容: 马斯克称它是一款革命性的产品,因为它采用了创新的不锈钢外壳设计。 然而,这种特殊的材料选择也给它的生产带来了巨大挑战。 据工厂工人透露,它的组装过程异常复杂,每一个焊接点都需要特殊处理。相似度 0.6135 (文档 #0, 片段 #3):
内容: 如今,它正在积极推进GPT-5的研发,据报道,这个新模型的性能将远超现有版本。 业内专家预测,它可能会在明年推出,届时必将再次改变AI行业格局。 === 传统Embedding方法的top 3 结果 ===相似度 0.6210 (文档 #1, 片段 #4):
内容: 特斯拉的Cybertruck终于在2023年底开始交付,这款酷似科幻电影道具的电动皮卡让人过目难忘。 从2019年首次发布概念车到现在,它经历了无数次延期和设计改进。相似度 0.4245 (文档 #1, 片段 #8):
内容: 福特F-150 Lightning和雪佛兰Silverado EV都在积极扩大产能,这使得电动皮卡市场的竞争更加激烈。 相似度 0.4236 (文档 #1, 片段 #6):
内容: 更具争议的是,它的实际售价远超最初承诺的39,900美元起步价。 尽管如此,它仍然吸引了大量订单。 有意思的是,它的外观设计虽然争议不断,但却因其独特性在社交媒体上获得了超高关注度。查询: Cybertruck的竞争对手有哪些
--------------------------------------------------=== Late Chunking方法的top 3 结果 ===相似度 0.5137 (文档 #0, 片段 #3):
内容: 如今,它正在积极推进GPT-5的研发,据报道,这个新模型的性能将远超现有版本。 业内专家预测,它可能会在明年推出,届时必将再次改变AI行业格局。 相似度 0.3770 (文档 #1, 片段 #4):
内容: 特斯拉的Cybertruck终于在2023年底开始交付,这款酷似科幻电影道具的电动皮卡让人过目难忘。 从2019年首次发布概念车到现在,它经历了无数次延期和设计改进。相似度 0.3442 (文档 #1, 片段 #5):
内容: 马斯克称它是一款革命性的产品,因为它采用了创新的不锈钢外壳设计。 然而,这种特殊的材料选择也给它的生产带来了巨大挑战。 据工厂工人透露,它的组装过程异常复杂,每一个焊接点都需要特殊处理。=== 传统Embedding方法的top 3 结果 ===相似度 0.5503 (文档 #1, 片段 #4):
内容: 特斯拉的Cybertruck终于在2023年底开始交付,这款酷似科幻电影道具的电动皮卡让人过目难忘。 从2019年首次发布概念车到现在,它经历了无数次延期和设计改进。相似度 0.4983 (文档 #1, 片段 #8):
内容: 福特F-150 Lightning和雪佛兰Silverado EV都在积极扩大产能,这使得电动皮卡市场的竞争更加激烈。 相似度 0.3635 (文档 #1, 片段 #7):
内容: 分析师指出,它的成功与否将直接影响特斯拉在皮卡市场的地位。 目前,它已经开始小批量生产,但产能爬坡面临诸多挑战。 马斯克表示,要到2024年底,它才能实现每周一万台的生产目标。 与此同时,它的竞争对手们也没有闲着。查询: 说文解字的编撰过程
--------------------------------------------------=== Late Chunking方法的top 3 结果 ===相似度 0.5172 (文档 #1, 片段 #6):
内容: 更具争议的是,它的实际售价远超最初承诺的39,900美元起步价。 尽管如此,它仍然吸引了大量订单。 有意思的是,它的外观设计虽然争议不断,但却因其独特性在社交媒体上获得了超高关注度。相似度 0.0730 (文档 #0, 片段 #1):
内容: 然而,就在这个AI助手风靡全球的时候,公司内部却出现了意想不到的变故。 董事会突然宣布解雇CEO Sam Altman,这一决定在科技界引起轩然大波。 虽然它的这个决定充满争议,但董事会认为这是维护公司使命的必要之举。相似度 0.0692 (文档 #0, 片段 #2):
内容: 有趣的是,在随后的几天里,它又经历了戏剧性的反转。 数百名员工威胁集体辞职,微软对这位被解雇的CEO伸出橄榄枝。 最终,在各方压力下,董事会不得不收回成命。 这一系列事件充分说明,它在AI领域的影响力已经远超一般科技公司。=== 传统Embedding方法的top 3 结果 ===相似度 0.5998 (文档 #2, 片段 #9):
内容: 中国最早的词典《说文解字》对汉字的研究影响深远。 它由东汉许慎编撰完成,前后耗时数十载。 这部巨著不仅系统地分析了汉字的构造原理,更开创了形声字的理论体系。 在古代文人的著作中,它常常被引用作为考据的重要依据。相似度 0.4226 (文档 #2, 片段 #10):
内容: 值得注意的是,它采用了独特的部首分类法,按照540个部首将9353个字分门别类。 这种分类方法影响了后世众多字典的编撰。 宋代的《类篇》就是在它的基础上改进而来。 明清时期,它更是成为了科举考试的必备参考书。相似度 0.3586 (文档 #2, 片段 #11):
内容: 随着时代发展,它的一些观点虽然被现代语言学家质疑,但它对汉字研究的系统性方法仍然具有重要的参考价值。 特别是在考古发现中,它的许多论述都得到了甲骨文和金文的印证。查询: 说文解字的分类方法有什么特点
--------------------------------------------------=== Late Chunking方法的top 3 结果 ===相似度 0.4901 (文档 #1, 片段 #6):
内容: 更具争议的是,它的实际售价远超最初承诺的39,900美元起步价。 尽管如此,它仍然吸引了大量订单。 有意思的是,它的外观设计虽然争议不断,但却因其独特性在社交媒体上获得了超高关注度。相似度 0.0352 (文档 #0, 片段 #0):
内容: OpenAI的发展历程充满戏剧性。 这家公司成立于2015年,最初是作为非营利组织运营。 随着GPT系列模型的推出,它逐渐成为AI领域的领军企业。 特别是在2022年底推出ChatGPT后,它的影响力达到了顶峰。相似度 0.0241 (文档 #0, 片段 #1):
内容: 然而,就在这个AI助手风靡全球的时候,公司内部却出现了意想不到的变故。 董事会突然宣布解雇CEO Sam Altman,这一决定在科技界引起轩然大波。 虽然它的这个决定充满争议,但董事会认为这是维护公司使命的必要之举。=== 传统Embedding方法的top 3 结果 ===相似度 0.4837 (文档 #2, 片段 #9):
内容: 中国最早的词典《说文解字》对汉字的研究影响深远。 它由东汉许慎编撰完成,前后耗时数十载。 这部巨著不仅系统地分析了汉字的构造原理,更开创了形声字的理论体系。 在古代文人的著作中,它常常被引用作为考据的重要依据。相似度 0.4535 (文档 #2, 片段 #10):
内容: 值得注意的是,它采用了独特的部首分类法,按照540个部首将9353个字分门别类。 这种分类方法影响了后世众多字典的编撰。 宋代的《类篇》就是在它的基础上改进而来。 明清时期,它更是成为了科举考试的必备参考书。相似度 0.3776 (文档 #2, 片段 #11):
内容: 随着时代发展,它的一些观点虽然被现代语言学家质疑,但它对汉字研究的系统性方法仍然具有重要的参考价值。 特别是在考古发现中,它的许多论述都得到了甲骨文和金文的印证。查询: 说文解字对后世产生了什么影响
--------------------------------------------------=== Late Chunking方法的top 3 结果 ===相似度 0.5738 (文档 #1, 片段 #6):
内容: 更具争议的是,它的实际售价远超最初承诺的39,900美元起步价。 尽管如此,它仍然吸引了大量订单。 有意思的是,它的外观设计虽然争议不断,但却因其独特性在社交媒体上获得了超高关注度。相似度 0.1519 (文档 #0, 片段 #2):
内容: 有趣的是,在随后的几天里,它又经历了戏剧性的反转。 数百名员工威胁集体辞职,微软对这位被解雇的CEO伸出橄榄枝。 最终,在各方压力下,董事会不得不收回成命。 这一系列事件充分说明,它在AI领域的影响力已经远超一般科技公司。相似度 0.1380 (文档 #0, 片段 #1):
内容: 然而,就在这个AI助手风靡全球的时候,公司内部却出现了意想不到的变故。 董事会突然宣布解雇CEO Sam Altman,这一决定在科技界引起轩然大波。 虽然它的这个决定充满争议,但董事会认为这是维护公司使命的必要之举。=== 传统Embedding方法的top 3 结果 ===相似度 0.6053 (文档 #2, 片段 #9):
内容: 中国最早的词典《说文解字》对汉字的研究影响深远。 它由东汉许慎编撰完成,前后耗时数十载。 这部巨著不仅系统地分析了汉字的构造原理,更开创了形声字的理论体系。 在古代文人的著作中,它常常被引用作为考据的重要依据。相似度 0.4432 (文档 #2, 片段 #11):
内容: 随着时代发展,它的一些观点虽然被现代语言学家质疑,但它对汉字研究的系统性方法仍然具有重要的参考价值。 特别是在考古发现中,它的许多论述都得到了甲骨文和金文的印证。相似度 0.4182 (文档 #2, 片段 #10):
内容: 值得注意的是,它采用了独特的部首分类法,按照540个部首将9353个字分门别类。 这种分类方法影响了后世众多字典的编撰。 宋代的《类篇》就是在它的基础上改进而来。 明清时期,它更是成为了科举考试的必备参考书。

  

让我对测试结果进行分析总结:

1. 查询效果对比

A. 传统Embedding方法表现较好的查询:

  • OpenAI相关查询:结果相关性高,排序合理
  • Cybertruck相关查询:能够准确找到相关段落,特别是竞争对手信息
  • 说文解字相关查询:检索结果准确,上下文连贯

B. Late Chunking方法表现欠佳的问题:

  • 相关性较差:经常返回不相关的内容
  • 排序不合理:有时将不相关内容排在前面
  • 上下文理解不足:对指代词的处理效果不理想

2. 具体案例分析

优秀案例:

查询:"OpenAI董事会解雇CEO的原因是什么"
- 传统方法准确返回了相关段落,相似度0.6042
- 结果包含完整事件描述和上下文
  

 

总体结论

1. 当前实现中,传统Embedding方法整体表现优于Late Chunking方法 

2.  Late Chunking需要重大改进才能实现预期效果

3. 建议短期内使用传统方法,同时对Late Chunking进行优化

 

我担心自己冤枉了late chunking这一技术,毕竟jina官方也推得很认真。所以我再度做了一个实验,利用国内较好的BGE embedding来进行这个实验,代码如下:

import os
import json
import torch
import numpy as npimport spacy
from spacy.tokens import Doc
from spacy.language import Languageimport transformers
from transformers import AutoModel
from transformers import AutoTokenizerdef sentence_chunker(document, batch_size=128):"""修改分块策略,使用更合理的分句方式"""nlp = spacy.blank("zh")  # 改用中文模型nlp.add_pipe("sentencizer")# 使用更细粒度的分句规则doc = nlp(document)chunks = []span_annotations = []current_chunk = []current_start = 0for sent in doc.sents:# 如果当前句子加入后长度合适,就加入当前chunkif len(''.join(current_chunk)) + len(sent.text) < batch_size:current_chunk.append(sent.text)else:# 否则保存当前chunk并开始新的chunkif current_chunk:text = ' '.join(current_chunk)chunks.append(text)span_annotations.append((current_start, len(text)))current_start = len(text) + 1current_chunk = [sent.text]# 处理最后一个chunkif current_chunk:text = ' '.join(current_chunk)chunks.append(text)span_annotations.append((current_start, len(text)))return chunks, span_annotationsdef sentence_chunker2(document, batch_size=10000):"""Given a document (string), return the sentences as chunks and span annotations (start and end indices of chunks).Using spacy to do this sentence chunking."""# Batch with spacynlp = spacy.blank("en")nlp.add_pipe("sentencizer", config={"punct_chars": None})doc = nlp(document)docs = []for i in range(0, len(document), batch_size):batch = document[i: i + batch_size]docs.append(nlp(batch))doc = Doc.from_docs(docs)span_annotations = []chunks = []for i, sent in enumerate(doc.sents):span_annotations.append((sent.start, sent.end))chunks.append(sent.text)return chunks, span_annotationsdef late_chunking(token_embeddings, span_annotation, max_length=None):"""Given the token-level embeddings of document and their corresponding span annotations (start and end indices of chunks in terms of tokens),late chunking pools the token embeddings for each chunk."""outputs = []for embeddings, annotations in zip(token_embeddings, span_annotation):if (max_length is not None):  # remove annotations which go beyond the max-length of the modelannotations = [(start, min(end, max_length - 1))for (start, end) in annotationsif start < (max_length - 1)]pooled_embeddings = []for start, end in annotations:if (end - start) >= 1:pooled_embeddings.append(embeddings[start:end].sum(dim=0) / (end - start))# print("pooled_embeddings:", pooled_embeddings)pooled_embeddings = [embedding.numpy() for embedding in pooled_embeddings]outputs.append(pooled_embeddings)return outputsdef document_to_token_embeddings(model, tokenizer, document, batch_size=4096):"""Given a BERT model and tokenizer, return token embeddings of the input text document."""if batch_size > 8192:raise ValueError("Batch size is too large. Please use a batch size of 8192 or less.")# BERT tokenizer doesn't have .tokens() method, so we need to modify thistokenized_document = tokenizer(document, return_tensors="pt", add_special_tokens=True)input_ids = tokenized_document['input_ids']# Batch processingoutputs = []for i in range(0, input_ids.size(1), batch_size):start = iend = min(i + batch_size, input_ids.size(1))# subset inputs for current batchbatch_inputs = {k: v[:, start:end] for k, v in tokenized_document.items()}with torch.no_grad():model_output = model(**batch_inputs)outputs.append(model_output.last_hidden_state)return torch.cat(outputs, dim=1)# tokenizer = AutoTokenizer.from_pretrained('jinaai/jina-embeddings-v2-base-zh', trust_remote_code=True)
# model = AutoModel.from_pretrained('jinaai/jina-embeddings-v2-base-zh', trust_remote_code=True)from transformers import BertModel, BertTokenizer
# 加载预训练的 BERT 模型和 tokenizer
model_name = 'bert-base-uncased'
model_name = r"D:\source\pythonProject\bge-base-zh-v1.5"
tokenizer = BertTokenizer.from_pretrained(model_name)
model = BertModel.from_pretrained(model_name)import numpy as npcos_sim = lambda x, y: np.dot(x, y) / (np.linalg.norm(x) * np.linalg.norm(y))def encode_text(model, tokenizer, texts):"""Encode texts using BERT model"""if isinstance(texts, str):texts = [texts]embeddings = []with torch.no_grad():for text in texts:# Tokenize and encodeinputs = tokenizer(text,return_tensors="pt",padding=True,truncation=True,max_length=512)# Get model outputoutputs = model(**inputs)# Use mean poolingembedding = outputs.last_hidden_state.mean(dim=1).cpu().numpy()embeddings.append(embedding[0])return np.array(embeddings)print("*"*88)
context_test_documents = ["""OpenAI的发展历程充满戏剧性。这家公司成立于2015年,最初是作为非营利组织运营。随着GPT系列模型的推出,它逐渐成为AI领域的领军企业。特别是在2022年底推出ChatGPT后,它的影响力达到了顶峰。然而,就在这个AI助手风靡全球的时候,公司内部却出现了意想不到的变故。董事会突然宣布解雇CEO Sam Altman,这一决定在科技界引起轩然大波。虽然它的这个决定充满争议,但董事会认为这是维护公司使命的必要之举。有趣的是,在随后的几天里,它又经历了戏剧性的反转。数百名员工威胁集体辞职,微软对这位被解雇的CEO伸出橄榄枝。最终,在各方压力下,董事会不得不收回成命。这一系列事件充分说明,它在AI领域的影响力已经远超一般科技公司。如今,它正在积极推进GPT-5的研发,据报道,这个新模型的性能将远超现有版本。业内专家预测,它可能会在明年推出,届时必将再次改变AI行业格局。""","""特斯拉的Cybertruck终于在2023年底开始交付,这款酷似科幻电影道具的电动皮卡让人过目难忘。从2019年首次发布概念车到现在,它经历了无数次延期和设计改进。马斯克称它是一款革命性的产品,因为它采用了创新的不锈钢外壳设计。然而,这种特殊的材料选择也给它的生产带来了巨大挑战。据工厂工人透露,它的组装过程异常复杂,每一个焊接点都需要特殊处理。更具争议的是,它的实际售价远超最初承诺的39,900美元起步价。尽管如此,它仍然吸引了大量订单。有意思的是,它的外观设计虽然争议不断,但却因其独特性在社交媒体上获得了超高关注度。分析师指出,它的成功与否将直接影响特斯拉在皮卡市场的地位。目前,它已经开始小批量生产,但产能爬坡面临诸多挑战。马斯克表示,要到2024年底,它才能实现每周一万台的生产目标。与此同时,它的竞争对手们也没有闲着。福特F-150 Lightning和雪佛兰Silverado EV都在积极扩大产能,这使得电动皮卡市场的竞争更加激烈。""","""中国最早的词典《说文解字》对汉字的研究影响深远。它由东汉许慎编撰完成,前后耗时数十载。这部巨著不仅系统地分析了汉字的构造原理,更开创了形声字的理论体系。在古代文人的著作中,它常常被引用作为考据的重要依据。值得注意的是,它采用了独特的部首分类法,按照540个部首将9353个字分门别类。这种分类方法影响了后世众多字典的编撰。宋代的《类篇》就是在它的基础上改进而来。明清时期,它更是成为了科举考试的必备参考书。随着时代发展,它的一些观点虽然被现代语言学家质疑,但它对汉字研究的系统性方法仍然具有重要的参考价值。特别是在考古发现中,它的许多论述都得到了甲骨文和金文的印证。现代学者在研究它的时候发现,许多当时被认为是臆测的字源解释,竟然与后来出土的古文字材料相吻合。这种惊人的准确性,使得它在数字化时代依然保持着极高的学术价值。近年来,随着人工智能技术的发展,它的数字化版本为计算机处理古文献提供了重要依据。""",
]# 测试查询,特别关注指代词相关的上下文
test_queries = [# OpenAI相关查询"OpenAI董事会解雇CEO的原因是什么","OpenAI在AI领域的影响力体现在哪里",  # 指代OpenAI"董事会的决定造成了什么后果",# Cybertruck相关查询"Cybertruck的生产面临什么挑战","Cybertruck的售价情况如何",  # 指代Cybertruck"Cybertruck的竞争对手有哪些",  # 指代Cybertruck# 说文解字相关查询"说文解字的编撰过程","说文解字的分类方法有什么特点",  # 指代说文解字"说文解字对后世产生了什么影响"  # 指代说文解字
]def process_all_documents(documents):"""处理所有文档,返回所有chunks和对应的embeddings"""all_chunks = []all_chunk_embeddings = []  # Late Chunking方法的embeddingsall_traditional_embeddings = []  # 传统方法的embeddingsdoc_boundaries = []  # 记录每个文档的起始位置start_idx = 0for doc in documents:print(f"\n处理文档 (前100字): {doc[:100]}...\n")# Late chunking 处理chunks, span_annotations = sentence_chunker(doc)token_embeddings = document_to_token_embeddings(model, tokenizer, doc)chunk_embeddings = late_chunking(token_embeddings, [span_annotations])[0]# 传统方法的embeddingstraditional_embeddings = encode_text(model, tokenizer, chunks)# 保存结果all_chunks.extend(chunks)all_chunk_embeddings.extend(chunk_embeddings)all_traditional_embeddings.extend(traditional_embeddings)# 记录文档边界doc_boundaries.append((start_idx, start_idx + len(chunks)))start_idx += len(chunks)print(f"文档被分割成 {len(chunks)} 个片段")return all_chunks, all_chunk_embeddings, all_traditional_embeddings, doc_boundariesdef search_across_documents(query, chunks, chunk_embeddings, traditional_embeddings, top_k=3):"""在所有文档中搜索相关内容"""# 获取查询的embeddingquery_embedding = encode_text(model, tokenizer, query)[0]# Late Chunking方法的相似度计算late_chunking_similarities = []for i, (chunk, emb) in enumerate(zip(chunks, chunk_embeddings)):sim = cos_sim(query_embedding, emb)late_chunking_similarities.append((sim, chunk, i))# 传统方法的相似度计算traditional_similarities = []for i, (chunk, emb) in enumerate(zip(chunks, traditional_embeddings)):sim = cos_sim(query_embedding, emb)traditional_similarities.append((sim, chunk, i))return (sorted(late_chunking_similarities, reverse=True)[:top_k],sorted(traditional_similarities, reverse=True)[:top_k])def context_understanding_with_references(documents, queries, top_k=3):"""主函数:处理所有文档并执行查询"""print("\n===== 开始处理所有文档 =====")# 处理所有文档all_chunks, all_chunk_embeddings, all_traditional_embeddings, doc_boundaries = process_all_documents(documents)print(f"\n总共处理了 {len(documents)} 个文档,产生了 {len(all_chunks)} 个文本片段")# 执行查询for query in queries:print(f"\n\n查询: {query}")print("-" * 50)# 在所有文档中搜索late_results, trad_results = search_across_documents(query,all_chunks,all_chunk_embeddings,all_traditional_embeddings,top_k)# 显示Late Chunking结果print(f"\n=== Late Chunking方法的top {top_k} 结果 ===")for sim, chunk, idx in late_results:# 找出该chunk属于哪个文档doc_id = next(i for i, (start, end) in enumerate(doc_boundaries) if start <= idx < end)print(f"\n相似度 {sim:.4f} (文档 #{doc_id}, 片段 #{idx}):")print(f"内容: {chunk}")# 显示传统方法结果print(f"\n=== 传统Embedding方法的top {top_k} 结果 ===")for sim, chunk, idx in trad_results:doc_id = next(i for i, (start, end) in enumerate(doc_boundaries) if start <= idx < end)print(f"\n相似度 {sim:.4f} (文档 #{doc_id}, 片段 #{idx}):")print(f"内容: {chunk}")# 使用示例
if __name__ == "__main__":context_understanding_with_references(context_test_documents, test_queries, top_k=3)

  

当然,思想还是late chunking,无非使用了中文支持较好的BGE模型。

看看结果返回:

===== 开始处理所有文档 =====处理文档 (前100字): OpenAI的发展历程充满戏剧性。这家公司成立于2015年,最初是作为非营利组织运营。随着GPT系列模型的推出,它逐渐成为AI领域的领军企业。特别是在2022年底推出ChatGPT...文档被分割成 4 个片段处理文档 (前100字): 特斯拉的Cybertruck终于在2023年底开始交付,这款酷似科幻电影道具的电动皮卡让人过目难忘。从2019年首次发布概念车到现在,它经历了无数次延期和设计改进。马斯克称它是一款...文档被分割成 5 个片段处理文档 (前100字): 中国最早的词典《说文解字》对汉字的研究影响深远。它由东汉许慎编撰完成,前后耗时数十载。这部巨著不仅系统地分析了汉字的构造原理,更开创了形声字的理论体系。在古代文人的著作中,它常常被...文档被分割成 5 个片段总共处理了 3 个文档,产生了 14 个文本片段查询: OpenAI董事会解雇CEO的原因是什么
--------------------------------------------------=== Late Chunking方法的top 3 结果 ===相似度 0.5981 (文档 #0, 片段 #0):
内容: OpenAI的发展历程充满戏剧性。 这家公司成立于2015年,最初是作为非营利组织运营。 随着GPT系列模型的推出,它逐渐成为AI领域的领军企业。 特别是在2022年底推出ChatGPT后,它的影响力达到了顶峰。相似度 0.5306 (文档 #0, 片段 #3):
内容: 如今,它正在积极推进GPT-5的研发,据报道,这个新模型的性能将远超现有版本。 业内专家预测,它可能会在明年推出,届时必将再次改变AI行业格局。 相似度 0.5294 (文档 #0, 片段 #2):
内容: 有趣的是,在随后的几天里,它又经历了戏剧性的反转。 数百名员工威胁集体辞职,微软对这位被解雇的CEO伸出橄榄枝。 最终,在各方压力下,董事会不得不收回成命。 这一系列事件充分说明,它在AI领域的影响力已经远超一般科技公司。=== 传统Embedding方法的top 3 结果 ===相似度 0.7200 (文档 #0, 片段 #1):
内容: 然而,就在这个AI助手风靡全球的时候,公司内部却出现了意想不到的变故。 董事会突然宣布解雇CEO Sam Altman,这一决定在科技界引起轩然大波。 虽然它的这个决定充满争议,但董事会认为这是维护公司使命的必要之举。相似度 0.6566 (文档 #0, 片段 #0):
内容: OpenAI的发展历程充满戏剧性。 这家公司成立于2015年,最初是作为非营利组织运营。 随着GPT系列模型的推出,它逐渐成为AI领域的领军企业。 特别是在2022年底推出ChatGPT后,它的影响力达到了顶峰。相似度 0.6288 (文档 #0, 片段 #2):
内容: 有趣的是,在随后的几天里,它又经历了戏剧性的反转。 数百名员工威胁集体辞职,微软对这位被解雇的CEO伸出橄榄枝。 最终,在各方压力下,董事会不得不收回成命。 这一系列事件充分说明,它在AI领域的影响力已经远超一般科技公司。查询: OpenAI在AI领域的影响力体现在哪里
--------------------------------------------------=== Late Chunking方法的top 3 结果 ===相似度 0.6719 (文档 #0, 片段 #0):
内容: OpenAI的发展历程充满戏剧性。 这家公司成立于2015年,最初是作为非营利组织运营。 随着GPT系列模型的推出,它逐渐成为AI领域的领军企业。 特别是在2022年底推出ChatGPT后,它的影响力达到了顶峰。相似度 0.5725 (文档 #0, 片段 #2):
内容: 有趣的是,在随后的几天里,它又经历了戏剧性的反转。 数百名员工威胁集体辞职,微软对这位被解雇的CEO伸出橄榄枝。 最终,在各方压力下,董事会不得不收回成命。 这一系列事件充分说明,它在AI领域的影响力已经远超一般科技公司。相似度 0.5650 (文档 #0, 片段 #1):
内容: 然而,就在这个AI助手风靡全球的时候,公司内部却出现了意想不到的变故。 董事会突然宣布解雇CEO Sam Altman,这一决定在科技界引起轩然大波。 虽然它的这个决定充满争议,但董事会认为这是维护公司使命的必要之举。=== 传统Embedding方法的top 3 结果 ===相似度 0.7341 (文档 #0, 片段 #0):
内容: OpenAI的发展历程充满戏剧性。 这家公司成立于2015年,最初是作为非营利组织运营。 随着GPT系列模型的推出,它逐渐成为AI领域的领军企业。 特别是在2022年底推出ChatGPT后,它的影响力达到了顶峰。相似度 0.6930 (文档 #0, 片段 #3):
内容: 如今,它正在积极推进GPT-5的研发,据报道,这个新模型的性能将远超现有版本。 业内专家预测,它可能会在明年推出,届时必将再次改变AI行业格局。 相似度 0.6772 (文档 #2, 片段 #13):
内容: 近年来,随着人工智能技术的发展,它的数字化版本为计算机处理古文献提供了重要依据。 查询: 董事会的决定造成了什么后果
--------------------------------------------------=== Late Chunking方法的top 3 结果 ===相似度 0.4989 (文档 #0, 片段 #0):
内容: OpenAI的发展历程充满戏剧性。 这家公司成立于2015年,最初是作为非营利组织运营。 随着GPT系列模型的推出,它逐渐成为AI领域的领军企业。 特别是在2022年底推出ChatGPT后,它的影响力达到了顶峰。相似度 0.4933 (文档 #0, 片段 #3):
内容: 如今,它正在积极推进GPT-5的研发,据报道,这个新模型的性能将远超现有版本。 业内专家预测,它可能会在明年推出,届时必将再次改变AI行业格局。 相似度 0.4831 (文档 #1, 片段 #6):
内容: 更具争议的是,它的实际售价远超最初承诺的39,900美元起步价。 尽管如此,它仍然吸引了大量订单。 有意思的是,它的外观设计虽然争议不断,但却因其独特性在社交媒体上获得了超高关注度。=== 传统Embedding方法的top 3 结果 ===相似度 0.6304 (文档 #0, 片段 #1):
内容: 然而,就在这个AI助手风靡全球的时候,公司内部却出现了意想不到的变故。 董事会突然宣布解雇CEO Sam Altman,这一决定在科技界引起轩然大波。 虽然它的这个决定充满争议,但董事会认为这是维护公司使命的必要之举。相似度 0.5970 (文档 #0, 片段 #2):
内容: 有趣的是,在随后的几天里,它又经历了戏剧性的反转。 数百名员工威胁集体辞职,微软对这位被解雇的CEO伸出橄榄枝。 最终,在各方压力下,董事会不得不收回成命。 这一系列事件充分说明,它在AI领域的影响力已经远超一般科技公司。相似度 0.5661 (文档 #1, 片段 #6):
内容: 更具争议的是,它的实际售价远超最初承诺的39,900美元起步价。 尽管如此,它仍然吸引了大量订单。 有意思的是,它的外观设计虽然争议不断,但却因其独特性在社交媒体上获得了超高关注度。查询: Cybertruck的生产面临什么挑战
--------------------------------------------------=== Late Chunking方法的top 3 结果 ===相似度 0.6323 (文档 #0, 片段 #3):
内容: 如今,它正在积极推进GPT-5的研发,据报道,这个新模型的性能将远超现有版本。 业内专家预测,它可能会在明年推出,届时必将再次改变AI行业格局。 相似度 0.5932 (文档 #1, 片段 #4):
内容: 特斯拉的Cybertruck终于在2023年底开始交付,这款酷似科幻电影道具的电动皮卡让人过目难忘。 从2019年首次发布概念车到现在,它经历了无数次延期和设计改进。相似度 0.5794 (文档 #1, 片段 #5):
内容: 马斯克称它是一款革命性的产品,因为它采用了创新的不锈钢外壳设计。 然而,这种特殊的材料选择也给它的生产带来了巨大挑战。 据工厂工人透露,它的组装过程异常复杂,每一个焊接点都需要特殊处理。=== 传统Embedding方法的top 3 结果 ===相似度 0.6817 (文档 #1, 片段 #5):
内容: 马斯克称它是一款革命性的产品,因为它采用了创新的不锈钢外壳设计。 然而,这种特殊的材料选择也给它的生产带来了巨大挑战。 据工厂工人透露,它的组装过程异常复杂,每一个焊接点都需要特殊处理。相似度 0.6813 (文档 #1, 片段 #4):
内容: 特斯拉的Cybertruck终于在2023年底开始交付,这款酷似科幻电影道具的电动皮卡让人过目难忘。 从2019年首次发布概念车到现在,它经历了无数次延期和设计改进。相似度 0.6601 (文档 #1, 片段 #7):
内容: 分析师指出,它的成功与否将直接影响特斯拉在皮卡市场的地位。 目前,它已经开始小批量生产,但产能爬坡面临诸多挑战。 马斯克表示,要到2024年底,它才能实现每周一万台的生产目标。 与此同时,它的竞争对手们也没有闲着。查询: Cybertruck的售价情况如何
--------------------------------------------------=== Late Chunking方法的top 3 结果 ===相似度 0.6310 (文档 #0, 片段 #3):
内容: 如今,它正在积极推进GPT-5的研发,据报道,这个新模型的性能将远超现有版本。 业内专家预测,它可能会在明年推出,届时必将再次改变AI行业格局。 相似度 0.5791 (文档 #1, 片段 #4):
内容: 特斯拉的Cybertruck终于在2023年底开始交付,这款酷似科幻电影道具的电动皮卡让人过目难忘。 从2019年首次发布概念车到现在,它经历了无数次延期和设计改进。相似度 0.5671 (文档 #1, 片段 #5):
内容: 马斯克称它是一款革命性的产品,因为它采用了创新的不锈钢外壳设计。 然而,这种特殊的材料选择也给它的生产带来了巨大挑战。 据工厂工人透露,它的组装过程异常复杂,每一个焊接点都需要特殊处理。=== 传统Embedding方法的top 3 结果 ===相似度 0.6763 (文档 #1, 片段 #4):
内容: 特斯拉的Cybertruck终于在2023年底开始交付,这款酷似科幻电影道具的电动皮卡让人过目难忘。 从2019年首次发布概念车到现在,它经历了无数次延期和设计改进。相似度 0.6529 (文档 #1, 片段 #6):
内容: 更具争议的是,它的实际售价远超最初承诺的39,900美元起步价。 尽管如此,它仍然吸引了大量订单。 有意思的是,它的外观设计虽然争议不断,但却因其独特性在社交媒体上获得了超高关注度。相似度 0.6220 (文档 #1, 片段 #8):
内容: 福特F-150 Lightning和雪佛兰Silverado EV都在积极扩大产能,这使得电动皮卡市场的竞争更加激烈。 查询: Cybertruck的竞争对手有哪些
--------------------------------------------------=== Late Chunking方法的top 3 结果 ===相似度 0.6285 (文档 #0, 片段 #3):
内容: 如今,它正在积极推进GPT-5的研发,据报道,这个新模型的性能将远超现有版本。 业内专家预测,它可能会在明年推出,届时必将再次改变AI行业格局。 相似度 0.5820 (文档 #1, 片段 #4):
内容: 特斯拉的Cybertruck终于在2023年底开始交付,这款酷似科幻电影道具的电动皮卡让人过目难忘。 从2019年首次发布概念车到现在,它经历了无数次延期和设计改进。相似度 0.5783 (文档 #1, 片段 #5):
内容: 马斯克称它是一款革命性的产品,因为它采用了创新的不锈钢外壳设计。 然而,这种特殊的材料选择也给它的生产带来了巨大挑战。 据工厂工人透露,它的组装过程异常复杂,每一个焊接点都需要特殊处理。=== 传统Embedding方法的top 3 结果 ===相似度 0.6663 (文档 #1, 片段 #8):
内容: 福特F-150 Lightning和雪佛兰Silverado EV都在积极扩大产能,这使得电动皮卡市场的竞争更加激烈。 相似度 0.6540 (文档 #1, 片段 #4):
内容: 特斯拉的Cybertruck终于在2023年底开始交付,这款酷似科幻电影道具的电动皮卡让人过目难忘。 从2019年首次发布概念车到现在,它经历了无数次延期和设计改进。相似度 0.6535 (文档 #0, 片段 #3):
内容: 如今,它正在积极推进GPT-5的研发,据报道,这个新模型的性能将远超现有版本。 业内专家预测,它可能会在明年推出,届时必将再次改变AI行业格局。 查询: 说文解字的编撰过程
--------------------------------------------------=== Late Chunking方法的top 3 结果 ===相似度 0.6251 (文档 #1, 片段 #6):
内容: 更具争议的是,它的实际售价远超最初承诺的39,900美元起步价。 尽管如此,它仍然吸引了大量订单。 有意思的是,它的外观设计虽然争议不断,但却因其独特性在社交媒体上获得了超高关注度。相似度 0.5181 (文档 #0, 片段 #3):
内容: 如今,它正在积极推进GPT-5的研发,据报道,这个新模型的性能将远超现有版本。 业内专家预测,它可能会在明年推出,届时必将再次改变AI行业格局。 相似度 0.5180 (文档 #0, 片段 #0):
内容: OpenAI的发展历程充满戏剧性。 这家公司成立于2015年,最初是作为非营利组织运营。 随着GPT系列模型的推出,它逐渐成为AI领域的领军企业。 特别是在2022年底推出ChatGPT后,它的影响力达到了顶峰。=== 传统Embedding方法的top 3 结果 ===相似度 0.6956 (文档 #2, 片段 #9):
内容: 中国最早的词典《说文解字》对汉字的研究影响深远。 它由东汉许慎编撰完成,前后耗时数十载。 这部巨著不仅系统地分析了汉字的构造原理,更开创了形声字的理论体系。 在古代文人的著作中,它常常被引用作为考据的重要依据。相似度 0.6843 (文档 #2, 片段 #12):
内容: 现代学者在研究它的时候发现,许多当时被认为是臆测的字源解释,竟然与后来出土的古文字材料相吻合。 这种惊人的准确性,使得它在数字化时代依然保持着极高的学术价值。相似度 0.6829 (文档 #2, 片段 #13):
内容: 近年来,随着人工智能技术的发展,它的数字化版本为计算机处理古文献提供了重要依据。 查询: 说文解字的分类方法有什么特点
--------------------------------------------------=== Late Chunking方法的top 3 结果 ===相似度 0.6300 (文档 #1, 片段 #6):
内容: 更具争议的是,它的实际售价远超最初承诺的39,900美元起步价。 尽管如此,它仍然吸引了大量订单。 有意思的是,它的外观设计虽然争议不断,但却因其独特性在社交媒体上获得了超高关注度。相似度 0.5506 (文档 #0, 片段 #3):
内容: 如今,它正在积极推进GPT-5的研发,据报道,这个新模型的性能将远超现有版本。 业内专家预测,它可能会在明年推出,届时必将再次改变AI行业格局。 相似度 0.5406 (文档 #0, 片段 #0):
内容: OpenAI的发展历程充满戏剧性。 这家公司成立于2015年,最初是作为非营利组织运营。 随着GPT系列模型的推出,它逐渐成为AI领域的领军企业。 特别是在2022年底推出ChatGPT后,它的影响力达到了顶峰。=== 传统Embedding方法的top 3 结果 ===相似度 0.6995 (文档 #2, 片段 #10):
内容: 值得注意的是,它采用了独特的部首分类法,按照540个部首将9353个字分门别类。 这种分类方法影响了后世众多字典的编撰。 宋代的《类篇》就是在它的基础上改进而来。 明清时期,它更是成为了科举考试的必备参考书。相似度 0.6718 (文档 #2, 片段 #9):
内容: 中国最早的词典《说文解字》对汉字的研究影响深远。 它由东汉许慎编撰完成,前后耗时数十载。 这部巨著不仅系统地分析了汉字的构造原理,更开创了形声字的理论体系。 在古代文人的著作中,它常常被引用作为考据的重要依据。相似度 0.6548 (文档 #2, 片段 #13):
内容: 近年来,随着人工智能技术的发展,它的数字化版本为计算机处理古文献提供了重要依据。 查询: 说文解字对后世产生了什么影响
--------------------------------------------------=== Late Chunking方法的top 3 结果 ===相似度 0.5945 (文档 #1, 片段 #6):
内容: 更具争议的是,它的实际售价远超最初承诺的39,900美元起步价。 尽管如此,它仍然吸引了大量订单。 有意思的是,它的外观设计虽然争议不断,但却因其独特性在社交媒体上获得了超高关注度。相似度 0.5012 (文档 #0, 片段 #3):
内容: 如今,它正在积极推进GPT-5的研发,据报道,这个新模型的性能将远超现有版本。 业内专家预测,它可能会在明年推出,届时必将再次改变AI行业格局。 相似度 0.4948 (文档 #0, 片段 #0):
内容: OpenAI的发展历程充满戏剧性。 这家公司成立于2015年,最初是作为非营利组织运营。 随着GPT系列模型的推出,它逐渐成为AI领域的领军企业。 特别是在2022年底推出ChatGPT后,它的影响力达到了顶峰。=== 传统Embedding方法的top 3 结果 ===相似度 0.6962 (文档 #2, 片段 #12):
内容: 现代学者在研究它的时候发现,许多当时被认为是臆测的字源解释,竟然与后来出土的古文字材料相吻合。 这种惊人的准确性,使得它在数字化时代依然保持着极高的学术价值。相似度 0.6864 (文档 #2, 片段 #11):
内容: 随着时代发展,它的一些观点虽然被现代语言学家质疑,但它对汉字研究的系统性方法仍然具有重要的参考价值。 特别是在考古发现中,它的许多论述都得到了甲骨文和金文的印证。相似度 0.6761 (文档 #2, 片段 #13):
内容: 近年来,随着人工智能技术的发展,它的数字化版本为计算机处理古文献提供了重要依据。 

  

看最后一个结果:

查询: 说文解字对后世产生了什么影响
--------------------------------------------------

=== Late Chunking方法的top 3 结果 ===

相似度 0.5945 (文档 #1, 片段 #6):
内容: 更具争议的是,它的实际售价远超最初承诺的39,900美元起步价。
尽管如此,它仍然吸引了大量订单。 有意思的是,它的外观设计虽然争议不断,但却因其独特性在社交媒体上
获得了超高关注度。

相似度 0.5012 (文档 #0, 片段 #3):
内容:
如今,它正在积极推进GPT-5的研发,据报道,这个新模型的性能将远超现有版本。 业内专家预测,它可能会在
明年推出,届时必将再次改变AI行业格局。

相似度 0.4948 (文档 #0, 片段 #0):
内容:
OpenAI的发展历程充满戏剧性。 这家公司成立于2015年,最初是作为非营利组织运营。 随着GPT系列模型的推出,
它逐渐成为AI领域的领军企业。 特别是在2022年底推出ChatGPT后,它的影响力达到了顶峰。

=== 传统Embedding方法的top 3 结果 ===

相似度 0.6962 (文档 #2, 片段 #12):
内容: 现代学者在研究它的时候发现,许多当时被
认为是臆测的字源解释,竟然与后来出土的古文字材料相吻合。 这种惊人的准确性,使得它在数字化时代依然
保持着极高的学术价值。

相似度 0.6864 (文档 #2, 片段 #11):
内容:
随着时代发展,它的一些观点虽然被现代语言学家质疑,但它对汉字研究的系统性方法仍然具有重要的参考价值。
特别是在考古发现中,它的许多论述都得到了甲骨文和金文的印证。

相似度 0.6761 (文档 #2, 片段 #13):
内容: 近年来,随着人工智能技术的发展,它的数字化版本为计算机处理古文献提供了重要依据。

 

结论几乎和前面的一样,late chunking并没有预计的那么好。

 

参考:

https://mp.weixin.qq.com/s/I69YEZZl9EGtFH-c4vcQVw 文章专门提到了late chunking的英文比较

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/837272.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新兴数据仓库设计与实践手册:从分层架构到实际应用(二)

本手册将分为三部分发布,以帮助读者逐步深入理解数据仓库的设计与实践。第一部分介绍数据仓库的整体架构概述; 第二部分深入讨论ETL在数仓中的应用理论,ODS层的具体实现与应用; 第三部分将围绕DW数据仓库层、ADS层和数据仓库的整体趋势展开;通过这样的结构,您可以系统地学…

【跟着阿舜学音乐-笔记】1.14代理和弦

三和弦代理和弦 代理和弦是指两个和弦从功能上能够相互替代,彼此代替对方执行相互的功能。 这意味着互为代理和弦的两个和弦在功能上有一定的互通性,这就是1.12提到的——拥有两个以上共同音的称为代理和弦。 同时,这种功能上的共通性也有着一定的强弱,在同属关系下,关系大…

TCP/UDP套接字基础编程及拓展

本文章旨在进行TCP/UDP基础套接字编程并在其基础上进行更新拓展。一、环境 1.1 客户端:windows宿主机 1.2 服务器端:Linux虚拟机 1.3 注意事项 测试套接字编程通信时,先确保C/S能互相ping通,且双方主机防火墙允许目的端口号为“创建的端口号”的数据包通过。 二、代码 2…

6款Win电脑高效实用办公软件推荐

作为打工人,是不是总觉得工作效率提不上去呢?今天我就来给大家分享 6 款办公超实用的软件,让你的工作事半功倍! 一、WPS 比office更适合职场小白上手的办公软件!它涵盖了文字、表格、演示等多种功能。写文档时,丰富的模板库能让你快速找到灵感,各种排版和编辑工具一应俱…

bladeX物联网平台私库操作处理步骤

(一)获取对方私库代码并上传到自己的gitlab 步骤 1: 克隆对方的私有仓库 首先,您需要在本地计算机上克隆对方的私有仓库。这通常需要使用HTTPS或SSH URL,并且可能需要身份验证(如用户名和密码、SSH密钥等)。# 假设您已经配置了SSH密钥或知道HTTPS的用户名和密码 git cl…

震撼推荐!性能测试全攻略:零基础也能玩转性能测试!

1、提起性能测试,你的第一反应是什么? 当提到性能测试,你的第一反应是什么?是不屑一顾,认为它很简单,没发展前途、没技术含量?还是觉得它太难了,高不可攀,每当遇到系统的疑难杂症时,抓耳挠腮,无从下手? 很多IT从业人员,认为"性能测试仅仅只是测试的工作,会用…

不同类型的OA办公系统分别有什么作用?

不知道大家有没有发现,在不知不觉间,OA(Office Automation)办公系统的应用已经发展得越来越广泛,可以说是涉及到工作的方方面面。你们想过这是为什么吗? 因为OA办公系统不仅提高了工作效率,还优化了企业的管理流程。随着科技的不断进步,OA办公系统的类型也日益丰富,满…

React+AntD Table支持下拉分页和自定义输入分页条数

实例支持在下拉分页框内输入分页条数来实现自定义分页代码usePageSizeSelect.jsimport {useEffect, useState} from "react"; import Bus from "../../utils/eventBus";export function usePageSizeSelect() {const onInputKeyDown = (e) => {const tem…

LeetCode 2455[可被三整除的偶数平均值]

LeetCode 2455[可被三整除的偶数平均值]题目 链接 LeetCode 2455[可被三整除的偶数平均值] 详情实例提示题解 思路 遍历容器,for 循环遍历,vector 的 at 方法取元素值 判断能否被3整除,不能则继续遍历 能被3整除则判断能否被2整除,即判断奇偶性,不能被2整除,即为奇数则继…

Microsoft.Extensions.AI 初探

本文介绍了Microsoft.Extensions.AI的基本使用。.NET Conf上的介绍 在今年的.NET Conf上Steve Sanderson带来了题为“AI Building Blocks - A new, unified AI layer”的演讲。该演讲的主要内容如下: “大多数.NET应用程序可以通过AI功能变得更加强大和高效,例如语义搜索、自…

如何确定合适的绩效考核周期和频率?

绩效考核周期的确定需要根据企业的实际情况、不同岗位的特殊性、考核指标的性质及考核标准的不同进行综合考虑。 1、一般来说,管理层级越高的岗位,其考核周期也应该设置得相对较长 2、绩效考核周期过短会增加企业的管理成本;过长又会降低绩效考核数据的准确性比如,销售人员…