charon-x/Language-Identification
0
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
🌐 语种识别模型训练项目说明
本项目旨在利用机器学习方法,基于多语言数据集(lang_data.csv)训练一个能够准确识别文本语种(如 zh, en, ar, ja 等)的小型模型。
我们使用了 scikit-learn 库,并迭代了三种不同的特征工程和模型组合方案(V1、V2、V3),以寻求在准确性、特别是对相似语种(如中文和日文)的区分度上的最佳平衡。
🛠️ 三种训练方案(V1 - V3)对比与介绍
本项目的所有优化均围绕核心挑战展开:如何在高维稀疏的文本特征上,提高模型对不同语种的区分能力。
方案详情与实施步骤
1\. V1 基础方案 (MultinomialNB)
- 模型选择:
MultinomialNB。 - 特征提取:
TfidfVectorizer(analyzer='char', ngram_range=(2, 3), max_features=50000)。 - 介绍: V1 方案是文本分类的起点。朴素贝叶斯基于概率模型,训练速度快,在特征独立性较强时效果优秀。但是,它对高度重叠的特征(如中文和日文共用的汉字字符)缺乏区分能力,容易导致混淆。
2\. V2 优化方案 (Logistic Regression)
- 模型选择:
LogisticRegression。 - 特征提取:
TfidfVectorizer(analyzer='char', ngram_range=(2, 5), max_features=100000)。 - 关键改进:
- 扩大 N-gram (2, 5): 强制模型学习更长、更独特的字符序列(例如,4 字符和 5 字符的组合),这是区分 CJK 语言的关键。
- 更换模型: Logistic Regression 相比朴素贝叶斯,能更好地学习特征之间的权重和关联性,是更强大的线性分类器。
3\. V3 进阶方案 (LinearSVC + SVD Pipeline)
- 模型选择:
Pipeline封装TruncatedSVD和LinearSVC。 - 特征提取:
TfidfVectorizer(2, 5)-\>TruncatedSVD(n_components=5000)。 - 关键改进:
- 降维 (SVD): 将高维稀疏的 TF-IDF 矩阵(100k 维)投影到低维稠密的特征空间(例如 5000 维)。这可以去除噪声,并提取数据中的主要变化趋势。
- LinearSVC: 支持向量机在处理降维后的特征时,能找到最佳的分类超平面,在文本分类任务的基准测试中,往往比逻辑回归和朴素贝叶斯表现更优。
📂 项目结构
所有方案的文件均放在对应的版本文件夹中(例如,您本次修改将所有文件放在了 V2 或 V3 文件夹中)。
.
├── lang_data.csv # 核心数据集文件 (labels, text)
├── train.py # 训练脚本 (根据版本选择不同的模型和特征)
├── test.py # 预测脚本 (加载模型并进行交互式测试)
├── language_detector_*.pkl # 训练生成的模型文件
└── requirements.txt # 项目依赖运行环境
本项目基于 Python,需要以下库:
pip install pandas scikit-learn joblib使用指南
- 选择版本: 进入你想要测试的优化版本文件夹(例如
V3)。 - 训练模型:
python train.py- 预测测试:
python test.pytest.py脚本会加载模型并启动交互式模式,同时提供当前支持的语种列表。- 建议使用较长的完整句子进行测试,以获得更准确的结果和更高的置信度。
