怎样才能构建用于自动执行语言处理任务的语言模型?
从这些模型中我们可以学到哪些关于语言的知识?
决策树、朴素贝叶斯分类器和最大熵分类
监督式分类
分类:为给定的输入选择正确的类标签。在基本的分类任务中,每个输入被认为是与其他所有输入隔离的,并且标签集是预先定义的。
监督式分类:建立在训练语料(包括每个输入的正确标签)基础之上的分类。
监督式分类的框架图:
- 在训练过程中,特征提取器将每一个输入值转换为特征集。这些特征集捕捉到每个输入中应被用于分类的基本信息,特征集与标签的配对放入到机器学习算法中,生成模型。
- 在预测过程中,相同的特征提取器被用来将未见过的输入转换为特征集。之后,这些特征集被放入模型来产生预测标签。
如何创建分类器
- 决定什么样的输入特征是相关的(正确的)以及如何为这些特征编码。
- 定义一个特征提取器,同时准备一些例子和与其对应的类标签。
- 使用特征提取器处理数据,并把特征集的结果链表划分为训练集和测试集。训练集用于训练新的“朴素贝叶斯”分类器
- 检查分类器,确定哪些特征对于分类是最有效的。
注:特征集:能把特征名称映射到它们的值。
例1:性别鉴定:通过男性和女性的名字特征来判断性别。
一般来说,特征提取是在反复试验和错误的过程中建立的,哪些信息与问题相关。是通过直觉来引导的。
过拟合:所用的给定的学习算法的特征数目是有限的,如果你提供太多的特征,那么该算法将高度依赖训练数据的特性而对一般化的新例子不起作用。在小型训练集上运行时尤其会出现这种问题。
错误分析:选定初始特征集,一种能有效完善特征集的方法。
如何选择正确的特征?
- 选择开发集。其中包含用于创建模型的语料数据,然后将这种开发集分为训练集和开发测试集。训练集用于训练模型,开发测试集用于执行错误分析。测试集用于系统的最后评估。
- 检查个别错误案例然后相应地调整。
例:将语料分为适当的数据集,然后使用训练集来训练模型,之后在开发测试集上运行。
使用开发测试集可以生成分类器在预测名字性别时出现的错误列表。然后检查个别错误案例,在案例中该模型预测了错误的标签,尝试确定加入什么样的额外信息才能够使其作出正确的决定(或者是现有的哪部分信息导致其做出了错误的决定),然后相应地调整特征集。
调整特征集,使用新的特征提取器重建分类器,可以看到测试数据集s的性能提高了。(由0.748到了0.79)
注:在错误分析过程中,应选择一个不同的开发测试/训练分割,以确保该分类器不会反映开发测试集的特质。一旦使用了开发测试集帮助我们开发模型,一定要保持测试集分离、未使用过,知道我们的模型开发完毕。
文档分类
- 选择电影评论语料库,建立分类器。(将每个评论归类为正面或负面)
- 为文档定义特征提取器。(这样分类器就知道应注意哪方面的数据)其特征表示每个词是否在一个给定的文档中。
- 用特征提取器训练分类器,并为新的电影评论加上标签。
注:可用测试集检查生成的分类器的可靠性,也可以使用show_most_infomative_features()来找出哪些特征是分类器发现的并且是最有信息量的。
词性标注:训练一个分类器来算出哪个后缀最有信息量
- 首先找出最常见的后缀
- 定义一个特征提取器函数,用来检查给定单词的后缀
- 定义一个特征提取器,使用特征提取器训练新的“决策树”的分类器
探索上下文语境
特征提取器传递整个(未标注的)句子,以及目标词的索引。
一个词性分类器,它的特征检测器检查一个词的上下文以便决定应该分配哪个词性标记。特别的,前面的词也作为特征。
序列分类
使用连续分类器进行词性标注
评估:判断一个分类模型是否准确地捕捉了一种模式
测试集:将模型在测试集中为输入生成的标签与输入的正确标签相比较,为模型打分。
准确度:
精确度和召回率: