佛山 网站开发,wordpress环境需求,爱站工具seo综合查询,做外贸流程详细步骤文章目录 学习过程赛题理解学习目标赛题数据数据标签评测指标解题思路TF-IDF介绍TF-IDF 机器学习分类器TF-IDF LinearSVCTF-IDF LGBMClassifier 学习过程
20年当时自身功底是比较零基础(会写些基础的Python[三个科学计算包]数据分析)#xff0c;一开始看这块其实挺懵的 机器学习分类器TF-IDF LinearSVCTF-IDF LGBMClassifier 学习过程
20年当时自身功底是比较零基础(会写些基础的Python[三个科学计算包]数据分析)一开始看这块其实挺懵的不会就去问百度或其他人当时遇见困难挺害怕的但22后面开始力扣题【目前已刷好几轮博客没写力扣文章之前力扣排名靠前已刷有5遍左右排名靠后刷3次左右代码功底也在一步一步提升】不断地刷、遇见代码不懂的代码也开始去打印print去理解到后面问其他人的问题越来越少个人自主学习、自主解决能力也得到了进一步增强。
赛题理解
赛题名称零基础入门NLP之新闻文本分类赛题目标通过这道赛题可以引导大家走入自然语言处理的世界带大家接触NLP的预处理、模型构建和模型训练等知识点。赛题任务赛题以自然语言处理为背景要求选手对新闻文本进行分类这是一个典型的字符识别问题。
学习目标
理解赛题背景与赛题数据完成赛题报名和数据下载理解赛题的解题思路
赛题数据
赛题以匿名处理后的新闻数据为赛题数据数据集报名后可见并可下载。赛题数据为新闻文本并按照字符级别进行匿名处理。整合划分出14个候选分类类别财经、彩票、房产、股票、家居、教育、科技、社会、时尚、时政、体育、星座、游戏、娱乐的文本数据。
赛题数据由以下几个部分构成训练集20w条样本测试集A包括5w条样本测试集B包括5w条样本。为了预防选手人工标注测试集的情况我们将比赛数据的文本按照字符级别进行了匿名处理。
数据标签
处理后的赛题训练数据如下 在数据集中标签的对应的关系如下{‘科技’: 0, ‘股票’: 1, ‘体育’: 2, ‘娱乐’: 3, ‘时政’: 4, ‘社会’: 5, ‘教育’: 6, ‘财经’: 7, ‘家居’: 8, ‘游戏’: 9, ‘房产’: 10, ‘时尚’: 11, ‘彩票’: 12, ‘星座’: 13}
评测指标
评价标准为类别f1_score的均值选手提交结果与实际测试集的类别进行对比结果越大越好。
解题思路
赛题思路分析赛题本质是一个文本分类问题需要根据每句的字符进行分类。但赛题给出的数据是匿名化的不能直接使用中文分词等操作这个是赛题的难点。
因此本次赛题的难点是需要对匿名字符进行建模进而完成文本分类的过程。由于文本数据是一种典型的非结构化数据因此可能涉及到特征提取和分类模型两个部分。为了减低参赛难度我们提供了一些解题思路供大家参考
思路1TF-IDF 机器学习分类器 直接使用TF-IDF对文本提取特征并使用分类器进行分类。在分类器的选择上可以使用SVM、LR、或者XGBoost。
思路2FastText FastText是入门款的词向量利用Facebook提供的FastText工具可以快速构建出分类器。
思路3WordVec 深度学习分类器 WordVec是进阶款的词向量并通过构建深度学习分类完成分类。深度学习分类的网络结构可以选择TextCNN、TextRNN或者BiLSTM。
思路4Bert词向量 Bert是高配款的词向量具有强大的建模学习能力。
这里使用思路1TF-IDF 机器学习分类器 及 思路4Bert词向量
TF-IDF介绍
TF-IDF 分数由两部分组成第一部分是词语频率Term Frequency第二部分是逆文档频率Inverse Document Frequency。其中计算语料库中文档总数除以含有该词语的文档数量然后再取对数就是逆文档频率。
TF(t) 该词语在当前文档出现的次数 / 当前文档中词语的总数 IDF(t) log_e文档总数 / 出现该词语的文档总数
TF-IDF 机器学习分类器
TF-IDF LinearSVC
# TF-IDF LinearSVC
import numpy as np
import pandas as pd
from sklearn.model_selection import KFold
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.svm import LinearSVC
from sklearn.metrics import f1_score, confusion_matrix, recall_score, precision_scoreprint(开始读取数据)
train_df pd.read_csv(train_set.csv, sep\t)
test_df pd.read_csv(test_a.csv, sep\t)
print(结束读取数据)print(开始tfidf)
tfidf TfidfVectorizer(sublinear_tfTrue,strip_accentsunicode,analyzerword,token_patternr\w{1,},stop_wordsenglish,ngram_range(1,3),max_features10000)tfidf.fit(pd.concat([train_df[text], test_df[text]]))
train_word_features tfidf.transform(train_df[text])
test_word_features tfidf.transform(test_df[text])X_train train_word_features
y_train train_df[label]
X_test test_word_features
print(结束tfidf)print(开始TF-IDF LinearSVC)
# https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.KFold.html#sklearn.model_selection.KFold
KF KFold(n_splits10, random_state7)
clf LinearSVC()
test_pred np.zeros((X_test.shape[0], 1), int) # 存储测试集预测结果 行数len(X_test) ,列数1列
for KF_index, (train_index,valid_index) in enumerate(KF.split(X_train)):print(第, KF_index1, 折交叉验证开始...)# 训练集划分x_train_, x_valid_ X_train[train_index], X_train[valid_index]y_train_, y_valid_ y_train[train_index], y_train[valid_index]# 模型构建clf.fit(x_train_, y_train_)# 模型预测val_pred clf.predict(x_valid_)print(LinearSVC准确率为,f1_score(y_valid_, val_pred, averagemacro))# 保存测试集预测结果test_pred np.column_stack((test_pred, clf.predict(X_test))) # 将矩阵按列合并
# 取测试集中预测数量最多的数
preds []
for i, test_list in enumerate(test_pred):preds.append(np.argmax(np.bincount(test_list)))
preds np.array(preds)result pd.DataFrame(preds, columns[label])
result.to_csv(TFIDF_LinearSVC_submission_0304.csv, encodinggbk, indexFalse)
print(结束TF-IDF LinearSVC)score:0.9410
TF-IDF LGBMClassifier
# https://github.com/Goldgaruda/Tianchi-NLP-News-Text-Classification-Rank-5-solution/blob/main/tfidf/cv.py
import numpy as np
import pandas as pd
from sklearn.model_selection import KFold
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics import f1_score
from lightgbm import LGBMClassifierprint(开始读取数据)
train_df pd.read_csv(train_set.csv, sep\t)
test_df pd.read_csv(test_a.csv, sep\t)
print(结束读取数据)print(开始tfidf)
tfidf TfidfVectorizer(sublinear_tfTrue,strip_accentsunicode,analyzerword,token_patternr\w{1,},stop_wordsenglish,ngram_range(1,3),max_features10000)print(train_df.head():, train_df.head())tfidf.fit(np.concatenate((train_df[text].iloc[:].values,test_df[text].iloc[:].values),axis0))
train_word_features tfidf.transform(train_df[text].iloc[:].values)
test_word_features tfidf.transform(test_df[text].iloc[:].values)X_train train_word_features
y_train train_df[label]
X_test test_word_features
print(开始tfidf)print(开始TF-IDF LGBMClassifier)
KF KFold(n_splits5, random_state7)
clf LGBMClassifier(n_jobs-1, feature_fraction0.7, bagging_fraction0.4, lambda_l10.001, lambda_l20.01, n_estimators600)# 存储测试集预测结果 行数len(X_test) ,列数1列
test_pred np.zeros((X_test.shape[0], 1), int)for KF_index, (train_index,valid_index) in enumerate(KF.split(X_train)):print(第, KF_index1, 折交叉验证开始...)# 训练集划分x_train_, x_valid_ X_train[train_index], X_train[valid_index]y_train_, y_valid_ y_train[train_index], y_train[valid_index]# 模型构建clf.fit(x_train_, y_train_)# 模型预测val_pred clf.predict(x_valid_)print(LGBMClassifier准确率为,f1_score(y_valid_, val_pred, averagemacro))# 保存测试集预测结果test_pred np.column_stack((test_pred, clf.predict(X_test))) # 将矩阵按列合并# 取测试集中预测数量最多的数
preds []
for i, test_list in enumerate(test_pred):preds.append(np.argmax(np.bincount(test_list)))
preds np.array(preds)result pd.DataFrame(preds, columns[label])
result.to_csv(TFIDF_LGBMClassifier_submission_0304.csv, encodinggbk, indexFalse)
print(结束TF-IDF LGBMClassifier)score:0.9509
比赛源自阿里云天池大赛 - 零基础入门NLP - 新闻文本分类