【问题标题】:Creating a feature function for POS tagging为词性标注创建特征函数
【发布时间】:2013-01-27 04:08:34
【问题描述】:

我正在尝试使用感知器来执行监督分类,从而执行句子的 POS 标记。我现在假设每个单词的标签是相互独立的。 (即我只是将这个词用作一个特征)。我对机器学习算法还很陌生,所以我无法弄清楚如何表示每个单词的特征函数。

我有一个包含 100 个句子的训练集,其中每个单词都有一个特定的标签(比如 N、V、J(形容词)等等)。 例如,

杰克(N)和(&)吉尔(N)去(V)去(PRP)秘鲁(N)

标签在大括号中的位置。假设我总共有 10 个可能的标签。 现在我的问题是杰克这个词的特征向量是什么样的?

我对将它实现为向量非常感兴趣,因为我的代码将更好地匹配符号。一旦我弄清楚特征函数的样子,我就可以实现感知器算法了!

另外,假设我想添加诸如 (a) 第一个字母是否大写? (b) 单词是否带有连字符等,如何将其合并到我的特征向量中?

直觉上我可以看到向量只需要二进制值,但我无法继续。

如果可能的话,请尝试用具体的例子来解释!

【问题讨论】:

    标签: algorithm machine-learning nlp perceptron pos-tagger


    【解决方案1】:

    使用将单词映射到数字 ID 的字典。如果您的词汇表中有 10,000 个项目,那么您的字典会将每个单词映射到 0-9999 范围内的一个数字,并且每个单词都表示为长度为 10,000 的二进制向量,其中只有一个元素处于活动状态:对应于单词在字典。

    如果你想要除了单词 id 之外的额外特征,你可以把这些附加到特征向量的末尾:也就是说,你可以让特征 10,000+ 成为大写特征,前一个标签特征(需要二进制编码为以上)等。

    最后一点,词性标注是structured prediction 问题的一个实例,而不是一系列独立的分类。如果这不仅仅是一项学术练习,您将希望转向structured perceptron,或其他结构化学习方法,如 CRF 或 struct-SVM。

    编辑:一个简单的例子

    假设我有一个五个单词的词汇表,{the,cat,sat,on,mat} 和一个简化的标签集 {DET,N,V,PREP}。我的句子是这样的:

    (The,DET) (cat,N) (sat,V) (on,PREP) (the,DET) (mat,N)。

    现在我想要每个单词的特征向量,我希望能够从中预测标签。我将使用特征 0-4 作为我的单词 id 指示函数,因此特征 0 对应于“the”,特征 1 对应于“猫”,依此类推。这给了我以下特征向量(在 -> 之后带有预期的“类”或标签分配):

    [1 0 0 0 0] -> DET
    [0 1 0 0 0] -> N
    [0 0 0 0 0] -> V
    ...
    

    我可以将这些视为实例,并将我选择的学习算法应用于此任务,但是,单独的单词 ID 函数不会给我带来太多收益。我决定要在我的分类中加入一些类似 HMM 的直觉,所以我还添加了指示 previous 标签是什么的特征函数。所以我使用特征 5-8 作为指标,其中 5 对应于 DET,6 对应于 N,以此类推。现在我有以下内容:

    [1 0 0 0 0 0 0 0 0] -> DET (because this is the first word there's no previous tag)
    [0 1 0 0 0 1 0 0 0] -> N
    [0 0 0 0 0 0 1 0 0] -> V
    

    现在我可以继续为我的内容添加特征,例如使用特征 9 来指示单词是否大写,特征 10 可能是单词是否匹配已知专有名词列表等。如果您阅读稍微了解一下结构化预测任务和方法,您应该明白为什么使用为此任务定制的模型(最简单的是 HMM,但我想升级到 CRF/结构化感知器/StructSVM 以获得最先进的性能)是优越的将其视为一堆独立的决定。

    【讨论】:

    • 但是这个向量对于每个标签会有什么不同呢?我的特征函数不应该为每个词性标签生成一个唯一的二进制值向量吗?正如我从您的回答中了解到的,特征向量是一个常数?是的,我计划下一步使用结构化感知器,但我需要先了解感知器的基础知识。
    • 希望编辑能让事情更清楚:维度是恒定的,但特征函数的值会根据单词/标签对而变化。
    • 哇!太感谢了!这正是我正在寻找的解释!是的,我确实计划下一步使用结构化感知器!我确实找到了关于这两个主题的好论文,但我无法充分想象解决方案。多亏了你,现在我可以做到了:)
    • @BenAllison:我读过结构化感知器,它说有一个“特征函数”可以将输入+输出映射到一个向量中。这是我不明白的部分。在您的示例中,它仍然是仅从输入到向量的映射。我们如何结合输出来生成特征向量?
    猜你喜欢
    • 1970-01-01
    • 2013-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-26
    • 1970-01-01
    相关资源
    最近更新 更多