我正在尝试使用Perceptron执行监督分类,从而执行句子的POS标记。我现在假设每个单词的标签都是独立的。 (即我只使用这个词作为一个特征)。我对机器学习算法很新,所以我无法弄清楚如何为每个单词表示特征函数。
我有100个句子的训练集,每个单词都有一个特定的标签(比如N,V,J(形容词)等等)。 例如,
Jack(N)和(&)Jill(N)去(V)到(PRP)秘鲁(N)
标签位于大括号中。假设我总共有10个可能的标签。 现在我的问题是杰克这个词的特征向量是怎样的?
我非常有兴趣将它作为向量实现,因为我的代码会更好地匹配符号。一旦我弄清楚特征函数的外观,我将能够实现Perceptron算法!
另外,我想添加像(a)首字母大写的功能吗? (b)单词是否连字符等,如何将其合并到我的特征向量中?
直观地说,我可以看到向量只需要二进制值,但我无法超越它。
如果可能的话,请尝试用具体的例子来解释!
答案 0 :(得分:12)
使用将单词映射到数字ID的字典。如果您的词汇表中包含10,000个项目,则您的词典会将每个单词映射到0-9999范围内的数字,并且每个单词都表示为长度为10,000的二进制向量,其中只有一个元素处于活动状态:对应于单词中的单词ID字典。
如果您想要除了单词ID之外的其他功能,您可以将这些功能添加到功能向量的末尾:也就是说,您可以将功能10,000+作为大写功能,以前的标记功能(需要二进制编码为以上)等。
最后一点,POS标记是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对应'cat'等等。这给了我以下特征向量(在>后面有预期的'class'或标签赋值):
[1 0 0 0 0] -> DET
[0 1 0 0 0] -> N
[0 0 0 0 0] -> V
...
我可以将这些视为实例并将我选择的学习算法应用于此任务,然而,单词ID功能本身并不会让我感到满意。我决定将一些类似HMM的直觉纳入我的分类中,因此我还添加了一些功能函数,用于指示之前的标记是什么。所以我使用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 / Structured Perceptron / StructSVM以获得最先进的性能)是优越的将此视为一系列独立决定。