摘要:
合集:AI案例-NLP-传媒业
赛题:汽车领域多语种迁移学习挑战赛
主办方:科大讯飞股份有限公司
主页:http://challenge.xfyun.cn/topic/info?type=car-multilingual
AI问题:文本分类
数据集:科大讯飞智能汽车BU提供车内人机交互中文、中英、中日语料数据集
数据集价值:通过NLP相关人工智能算法来实现汽车领域多语种迁移学习。
解决方案:TF-IDF&逻辑回归模型
一、赛题描述
背景
国内车企为提升产品竞争力、更好走向海外市场,提出了海外市场智能交互的需求。但世界各国在“数据安全”上有着严格法律约束,要做好海外智能化交互,本土企业面临的最大挑战是数据缺少。本赛题要求选手通过NLP相关人工智能算法来实现汽车领域多语种迁移学习。
任务
本次迁移学习任务中,讯飞智能汽车BU将提供较多的车内人机交互中文语料,以及少量的中英、中日、中阿平行语料作为训练集,参赛选手通过提供的数据构建模型,进行意图分类及关键信息抽取任务,最终使用英语、日语、阿拉伯语进行测试评判。
1.初赛
训练集:中文语料30000条,中英平行语料1000条,中日平行语料1000条
测试集A:英文语料500条,日文语料500条
测试集B:英文语料500条,日文语料500条
2.复赛
训练集:中文语料同初赛,中阿拉伯平行语料1000条
测试集A:阿拉伯文语料500条
测试集B:阿拉伯文语料500条
二、数据集描述
数据说明
本次比赛为参赛选手提供三类车内交互功能语料,其中包括命令控制类、导航类、音乐类。较多的中文语料和较少的多语种平行语料均带有意图分类和关键信息,选手需充分利用所提供数据,在英、日、阿拉伯语料的意图分类和关键信息抽取任务上取得较好效果。数据所含标签种类及取值类型如下表所示。
变量 | 数值格式 | 解释 |
---|---|---|
intent | string | 整句意图标签 |
device | string | 操作设备名称标签 |
mode | string | 操作设备模式标签 |
offset | string | 操作设备调节量标签 |
endloc | string | 目的地标签 |
landmark | string | 周边搜索参照标签 |
singer | string | 歌手 |
song | string | 歌曲 |
数据集版权许可协议
BY-NC-SA 4.0
https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh-hans
三、解决方案样例
工作原理介绍
1. TF-IDF(Term Frequency-Inverse Document Frequency)
一种广泛应用于自然语言处理(NLP)和信息检索的技术,用于评估一个词语在文档集合或语料库中的重要性。
TF(Term Frequency,词频)
- 定义:某个词在文档中出现的次数。
- 公式:TF(t,d)=文档 d 中的总词数词 t 在文档 d 中出现的次数
- 作用:衡量词语在单篇文档中的常见程度。例如,在文档“苹果香蕉苹果”中,“苹果”的TF值为 32。
IDF(Inverse Document Frequency,逆文档频率)
- 定义:衡量词语在文档集合中的稀有程度。罕见词具有更高的IDF值。
- 公式:IDF(t)=log(包含词 t 的文档数总文档数)
- 作用:降低常见词的权重,突出重要词汇。例如,若“的”出现在所有文档中,则其IDF值趋近于0。
2. 逻辑回归 (Logistic Regression)
- 定义:逻辑回归是一种用于解决 分类问题 的统计学习方法,尤其适用于 二分类(如判断邮件是否为垃圾邮件)。
- 核心思想:通过线性回归结合概率映射(Sigmoid函数),将输入特征映射到 0~1之间的概率值,表示样本属于某一类的可能性。
优点 | 缺点 |
---|---|
输出概率解释性强 | 仅能学习线性决策边界 |
计算高效,适合大规模数据 | 对特征共线性和异常值敏感 |
支持正则化(L1/L2)防止过拟合 | 无法直接处理非线性问题 |
运行环境
外部库名称 | 版本号 |
---|---|
python | 3.12.3 |
sklearn-compat | 0.1.3 |
fugashi | 1.4.0 |
安装日语分词的 Python 库ipadic、MeCab 分词器 和openpyxly:
pip install fugashi ipadic
pip install mecab-python3 unidic-lite
conda install openpyxl
工作流程
1. 数据加载与探索
加载了多种语言的训练数据和测试数据:
- 训练数据:
- 中文训练集(train_cn)
- 日语训练集(train_ja)
- 英文训练集(train_en)
- 测试数据:
- 日语测试集(test_ja)
- 英文测试集(test_en)
数据示例显示每条记录包含:
- 原始文本(外语)
- 中文翻译
- 意图标签(如”open_ac”表示打开空调)
- 槽值(用于信息抽取,本项目中为NaN)
“槽值/Slot Value”是自然语言处理(NLP)和对话系统中的术语,通常出现在任务型对话系统或信息抽取任务中,用于表示从用户语句中提取的关键信息片段。Slot为预定义的语义类别,代表对话中需要填充的信息字段。例如:在订餐系统中,槽可能包括 [菜系]、[人数]、[时间] 等。
# 读取数据
train_cn = pd.read_excel('./data/中文_trian.xlsx')
train_ja = pd.read_excel('./data/日语_train.xlsx')
train_en = pd.read_excel('./data/英文_train.xlsx')
test_ja = pd.read_excel('./data/testA.xlsx', sheet_name='日语_testA')
test_en = pd.read_excel('./data/testA.xlsx', sheet_name='英文_testA')
2. 文本预处理
针对不同语言进行了特定处理:
日语处理
- 使用
fugashi
库的Tagger
进行分词 -Owakati
参数指定以空格分隔输出- 示例:将日语句子转换为空格分隔的词语序列
英语处理
- 简单转换为小写
- 没有进行复杂分词,依赖TF-IDF的内部tokenizer
# 文本分词
tagger = Tagger('-Owakati') # 空格分隔模式
train_ja['words'] = train_ja['原始文本'].apply(lambda x: tagger.parse(x).strip())
train_en['words'] = train_en['原始文本'].apply(lambda x: x.lower())
test_ja['words'] = test_ja['原始文本'].apply(lambda x: tagger.parse(x).strip())
test_en['words'] = test_en['原始文本'].apply(lambda x: x.lower())
3. 模型构建与训练
使用make_pipeline
构建了端到端的处理流程:
流水线组成
- TF-IDF向量化器(TfidfVectorizer)
- 将文本转换为TF-IDF特征矩阵
- 自动处理tokenization、停用词等
- 默认使用单词(unigram)作为特征
- 逻辑回归分类器(LogisticRegression)
- 用于多分类任务
- 默认使用L2正则化
- 适合高维稀疏特征(如文本特征)
训练过程
- 合并日语和英语的训练数据
- 使用组合后的文本(words列)作为特征
- 使用对应的意图标签作为目标变量
- 自动学习从文本特征到意图类别的映射
# 训练TF-IDF和逻辑回归
pipline = make_pipeline(
TfidfVectorizer(),
LogisticRegression()
)
pipline.fit(
train_ja['words'].tolist() + train_en['words'].tolist(),
train_ja['意图'].tolist() + train_en['意图'].tolist()
)
4. 预测与输出
预测过程
- 对测试集的日语和英语数据分别进行预测
- 使用训练好的流水线直接预测意图类别
- 槽值1和槽值2保持为NaN(本任务未实现信息抽取)
结果输出
- 将预测结果写入Excel文件
- 保持与原始测试集相同的格式
- 包含原始文本和预测的意图类别
- 分别保存在不同sheet中(英文testA和日语testA)
# 模型预测
test_ja['意图'] = pipline.predict(test_ja['words'])
test_ja['槽值1'] = np.nan
test_ja['槽值2'] = np.nan
test_en['意图'] = pipline.predict(test_en['words'])
test_en['槽值1'] = np.nan
test_en['槽值2'] = np.nan
# 写入提交文件
writer = pd.ExcelWriter('submit.xlsx', engine="openpyxl")
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.close() # 保存并关闭,替代旧版 Pandas 的 save()
运行结果
数据样例:submit.xlsx
英文页:
原始文本 | 意图 |
---|---|
switch on the AC | open_ac |
air conditioner open | open_ac_mode |
Turn on the AC please | open_ac |
I wanna switch on aircon please | open_ac |
Help me switch on aircon | open_ac |
open the air conditioner | open_car_device |
Help me turn on the air conditioner | open_ac |
I wanna open aircon please | open_ac |
日语页:
原始文本 | 意图 |
---|---|
エアコンをつける | open_ac_mode |
エアコン付ける | open_ac |
エアコンをつけてください | open_ac |
エアコンをONに | open_ac |
エアコン | open_ac |
エアコンの電源 | open_ac |
エアコンのスイッチ付ける | open_ac |
エアコンの電源をON | open_ac |
エアコンをつけてくれますか | music_search_artist_song |
四、获取案例套装
需要登录后才允许下载文件包。登录