汽车领域多语种迁移学习挑战赛


前言

科大讯飞,汽车领域多语种迁移学习挑战赛,入门NLP。

一、比赛报名

  • 步骤1:报名比赛http://challenge.xfyun.cn/topic/info?type=car-multilingual&ch=ds22-dw-zmt05
  • 步骤2:下载比赛数据(点击比赛页面的赛题数据)
  • 步骤3:解压比赛数据,并使用pandas进行读取;
    pandas读取代码如下:
import pandas as pd
train_cn = pd.read_excel('./中文_trian.xlsx')
train_ja = pd.read_excel('./日语_train.xlsx')
train_en = pd.read_excel('./英文_train.xlsx')
test_ja = pd.read_excel('testA.xlsx', sheet_name='日语_testA')
test_en = pd.read_excel('testA.xlsx', sheet_name='英文_testA')
train_cn.shape,train_ja.shape,train_en.shape
  • 步骤4:查看训练集和测试集字段类型,并将数据读取代码写到博客;
    字段类型查看,衔接上一段代码。
df = pd.concat([pd.DataFrame(train_cn.dtypes),pd.DataFrame(train_ja.dtypes),pd.DataFrame(train_en.dtypes)],axis=1)
df.columns = ['train_cn_dtypes','train_ja_dtypes','train_en_dtypes']

二、文本分析与文本分词

  • 步骤1:使用jieba对中文进行分词;
import jieba
import jieba.posseg as pseg

words = jieba.lcut("今天北京天气不错。")
print(words)

words = pseg.lcut("今天北京天气不错。")

运行结果
['今天', '北京', '天气', '不错', '。']

  • 步骤2:使用negisa对日语进行分词
# https://github.com/taishi-i/nagisa
import nagisa
text = 'Pythonで簡単に使えるツールです'
words = nagisa.tagging(text)
print(words)
#=> Python/名詞 で/助詞 簡単/形状詞 に/助動詞 使える/動詞 ツール/名詞 です/助動詞

# Get a list of words
print(words.words)
#=> ['Python', 'で', '簡単', 'に', '使える', 'ツール', 'です']

# Get a list of POS-tags
print(words.postags)
#=> ['名詞', '助詞', '形状詞', '助動詞', '動詞', '名詞', '助動詞']

运行结果

Python/名詞 で/助詞 簡単/形状詞 に/助動詞 使える/動詞 ツール/名詞 です/助動詞
['Python', 'で', '簡単', 'に', '使える', 'ツール', 'です']
['名詞', '助詞', '形状詞', '助動詞', '動詞', '名詞', '助動詞']

三、 TFIDF与文本分类

步骤1:学习TFIDF的使用,提取语料的TFIDF特征;

from sklearn.feature_extraction.text import TfidfVectorizer
corpus = [
    '今天天气不错.',
    'I am happy everyday.',
    'How are you.',
    'Are you happy and smile everydat',
]
vectorizer = TfidfVectorizer()
tdm = vectorizer.fit_transform(corpus)
space = vectorizer.vocabulary_
print(space)

运行结果

{'今天天气不错': 9, 'am': 0, 'happy': 5, 'everyday': 4, 'how': 6, 'are': 2, 'you': 8, 'and': 1, 'smile': 7, 'everydat': 3}

步骤2:使用逻辑回归结合TFIDF进行训练(所有的语言语料),并对测试集的意图进行分类;
完整代码如下:

import pandas as pd # 读取文件
import numpy as np # 数值计算
import nagisa # 日文分词
from sklearn.feature_extraction.text import TfidfVectorizer # 文本特征提取
from sklearn.linear_model import LogisticRegression # 逻辑回归
from sklearn.pipeline import make_pipeline # 组合流水线

# 读取数据
train_cn = pd.read_excel('汽车领域多语种迁移学习挑战赛初赛训练集/中文_trian.xlsx')
train_ja = pd.read_excel('汽车领域多语种迁移学习挑战赛初赛训练集/日语_train.xlsx')
train_en = pd.read_excel('汽车领域多语种迁移学习挑战赛初赛训练集/英文_train.xlsx')

test_ja = pd.read_excel('testA.xlsx', sheet_name='日语_testA')
test_en = pd.read_excel('testA.xlsx', sheet_name='英文_testA')

# 文本分词
train_ja['words'] = train_ja['原始文本'].apply(lambda x: ' '.join(nagisa.tagging(x).words))
train_en['words'] = train_en['原始文本'].apply(lambda x: x.lower())

test_ja['words'] = test_ja['原始文本'].apply(lambda x: ' '.join(nagisa.tagging(x).words))
test_en['words'] = test_en['原始文本'].apply(lambda x: x.lower())

# 训练TFIDF和逻辑回归
pipline = make_pipeline(
    TfidfVectorizer(),
    LogisticRegression()
)
pipline.fit(
    train_ja['words'].tolist() + train_en['words'].tolist(),
    train_ja['意图'].tolist() + train_en['意图'].tolist()
)

# 模型预测
test_ja['意图'] = pipline.predict(test_ja['words'])
test_en['意图'] = pipline.predict(test_en['words'])
test_en['槽值1'] = np.nan
test_en['槽值2'] = np.nan

test_ja['槽值1'] = np.nan
test_ja['槽值2'] = np.nan

# 写入提交文件
writer = pd.ExcelWriter('submit.xlsx')
test_en.drop(['words'], axis=1).to_excel(writer, sheet_name='英文_testA', index=None)
test_ja.drop(['words'], axis=1).to_excel(writer, sheet_name='日语_testA', index=None)
writer.save()
writer.close()

步骤3:将步骤2预测的结果文件提交到比赛,截图分数;
在这里插入图片描述

四、正则表达式

  • 步骤1:学习使用正则表达式,并提取文本中的连续数值;
    常见用法见这个博主的博客,添加链接描述
  • 步骤2:使用正则表达式进行槽值匹配(基于历史的槽值字符串)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值