Commit 77bfa7e3f3f69213d6a67b9237f39d3de925a469

Authored by tangwang
1 parent af03fdef

query translate

config/config.yaml
@@ -241,10 +241,10 @@ services: @@ -241,10 +241,10 @@ services:
241 infer_batch_size: 64 241 infer_batch_size: 64
242 sort_by_doc_length: true 242 sort_by_doc_length: true
243 length_sort_mode: "char" # char | token 243 length_sort_mode: "char" # char | token
244 - instruction: "Given a shopping query, rank product titles by relevance" 244 + instruction: "rank products by given query"
245 qwen3_transformers: 245 qwen3_transformers:
246 model_name: "Qwen/Qwen3-Reranker-0.6B" 246 model_name: "Qwen/Qwen3-Reranker-0.6B"
247 - instruction: "Given a shopping query, rank product titles by relevance" 247 + instruction: "rank products by given query"
248 max_length: 8192 248 max_length: 8192
249 batch_size: 64 249 batch_size: 64
250 use_fp16: true 250 use_fp16: true
config/config_loader.py
@@ -67,6 +67,14 @@ class QueryConfig: @@ -67,6 +67,14 @@ class QueryConfig:
67 original_query_fallback_boost_when_translation_missing: float = 0.2 67 original_query_fallback_boost_when_translation_missing: float = 0.2
68 tie_breaker_base_query: float = 0.9 68 tie_breaker_base_query: float = 0.9
69 69
  70 + # Query-time translation model selection (configurable)
  71 + # - zh_to_en_model: model for zh -> en
  72 + # - en_to_zh_model: model for en -> zh
  73 + # - default_translation_model: fallback model for all other language pairs
  74 + zh_to_en_model: str = "opus-mt-zh-en"
  75 + en_to_zh_model: str = "opus-mt-en-zh"
  76 + default_translation_model: str = "nllb-200-distilled-600m"
  77 +
70 78
71 @dataclass 79 @dataclass
72 class SPUConfig: 80 class SPUConfig:
@@ -262,6 +270,11 @@ class ConfigLoader: @@ -262,6 +270,11 @@ class ConfigLoader:
262 text_strategy_cfg.get("original_query_fallback_boost_when_translation_missing", 0.2) 270 text_strategy_cfg.get("original_query_fallback_boost_when_translation_missing", 0.2)
263 ), 271 ),
264 tie_breaker_base_query=float(text_strategy_cfg.get("tie_breaker_base_query", 0.9)), 272 tie_breaker_base_query=float(text_strategy_cfg.get("tie_breaker_base_query", 0.9)),
  273 + zh_to_en_model=str(query_config_data.get("zh_to_en_model") or "opus-mt-zh-en"),
  274 + en_to_zh_model=str(query_config_data.get("en_to_zh_model") or "opus-mt-en-zh"),
  275 + default_translation_model=str(
  276 + query_config_data.get("default_translation_model") or "nllb-200-distilled-600m"
  277 + ),
265 ) 278 )
266 279
267 # Parse Function Score configuration 280 # Parse Function Score configuration
@@ -114,6 +114,10 @@ https://modelscope.cn/models/dengcao/Qwen3-Reranker-4B-GGUF/summary @@ -114,6 +114,10 @@ https://modelscope.cn/models/dengcao/Qwen3-Reranker-4B-GGUF/summary
114 114
115 115
116 reranker 补充:nvidia/llama-nemotron-rerank-1b-v2 116 reranker 补充:nvidia/llama-nemotron-rerank-1b-v2
  117 +https://huggingface.co/nvidia/llama-nemotron-rerank-1b-v2
  118 +后端推理也建议使用vLLM
  119 +注意搜索相关资料,挖掘我的特斯拉 T4 GPU 的性能,充分挖掘性能
  120 +你有充足的自由度进行实验
117 encoder架构。 121 encoder架构。
118 比较新。 122 比较新。
119 性能更好。 123 性能更好。
query/query_parser.py
@@ -152,15 +152,20 @@ class QueryParser: @@ -152,15 +152,20 @@ class QueryParser:
152 return self._translator 152 return self._translator
153 153
154 @staticmethod 154 @staticmethod
155 - def _pick_query_translation_model(source_lang: str, target_lang: str) -> str:  
156 - """Pick the translation capability for query-time translation.""" 155 + def _pick_query_translation_model(source_lang: str, target_lang: str, config: SearchConfig) -> str:
  156 + """Pick the translation capability for query-time translation (configurable)."""
157 src = str(source_lang or "").strip().lower() 157 src = str(source_lang or "").strip().lower()
158 tgt = str(target_lang or "").strip().lower() 158 tgt = str(target_lang or "").strip().lower()
  159 +
  160 + # Use dedicated models for zh<->en if configured
159 if src == "zh" and tgt == "en": 161 if src == "zh" and tgt == "en":
160 - return "opus-mt-zh-en" 162 + return config.query_config.zh_to_en_model
161 if src == "en" and tgt == "zh": 163 if src == "en" and tgt == "zh":
162 - return "opus-mt-en-zh"  
163 - return "deepl" 164 + return config.query_config.en_to_zh_model
  165 +
  166 + # For any other language pairs, fall back to the configurable default model.
  167 + # By default this is `nllb-200-distilled-600m` (multi-lingual local model).
  168 + return config.query_config.default_translation_model
164 169
165 def _simple_tokenize(self, text: str) -> List[str]: 170 def _simple_tokenize(self, text: str) -> List[str]:
166 """ 171 """
@@ -363,7 +368,7 @@ class QueryParser: @@ -363,7 +368,7 @@ class QueryParser:
363 thread_name_prefix="query-translation-wait", 368 thread_name_prefix="query-translation-wait",
364 ) 369 )
365 for lang in target_langs: 370 for lang in target_langs:
366 - model_name = self._pick_query_translation_model(detected_lang, lang) 371 + model_name = self._pick_query_translation_model(detected_lang, lang, self.config)
367 log_debug( 372 log_debug(
368 f"Submitting query translation | source={detected_lang} target={lang} model={model_name}" 373 f"Submitting query translation | source={detected_lang} target={lang} model={model_name}"
369 ) 374 )
@@ -377,7 +382,7 @@ class QueryParser: @@ -377,7 +382,7 @@ class QueryParser:
377 ) 382 )
378 else: 383 else:
379 for lang in target_langs: 384 for lang in target_langs:
380 - model_name = self._pick_query_translation_model(detected_lang, lang) 385 + model_name = self._pick_query_translation_model(detected_lang, lang, self.config)
381 log_debug( 386 log_debug(
382 f"Submitting query translation | source={detected_lang} target={lang} model={model_name}" 387 f"Submitting query translation | source={detected_lang} target={lang} model={model_name}"
383 ) 388 )