NLP之新闻文本分类——Task3

Task3——基于机器学习的文本分类

1.⽂本表示方法

这里插入一下word2vec,在讲word2vec的过程中一般要对one-hot进行介绍,这里推荐一篇文章,很详细的揭示了文本表示的本质(主要是word2vec)。
秒懂词向量word2vec的本质

1.1 One-hot
这里的One-hot与数据挖掘任务中的操作是一致的,即将每一个单词使用一个离散的向量表示。具体将每个字/词编码一个索引,然后根据索引进行赋值。
One-hot表示方法的例子如下:
句子1:我 爱 北 京 天 安 门
句子2:我 喜 欢 上 海
首先对所有句子的字进行索引,即将每个字确定一个编号:

{
‘我’: 1, ‘爱’: 2, ‘北’: 3, ‘京’: 4, ‘天’: 5,
‘安’: 6, ‘门’: 7, ‘喜’: 8, ‘欢’: 9, ‘上’: 10, ‘海’: 11
}
在这里共包括11个字,因此每个字可以转换为一个11维度稀疏向量:

我:[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
爱:[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]

海:[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]

1.2 Bag of Words
Bag of Words(词袋表示),也称为Count Vectors,每个文档的字/词可以使用其出现次数来进行表示。
句子1:我 爱 北 京 天 安 门
句子2:我 喜 欢 上 海
直接统计每个字出现的次数,并进行赋值:
句子1:我 爱 北 京 天 安 门
转换为 [1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0]
句子2:我 喜 欢 上 海
转换为 [1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1]

1.3 N-gram
N-gram与Count Vectors类似,不过加入了相邻单词组合成为新的单词,并进行计数。
如果N取值为2,则句子1和句子2就变为:
句子1:我爱 爱北 北京 京天 天安 安门
句子2:我喜 喜欢 欢上 上海

1.4 TF-IDF
TF-IDF 分数由两部分组成:第一部分是词语频率(Term Frequency),第二部分是逆文档频率(Inverse Document Frequency)。其中计算语料库中文档总数除以含有该词语的文档数量,然后再取对数就是逆文档频率。

TF(t)= 该词语在当前文档出现的次数 / 当前文档中词语的总数
IDF(t)= log_e(文档总数 / 出现该词语的文档总数)

2.基于机器学习的文本分类

import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer 	# Count Vectors + RidgeClassifier
from sklearn.feature_extraction.text import TfidfVectorizer     # TF-IDF +  RidgeClassifier
from sklearn.linear_model import RidgeClassifier
from sklearn.metrics import f1_score

#导入数据
train_df = pd.read_csv('datalab/72510/train_set.csv', sep='\t', nrows=15000)

# 方法一:基于Count Vectors + RidgeClassifier
vectorizer = CountVectorizer(max_features=3000) #对关键词集按照出现频率排序,只取前max_features个词作为关键词集
train_test = vectorizer.fit_transform(train_df['text']) #计算各个词语出现的次数
clf = RidgeClassifier()
clf.fit(train_test[:10000], train_df['label'].values[:10000]) #回归拟合
val_pred = clf.predict(train_test[10000:]) #预测
print(f1_score(train_df['label'].values[10000:], val_pred, average='macro')) #计算f1指标值
#输出为 0.654418775812

 # 方法二:基于TF-IDF +  RidgeClassifier
tfidf = TfidfVectorizer(ngram_range=(1,3), max_features=3000) #使特征可以为单个字或者3个字 
train_test = tfidf.fit_transform(train_df['text'])
clf = RidgeClassifier()
clf.fit(train_test[:10000], train_df['label'].values[:10000])
val_pred = clf.predict(train_test[10000:])
print(f1_score(train_df['label'].values[10000:], val_pred, average='macro'))
# 0.87193721737
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Transformer可以用于文本分类任务。在文本分类中,我们只使用Transformer的Encoder部分,而Decoder主要用于生成式模型和自然语言生成。Transformer的用于文本分类的结构包括以下几个组件: 1. 嵌入层(embedding layer):将文本序列中的每个词转换为向量表示,以便后续处理。 2. 位置编码(positional encoding):为每个输入位置添加位置信息,使得Transformer能够捕捉到句子中词的顺序。 3. 缩放的点乘注意力机制(Scaled dot-product attention):通过计算输入序列中不同位置的词之间的注意力权重来捕捉句子中的关联信息。 4. 多头注意力(multi-head attention):通过将多个注意力头并行处理输入序列,以增强模型对不同关注点的建模能力。 5. 残差连接(residual connections):在不同层之间添加残差连接,以便信息能够更好地传递和保留。 6. 层归一化(layer normalization):对每个层的输出进行归一化处理,加速模型的收敛,并提高训练效果。 7. 位置感知的前向网络(position-wise feed-forward network):通过两个全连接层来对每个位置的特征进行非线性变换。 以上是Transformer在文本分类中常用的组件和步骤。通过这些组件的协同作用,Transformer能够有效地对文本进行编码和建模,从而实现文本分类任务。123 #### 引用[.reference_title] - *1* *2* *3* [6. 文本分类——transformer模型](https://blog.csdn.net/qq_38293297/article/details/105027845)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值