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

为什么使用markovify马尔可夫链生成器从语料生成的句子存在大量重复?

markovify生成大量重复句子的原因及解决方法

核心原因

  • 语料库规模过小:你当前使用的训练语料仅为单段几百字的文本,默认2阶马尔可夫链依赖的二元词组组合数量极为有限,模型可选择的序列路径太少,自然会高频生成重复句子。
  • 默认无生成结果去重逻辑:markovify的make_sentence()方法默认仅校验生成的句子是否与训练语料中的原句完全一致,不会校验多次调用方法时生成的句子之间是否重复,循环调用时很容易出现重复输出。
  • 默认尝试次数不足:make_sentence()默认的尝试生成次数仅为10次,当可选路径少时,模型很难在有限尝试次数内生成新的有效句子,会直接返回已经生成过的可行结果。

解决方法

  • 扩大训练语料规模,补充更多同主题文本,丰富二元词组的组合路径,从根源降低重复概率。
  • 自行维护已生成句子的去重集合,每次生成句子后先判断是否已存在,存在则重新生成。
  • 可根据语料规模适当调整state_size参数,比如训练语料足够大时可设置为3,生成的句子连贯性更高、重复率更低。
  • 调用make_sentence()时增大tries参数,比如设置为50或更高,让模型每次生成时尝试更多路径。

优化后示例代码

import markovify

# 读取语料,明确指定编码避免乱码
with open("testtekst.txt", encoding="ANSI") as f:
    text = f.read()

# 构建模型,可根据语料规模调整state_size
text_model = markovify.Text(text, state_size=2)

# 维护去重集合保证输出不重复
generated_sentences = set()
target_count = 20

while len(generated_sentences) < target_count:
    # 增大尝试次数提升生成新句子的概率
    sentence = text_model.make_sentence(tries=50)
    if sentence and sentence not in generated_sentences:
        generated_sentences.add(sentence)
        print(sentence)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:36:03