Aiqbee Hive
登录
帮助

搜索与语言

如何选择嵌入模型、处理非英语内容,以及日后如何更换。

Hive使用本地嵌入模型对每个神经元进行向量化,因此语义搜索无需将您的内容发送到任何第三方API。所用模型决定了在您的语言下的搜索效果。

镜像中内置了两个模型,运行时均无需下载—切换模型时也是如此,因此可在离线环境中使用。

英语默认国际版
设置 EMBEDDING_MODEL=english EMBEDDING_MODEL=international
模型 nomic-embed-text-v1.5 snowflake-arctic-embed-m-v2.0
语言 英语 70多种,包括德语、法语、西班牙语、葡萄牙语、日语
容器内存 最低2 GB 最低4 GB

英语模型在其他语言上的表现问题

它不会报错,这正是值得说明的原因。德语、法语或日语内容都能被接受、生成向量嵌入并在搜索中返回—只是准确度较低,具体体现在两个方面。

  • 重音符号会被去除。英文模型的分词器会把schön转换为schon—这是另一个德语单词。变音符号和ß在文本进行向量嵌入之前就已丢失。
  • 词语会被切碎。在英文分词器上,德语每个字符消耗的Token数大约是国际版分词器的两倍,因此较长的非英语神经元会更快耗尽模型的上下文窗口。

实用原则:如果相当一部分神经元不是英文内容,请选择国际版。以英文为主、仅偶尔出现外文名称或引文的Brain,使用默认模型即可。

安装时选择

首次启动容器时设置该环境变量:

docker run -d \
  -e DATABASE_URL=... \
  -e ADMIN_PASSWORD=... \
  -e EMBEDDING_MODEL=international \
  --memory 4g \
  aiqbee/hive-server:latest
同时提高内存上限。International模型至少需要4 GB容器内存。内存不足时,模型将无法加载,或容器会在搜索负载下崩溃。别忘了同时调整编排平台的配置—Container Apps的--memory、Kubernetes的resources.limits.memory、Compose的mem_limit。

日后更改

EMBEDDING_MODEL仅在Hive首次设置时读取。神经元完成向量嵌入后,该变量即被忽略;在部署配置中修改它不会产生任何效果,只会在“配置”页面上显示一条提示。

这是有意为之:更换模型意味着要重新处理每个Brain中的每个神经元,重新部署绝不能悄然触发这一过程。请改为在管理界面的配置 → 嵌入模型中进行更改。确认之前,您可以看到受影响的神经元数量和预计耗时。

切换过程中会发生什么

  • 神经元将在后台重新处理。在此期间搜索结果始终正确—尚未重新处理的神经元只能通过关键词搜索找到,因此结果会暂时变少,但不会出错。
  • 进度显示在“配置”页面上。
  • 可以放心重启容器,重新处理会自动继续。
  • 您可以随时切换回来。切换回来同样需要重新处理,因此并非没有代价—但不会丢失任何数据。
对于大型Brain,请安排在业务空闲时段进行更改。在CPU配置一般的情况下,重新处理十万个神经元的语料需要数小时。在此期间不会出现故障,只是语义匹配效果会下降,直到处理完成。

关键词搜索与非英文文本

嵌入模型负责搜索中的语义部分。关键词部分直接匹配文本本身,支持Hive所支持的任何语言中的重音字符—搜索Müller即可匹配Müller。

对于德语,有一个限制值得了解:搜索复合词的词尾时,关键词匹配能找到该复合词(Versicherung可匹配Rechtsschutzversicherung),反之则不行—搜索完整复合词时,无法匹配只分别提到各组成部分的神经元。语义搜索部分可以弥补这一点,这也是德语语料应使用International模型的另一个原因。