2

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

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

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

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

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

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

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

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

4

1 回答 1

13

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

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

最后一点,词性标注是结构化预测问题的一个实例,而不是一系列独立的分类。如果这不仅仅是一项学术练习,您将希望转向结构化感知器,或其他结构化学习方法,如 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 的直觉,所以我还添加了一些特征函数来指示之前的标签是什么。所以我使用特征 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 以获得最先进的性能)优于处理这个作为一堆独立的决定。

于 2013-02-12T11:13:20.757 回答