【NLP】自然语言项目设计02
目录
项目必要的前置知识内容
NLP评价指标 BLEU
项目名称:Lyricist AI - 歌词仿写生成器
项目架构
01数据预处理
代码核心架构总结
02数据可视化
代码核心架构总结
项目简介
训练一个模型,实现歌词仿写生成
任务类型:文本生成;
数据集是一份歌词语料,训练一个模型仿写歌词。
要求
1.清洗数据。歌词语料中包含韩文等非中英文符号,可对语料做预处理,仅保留中英文与标点符号;
2.训练模型、生成歌词;
3.用Gradio网页展示生成的歌词;
需要考虑的问题
1.使用语料数据集csv:lyric.csv,不用到数据库;
2.硬件使用的gpu是5g的n卡,比较有限,项目本身数据量和模型参数规模都不是特别大;
3.使用tensorflow2.9.1gpu版本的框架进行构建;
4.使用的网络架构,以及每个部分的组件网络、骨干网络等,优先在各个环节选用目前的sota模型;
5.在模型训练过程中要使用tensorboard可视化训练过程;6.对于数据的处理,先对csv进行必要的可视化,然后进行多语言歌词清洗(可参考的步骤:多语言过滤、特殊格式处理、分词策略、序列对齐、同义词替换、句式重组等);7.项目构建严格规范文件架构,做到一个脚本做一个环节(数据预处理脚本、模型构建脚本、训练、测试、推理等等);
项目必要的前置知识内容
NLP目前的一些sota模型(文本生成):LSTM(长短期记忆循环神经网络)、TransFormer(变形金刚,这是一个将深度学习模型推向大模型的里程碑模型,也是现在大语言模型的基座)
这是笔者的csdn博客地址:終不似少年遊*-CSDN博客
其中有关于这两个模型的一些浅析:
lstm
NLP-RNN-LSTM浅析_双向rnn-CSDN博客
transformer
大模型底座 Transformer 的核心技术解析_transformer底层技术架构-CSDN博客
Transformer+vit原理分析_transformer vit-CSDN博客
Transformer 的核心技术Encoder、Decoder、注意力模块解析-CSDN博客
从Attention机制到Transformer-CSDN博客
从Attention机制到Transformer02-CSDN博客
【NLP解析】多头注意力+掩码机制+位置编码:Transformer三大核心技术详解_掩码多头注意力-CSDN博客
deepseek的transformer模块和旋转位置编码_deepseek位置编码-CSDN博客
欢迎交流学习、共同进步!
NLP评价指标 BLEU
BLEU(Bilingual Evaluation Understudy)是一种用于评估机器翻译、文本生成等任务质量的评价指标。通过比较生成文本与参考文本(人工翻译或标准答案)的相似度来衡量模型性能。
BLEU 的基本原理
BLEU 的核心思想是统计生成文本与参考文本中重叠的 n-gram(连续词序列)的比例,并通过加权平均得到一个综合分数(0~1,越接近 1 越好)。
例如:
单字匹配(Unigram, n=1):比较单个词的匹配度;
双字匹配(Bigram, n=2):比较连续两个词的匹配度;
n-gram 匹配:比较连续 n 个词的匹配度。
例如,参考文本为 "The cat sat on the mat",生成文本为 "The cat is on the mat",则:
Unigram 匹配:The, cat, on, the, mat 共 5 个词匹配,总词数 6,Unigram 分数为 5/6 ≈ 0.83;
Bigram 匹配:The cat, on the, the mat 共 3 个词组匹配,总词组数 5,Bigram 分数为 3/5 = 0.6。
BLEU 分数的计算步骤
1. 计算 n-gram 精确度(Precision)
对于每个 n(通常取 1~4),计算生成文本中与参考文本匹配的 n-gram 数量占生成文本总 n-gram 数量的比例:
P_n = (生成文本中与参考文本匹配的 n-gram 数量) / (生成文本的总 n-gram 数量)
2. 应用 brevity penalty( brevity 惩罚)
若生成文本过短,可能导致 n-gram 匹配率虚高。因此,BLEU 引入 brevity penalty(BP)来惩罚过短的生成:
BP = min(1, exp(1 - r/c))
其中:
r 是参考文本的长度;
c 是生成文本的长度。
当 c ≥ r 时,BP = 1(无惩罚);当 c < r 时,BP < 1(惩罚因子)。
3. 计算最终 BLEU 分数
综合各阶 n-gram 的精确度,并应用 brevity penalty:
BLEU = BP × exp(∑(w_n × log(P_n)))
其中:
w_n 是各阶 n-gram 的权重,通常取均匀分布(如 w_1 = w_2 = w_3 = w_4 = 0.25);
P_n 是 n-gram 精确度;
BP 是 brevity penalty。
BLEU 的优缺点
优点:
计算简单高效:仅需统计 n-gram 匹配度,无需复杂模型;
与人工评价有较高相关性:在机器翻译领域,BLEU 分数与人工评估结果高度相关;
语言无关性:适用于任何语言对的评估。
缺点:
对词序敏感:生成文本与参考文本的词序不同时,分数可能偏低(即使语义相近);
忽略语义理解:仅关注表面的词匹配,不考虑深层语义(如同义词替换、句式变化);
短文本偏倚:过短的生成文本可能因 brevity penalty 被过度惩罚;
单参考文本局限性:若有多个参考译文,需特殊处理(如取最大值或平均值)。
BLEU 的变体与改进
Smooth BLEU:当某些 n-gram 匹配度为 0 时,log (0) 会导致计算问题,通过平滑处理避免此问题;
BLEU-N:明确指定使用的 n-gram 阶数(如 BLEU-4 表示使用 1~4 阶 n-gram);
cased vs uncased:区分大小写(cased)或不区分(uncased),通常不区分更常用;
加权 BLEU:对不同阶的 n-gram 赋予不同权重(如更重视高阶 n-gram)。
在 Python 中使用 BLEU
Python 的 nltk 和 sacrebleu 库提供了 BLEU 计算工具:
from nltk.translate.bleu_score import sentence_bleu, corpus_bleu
from nltk.tokenize import word_tokenize
import nltk
nltk.download('punkt')# 示例:单句 BLEU 计算
reference = [word_tokenize("The cat sat on the mat")] # 参考译文(可有多条)
candidate = word_tokenize("The cat is on the mat") # 生成译文# 计算各阶 BLEU 分数
bleu_1 = sentence_bleu(reference, candidate, weights=(1, 0, 0, 0)) # Unigram
bleu_2 = sentence_bleu(reference, candidate, weights=(0, 1, 0, 0)) # Bigram
bleu_4 = sentence_bleu(reference, candidate, weights=(0.25, 0.25, 0.25, 0.25)) # 标准 BLEU-4print(f"BLEU-1: {bleu_1:.4f}") # 输出: 0.8333
print(f"BLEU-2: {bleu_2:.4f}") # 输出: 0.6000
print(f"BLEU-4: {bleu_4:.4f}") # 输出: 0.5774(综合各阶分数)
BLEU 在实际应用中的注意事项
多参考文本处理:若有多个参考译文,应将其作为列表传入(如 references = [[ref1], [ref2]]);
文本预处理:需统一分词方式(如使用相同的 tokenizer),避免因分词差异影响分数;
BLEU 与人类评价的差异:高 BLEU 分数不绝对代表译文质量好,需结合人工评估;
适用场景:主要用于评估生成文本与参考文本的相似度,不适用于需要创造性或开放式生成的任务(如诗歌、故事生成)。
与其他评价指标的对比
ROUGE:侧重于召回率(参考文本中有多少内容被生成文本覆盖),常用于摘要任务;
METEOR:结合了单字匹配和同义词匹配,对词序变化更鲁棒;
BERTScore:基于预训练语言模型(如 BERT)计算语义相似度,更贴近人类理解;
人类评估:最可靠但成本最高,通常用于验证其他指标的有效性。
项目名称:Lyricist AI - 歌词仿写生成器
项目架构
lyric_generation/
├── data/
│ ├── raw/
│ │ └── lyric.csv
│ ├── processed/
│ │ ├── cleaned_lyrics.csv
│ │ ├── tokenizer.pkl
│ │ └── vocab.json
│ └── visualizations/
│ ├── data_analysis.html
│ └── length_distribution.png
├── src/
│ ├── data/
│ │ ├── init.py
│ │ ├── data_loader.py
│ │ ├── preprocessor.py
│ │ └── visualizer.py
│ ├── models/
│ │ ├── init.py
│ │ ├── transformer_model.py
│ │ ├── lstm_model.py
│ │ └── model_utils.py
│ ├── training/
│ │ ├── init.py
│ │ ├── trainer.py
│ │ └── callbacks.py
│ ├── inference/
│ │ ├── init.py
│ │ ├── generator.py
│ │ └── post_processor.py
│ └── utils/
│ ├── init.py
│ ├── config.py
│ └── helpers.py
├── scripts/
│ ├── 01_data_visualization.py
│ ├── 02_data_preprocessing.py
│ ├── 03_model_training.py
│ ├── 04_model_evaluation.py
│ └── 05_gradio_app.py
├── models/
│ ├── checkpoints/
│ └── saved_models/
├── logs/
│ └── tensorboard/
├── requirements.txt
├── config.yaml
└── README.md
Markdown
## 技术架构### 网络架构设计
1. **骨干网络**: Transformer-based架构- 使用轻量化的GPT-2风格decoder- 针对5GB GPU优化的模型参数2. **组件网络**:- **Embedding层**: 词嵌入 + 位置编码- **Multi-Head Attention**: 8个注意力头- **Feed Forward Network**: 隐藏层维度1024- **Layer Normalization**: 每个子层后应用- **Dropout**: 防止过拟合3. **模型规模优化**:- 模型参数: ~50M (适合5GB GPU)- 序列长度: 512 tokens- 批大小: 8-16### SOTA模型选择理由
1. **Transformer架构**: 当前文本生成的SOTA
2. **GPT-2结构**: 自回归生成,适合歌词创作
3. **BERT tokenizer**: 中英文混合处理能力强
4. **Gradient Accumulation**: 模拟大批量训练## 核心脚本功能### 1. 数据可视化脚本 (01_data_visualization.py)
- 歌词长度分布分析
- 语言成分统计
- 歌手作品数量分析
- 词频统计和可视化### 2. 数据预处理脚本 (02_data_preprocessing.py)
- 多语言过滤 (保留中英文)
- 特殊格式处理 (去除标记符号)
- 分词策略 (jieba + 英文分词)
- 序列对齐和填充
- 构建词汇表### 3. 模型训练脚本 (03_model_training.py)
- 模型构建和编译
- 训练循环实现
- TensorBoard集成
- 检查点保存
- 早停机制### 4. 模型评估脚本 (04_model_evaluation.py)
- 困惑度计算
- BLEU分数评估
- 生成样本质量分析### 5. Gradio应用脚本 (05_gradio_app.py)
- Web界面构建
- 实时生成展示
- 参数调节界面## 使用流程### 环境准备
```bash
# 创建虚拟环境
conda create -n lyric_gen python=3.8
conda activate lyric_gen# 安装依赖
pip install -r requirements.txt
01数据预处理
终端执行
python scripts/01_data_visualization.py
代码核心架构总结
脚本运行架构
模块化设计:
将数据加载、预处理、统计分析、可视化、报告生成分解为独立方法,职责单一,可复用。
数据流转清晰:
原始数据 → 清洗后数据(processed_lyrics)→ 分析用 DataFrame(processed_df)→ 可视化结果 / 报告,数据状态可追溯。
输出标准化:
所有可视化结果和报告统一保存到 data/visualizations 目录,便于查看和归档。
流程自动化:
通过 run_full_analysis 方法一键触发从数据加载到报告生成的全流程,降低使用成本。
歌词数据可视化分析系统架构(伪代码解析)
# 1. 核心类定义:封装所有数据处理与可视化功能
class LyricDataVisualizer:
成员变量:
- data_path: 原始数据路径(输入CSV文件)
- df: 原始数据DataFrame
- processed_lyrics: 预处理后的歌词列表(字典格式,含清洗后的歌词、长度等)
# 2. 初始化:绑定数据路径
方法 __init__(data_path):
self.data_path = data_path
初始化成员变量为空
# 3. 数据加载模块:读取原始数据
方法 load_data():
从 self.data_path 读取CSV文件到 self.df
输出:返回加载的DataFrame
副作用:填充 self.df
# 4. 数据预处理模块:清洗歌词文本
方法 preprocess_lyrics():
初始化 self.processed_lyrics 为空列表
遍历 self.df 每一行歌词:
若歌词是列表格式字符串(如"['a','b']"):解析为列表并拼接成文本
否则:直接取文本
清洗文本:移除特殊字符、统一空格
计算歌词长度(字符数)、词数
将结果(歌曲名、歌手、清洗后歌词、长度、词数)添加到 self.processed_lyrics
输出:无(结果存储在 self.processed_lyrics)
# 5. 基本统计分析模块:计算核心指标
方法 analyze_basic_stats():
将 self.processed_lyrics 转换为 processed_df(DataFrame)
计算统计量:
总歌曲数 = len(processed_df)
歌手数量 = 歌手列去重后计数
平均歌词长度、最长/最短歌词长度
平均词数
歌手作品数量排名(前10)
输出:返回 processed_df(供后续分析使用)
副作用:打印统计结果
# 6. 可视化模块1:长度与分布可视化
方法 plot_length_distribution(processed_df):
创建2x2子图:
子图1:歌词长度(字符数)分布直方图 + 平均值线
子图2:歌词词数分布直方图 + 平均值线
子图3:歌手作品数量分布直方图
子图4:作品数前15名歌手的水平条形图
保存图片到 data/visualizations/length_distribution.png
显示图片
# 7. 可视化模块2:语言成分分析
方法 analyze_language_composition(processed_df):
遍历每首歌词,计算:
中文占比(中文字符数/总字符数)
英文占比(英文字符数/总字符数)
标点占比(标点符号数/总字符数)
创建1x3子图:
子图1:中文占比分布直方图
子图2:英文占比分布直方图
子图3:标点占比分布直方图
保存图片到 data/visualizations/language_composition.png
显示图片
输出:返回包含三类占比的DataFrame
# 8. 可视化模块3:词频分析
方法 analyze_word_frequency(processed_df, top_n=50):
合并所有歌词文本,分离中文/英文内容:
中文:用jieba分词,过滤停用词(如"的"、"了")和短词(长度≤1)
英文:转为小写,过滤停用词(如"the"、"a")和短词(长度≤1)
统计词频:
中文高频词 = 中文词频前 top_n//2 名
英文高频词 = 英文词频前 top_n//2 名
创建1x2子图:
子图1:中文高频词水平条形图
子图2:英文高频词水平条形图
保存图片到 data/visualizations/word_frequency.png
显示图片
输出:返回中文词频计数器、英文词频计数器
# 9. 报告生成模块:整合结果为HTML
方法 generate_html_report(processed_df, language_stats, chinese_freq, english_freq):
构建HTML内容,包含:
基本统计信息(总歌曲数、歌手数等)
语言成分分析结果(中文/英文/标点占比)
高频词汇表(前10名中文/英文词)
作品数前10名歌手表
保存HTML到 data/visualizations/data_analysis.html
输出:打印报告路径
# 10. 主流程控制:串联所有步骤
方法 run_full_analysis():
1. 创建输出目录 data/visualizations(若不存在)
2. 调用 load_data() 加载原始数据
3. 调用 preprocess_lyrics() 预处理歌词
4. 调用 analyze_basic_stats() 生成 processed_df
5. 调用 plot_length_distribution(processed_df) 绘制长度分布
6. 调用 analyze_language_composition(processed_df) 分析语言成分
7. 调用 analyze_word_frequency(processed_df) 分析词频
8. 调用 generate_html_report(...) 生成最终报告
9. 打印完成信息及输出文件路径
# 11. 程序入口
if __name__ == "__main__":
创建 LyricDataVisualizer 实例(指定数据路径为 'data/raw/lyric.csv')
调用实例的 run_full_analysis() 方法启动完整流程
下面是先使用jupytr环境进行数据探索
python scripts/01_data_visualization.py
终端反馈
终端反馈
Loading data...
Data loaded: 19995 records
Preprocessing lyrics...
Processed 19995 lyrics=== 基本统计信息 ===
总歌曲数: 19995
歌手数量: 107
平均歌词长度: 347.42
最长歌词: 3257
最短歌词: 0
平均词数: 50.69作品最多的歌手: {'陈淑桦': 288, '罗文': 287, '陈慧娴': 282, '林淑容': 281, '郑少秋': 277, '张清芳': 276, '高凌风': 274, '梁咏琪': 273, '邰正宵': 266, '苏永康': 262}=== 语言成分分析 ===
平均中文比例: 0.916
平均英文比例: 0.077
平均标点比例: 0.007=== 词频分析 (前50词) ===
Building prefix dict from the default dictionary ...
Dumping model to file cache C:\Users\user\AppData\Local\Temp\jieba.cache
Loading model cost 0.496 seconds.
Prefix dict has been built successfully.
中文高频词:
没有: 10151
一个: 9845
我们: 9222
自己: 8091
什么: 6476
爱情: 6243
不要: 6100
知道: 5635
永远: 5500
世界: 5117
不会: 4574
寂寞: 4466
一切: 4373
快乐: 4313
不能: 4064
如果: 4045
可以: 3941
不再: 3907
这样: 3882
怎么: 3869英文高频词:
you: 11839
me: 5521
to: 5307
love: 4334
my: 4325
it: 3986
oh: 3922
in: 3015
your: 2670
be: 2401
we: 2345
baby: 2220
la: 2144
that: 2134
of: 2117
can: 2068
so: 2033
all: 1933
on: 1918
for: 1774
HTML报告已生成: data/visualizations/data_analysis.html=== 数据可视化分析完成 ===
请查看以下文件:
- data/visualizations/length_distribution.png
- data/visualizations/language_composition.png
- data/visualizations/word_frequency.png
- data/visualizations/data_analysis.html
02数据可视化
终端运行
python scripts/02_data_preprocessing.py
代码核心架构总结
脚本运行架构
优化导向设计:
所有模块围绕 “30 分钟训练” 目标,通过样本数量控制、词汇表精简、序列长度缩短三大策略降低计算量。
数据处理流水线:
原始数据 → 清洗过滤 → 分词 → 词汇表构建 → 序列转换 → 数据集划分,每一步均有明确的质量控制(如长度过滤、词频过滤)。
增量处理机制:
在清洗和采样阶段设置 early stop,达到目标样本数后立即终止,避免无效计算。
可复现性保障:
保存完整的配置信息和分词器,确保后续训练可基于相同的预处理逻辑。
训练友好输出:
生成包含时间估算和参数建议的报告,直接指导后续模型训练策略。
# 歌词数据预处理系统架构(30分钟训练优化版)
# 1. 核心类定义:封装数据预处理全流程
class DemoLyricPreprocessor:
成员变量:
- raw_data_path: 原始数据路径
- processed_data_dir: 处理后数据存储目录
- df: 原始数据DataFrame
- cleaned_lyrics: 清洗后的歌词列表(字典格式)
- tokenizer: 分词器
- vocab_size: 最终词汇表大小
初始化参数(核心优化点):
- max_samples = 1500 # 限制总样本数
- max_vocab_size = 3000 # 限制词汇表大小
- min_word_freq = 3 # 低频词过滤阈值
- max_sequence_length = 80 # 缩短序列长度
- min_lyric_length = 15 # 降低歌词长度下限
# 2. 初始化与环境准备
方法 __init__(raw_data_path, processed_data_dir):
设置输入输出路径
创建输出目录
打印优化参数配置
# 3. 数据加载模块
方法 load_raw_data():
从CSV加载原始数据到self.df
随机采样(若数据量过大),保留3倍目标样本数用于后续筛选
输出:原始数据DataFrame
# 4. 数据清洗模块(核心处理流程)
方法 clean_all_lyrics():
遍历原始数据每一行:
调用clean_single_lyric处理单条歌词
处理特殊格式(列表字符串转文本)
多语言过滤(保留中英文、数字、常用标点)
长度过滤(min/max_lyric_length)
分词策略(中文jieba分词、英文小写、标点保护)
有效词数检查(meaningful_token_count >= 2)
收集有效歌词到self.cleaned_lyrics
达到max_samples时提前终止
输出:清洗后的歌词列表
# 5. 词汇表构建模块(优化核心)
方法 build_vocabulary_with_frequency_filter():
统计所有歌词的词频
应用频率过滤(min_word_freq)
若词汇表仍过大,保留最高频词(max_vocab_size)
过滤歌词中的低频词
使用Tokenizer构建词汇表(设置oov_token='<UNK>')
输出:分词器tokenizer
# 6. 序列处理模块
方法 tokenize_and_pad_sequences():
将清洗后的歌词转换为数字序列
填充序列到固定长度(max_sequence_length)
统计序列长度分布(均值、中位数等)
输出:填充后的序列数组
# 7. 数据集划分模块
方法 split_data(sequences, test_size=0.15, val_size=0.15):
划分训练集/验证集/测试集
使用分层抽样确保数据分布一致
输出:文本分割结果、序列分割结果
# 8. 数据保存模块
方法 save_demo_data(text_splits, sequence_splits):
保存清洗后的歌词CSV
保存分词器(pickle格式)
保存词汇表映射(JSON格式)
保存训练/验证/测试集序列(npy格式)
保存配置信息(JSON格式)
生成预处理报告(Markdown格式)
# 9. 训练时间估算模块
方法 estimate_training_time():
根据样本数、batch_size估算每轮训练时间
计算30分钟内可完成的最大epoch数
输出:建议的最大训练轮数
# 10. 主流程控制
方法 run_demo_preprocessing():
加载数据 → 清洗歌词 → 构建词汇表 → 序列处理 → 划分数据集 → 保存数据 → 估算时间
打印最终统计信息及训练建议
# 11. 辅助处理方法(单条歌词处理)
方法 special_format_processing(lyric_data):
处理列表格式字符串 → 文本
清理特殊符号、HTML标签
标准化标点符号
方法 multilingual_filter(text):
保留中英文、数字、常用标点
清理多余空格
方法 segmentation_strategy(text):
保护标点符号(单独分词)
中文用jieba分词,英文转小写
过滤无效token
# 12. 程序入口
if __name__ == "__main__":
创建DemoLyricPreprocessor实例
调用run_demo_preprocessing()启动全流程
输出训练建议参数(batch_size、epochs等)
注意:
降级 NumPy 到 1.x 版本,TensorFlow 2.9.1 和 2.10.0 需要 NumPy 1.x 版本
检查:
pip show numpy
终端返回
� 运行调试模式...
=== 调试模式启动 ===
Loading raw data...
Loaded 19995 records原始数据样本:
Sample 1:
Name: 水瓶座男孩的心愿
Singer: 杜德伟
Lyric: ['深情的人在夜里扬着脸', '星光闪烁在天边', '耳语喧哗在不眠树影间', '灵魂游走夜的边缘', '风中的真心呼唤有谁听见', '水瓶星座有透明心愿', '为谁永不厌倦的吟唱春天
', '为谁诞生...
--------------------------------------------------
Sample 2:
Name: I Just Want To Be Your Everthing
Singer: 杜德伟
Lyric: ['《I Just Want To Be Your Everthing》', '☆杜德伟☆', '', '√Edited By CrazyXP√', 'For so long you and me b...
--------------------------------------------------
Sample 3:
Name: 印象
Singer: 杜德伟
Lyric: ['谁令我当晚举止失常', '难自禁望君你能见谅', '但觉万分紧张 皆因跟你遇上', '谁令我突然充满幻想', '谁令我音韵脑际飘扬', '撩动我内心爱情酝酿', '为我拨开忧伤 找得
失去乐畅', ...
--------------------------------------------------
Cleaning all lyrics...=== 处理第 1/19995 条记录 ===处理歌曲: 水瓶座男孩的心愿 - 杜德伟
原始歌词前100字符: ['深情的人在夜里扬着脸', '星光闪烁在天边', '耳语喧哗在不眠树影间', '灵魂游走夜的边缘', '风中的真心呼唤有谁听见', '水瓶星座有透明心愿', '为谁永不厌
倦的吟唱春天', '为谁诞生
格式处理后: 深情的人在夜里扬着脸 星光闪烁在天边 耳语喧哗在不眠树影间 灵魂游走夜的边缘 风中的真心呼唤有谁听见 水瓶星座有透明心愿 为谁永不厌倦的吟唱春天 为谁诞生在冷冷
二月天 想说出人间最后一句誓言 也许不够
过滤后: 深情的人在夜里扬着脸 星光闪烁在天边 耳语喧哗在不眠树影间 灵魂游走夜的边缘 风中的真心呼唤有谁听见 水瓶星座有透明心愿 为谁永不厌倦的吟唱春天 为谁诞生在冷冷二月
天 想说出人间最后一句誓言 也许不够
Building prefix dict from the default dictionary ...
Loading model from cache C:\Users\user\AppData\Local\Temp\jieba.cache
Loading model cost 0.503 seconds.
Prefix dict has been built successfully.
分词结果前10个: ['深情', '的', '人', '在', '夜里', '扬着', '脸', '星光', '闪烁', '在']
✅ 成功处理,词数: 121, 有意义词数: 121=== 处理第 2/19995 条记录 ===处理歌曲: I Just Want To Be Your Everthing - 杜德伟
原始歌词前100字符: ['《I Just Want To Be Your Everthing》', '☆杜德伟☆', '', '√Edited By CrazyXP√', 'For so long you and me b
格式处理后: I Just Want To Be Your Everthing 杜德伟 Edited By CrazyXP For so long you and me been finding each othe
过滤后: I Just Want To Be Your Everthing 杜德伟 Edited By CrazyXP For so long you and me been finding each othe
分词结果前10个: ['i', 'just', 'want', 'to', 'be', 'your', 'everthing', '杜德伟', 'edited', 'by']
✅ 成功处理,词数: 383, 有意义词数: 383=== 处理第 3/19995 条记录 ===处理歌曲: 印象 - 杜德伟
原始歌词前100字符: ['谁令我当晚举止失常', '难自禁望君你能见谅', '但觉万分紧张 皆因跟你遇上', '谁令我突然充满幻想', '谁令我音韵脑际飘扬', '撩动我内心爱情酝酿', '为我
拨开忧伤 找得失去乐畅',
格式处理后: 谁令我当晚举止失常 难自禁望君你能见谅 但觉万分紧张 皆因跟你遇上 谁令我突然充满幻想 谁令我音韵脑际飘扬 撩动我内心爱情酝酿 为我拨开忧伤 找得失去乐畅 谁令我
仿似初恋再尝 我心中蕴藏 爱意千百丈
过滤后: 谁令我当晚举止失常 难自禁望君你能见谅 但觉万分紧张 皆因跟你遇上 谁令我突然充满幻想 谁令我音韵脑际飘扬 撩动我内心爱情酝酿 为我拨开忧伤 找得失去乐畅 谁令我仿似
初恋再尝 我心中蕴藏 爱意千百丈
分词结果前10个: ['谁', '令', '我', '当晚', '举止', '失常', '难', '自禁', '望君', '你']
✅ 成功处理,词数: 95, 有意义词数: 95=== 处理第 4/19995 条记录 ===处理歌曲: 刻板都市 - 杜德伟
原始歌词前100字符: ['床前仍然亮了暗灯,闹钟声叫得过分,迷迷糊糊又再转身,开始去再次做机器人。', '沿途红黄绿正变更,是交通灯说不要问,垂头无言习惯了等,给支配,给操纵
这命运。', '啊,机器似的发动,每个没意识的冲
格式处理后: 床前仍然亮了暗灯,闹钟声叫得过分,迷迷糊糊又再转身,开始去再次做机器人。 沿途红黄绿正变更,是交通灯说不要问,垂头无言习惯了等,给支配,给操纵这命运。 啊
,机器似的发动,每个没意识的冲,啊,心里似没有
过滤后: 床前仍然亮了暗灯,闹钟声叫得过分,迷迷糊糊又再转身,开始去再次做机器人。 沿途红黄绿正变更,是交通灯说不要问,垂头无言习惯了等,给支配,给操纵这命运。 啊,机
器似的发动,每个没意识的冲,啊,心里似没有
分词结果前10个: ['床前', '仍然', '亮', '了', '暗灯', ',', '闹', '钟声', '叫', '得']
✅ 成功处理,词数: 351, 有意义词数: 283=== 处理第 5/19995 条记录 ===处理歌曲: My Girl - 杜德伟
原始歌词前100字符: ['《My Girl》', '', '', '√Edited By CrazyXP√', "I\\'ve got sunshine on a cloudy day", "And when it\\'s
格式处理后: My Girl Edited By CrazyXP I\'ve got sunshine on a cloudy day And when it\'s cold outside I\'ve got t
过滤后: My Girl Edited By CrazyXP I've got sunshine on a cloudy day And when it's cold outside I've got the
分词结果前10个: ['my', 'girl', 'edited', 'by', 'crazyxp', "I've", 'got', 'sunshine', 'on', 'a']
✅ 成功处理,词数: 228, 有意义词数: 205=== 处理第 6/19995 条记录 ===处理歌曲: Love Is Love - 杜德伟
原始歌词前100字符: ["You don't have to touch it to know", 'Love is everywhere that you go', "You don't have to touch it
格式处理后: You don't have to touch it to know Love is everywhere that you go You don't have to touch it to feel
过滤后: You don't have to touch it to know Love is everywhere that you go You don't have to touch it to feel
分词结果前10个: ['you', "don't", 'have', 'to', 'touch', 'it', 'to', 'know', 'love', 'is']
✅ 成功处理,词数: 118, 有意义词数: 118=== 处理第 7/19995 条记录 ===处理歌曲: 爱人请你不要紧张 - 杜德伟
原始歌词前100字符: ['我偶尔独来独往', '只因为生活过于繁忙 想逛逛', '你何必那么紧张', '我从来都不曾有 背叛的思想 别乱想', '我爱你天经地义 地久又天长', '请相信 我的忧
郁 只是短暂', '爱人请你
格式处理后: 我偶尔独来独往 只因为生活过于繁忙 想逛逛 你何必那么紧张 我从来都不曾有 背叛的思想 别乱想 我爱你天经地义 地久又天长 请相信 我的忧郁 只是短暂 爱人请你不要
紧张 那个人只是玩伴 没有感情 没有
过滤后: 我偶尔独来独往 只因为生活过于繁忙 想逛逛 你何必那么紧张 我从来都不曾有 背叛的思想 别乱想 我爱你天经地义 地久又天长 请相信 我的忧郁 只是短暂 爱人请你不要紧张
那个人只是玩伴 没有感情 没有
分词结果前10个: ['我', '偶尔', '独来独往', '只', '因为', '生活', '过于', '繁忙', '想', '逛逛']
✅ 成功处理,词数: 206, 有意义词数: 206=== 处理第 8/19995 条记录 ===处理歌曲: 天长地久 - 杜德伟
原始歌词前100字符: ['你 对我来说', '是个最美的梦', '总是让我寄托', '和你迎着风', '带着我一直痴心的温柔', '让每一分钟都不会错过', '爱 天长地久', '有话想对你说', '你是
我的所有', '有
格式处理后: 你 对我来说 是个最美的梦 总是让我寄托 和你迎着风 带着我一直痴心的温柔 让每一分钟都不会错过 爱 天长地久 有话想对你说 你是我的所有 有你就有我 这世上只愿为
了你守侯 不再容易寂寞 在我生活中
过滤后: 你 对我来说 是个最美的梦 总是让我寄托 和你迎着风 带着我一直痴心的温柔 让每一分钟都不会错过 爱 天长地久 有话想对你说 你是我的所有 有你就有我 这世上只愿为了你
守侯 不再容易寂寞 在我生活中
分词结果前10个: ['你', '对', '我', '来说', '是', '个', '最美', '的', '梦', '总是']
✅ 成功处理,词数: 184, 有意义词数: 184=== 处理第 9/19995 条记录 ===处理歌曲: 爱不坏 - 杜德伟
原始歌词前100字符: ['你摇头要我的爱不坏', '还是要我别离开', '你摇头要我的爱不改', '还是要我别过来', '你要你的自由自在', 'Baby I cant read your mind', '你只是心摇摆',格式处理后: 你摇头要我的爱不坏 还是要我别离开 你摇头要我的爱不改 还是要我别过来 你要你的自由自在 Baby I cant read your mind 你只是心摇摆 却是渴望爱 你从不怕伤害 最好
全场一起hi
过滤后: 你摇头要我的爱不坏 还是要我别离开 你摇头要我的爱不改 还是要我别过来 你要你的自由自在 Baby I cant read your mind 你只是心摇摆 却是渴望爱 你从不怕伤害 最好全场
一起hi
分词结果前10个: ['你', '摇头', '要', '我', '的', '爱', '不坏', '还是', '要', '我别']
✅ 成功处理,词数: 467, 有意义词数: 463=== 处理第 10/19995 条记录 ===处理歌曲: 这一双手 - 杜德伟
原始歌词前100字符: ['他一手捧你到处应酬 他施舍给你富有', '不必我工作没计较报酬', '', '没晚没夜 也要奋斗', '', '他珠光宝气叫你好奇 他供给你花花世界', '', '可是我只会
赠你爱情 再送你浪漫回
格式处理后: 他一手捧你到处应酬 他施舍给你富有 不必我工作没计较报酬 没晚没夜 也要奋斗 他珠光宝气叫你好奇 他供给你花花世界 可是我只会赠你爱情 再送你浪漫回味 抱歉我只得
这一对手 或者找不到辉煌成就 与你以心
过滤后: 他一手捧你到处应酬 他施舍给你富有 不必我工作没计较报酬 没晚没夜 也要奋斗 他珠光宝气叫你好奇 他供给你花花世界 可是我只会赠你爱情 再送你浪漫回味 抱歉我只得这一
对手 或者找不到辉煌成就 与你以心
分词结果前10个: ['他', '一手', '捧', '你', '到处', '应酬', '他', '施舍', '给', '你']
✅ 成功处理,词数: 192, 有意义词数: 192=== 处理第 11/19995 条记录 ===处理歌曲: 不走 - 杜德伟
原始歌词前100字符: ['挺著胸 勇敢的面對呼唏的風', '傷心總是帶不走痛', '有時候我覺得自己很沒用', '沉默 完完全全把你放在心中', '有太多的話想對你說面對你都說不出口', '眼
睜睜的看著你離開我', '我明
格式处理后: 挺著胸 勇敢的面對呼唏的風 傷心總是帶不走痛 有時候我覺得自己很沒用 沉默 完完全全把你放在心中 有太多的話想對你說面對你都說不出口 眼睜睜的看著你離開我 我明
白你有你的理由 你回頭笑笑的看我 我心中
过滤后: 挺著胸 勇敢的面對呼唏的風 傷心總是帶不走痛 有時候我覺得自己很沒用 沉默 完完全全把你放在心中 有太多的話想對你說面對你都說不出口 眼睜睜的看著你離開我 我明白你
有你的理由 你回頭笑笑的看我 我心中
分词结果前10个: ['挺著', '胸', '勇敢', '的', '面', '對', '呼', '唏', '的', '風']
✅ 成功处理,词数: 222, 有意义词数: 222
调试模式:只处理前10条记录✅ 清理完成: 11 条有效记录 / 19995 条原始记录
Building tokenizer and vocabulary...
总token数: 2567
独特token数: 774最常见的20个tokens:'我': 107'你': 85'的': 76',': 54'i': 44'you': 39'to': 36'要': 31'me': 30'love': 30'爱': 28'the': 28'在': 24'my': 22'有': 21'girl': 21',': 21'be': 20'不': 19'your': 18文本样本:
样本1: 深情 的 人 在 夜里 扬着 脸 星光 闪烁 在 天边 耳语 喧哗 在 不眠 树影 间 灵魂 游走 夜 的 边缘 风中 的 真心 呼唤 有 谁 听见 水瓶 星座 有 透明 心愿 为 谁 永不 厌
倦 的...
样本2: i just want to be your everthing 杜德伟 edited by crazyxp for so long you and me been finding each othe...
样本3: 谁 令 我 当晚 举止 失常 难 自禁 望君 你 能 见谅 但觉 万分 紧张 皆 因 跟 你 遇上 谁 令 我 突然 充满 幻想 谁 令 我 音韵 脑际 飘扬 撩动 我 内心 爱情 酝酿 为 我
拨开...✅ Tokenizer构建完成:
词汇表大小: 776
OOV token: <UNK>词汇表前20个词:'<UNK>': 1'我': 2'你': 3'的': 4',': 5'i': 6'you': 7'to': 8'要': 9'me': 10'love': 11'爱': 12'the': 13'在': 14'my': 15'有': 16'girl': 17',': 18'be': 19'不': 20=== 分词测试 ===
文本1: 深情 的 人 在 夜里 扬着 脸 星光 闪烁 在 天边 耳语 喧哗 在 不眠 树影 间 灵魂 游走 ...
序列1: [379, 4, 56, 14, 217, 380, 381, 218, 219, 14]...
解码1: 深情 的 人 在 夜里 扬着 脸 星光 闪烁 在 天边 耳语 喧哗 在 不眠 树影 间 灵魂 游走 ...
--------------------------------------------------
文本2: i just want to be your everthing 杜德伟 edited by cra...
序列2: [6, 75, 40, 8, 19, 21, 420, 421, 242, 243]...
解码2: i just want to be your everthing 杜德伟 edited by cra...
--------------------------------------------------
文本3: 谁 令 我 当晚 举止 失常 难 自禁 望君 你 能 见谅 但觉 万分 紧张 皆 因 跟 你 遇上 ...
序列3: [27, 80, 2, 433, 434, 435, 436, 437, 438, 3]...
解码3: 谁 令 我 当晚 举止 失常 难 自禁 望君 你 能 见谅 但觉 万分 紧张 皆 因 跟 你 遇上 ...
--------------------------------------------------� 修复成功!
词汇表大小: 775
有效歌词数: 11