zilliztech / GPTCache

Semantic cache for LLMs. Fully integrated with LangChain and llama_index.
https://gptcache.readthedocs.io
MIT License
7.06k stars 500 forks source link

[Bug]: Chinese similar search recognition problem #478

Closed ssx1235690 closed 1 year ago

ssx1235690 commented 1 year ago

Current Behavior

huggingface = Huggingface(model='uer/albert-base-chinese-cluecorpussmall') vector_base = VectorBase('faiss', dimension=huggingface.dimension) data_manager = get_data_manager('sqlite', vector_base) cache.init( embedding_func=huggingface.to_embeddings, data_manager=data_manager, similarity_evaluation=SearchDistanceEvaluation(max_distance=2.5),

similarity_evaluation=OnnxModelEvaluation(),

)

questions = [ '什么是Github', '你可以解释下什么是Github吗', '可以告诉我关于Github一些信息吗', '告诉我关于Github一些信息吗', "介绍下大西洋", "介绍下太平洋", ]

Question: 什么是Github Time consuming: 21.86s Answer: GitHub是一个网站和平台,旨在帮助开发人员协作和共享代码。它是由Git版本控制系统支持的一个代码托管和协作平台。开发人员可以在GitHub上创建代码存储库(仓库)来存储和管理他们的代码,并可以邀请其他开发人员一起工作。这个平台还允许开发人员提交代码的更改,进行代码审查,处理问题和合并代码等操作。除了代码管理之外,GitHub还提供了一系列的社交和协作功能,让开发人员可以相互交流和共享他们的工作。

Question: 你可以解释下什么是Github吗 Time consuming: 2.69s Answer: GitHub是一个网站和平台,旨在帮助开发人员协作和共享代码。它是由Git版本控制系统支持的一个代码托管和协作平台。开发人员可以在GitHub上创建代码存储库(仓库)来存储和管理他们的代码,并可以邀请其他开发人员一起工作。这个平台还允许开发人员提交代码的更改,进行代码审查,处理问题和合并代码等操作。除了代码管理之外,GitHub还提供了一系列的社交和协作功能,让开发人员可以相互交流和共享他们的工作。

Question: 可以告诉我关于Github一些信息吗 Time consuming: 0.09s Answer: GitHub是一个网站和平台,旨在帮助开发人员协作和共享代码。它是由Git版本控制系统支持的一个代码托管和协作平台。开发人员可以在GitHub上创建代码存储库(仓库)来存储和管理他们的代码,并可以邀请其他开发人员一起工作。这个平台还允许开发人员提交代码的更改,进行代码审查,处理问题和合并代码等操作。除了代码管理之外,GitHub还提供了一系列的社交和协作功能,让开发人员可以相互交流和共享他们的工作。

Question: 告诉我关于Github一些信息吗 Time consuming: 0.09s Answer: GitHub是一个网站和平台,旨在帮助开发人员协作和共享代码。它是由Git版本控制系统支持的一个代码托管和协作平台。开发人员可以在GitHub上创建代码存储库(仓库)来存储和管理他们的代码,并可以邀请其他开发人员一起工作。这个平台还允许开发人员提交代码的更改,进行代码审查,处理问题和合并代码等操作。除了代码管理之外,GitHub还提供了一系列的社交和协作功能,让开发人员可以相互交流和共享他们的工作。

Question: 介绍下大西洋 Time consuming: 0.07s Answer: GitHub是一个网站和平台,旨在帮助开发人员协作和共享代码。它是由Git版本控制系统支持的一个代码托管和协作平台。开发人员可以在GitHub上创建代码存储库(仓库)来存储和管理他们的代码,并可以邀请其他开发人员一起工作。这个平台还允许开发人员提交代码的更改,进行代码审查,处理问题和合并代码等操作。除了代码管理之外,GitHub还提供了一系列的社交和协作功能,让开发人员可以相互交流和共享他们的工作。

Question: 介绍下太平洋 Time consuming: 0.08s Answer: GitHub是一个网站和平台,旨在帮助开发人员协作和共享代码。它是由Git版本控制系统支持的一个代码托管和协作平台。开发人员可以在GitHub上创建代码存储库(仓库)来存储和管理他们的代码,并可以邀请其他开发人员一起工作。这个平台还允许开发人员提交代码的更改,进行代码审查,处理问题和合并代码等操作。除了代码管理之外,GitHub还提供了一系列的社交和协作功能,让开发人员可以相互交流和共享他们的工作

Expected Behavior

Question 介绍下太平洋 and Question 介绍github should have different answers

Steps To Reproduce

No response

Environment

run script in zilliz/gptcache:latest  on Ubuntu 20.04.6 LTS
env output

