帮助
搜索与语言
如何选择嵌入模型、处理非英语内容,以及日后如何更换。
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模型的另一个原因。