You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Deepset Haystack生成西里尔语文本问答时遇词汇截断问题

俄语文本问答生成出现俄英混合、词汇截断问题的解决思路

问题背景

使用Deepset Haystack处理俄语文本时,生成的问答出现词汇截断、音节混乱,且问题部分呈现俄语音节与英文词汇混合的异常情况。基于俄语SberQUAD数据集训练cointegrated/rubert-tiny模型后,针对普希金《鲁斯兰与柳德米拉》生成的问答答案基本正常,但问题部分存在严重的语言混合和乱码问题。

复现代码

converter = TextConverter(remove_numeric_tables=False, valid_languages=["ru"])
doc = converter.convert(file_path='pushkins.txt', meta=None)[0]

preprocessor = PreProcessor(
    clean_empty_lines=True,
    clean_whitespace=True,
    clean_header_footer=False,
    split_by="word",
    split_length=100,
    split_respect_sentence_boundary=True,
)

docs_default = preprocessor.process([doc])
document_store.write_documents(docs_default)
question_generator = QuestionGenerator()
reader = FARMReader(model_name_or_path='cointegrated/rubert-tiny', use_gpu=True)
reader.train(data_dir=data_dir, train_filename="train-v1.1.json", dev_filename="dev-v1.1.json", use_gpu=True, batch_size=16, n_epochs=1, save_dir=data_dir) 

qag_pipeline = QuestionAnswerGenerationPipeline(question_generator, reader)
output_data = []

for idx, document in enumerate(tqdm(document_store)):
    print(f"\n * Generating questions and answers for document {idx}: {document.content[:100]}...\n")
    result = qag_pipeline.run(documents=[document])
    output_data.append(result)
    print_questions(result)
    print("---")

错误输出示例

Generated pairs:
 - Q: What is какат а доер мое?
      A: свои
      A: дети
      A: согласен Скакать за дочерь
 - Q: What удет не нарасен?
      A: подвиг
      A: моих
      A: княжной
 - Q: What was орестн ени?
      A: княжной
      A: княжной
      A: полцарством
 - Q: What did оскликнули свои седлаем?
      A: Сейчас коней
      A: жены
      A: «Я!» — молвил горестный жених. «Я! я!» — воскликнули с Рогдаем Фарла
 - Q: рад вес иедит мир.
      A: «Сейчас коней своих седлаем; Мы рады
      A: ъ
      A: лцарством прадедов моих

解决方案

  • 替换默认英文问题生成器:Haystack默认的QuestionGenerator基于英文模型训练,会强制生成英文前缀(如What is/was/did),直接导致俄英混合。需使用适配俄语的模型初始化生成器:
    question_generator = QuestionGenerator(model_name_or_path="cointegrated/rubert-tiny", use_gpu=True)
    
  • 优化文本预处理逻辑:原split_by="word"结合split_length=100可能拆分俄语词汇,导致音节混乱。建议改为按句子分割,降低词汇被截断的概率:
    preprocessor = PreProcessor(
        clean_empty_lines=True,
        clean_whitespace=True,
        clean_header_footer=False,
        split_by="sentence",
        split_length=10,
        split_respect_sentence_boundary=True,
    )
    
  • 强化模型训练:仅训练1轮不足以让模型充分拟合俄语问答任务,将n_epochs调整为3-5,同时确认SberQUAD数据集格式完全符合Haystack的训练要求,避免数据格式不兼容导致的输出异常。
  • 确保文本编码正确:检查pushkins.txt是否采用UTF-8编码,避免读取时出现字符乱码或截断,导致模型输入异常。

内容的提问来源于stack exchange,提问作者user164863

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 23:27:28