创建POS标记的功能

arv*_*kri 1 algorithm nlp machine-learning perceptron pos-tagger

我正在尝试使用Perceptron执行监督分类,从而执行句子的POS标记.我现在假设每个单词的标签都是独立的.(即我只使用这个词作为一个特征).我对机器学习算法相当新,所以我无法弄清楚如何为每个单词表示特征函数.

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

Jack(N)和(&)Jill(N)去了(PR)秘鲁(N)

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

我非常感兴趣将它作为向量实现,因为我的代码将更好地匹配符号.一旦我弄清楚功能函数的外观,我将能够实现Perceptron算法!

另外,我想添加像(a)首字母大写的功能吗?(b)单词是否连字符等,如何将其合并到我的特征向量中?

直观地说,我可以看到向量只需要二进制值,但我无法超越它.

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

Ben*_*son 13

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

如果你想要除了单词id之外的额外功能,你可以将它们添加到特征向量的末尾:也就是说,你可以使10,000+的特征成为大写特征,之前的标记特征(将需要如上所述的二进制编码)等.

最后,POS标记是结构化预测问题的一个实例,而不是一系列独立的分类.如果这成为比学术活动,你要移动到结构化的感知,或其他结构化的学习方法,像CRF或结构-SVM.

编辑:一个简单的例子

想象一下,我有一个五个单词的词汇,{the,cat,sat,on,mat}和一个简化的标签集{DET,N,V,PREP}.因此,我的判决是:

(,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
...
Run Code Online (Sandbox Code Playgroud)

我可以将这些视为实例并将我的学习算法应用于此任务,单词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
Run Code Online (Sandbox Code Playgroud)

现在我可以继续为我的内容添加功能,例如使用功能9来指示单词是否大写,功能10可能是单词是否与已知专有名词列表匹配等等.如果您阅读了一些关于结构化的预测任务和方法,您应该看到为什么使用为此任务定制的模型(最简单的是HMM,但我想要进入CRF/Structured Perceptron/StructSVM以获得最先进的性能)优于处理此任务作为一堆独立的决定.