doubao-seed-2-1-pro 在「实现马尔可夫链文本生成器」的评测结果
这是该 AI 模型在此测试用例上的详细评测结果。
基本信息
- 模型名称:doubao-seed-2-1-pro
- 用例名称:实现马尔可夫链文本生成器
- 测试类型:文本生成
- 评测维度:代码生成
系统提示词(System Prompt)
这是给 AI 模型的背景设定和角色指令:
你是一名资深 Python 开发工程师,专注于自然语言处理与概率模型领域。 回答要求: 1. 提供完整、可运行的 Python 代码,包含必要的注释说明核心逻辑。 2. 在代码前用 2-3 句话简要说明马尔可夫链状态转移字典的设计思路。 3. 代码需处理边界情况,例如:生成过程中遇到无后继词时的终止策略。 4. 输出格式为:【设计思路】→【完整代码】→【示例运行结果】三段式结构。 5. 代码风格清晰,函数职责单一,变量命名具有可读性。
用户提示词(User Prompt)
这是用户给 AI 模型的具体任务要求:
## 任务:实现一个基础的马尔可夫链文本生成器 请用 Python 实现一个基于**一阶马尔可夫链**的文本生成器,完成以下三个核心功能: ### 功能要求 1. **构建转移模型**:读取输入文本,以单词为单位进行切分,统计每个单词后面可能出现的所有单词, 构建一个状态转移字典,结构为 `Dict[str, List[str]]`(键为当前词,值为所有后继词的列表,允许重复以体现频率)。 2. **随机文本生成**:从转移字典中随机选取一个起始词,依据转移字典逐步随机选择下一个词, 生成指定数量的单词序列,并拼接为字符串输出。 3. **边界处理**:若生成过程中当前词在字典中无后继词(即到达链的末端), 应能优雅终止或随机重新选取起始词继续生成,而非抛出异常。 ### 输入示例
评测结果
综合得分
该模型在此用例的得分为:100.0 分(满分 100 分),已通过
基础难度评测结果
- 得分:100.0 分
- 通过状态:已通过
模型生成产物
以下是该模型针对此任务的实际生成内容:
【设计思路】 一阶马尔可夫链的状态转移字典采用「单个当前词→后继词列表」的结构,构建时逐行处理文本避免跨行语义干扰,遍历行内相邻词对记录映射关系,后继词列表保留重复元素以天然体现转移频率,无需额外计算概率权重,随机选择时即可自动匹配词频对应的概率。将转移字典的键集合作为合法起始词池(所有键均存在至少一个后继,避免初始状态失效);生成过程中若遇到无后继的终止词(即不在字典键中的句/段尾词),已达目标长度则直接终止,未达长度则从起始词池随机选词续接,全程避免键缺失、索引越界等异常。 【完整代码】 ```python import random from collections import defaultdict from typing import Dict, List def build_transition_model(text: str) -> Dict[str, List[str]]: """ 从输入文本构建一阶马尔可夫链状态转移字典 :param text: 原始输入文本,单词间以空白分隔,换行视为段落/句子边界(跨行词汇不建立转移关系) :return: 转移字典,键为当前词,值为所有后继词列表(保留重复以体现出现频率) """ # 初始化转移字典,默认值为列表类型,方便直接追加后继词 transition_chain = defaultdict(list) # 逐行处理文本,避免跨行无关词汇被误判为相邻关系 for line in text.splitlines(): line_words = line.strip().split() # 按任意空白切分当前行的单词,自动忽略多空格、缩进 # 当前行单词数不足2,无法构建相邻转移关系,直接跳过 if len(line_words) str: """ 基于已构建的马尔可夫链生成指定长度的随机文本 :param chain: 一阶马尔可夫转移字典 :param target_length: 目标生成的单词数量 :return: 拼接后的生成文本字符串 """ # 边界处理:空模型返回友好提示 if not chain: return "[提示] 输入文本过短,无法构建有效马尔可夫链,请提供包含至少2个词的文本。" # 边界处理:目标长度非法时返回空字符串 if target_length = target_length: break # 未达长度则从合法起始词中随机选词续接,避免抛出异常 next_word = random.choice(valid_start_words) generated_words.append(next_word) # 将词列表拼接为连贯字符串返回 return " ".join(generated_words) if __name__ == "__main__": # 示例输入文本(单词间以空格分隔,中文可替换为分词结果,英文可直接传入原始文本) sample_text = """ 今天 天气 很好 我们 计划 去 公园 游玩 今天 心情 很好 我们 准备 去 餐厅 吃饭 天气 很好 适合 户外 散步 心情 很好 容易 写出 好的 文字 公园 里 有 很 多 小朋友 在 玩耍 餐厅 里 有 很 多 美味 的 食物 散步 可以 放松 心情 吃饭 可以 补充 能量 玩耍 可以 带来 快乐 """ # 构建转移模型 markov_chain = build_transition_model(sample_text) print("=== 一阶马尔可夫链文本生成器 ===") # 测试不同长度的文本生成 print("\n1. 生成10个词的文本:") print(generate_text(markov_chain, target_length=10)) print("\n2. 生成20个词的文本:") print(generate_text(markov_chain, target_length=20)) print("\n3. 生成50个词的文本:") print(generate_text(markov_chain, target_length=50)) # 测试边界情况:空文本 empty_chain = build_transition_model("") print("\n4. 空文本生成测试:") print(generate_text(empty_chain)) # 测试边界情况:仅单个词的过短文本 short_chain = build_transition_model("孤单") print("\n5. 过短文本生成测试:") print(generate_text(short_chain)) ``` 【示例运行结果】...
AI 评审点评
以下是 AI 评审对该模型输出的点评:
【GEMINI】这是一份教科书级别的代码实现。模型设计思路清晰,代码实现优雅且注释详尽,完全遵循了所有的输出格式要求和技术约束。特别是在边界处理上,不仅考虑了逻辑终止,还增加了针对空输入和短输入的防御性编程,整体表现非常出色。
相关链接
您可以通过以下链接查看更多相关内容: