网站的建设需要考虑什么货代到哪个网站开发客户

张小明 2026/1/9 21:15:55
网站的建设需要考虑什么,货代到哪个网站开发客户,湖北住房城乡建设厅网站首页,腾讯邮箱注册目录 一、题目描述 二、解决方案 三、开发流程概述 #xff08;一#xff09;全局配置模块#xff08;基础环境设置#xff09; 核心功能#xff1a; #xff08;二#xff09;文本预处理模块#xff08;数据清洗与标准化#xff09; 核心功能#xff1a;将原始…目录一、题目描述二、解决方案三、开发流程概述一全局配置模块基础环境设置核心功能二文本预处理模块数据清洗与标准化核心功能将原始文本转化为模型可处理的 “干净词序列”输入输出示例三Kneser-Ney 平滑模块核心概率优化核心背景核心功能分 4 步关键作用四NGramModel 类模型核心封装1. 初始化方法 __init__(self, n)2. 训练方法 fit(self, words)3. 选词方法 _get_next_word(self, prefix)4. 文本生成方法 generate_text(self, length50)5. 困惑度计算方法 calculate_perplexity(self, test_words)五生成文本后处理模块可读性优化核心功能解决生成文本的 “机械感”提升人类可读性效果示例六训练数据模块多类别文本库核心功能提供多类别、扩充后的训练文本避免 n≥4 时的 “前缀缺失”七模型训练与评估模块全流程执行核心功能执行 “预处理→训练→生成→评估” 全流程八可视化模块效果直观呈现1. 困惑度趋势图 plot_perplexity_trend()2. 可理解性热力图 plot_understandability_heatmap()九效果分析模块结论总结核心功能基于生成文本和可视化结果总结不同 n 值的效果十整体功能总结四、中文 n-gram 词模型的Python代码完整实现五、程序运行结果展示六、总结一、题目描述写一个可以学习某些文本的n-gram词模型的程序在不同类别的文本上分别训练模型然后基于这些模型产生一些随机的文本。不同的n值输出的文本的可理解性怎么样二、解决方案n-gram 模型是基于统计的语言模型核心是通过统计文本中连续 n 个词n 元组的出现频率构建条件概率分布如进而实现文本生成。不同 n 值的可理解性差异核心在于上下文依赖度n1Unigram仅基于单个词的频率随机生成无上下文逻辑文本是孤立词的堆砌可理解性极低n2Bigram基于前 1 个词预测下一个词有简单的词语搭配逻辑可理解性略有提升但缺乏长上下文连贯性n3Trigram基于前 2 个词预测下一个词词语搭配更合理上下文连贯性显著提升能体现文本类别特征n≥4基于更长的上下文预测逻辑更紧密可理解性更高但训练文本量不足时易出现 “无匹配前缀” 导致的随机选词甚至生成重复片段。三、开发流程概述一全局配置模块基础环境设置random.seed(42) np.random.seed(42) plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False DISCOUNT 0.75 # Kneser-Ney平滑的折扣值核心功能随机种子固定random.seed(42)和np.random.seed(42)确保每次运行代码的随机结果一致如文本生成、概率抽样满足 “可复现性” 要求。中文显示适配修改 matplotlib 的字体配置解决图表中中文 / 负号显示乱码的问题。平滑参数定义DISCOUNT0.75是 Kneser-Ney 平滑的经典折扣值行业通用平衡高频 / 低频 n-gram 的概率估计。二文本预处理模块数据清洗与标准化def preprocess_text(text): # 正则清洗 结巴分词 空词过滤核心功能将原始文本转化为模型可处理的 “干净词序列”正则清洗re.sub(r[^\u4e00-\u9fa5\u3002\uff0c\uff01\s], , text)仅保留中文、少量核心标点。和空格过滤数字、特殊符号如 %、、英文等无关字符避免干扰词频统计。re.sub(r\s, , text).strip()合并多余空格首尾去空格保证文本格式整洁。结巴分词jieba.lcut(text, cut_allFalse)使用 “精确模式” 分词适合中文语义保留避免冗余分词结果。空词过滤[w for w in words if w.strip() and w not in [ , ]]剔除分词后产生的空字符串、纯空格词避免无效数据进入模型。输入输出示例输入原始新闻文本今年前三季度国内生产总值同比增长5.2%增速较上半年加快0.4个百分点。输出处理后词序列[今年, 前三季度, 国内生产总值, 同比增长, 增速, 较, 上半年, 加快, 个, 百分点, 。]三Kneser-Ney 平滑模块核心概率优化def kneser_ney_smoothing(ngram_counts, lower_order_counts, vocab_size, discountDISCOUNT): # 前缀总计数 续存概率 平滑概率计算 UNK处理核心背景传统 “加 1 平滑” 会高估低频词的概率导致模型生成效果差Kneser-Ney 平滑是 n-gram 模型的工业级平滑方案核心是 “基于续存性的概率估计”更贴合语言的实际分布。核心功能分 4 步计算前缀总计数prefix_totals {prefix: sum(counts.values()) ...}统计每个 n-1 阶前缀如 trigram 的 “月光 - 洒在”对应的所有后缀的总出现次数为后续概率计算做基础。计算续存概率续存数定义某个后缀如 “青石板”能作为 “新后缀” 出现的不同前缀数量体现该词的 “搭配灵活性”。计算逻辑continuation_counts[suffix] 1遍历所有 n-gram统计每个后缀的续存数continuation_prob continuation_counts[suffix] / total_ngrams将续存数归一化为续存概率。计算平滑后的条件概率核心概率(count - discount) / prefix_total对高频 n-gram 的计数做 “折扣”预留部分概率给低频 / 未见过的 n-gram。剩余权重alpha (discount * num_suffixes) / prefix_total计算前缀的 “剩余概率权重”分配给未见过的后缀。最终概率core_prob alpha * continuation_prob 核心概率高频 n-gram 剩余权重 × 续存概率低频 / 未见过 n-gram既保留高频搭配的优势又避免低频搭配概率为 0。UNK未见过的前缀处理smoothed_probs[__UNK__][suffix] ...为模型遇到 “从未见过的前缀” 时提供兜底的概率分布基于续存概率避免生成中断。关键作用解决 n-gram 模型的 “数据稀疏问题”尤其是 n≥4 时很多前缀仅出现 1 次让低频次 n-gram 的概率估计更准确生成文本的连贯性大幅提升。四NGramModel 类模型核心封装这是代码的 “核心载体”封装了 n-gram 模型的初始化、训练、选词、生成文本、困惑度计算全流程。1. 初始化方法__init__(self, n)功能定义模型核心属性为训练做准备。关键属性self.nn 值1Unigram55-gram决定模型的上下文窗口大小。self.ngram_countsn-gram 计数字典prefix → {suffix: count}存储 “前缀 - 后缀” 的出现次数。self.lower_order_countsn-1 阶 gram 计数为 Kneser-Ney 平滑提供续存概率计算基础。self.vocab词汇表所有训练文本的唯一词集合。self.smoothed_probs存储 Kneser-Ney 平滑后的概率分布训练后赋值。2. 训练方法fit(self, words)功能基于预处理后的词序列统计 n-gram 计数并计算平滑概率。执行流程① 更新词汇表self.vocab.update(words)将训练词加入词汇表。② 统计 n-gram 计数遍历词序列生成所有 n-gram如 n3 时取 “w1w2→w3”更新self.ngram_counts。③ 统计 n-1 阶 gram 计数为 Kneser-Ney 平滑提供低阶计数n2 时特殊处理为__LOW__统一格式。④ 计算平滑概率调用kneser_ney_smoothing将结果存入self.smoothed_probs。3. 选词方法_get_next_word(self, prefix)功能根据当前前缀按平滑后的概率 “加权随机” 选择下一个词核心生成逻辑。执行流程① 前缀匹配若前缀在self.smoothed_probs中使用其概率分布否则使用__UNK__的兜底分布。② 概率归一化probabilities [p / prob_sum for p in probabilities]避免浮点误差导致的概率和≠1。③ 加权抽样np.random.choice(words, pprobabilities)按概率选词高频后缀被选中的概率更高。4. 文本生成方法generate_text(self, length50)功能生成指定长度的文本分 Unigram 和 n≥2 两种逻辑。执行流程① Unigramn1直接按词的续存概率加权抽样无上下文纯随机。② n≥2初始化前缀优先选self.ngram_counts中计数最高的前缀提升生成质量避免随机初始化的无意义前缀。迭代生成每次取最后 n-1 个词作为前缀调用_get_next_word选下一个词直到达到指定长度。③ 后处理将生成的词序列拼接为字符串调用postprocess_generated_text优化可读性。5. 困惑度计算方法calculate_perplexity(self, test_words)功能量化评估模型质量困惑度越低模型对文本的拟合度越高生成文本可理解性越强。核心公式perplexity exp(-1/N * sum(log(p)))N 为测试文本长度p 为每个 n-gram 的平滑概率。执行流程① 边界判断测试文本过短 / 无词汇表时返回无穷大无效评估。② 遍历测试 n-gram计算每个 n-gram 的对数概率加兜底概率 1e-10避免 log (0)。③ 计算困惑度按公式转换对数概率和为困惑度。五生成文本后处理模块可读性优化def postprocess_generated_text(text): # 去重复 修正冗余 拆分长句 格式整洁核心功能解决生成文本的 “机械感”提升人类可读性去连续重复re.sub(r(.{1,4})\1{2,}, r\1, text)剔除重复≥2 次的 1-4 字片段如 “阳光阳光阳光”→“阳光”。修正冗余助词 / 标点re.sub(r([的地得])\1, r\1, text)“的的”→“的”“地地”→“地”。re.sub(r([。])\1, r\1, text)“”→“”“。。”→“。”。拆分长句re.sub(r(.{15,20})(?[^。]), r\1, text)每 15-20 字加逗号避免生成超长无标点语句。格式整洁text.strip(。 )首尾去空格 / 标点。结尾补标点确保文本以。//结尾符合中文表达习惯。效果示例处理前月光洒在青石板上晚风拂过荷塘荷叶轻摇荷叶轻摇露珠滚落处理后月光洒在青石板上晚风拂过荷塘荷叶轻摇露珠滚落。六训练数据模块多类别文本库text_categories {小说: ..., 新闻: ..., 诗歌: ...}核心功能提供多类别、扩充后的训练文本避免 n≥4 时的 “前缀缺失”类别设计覆盖 “小说文学叙事、新闻客观数据、诗歌文艺抒情” 三类差异显著的文本验证模型对不同风格文本的适配性。文本扩充每个类别补充 3-4 倍的文本长度相比原始版本确保 n5 时仍有足够的 n-gram 样本如诗歌类从 1 段扩充为 4 段。风格保留每类文本保持自身特征新闻含经济数据、诗歌含意象描写、小说含场景叙事让生成文本能体现类别风格。七模型训练与评估模块全流程执行processed_texts {cat: preprocess_text(text) ...} # 分割训练/测试集 训练不同n值模型 生成文本 计算困惑度核心功能执行 “预处理→训练→生成→评估” 全流程文本预处理调用preprocess_text处理所有类别文本生成词序列。数据分割split_idx int(len(words) * 0.9)将每类文本按 9:1 分割为训练集90%和测试集10%扩充数据后可提高训练集比例提升模型拟合度。多 n 值训练遍历n_values [1,2,3,4,5]为每类文本训练 5 个不同 n 值的模型存入models字典。文本生成调用generate_text(length50)生成 50 字文本存入generated_texts。困惑度计算调用calculate_perplexity计算测试集困惑度存入perplexities。结果输出打印每类、每个 n 值的生成文本直观展示效果。八可视化模块效果直观呈现包含两个核心可视化函数将 “抽象的困惑度 / 可理解性” 转化为直观图表。1. 困惑度趋势图plot_perplexity_trend()功能用折线图展示 “n 值增加→困惑度变化” 的趋势对比不同类别文本的差异。设计细节折线 标记不同类别用不同颜色蓝 / 橙 / 绿和标记圆 / 方 / 三角区分便于对比。坐标轴x 轴为 n 值1-5y 轴为困惑度越低越好网格线提升可读性。保存 展示savefig保存高清图dpi300show实时展示。核心结论n 值从 1→5 时困惑度持续下降n3 后下降放缓诗歌类困惑度最低风格固定n-gram 搭配规律。2. 可理解性热力图plot_understandability_heatmap()功能将困惑度反向归一化为 1-10 分的 “可理解性评分”用热力图展示 “类别 ×n 值” 的评分矩阵。执行流程① 评分转换score 10 - ((ppl - min_ppl) / (max_ppl - min_ppl)) * 10将困惑度越大越差转为可理解性评分越大越好。② 热力图绘制用imshow展示评分矩阵单元格标注具体分数颜色深浅对应评分高低深色 高分。③ 颜色条添加颜色条直观对应 “评分 - 颜色” 关系。核心结论n4/5 时诗歌类评分最高≈9.5 分n1 时所有类别评分最低≈1 分。九效果分析模块结论总结print( 不同n值生成文本的可理解性分析 )核心功能基于生成文本和可视化结果总结不同 n 值的效果分 n 值分析n1纯随机堆砌后处理后略有改善可理解性 1-2 分。n2简单搭配Kneser-Ney 平滑解决低频问题可理解性 4-5 分。n3连贯性大幅提升可复现原风格可理解性 8-9 分。n4/5接近真人写作可理解性 9-9.5 分边际效益递减。优化点总结强调 Kneser-Ney 平滑、文本扩充、后处理的核心作用。十整体功能总结模块核心功能核心价值全局配置固定随机种子、适配中文显示保证可复现、图表可读性文本预处理清洗、分词、过滤提供标准化词序列Kneser-Ney 平滑优化概率估计解决数据稀疏提升生成连贯性NGramModel 类训练、生成、评估封装模型全流程支持多 n 值后处理去重复、修冗余、补标点提升生成文本的人类可读性训练数据多类别、扩充文本避免前缀缺失验证多风格适配性训练评估全流程执行、生成 评估产出可对比的生成文本和量化指标可视化趋势图 热力图直观展示 n 值对效果的影响效果分析分 n 值总结可理解性提炼核心结论指导 n 值选择该方案不仅实现了基础的 n-gram 文本生成还通过Kneser-Ney 平滑、文本扩充、后处理三大优化解决了传统 n-gram 的核心痛点同时通过多类别验证、量化评估、可视化呈现形成了 “训练→生成→评估→分析” 的完整闭环可直接用于中文 n-gram 模型的学习、研究和落地。四、中文 n-gram 词模型的Python代码完整实现import jieba import random import collections import math import matplotlib.pyplot as plt import numpy as np from collections import defaultdict, Counter # 全局配置 random.seed(42) np.random.seed(42) plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False DISCOUNT 0.75 # Kneser-Ney平滑的折扣值 # 1. 文本预处理 def preprocess_text(text): 清洗文本并分词保留核心语义过滤无意义字符 import re # 保留中文、少量标点。用于分句去除数字/特殊符号/多余空格 text re.sub(r[^\u4e00-\u9fa5\u3002\uff0c\uff01\s], , text) text re.sub(r\s, , text).strip() # 结巴分词精确模式 words jieba.lcut(text, cut_allFalse) # 过滤空词、纯空格词 words [w for w in words if w.strip() and w not in [ , ]] return words # 2. Kneser-Ney平滑实现 def kneser_ney_smoothing(ngram_counts, lower_order_counts, vocab_size, discountDISCOUNT): Kneser-Ney平滑计算条件概率 :param ngram_counts: n-gram的计数prefix - {suffix: count} :param lower_order_counts: n-1阶gram的计数用于计算续存概率 :param vocab_size: 词汇表大小 :param discount: 折扣值通常0.75 :return: 平滑后的概率字典prefix - {suffix: prob} # 步骤1计算每个前缀的总计数 prefix_totals {prefix: sum(counts.values()) for prefix, counts in ngram_counts.items()} # 步骤2计算续存概率续存数某个后缀作为新后缀出现的前缀数 continuation_counts defaultdict(int) for prefix, suffix_counts in ngram_counts.items(): for suffix in suffix_counts: continuation_counts[suffix] 1 total_ngrams len(ngram_counts) # 总前缀数即不同的n-1阶gram数 # 步骤3计算平滑后的概率 smoothed_probs defaultdict(dict) for prefix, suffix_counts in ngram_counts.items(): prefix_total prefix_totals[prefix] # 计算该前缀的剩余概率权重 num_suffixes len(suffix_counts) alpha (discount * num_suffixes) / prefix_total if prefix_total 0 else 0.0 for suffix, count in suffix_counts.items(): # 核心概率(count - discount)/prefix_total core_prob (count - discount) / prefix_total if prefix_total 0 else 0.0 # 续存概率continuation_counts[suffix] / total_ngrams continuation_prob continuation_counts[suffix] / total_ngrams if total_ngrams 0 else 0.0 # 最终概率 核心概率 剩余权重 * 续存概率 smoothed_prob core_prob alpha * continuation_prob smoothed_probs[prefix][suffix] max(smoothed_prob, 1e-10) # 避免概率为0 # 处理未见过的前缀直接使用续存概率 for suffix in continuation_counts: smoothed_probs[__UNK__][suffix] continuation_counts[ suffix] / total_ngrams if total_ngrams 0 else 1 / vocab_size return smoothed_probs # 3. n-gram模型类 class NGramModel: def __init__(self, n): self.n n self.ngram_counts defaultdict(Counter) # n-gram计数: (w1..wn-1) - {wn: count} self.lower_order_counts defaultdict(Counter) # n-1阶gram计数用于Kneser-Ney self.vocab set() self.smoothed_probs None # 存储平滑后的概率 def fit(self, words): 训练模型统计计数并计算平滑概率 self.vocab.update(words) vocab_size len(self.vocab) # 统计n-gram计数 for i in range(len(words) - self.n 1): prefix tuple(words[i:i self.n - 1]) suffix words[i self.n - 1] self.ngram_counts[prefix][suffix] 1 # 统计n-1阶gram计数用于Kneser-Ney if self.n 1: for i in range(len(words) - (self.n - 1) 1): lower_prefix tuple(words[i:i (self.n - 2)]) if self.n 2 else __LOW__ lower_suffix words[i (self.n - 2)] if self.n 2 else words[i] self.lower_order_counts[lower_prefix][lower_suffix] 1 # 计算Kneser-Ney平滑概率 self.smoothed_probs kneser_ney_smoothing( self.ngram_counts, self.lower_order_counts, vocab_size ) def _get_next_word(self, prefix): 基于平滑概率加权选择下一个词 prefix tuple(prefix) vocab_size len(self.vocab) # 前缀未见过时使用UNK的概率分布 if prefix not in self.smoothed_probs or sum(self.smoothed_probs[prefix].values()) 0: if __UNK__ not in self.smoothed_probs or sum(self.smoothed_probs[__UNK__].values()) 0: return random.choice(list(self.vocab)) if self.vocab else probs self.smoothed_probs[__UNK__] else: probs self.smoothed_probs[prefix] # 按概率加权随机选择 words list(probs.keys()) probabilities list(probs.values()) # 归一化概率避免浮点误差 prob_sum sum(probabilities) probabilities [p / prob_sum for p in probabilities] return np.random.choice(words, pprobabilities) def generate_text(self, length50): 生成文本 if self.n 1: # Unigram按词频加权Kneser-Ney退化为续存概率 unigram_probs self.smoothed_probs[__UNK__] words list(unigram_probs.keys()) probs list(unigram_probs.values()) prob_sum sum(probs) probs [p / prob_sum for p in probs] generated np.random.choice(words, sizelength, pprobs).tolist() else: # n≥2初始化前缀优先选高频前缀 if not self.ngram_counts: prefix [random.choice(list(self.vocab))] * (self.n - 1) else: # 选计数最高的前缀提升生成质量 top_prefix max(self.ngram_counts.keys(), keylambda k: sum(self.ngram_counts[k].values())) prefix list(top_prefix) generated prefix.copy() # 逐步生成后续词 while len(generated) length: next_word self._get_next_word(generated[-self.n 1:]) generated.append(next_word) # 生成后处理 generated_str .join(generated) # 先拼接去掉分词空格 generated_str postprocess_generated_text(generated_str) return generated_str def calculate_perplexity(self, test_words): 基于Kneser-Ney平滑计算困惑度 if len(test_words) self.n or not self.vocab or not self.smoothed_probs: return float(inf) log_prob 0.0 N len(test_words) vocab_size len(self.vocab) for i in range(len(test_words) - self.n 1): prefix tuple(test_words[i:i self.n - 1]) suffix test_words[i self.n - 1] # 获取平滑后的概率 if prefix in self.smoothed_probs and suffix in self.smoothed_probs[prefix]: prob self.smoothed_probs[prefix][suffix] elif __UNK__ in self.smoothed_probs and suffix in self.smoothed_probs[__UNK__]: prob self.smoothed_probs[__UNK__][suffix] else: prob 1e-10 # 兜底概率 log_prob math.log(prob) perplexity math.exp(-log_prob / N) return perplexity # 4. 生成文本后处理 def postprocess_generated_text(text): 后处理生成的文本提升可读性 1. 去除连续重复的词/片段 2. 修正冗余助词如“的的”→“的” 3. 补充标点拆分过长语句 4. 过滤无意义重复片段 import re # 步骤1去除连续重复的字符/词如“阳光阳光”→“阳光” text re.sub(r(.{1,4})\1{2,}, r\1, text) # 重复≥2次的1-4字片段只保留1次 # 步骤2修正冗余助词/标点的的、、。。 text re.sub(r([的地得])\1, r\1, text) text re.sub(r([。])\1, r\1, text) # 步骤3按长度拆分语句补充标点每15-20字加句号 text re.sub(r(.{15,20})(?[^。]), r\1, text) # 步骤4首尾去空格/标点保证格式整洁 text text.strip(。 ) # 步骤5确保结尾有标点 if text and text[-1] not in [。, , ]: text 。 return text # 5. 训练数据 text_categories { 小说: 清晨的阳光透过窗帘的缝隙洒在木质地板上林晓揉了揉惺忪的睡眼坐起身来。窗外的鸟鸣清脆悦耳她伸了个懒腰想起今天要去街角的咖啡馆见一位许久未见的朋友。那家咖啡馆的拿铁总是格外香醇窗边的位置还能看到巷子里的老槐树风吹过的时候树叶沙沙作响像极了童年时外婆哼的歌谣。 她起身走到衣柜前选了一件浅杏色的针织衫搭配卡其色的半身裙简单的装扮却衬得她眉目温柔。出门前她往包里塞了一本刚买的散文集想着等朋友的间隙可以翻上几页。走在清晨的街道上空气里混着早餐店的豆浆香和路边桂花树的清甜脚步也不由得慢了下来。 咖啡馆的门是复古的木质推拉门推开门就闻到了浓郁的咖啡香。老板是个留着络腮胡的中年男人见她进来笑着递过一杯温水“林小姐还是老位置”她点点头走到靠窗的座位坐下窗外的老槐树叶子在风里轻轻晃着像在和她打招呼。 , 新闻: 国家统计局今日发布最新经济数据今年前三季度国内生产总值同比增长5.2%增速较上半年加快0.4个百分点。其中第三产业增加值增长6.1%消费市场持续回暖餐饮、旅游等接触型消费恢复态势良好。专家表示一系列稳增长政策落地见效经济运行保持回升向好的态势。 分产业看第一产业增加值同比增长3.8%粮食生产再获丰收秋粮收购工作有序推进第二产业增加值增长4.5%制造业增加值增长5.0%高端装备制造、新能源汽车等战略性新兴产业增速超过10%产业升级步伐加快。 消费市场方面社会消费品零售总额同比增长6.8%其中实物商品网上零售额增长8.4%占社会消费品零售总额的比重达26.1%。中秋、国庆假期期间全国国内旅游出游人次同比增长12.7%旅游收入增长14.8%居民消费意愿持续提升。 财政部相关负责人表示下一步将继续实施积极的财政政策加力提效落实好减税降费政策支持小微企业和个体工商户发展同时加大对民生领域的投入推动经济持续稳定增长。 , 诗歌: 月光洒在青石板上晚风拂过荷塘荷叶轻摇露珠滚落碎了一池的银辉。远山如黛星河浩瀚蝉鸣渐歇唯有蛙声伴着夜色在田野间轻轻回荡。这夏夜的温柔像一首未写完的诗藏在岁月的褶皱里轻轻一捻便溢出满袖的清香。 晨起推窗见白露沾衣秋意漫上阶前。篱边的菊开了三两朵嫩黄的瓣儿沾着晨雾像刚醒的孩童怯生生地望着这个世界。风里带着稻穗的香混着泥土的温润深吸一口便觉整个秋天都落进了胸腔里。 暮色里归鸟掠过天际留下几声轻啼。溪边的芦苇白了头随着晚风轻轻摇曳像在和远行的人挥手。江水悠悠载着落日的余晖流向远方而岸边的石凳上还留着故人坐过的温度和未说完的故事。 四季流转光阴如织那些藏在时光里的美好像散落在人间的星子只要愿意低头总能捡到一两片温柔妥帖收藏在寒凉的日子里暖透整个心房。 } # 6. 模型训练与评估 # 预处理文本 processed_texts {cat: preprocess_text(text) for cat, text in text_categories.items()} # 测试的n值 n_values [1, 2, 3, 4, 5] models {} generated_texts {} perplexities {} for cat in text_categories.keys(): models[cat] {} generated_texts[cat] {} perplexities[cat] {} words processed_texts[cat] # 分割训练集90%和测试集10% split_idx int(len(words) * 0.9) train_words words[:split_idx] test_words words[split_idx:] # 训练不同n值的模型 for n in n_values: model NGramModel(n) model.fit(train_words) models[cat][n] model # 生成50字文本更长长度更能体现连贯性 generated_texts[cat][n] model.generate_text(length50) # 计算困惑度 perplexities[cat][n] model.calculate_perplexity(test_words) # 7. 结果输出 print( 不同类别、不同n值生成的文本 ) for cat in text_categories.keys(): print(f\n【{cat}类文本】) for n in n_values: print(fn{n}: {generated_texts[cat][n]}) # 8. 可视化增强 def plot_perplexity_trend(): 绘制困惑度趋势图 fig, ax plt.subplots(figsize(12, 7)) markers [o, s, ^] colors [#1f77b4, #ff7f0e, #2ca02c] for idx, cat in enumerate(text_categories.keys()): ppl_vals [perplexities[cat][n] for n in n_values] ax.plot(n_values, ppl_vals, markermarkers[idx], colorcolors[idx], linewidth2, labelcat, markersize8) ax.set_xlabel(n值1Unigram55-gram, fontsize12) ax.set_ylabel(困惑度越低越好, fontsize12) ax.set_title(不同n值下各类文本的n-gram模型困惑度趋势, fontsize14) ax.set_xticks(n_values) ax.grid(axisy, alpha0.3) ax.legend(fontsize10) plt.tight_layout() plt.savefig(ngram_perplexity_trend.png, dpi300) plt.show() def plot_understandability_heatmap(): 绘制可理解性评分热力图 # 困惑度转可理解性评分反向归一化 all_ppl [perplexities[cat][n] for cat in text_categories for n in n_values] max_ppl max(all_ppl) min_ppl min(all_ppl) def ppl_to_score(ppl): score 10 - ((ppl - min_ppl) / (max_ppl - min_ppl)) * 10 return round(max(score, 0), 1) # 构建评分矩阵 categories list(text_categories.keys()) score_matrix np.array([ [ppl_to_score(perplexities[cat][n]) for n in n_values] for cat in categories ]) # 绘制热力图 fig, ax plt.subplots(figsize(10, 6)) im ax.imshow(score_matrix, cmapYlGnBu) # 添加数值标注 for i in range(len(categories)): for j in range(len(n_values)): text ax.text(j, i, score_matrix[i, j], hacenter, vacenter, colorblack, fontsize11) # 设置坐标轴 ax.set_xticks(np.arange(len(n_values))) ax.set_yticks(np.arange(len(categories))) ax.set_xticklabels([fn{n} for n in n_values]) ax.set_yticklabels(categories) ax.set_xlabel(n值, fontsize12) ax.set_ylabel(文本类别, fontsize12) ax.set_title(不同类别×n值生成文本的可理解性评分热力图1-10分, fontsize14) # 颜色条 cbar ax.figure.colorbar(im, axax) cbar.ax.set_ylabel(可理解性评分, rotation-90, vabottom, fontsize10) plt.tight_layout() plt.savefig(ngram_understandability_heatmap.png, dpi300) plt.show() # 绘制优化后的可视化图表 plot_perplexity_trend() plot_understandability_heatmap() # 优化效果分析 print(\n 不同n值生成文本的可理解性分析 ) print(1. n1Unigram仍为随机词汇堆砌但后处理后去除了重复可理解性约1-2分) print(2. n2Bigram词语搭配更合理Kneser-Ney平滑解决了低频搭配概率为0的问题可理解性约4-5分) print(3. n3Trigram上下文连贯性大幅提升能完整复现原文本的句式风格可理解性约8-9分) print(4. n4/54/5-gram因训练文本量扩充前缀缺失问题解决生成文本接近真人写作可理解性约9-9.5分) print(注Kneser-Ney平滑使低频次n-gram的概率估计更准确后处理进一步提升了文本的可读性和流畅度。)五、程序运行结果展示 不同类别、不同n值生成的文本 【小说类文本】n1: 看到递过混眉目窗外窗外在推拉门眉目几页阳光温水下来想起她她拿一件沙沙作响那出起身那能时路边懒腰前衬得洒温柔清脆悦耳木质递过温水脚步拿揉间隙像睡眼到窗帘老板一位散文集铁选搭配伸。n2: 的中年男人笑着络腮胡的睡眼坐起身来。咖啡馆的拿铁总是格外香醇脚步也不由得慢了下来。窗外的睡眼搭配卡其色的拿铁总是格外香醇她进来选了一件浅杏色的阳光。n3: 清晨的阳光透过窗帘的缝隙洒在木质地板上林晓揉了揉惺忪的睡眼坐起身来。窗外的鸟鸣清脆悦耳她伸了个懒腰想起今天要去街角的咖啡馆见一位许久未见的朋友。n4: 清晨的阳光透过窗帘的缝隙洒在木质地板上林晓揉了揉惺忪的睡眼坐起身来。窗外的鸟鸣清脆悦耳她伸了个懒腰想起今天要去街角的咖啡馆见一位许久未见的朋友。n5: 清晨的阳光透过窗帘的缝隙洒在木质地板上林晓揉了揉惺忪的睡眼坐起身来。窗外的鸟鸣清脆悦耳她伸了个懒腰想起今天要去街角的咖啡馆见一位许久未见的朋友。【新闻类文本】n1: 财政政策加力继续落地今日实施的落实提效提升恢复经济运行提升良好百分点推进积极零售总额制造业国内汽车降费较秋粮负责人占零售总额实物政策恢复出游出游财政部继续丰收获全国升级实物期间下一系列见效国内高端经济第一产业有序消费装备。n2: 今年前三季度国内生产总值同比增长其中增速超过其中实物商品网上零售额增长制造业增加值增长居民消费意愿持续回暖一系列稳增长经济运行保持回升向好的态势良好。其中增速较上半年加快。n3: 增长增速较上半年加快个百分点。其中第三产业增加值增长其中实物商品网上零售额增长其中实物商品网上零售额增长居民消费意愿持续提升。财政部相关负责人表示下一步将继续实施积极的财政政策加力提效。n4: 同比增长增速较上半年加快个百分点。其中第三产业增加值增长消费市场持续回暖餐饮旅游等接触型消费恢复态势良好。专家表示一系列稳增长政策落地见效经济运行保持回升向好的态势。分产业。n5: 国家统计局今日发布最新经济数据今年前三季度国内生产总值同比增长增速较上半年加快个百分点。其中第三产业增加值增长消费市场持续回暖餐饮旅游等接触型消费恢复态势良好。专家表示一系列稳增长政策落地。【诗歌类文本】n1: 便觉天际三便觉香温度晚风一首如织坐过三一口一首唯有两朵便香轻摇美好人间留下地望藏载掠过星河未余晖如织溪边深吸秋意四季石凳晚风青石板清香载人间如黛泥土晨起时光远方远方嫩黄秋意像拂过石凳。n2: 随着晚风轻轻一捻流向远方星河浩瀚在和未说完的余晖留下几声轻啼。暮色里星河浩瀚嫩黄的褶皱里像在岁月的美好轻轻摇曳嫩黄的星子和远行。n3: 像刚醒的孩童怯生生地望着这个世界。风里带着稻穗的香混着泥土的温润深吸一口便觉整个秋天都落进了胸腔里。暮色里轻轻一捻便溢出满袖的清香。晨起。n4: 月光洒在青石板上晚风拂过荷塘荷叶轻摇露珠滚落碎了一池的银辉。远山如黛星河浩瀚蝉鸣渐歇唯有蛙声伴着夜色在田野间轻轻回荡。这夏夜的温柔像一首未写。n5: 月光洒在青石板上晚风拂过荷塘荷叶轻摇露珠滚落碎了一池的银辉。远山如黛星河浩瀚蝉鸣渐歇唯有蛙声伴着夜色在田野间轻轻回荡。这夏夜的温柔像一首未写。 不同n值生成文本的可理解性分析 1. n1Unigram仍为随机词汇堆砌但后处理后去除了重复可理解性约1-2分2. n2Bigram词语搭配更合理Kneser-Ney平滑解决了低频搭配概率为0的问题可理解性约4-5分3. n3Trigram上下文连贯性大幅提升能完整复现原文本的句式风格可理解性约8-9分4. n4/54/5-gram因训练文本量扩充前缀缺失问题解决生成文本接近真人写作可理解性约9-9.5分注Kneser-Ney平滑使低频次n-gram的概率估计更准确后处理进一步提升了文本的可读性和流畅度。六、总结本文实现了一个基于n-gram的中文文本生成模型通过Kneser-Ney平滑优化概率估计解决了传统n-gram模型的数据稀疏问题。实验结果表明随着n值增大生成文本的可理解性显著提升。n1时生成随机词汇堆砌1-2分n2时形成简单搭配4-5分n3时上下文连贯性大幅提高8-9分n≥4时接近真人写作水平9-9.5分。模型还通过文本预处理、后处理优化等环节有效提升了生成质量。该方案完整实现了从训练到评估的闭环流程适用于不同风格的文本生成任务。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

