概述
自然语言处理高级专题
本实验在 SemEval_2015_Task_31i数据集上使用规则提取特征并使用 SVM 和随机森林两种方法在提取特征的基础上进行分类。
特征提取
本实验参照ii文中的思路提取特征。
在 A 任务中,每个 question-comment pair 有 100 维特征。其中关于问题(QBody 字段)与回答(CBody 字段)本身各有 25 维特征,见表 1,在提取这些特征之前先去掉了文中的所有链接,但没有去掉html 标签。question-comment pair 整体还有 50 个特征,见表 2。
特征描述 | 形式 | 维数 |
---|---|---|
标签数(以<>数量中较少的估计) | 计数 | 1 |
最长单词长度 | 计数 | 1 |
平均单词长度 | 数值 | 1 |
单词数量 | 计数 | 1 |
句子数量(以问号、句号、叹号总数估计) | 计数 | 1 |
平均每句单词数量 | 数值 | 1 |
大写单词数量 | 计数 | 1 |
命名实体数量 | 计数 | 1 |
no 的数量 | 计数 | 1 |
yes 的数量 | 计数 | 1 |
thank, thanks 的数量 | 计数 | 1 |
please 的数量 | 计数 | 1 |
may, might, could, can, would, will 的数量 | 计数 | 1 |
问号的数量 | 计数 | 1 |
叹号的数量 | 计数 | 1 |
名词、动词、代词、疑问词、外来词的数量 | 计数 | 5 |
名词、动词、代词、疑问词、外来词的频率 | 比率 | 5 |
表 1 问题和回答文本分别统计的特征
特征描述 | 形式 | 维数 |
---|---|---|
问题和回答中的图数和链接数 | 计数 | 4 |
回答是否是第一个或最后一个 | 布尔 | 2 |
当前及前后回答的 USERID 是否和提问者相同 | 布尔 | 3 |
问题是否为是否类问题 | 布尔 | 1 |
问题类型(QCATEGORY) | one-hot | 27 |
回答的 title 是否问“Re:”+问题 title | 布尔 | 1 |
问题和回答相同的 uni|bi|tri gram 数 | 计数 | 3 |
上数相对于问题长度和回答长度的比值 | 比率 | 6 |
问题和回答的 uni|bi|tri gram 的 one-hot 向量余弦值 | 数值 | 3 |
表 2 问题和回答联合统计的特征
由于官网的评价脚本中,A 任务只考虑 Good、bad 和 Potential 三个类别,所以在标记标签时,尝试了两种标签标记方式:A-full 是标全 6 类的。而 A-sim 是只标记 3 类的。
在 B 任务中使用的特征和 A 任务中相同,不过是以题为单位。故每道题的特征向量是 A-sim 标记下svm 训练结果中标记为 good 的选项的特征向量的均值。
实验设置
在具体实现时,使用的工具 libsvm2和 xgboost3。分词、词性标注和命名实体识别等使用 nltk4。
简单调参后,两个任务均使用线性核 SVM,task-A 的两种标注的参数-c 均为 0.5,task-B 的参数-c为1。而在随机森林时,两个任务均使用 multi:softmax 作为目标函数,最大树深为 5,学习率 eta 为0.2,训练轮数为 50 轮。
评价时,task-A 和官网上评价脚本相同,只考虑 3 类。task-A 和 task-B 的评价指标均为 macro-f1和accuracy。
实验结果
Task-A 在验证集和测试集上的实验结果如表 3 所示,Task-B 在验证集和测试集上的的实验结果如表4所示。
macro-F1 | Acc | F1-Good | F1-Pot. | F1-Bad | |
---|---|---|---|---|---|
A-full-svm-dev | 47.39% | 67.42% | 76.05% | 0.00% | 61.66% |
A-full-svm-test | 49.41% | 70.34% | 76.70% | 0.00% | 67.99% |
A-Sim-svm-dev | 48.46% | 69.36% | 76.60% | 0.00% | 68.49% |
A-Sim-svm-test | 50.56% | 72.77% | 77.86% | 0.00% | 73.42% |
A-full-rf-dev | 48.51% | 68.94% | 77.12% | 0.00% | 64.96% |
A-full-rf-test | 49.57% | 70.70% | 77.08% | 0.00% | 68.49% |
A-Sim-rf-dev | 48.77% | 69.85% | 77.40% | 0.00% | 68.79% |
A-Sim-rf-test | 50.24% | 72.27% | 77.16% | 0.00% | 73.17% |
表 3 Task-A 上的实验结果
macro-F1 | Acc | F1-Yes | F1-Unsure | F1-No | |
---|---|---|---|---|---|
B-svm-dev | 54.32% | 55.88% | 66.67% | 40.00% | 50.00% |
B-svm-test | 43.39% | 51.72% | 62.86% | 46.15% | 20.00% |
B-rf-dev | 52.77% | 55.88% | 68.75% | 45.45% | 42.86% |
B-rf-test | 57.50% | 68.97% | 82.35% | 58.82% | 28.57% |
表 4 Task-B 上的实验结果
点分析
由于本实验采用的机器学习方法并没有针对 macro-F1 做特殊地优化,在 Task-A 上,小类 Pot.的效果很差。导致了本实验 Accuracy 看起来还不错但 macro-F1 明显偏低。
Xgboost 在 TaskB 上的效果莫名地好。不过可能也是由于 Task-B 的数据集较小导致的意外吧。
但是网上下载的数据集的测试集规模和 SemEval-2015 评测报告中写的不一样。
横向对比
我们将我们的结果与一些相关文章进行对比,Task-A 与 Task-B 的结果分别如表 5、表 6 所示。其中,Hou’s 为参考文献[2]的方法,也是我这里主要参考的方法;Quan’s 为参考文献[3]iii的方法,也是当时评测比赛时 Task-A 效果最好的方法(他们当时没做 Task-B)。Belinkov’s 为参考文献[4]iv的方法,也是当时评测比赛时 Task-B 效果最好的方法。
macro-F1 | Acc | F1-Good | F1-Pot. | F1-Bad | |
---|---|---|---|---|---|
Task-A-SVM | 50.56% | 72.77% | 77.86% | 0.00% | 73.42% |
Task-A-RF | 50.24% | 72.27% | 77.16% | 0.00% | 73.17% |
Hou’s | 56.44% | 69.43% | 78.87% | 17.86% | 72.58% |
Quan’s | 57.29% | 72.52% | 78.96% | 14.36% | 78.24% |
Belinkov’s | 49.54% | 70.45% | ---- | ---- | ---- |
表 5 Task-A 上的横向比较
macro-F1 | Acc | F1-Yes | F1-Unsure | F1-No | |
---|---|---|---|---|---|
Task-B-SVM | 43.39% | 51.72% | 62.86% | 46.15% | 20.00% |
Task-B-RF | 57.50% | 68.97% | 82.35% | 58.82% | 28.57% |
Hou’s | 53.60% | 64.00% | 80.00% | 44.44% | 36.36% |
Belinkov’s | 63.70% | 72.00% | ---- | ---- | ---- |
表 6 Task-B 上的横向比较
从上面的比较可以看出,我们的(SVM 与随机森林)方法在 Task-B 与 Task-A Accuracy 上超过了这两种方法选取特征时主要参考的工作,但是距离最好的工作还略有差距。
最后
以上就是可耐翅膀为你收集整理的基于Python实现的自然语言处理高级专题自然语言处理高级专题的全部内容,希望文章能够帮你解决基于Python实现的自然语言处理高级专题自然语言处理高级专题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复