汽车领域多语种迁移学习挑战赛-Coggle 30 Days of ML

本文介绍了汽车领域多语种迁移学习挑战赛,涉及文本分词、TF-IDF向量化、意图分类以及BERT模型的应用。通过数据读取和分析,利用正则表达式提取关键信息,并探讨了预训练模型在文本分类中的优势。
摘要由CSDN通过智能技术生成

前言

依然是coggle的7月竞赛学习活动,本博客围绕着汽车领域多语种迁移学习挑战赛展开。

一、赛题理解

本赛题为标准的nlp领域的任务,需要通过给定的语料,完成相应的关键字提取和文本分类任务。关键词提取主要是考察对于文本的结构分析以及一些常见的分词工具如jieba、jiagu等等的使用,文本分类则要用到如今在nlp如日中天的预训练+微调这套东西(当然如果能把语料吃透,用字典或者规则也行),个人感觉这项工作对于不熟悉nlp的同学的要求要高一大截,但是如果能啃下来收获也是非常大的。

1.1 数据读取

照例还是先看看给的数据,训练集包含中文、英文、日语三类语言,其中英语和日语油给出了相应的中文翻译:
中文语料:
在这里插入图片描述
英文语料:
在这里插入图片描述
日文语料:
在这里插入图片描述
再看看给的提交示例(A榜):
在这里插入图片描述
基本上就能确定了,这个任务就是要尽可能的填上“意图”列和两个“槽值”列,“意图”对应着文本分类,“槽值”则是关键词提取。

2.2 数据概览

以下两部分代码均来自于一位同样参与打卡活动的大佬@千千惠儿,能够在动手之前先对文本语料有一个大致的把握,首先是文本长度分布

import matplotlib.pyplot as plt
import seaborn as sns

fig,axes=plt.subplots(1,3, figsize=(20, 5))  #创建一个1行三列的图片

train_cn['Chinese_text_len'] = [len(i) for i in train_cn["原始文本"]]
train_en['English_text_len'] = [len(i.split(" ")) for i in train_en["原始文本"]]
train_ja['Japan_text_len'] = [len(i) for i in train_ja["原始文本"]]

sns.distplot(train_cn['Chinese_text_len'],bins=10,ax=axes[0])
sns.distplot(train_en['English_text_len'],bins=10,ax=axes[1]) 
sns.distplot(train_ja['Japan_text_len'],bins=10,ax=axes[2]) 

请添加图片描述
然后是意图分布

df_ana  = pd.DataFrame()
for label,df in zip(['中文','英文','日文'],[train_cn,train_en,train_ja]):
    temp = pd.DataFrame(df.意图.value_counts()).reset_index()
    temp.columns = ['%s意图'%label,'个数']
    df_ana = pd.concat([df_ana,temp],axis=1)
df_ana

在这里插入图片描述
槽值的槽点有点多,一时间想不到统计它的作用,所以这里就先不管了,不过我上方的传送门里那位大佬也针对这俩字段有所处理,感兴趣的同学可以移步看看。

二、文本分词

这块工作主要是熟悉一些常见的分词工具,中文和日文毕竟不像英文那样有空格隔开,所以想把一句话拆成几个词,还是需要一些成熟的词典工具进行辅助。比如jiebajiagu还有coggle打卡活动中提示用于日语分词的nagisa,实际上这些工具除了能完成句子的分词任务以外,还能够给出相应词汇的词性(比如名词、动词、形容词等等),如果能用好这一点,至少可以粗略的定义一些规则,同样可以完成一些现实任务。

train_cn['words'] = train_cn['原始文本'].apply(jieba.lcut)
train_en['words'] = train_en['原始文本'].apply(lambda x:x.split(' '))
train_ja['words'] = train_ja['原始文本'].apply(lambda x:nagisa.tagging(x).words)

三、TFIDF与文本分类

3.1 TF-IDF

关于它的原理放个传送门:机器学习:生动理解TF-IDF算法。在做文本分类任务时,一个很重要的任务就是完成文本的向量化表示(这个是nlp的基础),TFIDF所提供的就是一种基于词频次的文本向量化表示方式,为了进一步理解它,我们不妨直接动手试一下:

from sklearn.feature_extraction.text import TfidfVectorizer
tv = TfidfVectorizer(use_idf=True, smooth_idf=True, norm=None)
words_list = [  # 每行表示一个文本
    "i am a good boy",
    "i am a bad boy",
    "she is so pretty",
    "she drives me crazy",
    "i fell in love with her"
]
tv_fit = tv.fit_transform(words_list)

查看一下构建的词汇表以及表的长度:
在这里插入图片描述再查看一下向量化的结果:

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值