HOSTNAME=247b97344c63
PYTHON_PIP_VERSION=23.0.1
HOME=/root
OLDPWD=/workspace
OPENAI_API_KEY=xxxxx
GPG_KEY=E3FF2839C048B25C084DEBE9B26995E310250568
PYTHONDONTWRITEBYTECODE=1
PYTHON_GET_PIP_URL=https://github.com/pypa/get-pip/raw/0d8570dc44796f4369b652222cf176b3db6ac70e/public/get-pip.py
TERM=xterm
PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
LANG=C.UTF-8
PYTHON_VERSION=3.8.17
PYTHON_SETUPTOOLS_VERSION=57.5.0
PWD=/tmp
PYTHON_GET_PIP_SHA256=96461deced5c2a487ddc65207ec5a9cffeca0d34e7af7ea1afc470ff0d746207

Anything else?

No response

SimFG commented 1 year ago

@ssx1235690 In general, this is caused by the embedding model problem, because the embedding model cannot completely distinguish all sentences. If you want to achieve a better cache, you need to evaluate the similar rerank model, such as onnx, or sbert correlation model. related issue: #388

ssx1235690 commented 1 year ago

onnx = Onnx() data_manager = get_data_manager(CacheBase("sqlite"), VectorBase("faiss", dimension=onnx.dimension)) cache.init( embedding_func=onnx.to_embeddings, data_manager=data_manager, similarity_evaluation=SearchDistanceEvaluation(), ) cache.set_openai_key()

Still can't distinguish all sentences But I adjusted the following parameters by similarity_evaluation=SearchDistanceEvaluation(max_distance=0.4) uestion: 什么是Github Time consuming: 26.23s Answer: GitHub是一个基于Web的代码托管平台,也是全球最大的开源社区之一。它允许开发者在云端存储和管理项目代码,进行版本控制和协作开发。GitHub提供了很多功能,如项目管理、问题追踪、文档编写等,可以帮助开发者更好地组织和管理软件开发过程。同时,GitHub还提供了强大的社交功能,开发者可以关注其他开发者、参与开源项目、相互评论和贡献代码等。通过GitHub,开发者可以方便地与全球的开发者社区进行交流和合作。

Question: 你可以解释下什么是Github吗 Time consuming: 53.93s Answer: 当然可以!GitHub是一个基于云的版本控制系统,它允许人们协同开发和管理软件项目。它基于Git,一个分布式版本控制系统,通过在云端存储代码库来追踪和管理项目的所有更改。

GitHub的主要功能包括:

  1. 代码托管:GitHub允许开发者将代码库存储在云端,并提供了版本控制功能,使得开发者可以轻松地跟踪和管理所有代码的更改。

  2. 协作与共享:开发者可以邀请其他人合作编辑和贡献代码库,通过问题跟踪和讨论功能进行沟通,从而促进项目的团队协作。

  3. 版本控制:使用Git的功能,GitHub允许开发者记录和回滚到不同的代码版本,以便于代码的维护和改进。

  4. 公共和私有仓库:GitHub提供了公共仓库和私有仓库的选择,使得开发者可以选择是否公开他们的代码。

  5. 持续集成和部署:GitHub集成了持续集成和持续部署工具,使得开发者可以自动化运行测试、构建和部署他们的应用程序。

总的来说,GitHub是一个非常受欢迎的开发者社区和平台,它为开发者提供了协作、共享和管理代码的一站式解决方案。无论是个人开发者还是大型团队,都可以利用GitHub来简化代码管理和团队协作的过程。

Question: 可以告诉我关于Github一些信息吗 Time consuming: 2.86s Answer: 当然可以!GitHub是一个基于云的版本控制系统,它允许人们协同开发和管理软件项目。它基于Git,一个分布式版本控制系统,通过在云端存储代码库来追踪和管理项目的所有更改。

GitHub的主要功能包括:

  1. 代码托管:GitHub允许开发者将代码库存储在云端,并提供了版本控制功能,使得开发者可以轻松地跟踪和管理所有代码的更改。

  2. 协作与共享:开发者可以邀请其他人合作编辑和贡献代码库,通过问题跟踪和讨论功能进行沟通,从而促进项目的团队协作。

  3. 版本控制:使用Git的功能,GitHub允许开发者记录和回滚到不同的代码版本,以便于代码的维护和改进。

  4. 公共和私有仓库:GitHub提供了公共仓库和私有仓库的选择,使得开发者可以选择是否公开他们的代码。

  5. 持续集成和部署:GitHub集成了持续集成和持续部署工具,使得开发者可以自动化运行测试、构建和部署他们的应用程序。

总的来说,GitHub是一个非常受欢迎的开发者社区和平台,它为开发者提供了协作、共享和管理代码的一站式解决方案。无论是个人开发者还是大型团队,都可以利用GitHub来简化代码管理和团队协作的过程。

Question: 告诉我关于Github一些信息吗 Time consuming: 0.49s Answer: 当然可以!GitHub是一个基于云的版本控制系统,它允许人们协同开发和管理软件项目。它基于Git,一个分布式版本控制系统,通过在云端存储代码库来追踪和管理项目的所有更改。

