费曼说:学习一件事情最好的方式是做它的老师,这也是写这篇博文的目的,写这篇博文,即便有其他原因,但更多的还是写给自己,话不多说,让我们开始进入NLP吧
本次的内容主要还是对赛题进行一个赛题理解也就是读题的工作,并熟悉天池实验室的使用过程。同时,也是对于本次比赛数据的一个读取和熟悉的工作。
任务说明:任务task1
基座课程:基座课程
由于篇幅,我们将task1和task2的学习笔记合并到同一篇文章之中,因此,本篇文章也将分上下片来进行。
第一篇:赛题理解及个人自加的对各实验平台探索
导言:本次的内容分为,数据集下载并查看、对赛题及学习安排的了解、各实验平台的测试及比较
1.数据集下载并查看
谈到机器学习,我们自然会想到它的几个重要的组分:数据、模型、目标函数、优化器,而数据则是机器学习最原始也是不可或缺的一部分,数据的数量和质量,直接关乎机器学习成功与否。因此,对于数据,我们需要有足够的了解才行。
对数据的查看:
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
from scipy.special import jn
from IPython.display import display, clear_output
import time
import pandas as pd
train_df = pd.read_csv('train_set.csv', sep='\t', nrows=200000)
train_df.head()
统计分析:得知,中位数为676,最大为57921,方差较大
用图标更直观的看待:本次数据标签有14个,而分布的特点是从0到13数量依次减少,后期可以考虑对于标签的分布不均的解决方式:
本次的字符为数字,所以赛方提示我们目的是为了统计每个text标签中字符3750,字符900,和字符648的频率,从而得出这三个数字可能是标点符号,可用于断句和在作为置零不考虑:
2.作业1:homework.1
分析:这其实是计数的工作,用到的是Counter库,目的是为了统计每个text标签中字符3750,字符900,和字符648的频率,然后做一个求平均值的操作就行了
尝试一:结果:失败
本次使用lambda函数断句,结果显示系统的处理速度有限:NotebookApp.iopub_data_rate_limit=1000000.0 (bytes/sec)
于是,换一种方式吧!
尝试二:结果:成功
3.一些探索性尝试:
对于每段代码的执行时间的量化和记录:
方法一:使用time包进行计时
方法二:
方式三:
其实最常用的还是在代码前面加一个%%time就够快速了
4.作业二:统计每类新闻中出现次数对多的字符
出现频率最高的字符的统计
分析:首先应该用标签标签对train_df进行排序,然后应该使用str.cat函数来附加文本,然后使用计数器来统计文本中的单词,最后使用most_common来获得每个标签中最频繁的单词
过程:数据浏览![](https://i-blog.csdnimg.cn/blog_migrate/e147bc79c3b292810dda4fa878e90946.png)
这段代码的目标是对训练数据进行处理和分析,并输出每个标签下出现频率最高的单词以及其频率和百分比。
代码的主要步骤如下:
1. 使用`train_df['text'].apply(lambda x: x.replace('3750',"").replace('900',"").replace('648',""))`将文本数据中的特定字符串('3750','900','648')替换为空字符串。
2. 使用`groupby`函数按照标签(label)对处理后的文本进行分组,并使用`lambda`函数将每个组内的文本连接成一个长字符串。
3. 迭代每个标签和对应的文本:
- 使用`Counter`函数统计文本中单词的出现次数,并获取出现频率最高的单词和其频率。
- 使用`sum`函数计算文本中总共出现的单词数。
- 计算频率最高单词的百分比。
- 使用`print`函数输出标签、最常见单词、频率和百分比的信息。
数据统计及所用时间:![](https://i-blog.csdnimg.cn/blog_migrate/70db7ed1584b483a4a13dec718c542f9.png)
4.学习平台:
百度:paddle![](https://i-blog.csdnimg.cn/blog_migrate/31994d1d6676a04ef785b7642d7257d9.png)
谷歌:colar![](https://i-blog.csdnimg.cn/blog_migrate/e3141a57605e5007aae238e66c163136.png)
自带:jupyter notebook
阿里云:天池实验室
各有利弊。
5.赛题方法了解
前两种方法有成熟的包,实践起来较容易,而后两种方法则需要对于相关的知识有着更加深入的理解和代码的功底:
思路1:TF-IDF + 机器学习分类器
这种方法使用TF-IDF对文本进行特征提取,并使用机器学习分类器进行分类。TF-IDF(Term Frequency-Inverse Document Frequency)是一种常用的文本特征表示方法,可以衡量一个词在文本中的重要程度。在这种方法中,可以选择使用SVM(支持向量机)、LR(逻辑回归)或者XGBoost等机器学习分类器来建立分类模型。
思路2:FastText
FastText是一种简单且高效的词向量表示方法,由Facebook提供的工具包实现。它将每个单词表示为n-gram字符的集合,并通过简单的神经网络进行分类。通过使用FastText工具包,可以快速构建文本分类器,适用于较小规模的文本分类任务。
思路3:WordVec + 深度学习分类器
WordVec是一种更高级的词向量表示方法,通过训练深度学习模型(如TextCNN、TextRNN或BiLSTM)来学习单词的分布式表示。这种方法利用深度学习模型的能力来捕捉单词之间的语义关系,并将其应用于文本分类任务。通过构建深度学习分类器,可以在更复杂的文本分类问题上获得更好的性能。
思路4:Bert词向量
Bert(Bidirectional Encoder Representations from Transformers)是一种基于Transformer模型的预训练语言模型,具有强大的建模学习能力。Bert可以生成更加丰富和准确的词向量表示,从而提高文本分类的性能。通过使用预训练的Bert模型和微调技术,可以构建一个高性能的文本分类器,适用于复杂的自然语言处理任务。
这些思路提供了不同的选择,根据任务的规模、数据集的特点和资源的可用性,可以选择适合的方法来构建文本分类模型。前两种方法相对较简单,而后两种方法需要更深入的理解和代码功底,但可以获得更好的性能和表示能力。
6.总结
本次学习了数据的统计和对赛题数据的了解,同时也了解了本次学习的思路:如传统的机器学习,深度学习,大模型等,总体来说是对语言模型和本次比赛内容有了初步的认识。