File size: 1,403 Bytes
cd6775d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
"""② 无监督式查询分解(XLM seq2seq,进程内)。

复用 methods/unsupervised/XLM/server_translate.py 里的 load()/decompose()(已改为惰性加载),
不再启动 Flask 服务。首次调用需要 RAGQA_XLM_CKPT 与 CUDA GPU。
"""

import os
import sys

_HERE = os.path.dirname(os.path.abspath(__file__))
_PKG_ROOT = os.path.dirname(_HERE)  # .../query_decomposition_baselines
_XLM_DIR = os.path.join(_PKG_ROOT, "methods", "unsupervised", "XLM")

_st = None  # server_translate 模块(惰性导入)


def _module():
    global _st
    if _st is not None:
        return _st
    # 未设 RAGQA_XLM_CKPT 时,自动回退到仓库内 weights/ 下的权重(HF 仓库 clone 后即可用)。
    if not os.environ.get("RAGQA_XLM_CKPT"):
        cand = os.path.join(_PKG_ROOT, "weights", "xlm_unsup_decomp.pth")
        if os.path.isfile(cand):
            os.environ["RAGQA_XLM_CKPT"] = cand  # 必须在 import server_translate 之前设置
    if _XLM_DIR not in sys.path:
        sys.path.insert(0, _XLM_DIR)  # 让 `import src...` 与 `import server_translate` 可解析
    import server_translate  # 导入很轻:只注册 parser/params,模型在 load() 里惰性加载
    _st = server_translate
    return _st


def unsupervised_decompose(query):
    """把一个 query 交给 XLM 分解器,返回子问题 list[str]。"""
    return _module().decompose(query)