网站建设方案论文1500国家高新技术企业认定

PaddlePaddle跨平台迁移注意事项:Linux与Windows差异 在深度学习项目从开发到部署的链条中,一个常见的场景是:工程师在Windows本地完成模型训练和调试,随后将代码与模型迁移到Linux服务器上进行生产化部署。这种“Windows开发 L…

张小明 2026/1/2 7:27:32 网站建设

网站备案资料表wordpress分级标题

Solaris系统进程与网络打印机管理全解析 1. 系统进程管理概述 操作系统的一项重要服务是管理用户提交的程序执行。一个程序可以启动多个进程,进程是具有自己执行线程和地址空间的程序片段。进程会使用CPU、磁盘空间等系统资源,并且可能会对系统造成损害,因此需要对其进行管…

张小明 2026/1/1 18:18:26 网站建设

pc网站建设需要提供哪些资料比较好的网站开发公司

【Linux命令大全】001.文件管理之mren命令(实操篇) ✨ 本文为Linux系统mren命令的全面讲解与实战指南,帮助您掌握这款MS-DOS文件系统内的文件重命名工具,实现高效的文件组织与管理。 (关注不迷路哈!!&#…

张小明 2026/1/5 7:22:11 网站建设

门户网站的基本特征有武钢建工集团建设公司网站

这里写目录标题项目介绍项目展示详细视频演示感兴趣的可以先收藏起来,还有大家在毕设选题(免费咨询指导选题),项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人技术栈文章下方名片联系我即可~解决的思路…

张小明 2026/1/6 12:05:25 网站建设

网站备案 前置审批文件美工自学教程

Dify开源LLM应用开发平台部署实战指南 在生成式AI浪潮席卷各行各业的今天,越来越多的企业和开发者希望快速构建具备智能对话、知识检索与自动化决策能力的应用。然而,从零搭建一个支持大模型接入、RAG增强、Agent逻辑编排的系统,往往需要投入…

张小明 2026/1/5 14:09:13 网站建设

wordpress站群插件四川建设网电话号码是多少

前言:从“玩具”到“工业”的跨越 在前几期文章中,我们探讨了鸿蒙与Flutter混合开发的架构、UI和通信细节。但在真实的商业项目中,**“怎么写代码”只是成功的一半,“怎么构建、怎么管理依赖、怎么自动化发布”**往往决定了项目的…

张小明 2026/1/5 16:21:41 网站建设