一、医疗搜索意图识别挑战赛简介
地址:challenge.xfyun.cn/topic/info?…
随着人们的生活质量逐步提高,老百姓更加关注医疗监控问题。但现在仍然存在患者和医生比例不对等的情况,患者需要贴近生活的「智能医生」。在医疗对话和搜索中,如果能设计一个智能算法对患者的搜索或对话意图进行分类,可为后续患者分诊提供帮助。
1.赛事任务
本次赛题需要选手对患者的对话和搜索问题进行处理,识别出意图类别。案例如下:
2.评审规则
2.1 数据说明
赛题数据由训练集和测试集组成,训练集数据集读取代码:
2.2 评估指标
本次竞赛的评价标准采用准确率指标,最高分为1。
计算方法参考:scikit-learn.org/stable/modu…
评估代码参考:
2.3 评测及排行
1、赛事提供下载数据,选手在本地进行算法调试,在比赛页面提交结果。
2、每支团队每天最多提交3次。
3、排行按照得分从高到低排序,排行榜将选择团队的历史最优成绩进行排名。
2.4作品提交要求
文件格式:预测结果文件按照csv格式提交
文件大小:无要求
提交次数限制:每支队伍每天最多3次
预测结果文件详细说明:
- 以csv格式提交,编码为UTF-8,第一行为表头;
- 标签顺序需要与测试集文本保持一致;
- 提交前请确保预测结果的格式与sample_submit.csv中的格式一致。具体格式如下:
3.意图分析
经分析,该题目是意图识别,其实也就是句子分类。下面使用分类模型进行处理。
二、数据处理
1.解压缩
!unzip -qoa data/data166530/yt.zip
2.数据查看
import pandas as pd train=pd.read_csv("yt/train.csv",sep = '\t') train.head() .dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
text | label | |
0 | 治痔疮会影响上班吗,医保有报吗?外痔。有无报销。会否影响工作 | 多问 |
1 | 本人今年16,最近感觉睾丸多长了一块肉,不痛不痒的,是睾丸癌吗 | 临床表现(病症表现) |
2 | 痔疮手术几个月后,肛门周围有长了一个,吃辣的东西就会肿起来,怎么办?是术后复发了吗? | 多问 |
3 | 你好,我宝宝8kg,吃美林要吃多少啊?你好,我宝宝8kg,吃美林要吃多少啊? | 用法 |
4 | 请问月经量多服用什么药? | 适用症 |
train["text_a"]=train["text"]
train=train.drop('text',axis=1)
label_unique_list=train.label.unique() label_list_id=[i for i in range(10)] print(label_unique_list) print(label_list_id)
['多问' '临床表现(病症表现)' '用法' '适用症' '定义' '病因' '治疗方法' '无法确定' '作用' '方法'] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
train=train[['label', 'text_a']] train.head(10) .dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; } label text_a 0 多问 治痔疮会影响上班吗,医保有报吗?外痔。有无报销。会否影响工作 1 临床表现(病症表现) 本人今年16,最近感觉睾丸多长了一块肉,不痛不痒的,是睾丸癌吗 2 多问 痔疮手术几个月后,肛门周围有长了一个,吃辣的东西就会肿起来,怎么办?是术后复发了吗? 3 用法 你好,我宝宝8kg,吃美林要吃多少啊?你好,我宝宝8kg,吃美林要吃多少啊? 4 适用症 请问月经量多服用什么药? 5 定义 什么是心悸怔忡 6 病因 支气管扩张症是什么原因引起的? 7 病因 我最近总是感觉喘息不对,声音很粗重还很急促而且经常感觉胸闷咳嗽,有时甚至会呼吸困难,我很担心... 8 病因 请问尿失禁是怎么回事 9 病因 导致慢性支气管炎的原因是什么
%matplotlib inline print(max(train['text_a'].str.len())) print( train["label"].value_counts()) train.groupby(['label']).count().plot(kind='bar')
221 治疗方法 468 临床表现(病症表现) 313 多问 255 病因 233 适用症 223 无法确定 207 作用 124 定义 102 用法 100 方法 99 Name: label, dtype: int64 <matplotlib.axes._subplots.AxesSubplot at 0x7f2c5f0ea590>
3.数据增强
拟采用同义词替换方式进行数据增强
3.1数据增强工具包安装
pypi.org/project/nlp…nlpcda是中文数据增强工具,支持多种数据增强方法:
- 1.随机实体替换
- 2.近义词
- 3.近义近音字替换
- 4.随机字删除(内部细节:数字时间日期片段,内容不会删)
- 5.NER类
BIO
数据增强 - 6.随机置换邻近的字:研表究明,汉字序顺并不定一影响文字的阅读理解<<是乱序的
- 7.中文等价字替换(1 一 壹 ①,2 二 贰 ②)
- 8.翻译互转实现的增强
- 9.使用
simbert
做生成式相似句生成
!pip install -q nlpcda
3.2 同义词增强
参数:
- base_file :缺省时使用内置同义词表,你可以设定/自己指定更加丰富的同义词表:
是文本文件路径,内容形如(空格隔开):
Aa01A0 人类 生人 全人类
id2 同义词b1 同义词b2 ... 同义词bk
...
idn 同义词n1 同义词n2\
- create_num=3 :返回最多3个增强文本
- change_rate=0.3 : 文本改变率
- seed : 随机种子
from nlpcda import Similarword smw = Similarword(create_num=1, change_rate=0.3) new_train=train for index, row in train.iterrows(): results=smw.replace(row['text_a']) for result in results: new_train.loc[1]=[row['label'], result]
Building prefix dict from the default dictionary ... Loading model from cache /tmp/jieba.cache Simbert不能正常使用,除非你安装:bert4keras、tensorflow ,为了安装快捷,没有默认安装.... No module named 'bert4keras' Loading model cost 0.737 seconds. Prefix dict has been built successfully. load :/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/nlpcda/data/同义词.txt done
3.3 近义词增强
参数:
- base_file :缺省时使用内置【同义同音字表】,你可以设定/自己指定更加丰富的同义同音字表:
是文本文件路径,内容形如(\t隔开):
de 的 地 得 德 嘚 徳 锝 脦 悳 淂 鍀 惪 恴 棏
拼音2 字b1 字b2 ... 字bk
...
拼音n 字n1 字n2\
- create_num=3 :返回最多3个增强文本
- change_rate=0.3 : 文本改变率
- seed : 随机种子
from nlpcda import Homophone smw = Homophone(create_num=1, change_rate=0.3) for index, row in train.iterrows(): results=smw.replace(row['text_a']) for result in results: new_train.loc[1]=[row['label'], result]
load :/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/nlpcda/data/同音意字.txt done
3.4 等价词替换
参数:
- base_file :缺省时使用内置【等价数字字表】,你可以设定/自己指定更加丰富的等价字表(或者使用函数:add_equivalent_list):
是文本文件路径,内容形如((\t)隔开):
0 零 〇
1 一 壹 ①
...
9 九 玖 ⑨
- create_num=3 :返回最多3个增强文本
- change_rate=0.3 : 文本改变率
- seed : 随机种子
from nlpcda import EquivalentChar smw = EquivalentChar(create_num=1, change_rate=0.3) for index, row in train.iterrows(): results=smw.replace(row['text_a']) for result in results: new_train.loc[1]=[row['label'], result]
load :/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/nlpcda/data/等价字.txt done
# 数据增强后回复给原train train=new_train
4.数据集划分
train_df = train.sample(frac=0.7,random_state=0,axis=0) validation_df = train[~train.index.isin(train_df.index)]
train_df.to_csv("yt/train_ok.csv", index=None,sep="\t") validation_df.to_csv("yt/val_ok.csv", index=None,sep="\t")
!head yt/train_ok.csv
label text_a 无法确定 不知道自己怀孕啦,我以为是吃药把胃吃坏啦才知道怀孕啦 病因 前几天便秘夜间躺下是有那种绞痛感持续几秒时间就消失了今天解了大便晚上症状消失但肚脐下方按压痛请问这和便秘有关吗 多问 我53岁已经没有例假了,是更年期的年龄吗?乌灵胶囊:用于心肾不交所致的失眠、健忘、心悸心烦、神疲乏力。能喝这个吧? 无法确定 总胆固醇不高但颈椎,用什么药治疗对身体影响小一点啊 临床表现(病症表现) 小便时痛是怎么回事,这个情况已经有一个多星期了开始时没有注意 病因 宝宝打嗝是什么原因啊? 作用 维思通是起什么作用的 临床表现(病症表现) 男人小便出血是怎么回事 无法确定 请问阴道炎对月经有没有影响?