问题验证
- 我已经在文档和discord上寻找答案。
问题
你好,
我有一个关于嵌入的问题,当我使用.retrieve时,我得到了一个NodeWithScore的列表,但是嵌入总是设置为None。我想知道为什么?
以下是我创建检索器的代码:
index = VectorStoreIndex.from_documents([doc], embed_model=embedding_model, transformations=[TokenTextSplitter(
chunk_size=128, chunk_overlap=50, id_func=my_id_func
)] )
base_retriever = VectorIndexRetriever(
index=index,
similarity_top_k=15,
)
r = base_retriever.retrieve(query)
1条答案
按热度按时间m528fe3b1#
你好,@Shiro-LK!我在这里帮助你解决任何问题或疑问。我是一个可以帮助你解决bug、回答问题的机器人。让我们一起解决这个问题!
在
.retrieve
方法返回的NodeTextWithScore
对象中,嵌入始终设置为None
的原因是,VectorIndexRetriever
类在其构造的NodeWithScore
对象中不包含嵌入。负责创建NodeWithScore
对象列表的_build_node_list_from_query_result
方法没有设置嵌入属性。以下是相关代码:
如您所见,
NodeWithScore
对象仅使用node
和score
属性创建,而embedding
属性未设置。要包含嵌入,您需要修改
_build_node_list_from_query_result
方法,以便在NodeWithScore
对象中设置embedding
属性。然而,这需要访问来自query_result
的嵌入。如果您需要嵌入被包含,您可能需要扩展
VectorIndexRetriever
类的功能,或者在应用程序逻辑中单独处理嵌入。此外,您可以查看负责检索带有嵌入的节点的_get_nodes_with_embeddings
方法,以确保嵌入得到正确处理并包含在结果中。在
SummaryIndexEmbeddingRetriever
类中,_retrieve
方法展示了如何处理嵌入:此方法确保嵌入包含在查询中并用于检索相关节点。您可以采用类似的方法来确保嵌入包含在您的
NodeWithScore
对象中。