GitHub的主要功能包括:

  1. 代码托管:GitHub允许开发者将代码库存储在云端,并提供了版本控制功能,使得开发者可以轻松地跟踪和管理所有代码的更改。

  2. 协作与共享:开发者可以邀请其他人合作编辑和贡献代码库,通过问题跟踪和讨论功能进行沟通,从而促进项目的团队协作。

  3. 版本控制:使用Git的功能,GitHub允许开发者记录和回滚到不同的代码版本,以便于代码的维护和改进。

  4. 公共和私有仓库:GitHub提供了公共仓库和私有仓库的选择,使得开发者可以选择是否公开他们的代码。

  5. 持续集成和部署:GitHub集成了持续集成和持续部署工具,使得开发者可以自动化运行测试、构建和部署他们的应用程序。

总的来说,GitHub是一个非常受欢迎的开发者社区和平台,它为开发者提供了协作、共享和管理代码的一站式解决方案。无论是个人开发者还是大型团队,都可以利用GitHub来简化代码管理和团队协作的过程。

Question: 介绍下大西洋 Time consuming: 77.98s Answer: 大西洋是世界上最大的海洋之一,位于北美洲和欧洲、南美洲和非洲之间,几乎分割了北半球和南半球。大西洋是连接世界各大洲之间的重要通道,也是国际海上贸易的主要航线之一。

大西洋的面积约为106,400,000 平方公里,占地球表面积的约20%。它的宽度从南北两极远,从北极到南极的纬度范围约为7,600公里。大西洋最大的深度为8,376米,位于波多黎各附近的希诺特鞍山。

大西洋海洋环境复杂多样。近海地区常见草甸、河口、珊瑚礁、湿地等生态系统,远离海岸的地区则有大洋盆地和海山。大西洋还有许多海洋生物,包括鲨鱼、鲸、海豚、海龟、各种鱼类和海洋植物等。

大西洋也是重要的气候系统影响区域之一。北大西洋暖流和南大西洋暖流的存在使得欧洲西部和北美东部拥有温暖的气候。同时,大西洋还是飓风形成的地区之一,每年都有多个强风暴在大西洋上形成。

人类对大西洋的利用非常广泛。大西洋沿岸存在众多的港口城市,为国际贸易和航运提供了重要的基础设施。此外,大西洋还是世界上许多国家的渔业资源的重要来源之一。

总之,大西洋是一个广阔的海洋,拥有复杂多样的海洋环境和生态系统,对全球贸易、气候和生物多样性都具有重要意义。

Question: 介绍下太平洋 Time consuming: 0.48s Answer: 大西洋是世界上最大的海洋之一,位于北美洲和欧洲、南美洲和非洲之间,几乎分割了北半球和南半球。大西洋是连接世界各大洲之间的重要通道,也是国际海上贸易的主要航线之一。

大西洋的面积约为106,400,000 平方公里,占地球表面积的约20%。它的宽度从南北两极远,从北极到南极的纬度范围约为7,600公里。大西洋最大的深度为8,376米,位于波多黎各附近的希诺特鞍山。

大西洋海洋环境复杂多样。近海地区常见草甸、河口、珊瑚礁、湿地等生态系统,远离海岸的地区则有大洋盆地和海山。大西洋还有许多海洋生物,包括鲨鱼、鲸、海豚、海龟、各种鱼类和海洋植物等。

大西洋也是重要的气候系统影响区域之一。北大西洋暖流和南大西洋暖流的存在使得欧洲西部和北美东部拥有温暖的气候。同时,大西洋还是飓风形成的地区之一,每年都有多个强风暴在大西洋上形成。

人类对大西洋的利用非常广泛。大西洋沿岸存在众多的港口城市,为国际贸易和航运提供了重要的基础设施。此外,大西洋还是世界上许多国家的渔业资源的重要来源之一。

总之,大西洋是一个广阔的海洋,拥有复杂多样的海洋环境和生态系统,对全球贸易、气候和生物多样性都具有重要意义。

SimFG commented 1 year ago

hi, @ssx1235690, you maybe have misunderstood me. I means that you can try to use the OnnxModelEvaluation. And it's worth to note that it only support 512 token. In addition, even if you do that, there is no guarantee that there will be no wrong cache. If this happens, you can try to use the cache_skip parameter (reference: Request cache parameter customization), which will skip the cache search, request llm directly, and then save the result to the cache.

huggingface = Huggingface(model='uer/albert-base-chinese-cluecorpussmall')
vector_base = VectorBase('faiss', dimension=huggingface.dimension)
data_manager = get_data_manager('sqlite', vector_base)
cache.init(
embedding_func=huggingface.to_embeddings,
data_manager=data_manager,
similarity_evaluation=OnnxModelEvaluation(),
)
ssx1235690 commented 1 year ago

huggingface = Huggingface(model='uer/albert-base-chinese-cluecorpussmall') vector_base = VectorBase('faiss', dimension=huggingface.dimension) data_manager = get_data_manager('sqlite', vector_base) cache.init( embedding_func=huggingface.to_embeddings, data_manager=data_manager,

similarity_evaluation=SearchDistanceEvaluation(max_distance=2.5),

similarity_evaluation=OnnxModelEvaluation(), ). I tried it, but I can't identify the problem very well.

SimFG commented 1 year ago

@ssx1235690 yes, you are right. If only based on the above code, the cache cannot work very well. For specific reasons, please refer to my previous comment.