当前位置: 首页 > news >正文

【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

http://www.lqws.cn/news/531631.html

相关文章:

  • MySQL (一):数据类型,完整性约束和表间关系
  • 12345政务热线系统:接诉即办,赋能智慧城市治理
  • 指标中台+大模型:解密衡石Agentic BI的NL2DSL架构实现
  • Prompt工程解析:从指令模型到推理模型的提示词设计
  • Linux 和 Windows 服务器:哪一个更适合您的业务需求?
  • 黑马JVM解析笔记(四):Javap图解指令流程,深入理解Java字节码执行机制
  • 创建Django项目
  • JVM调优实战 Day 7:JVM线程分析与死锁排查
  • 动态库与静态库【Linux】
  • 前端替换打包后文件中的内容方案(可用于渗透测试后将问题版本号清空临时解决方案)
  • 事务相关问题
  • 数学:逆元,同余
  • 热点代码探测确定何时JIT
  • Codeforces Educational Round 180 题解
  • 【25软考网工】第十章 网络规划与设计(2)网络规划与分析、网络结构与功能
  • [按键手机安卓/IOS脚本插件开发] 按键插件调试与判断循环结构辅助工具
  • Jenkins执行Jenkinsfile报错
  • 可用的.gitignore文件
  • LDO的自放电功能
  • UE Universal Camera 相机插件-限制镜头在区域内移动
  • 认识Jacobian
  • 数学:初步了解什么是线性代数?
  • 开发语言漫谈-R语言
  • 超实用AI工具分享——ViiTor AI视频配音功能教程(附图文)
  • LeVERB:利用潜视觉-语言指令进行人形机器人全身控制
  • Oracle数据库捕获造成死锁的SQL语句
  • SDL渲染RGB图像
  • 高通手机跑AI系列之——穿衣试装算法
  • YOLOv10tensorRT推理代码C++
  • 虚拟化测试工具Parasoft Virtualize的两大核心功能及应用