如何为针对命名实体识别的分类器构建特征向量?

我有一组标签(不同于常规的名称、地点、对象等)。在我的案例中,它们是特定领域的,我称之为:实体、动作、事件。我希望使用这些作为种子来提取更多的命名实体。

我发现了这篇论文:由Isozaki等人撰写的《高效的支持向量分类器用于命名实体识别》。虽然我喜欢使用支持向量机进行命名实体识别的想法,但我卡在了如何编码特征向量上。在他们的论文中,他们是这样说的:

例如,在“总统乔治·赫伯特·布什说克林顿是……”这句话中,单词被分类如下:“总统”=其他,“乔治”=人-开始,“赫伯特”=人-中间,“布什”=人-结束,“说”=其他,“克林顿”=人-单一,“是”=其他。这样,一个人的名字的第一个词被标记为人-开始。最后一个词被标记为人-结束。名字中的其他词被标记为人-中间。如果一个人的名字由单个词表示,则标记为人-单一。如果一个词不属于任何命名实体,则标记为其他。由于IREX定义了八个NE类别,单词被分类为33个类别。

每个样本由15个特征表示,因为每个单词有三个特征(词性标签、字符类型和单词本身),并且还使用了前两个单词和后两个单词来表示上下文依赖性。尽管通常会删除不常见的特征以防止过拟合,但我们使用所有特征,因为SVM具有鲁棒性。每个样本由一个长二进制向量表示,即一系列0(假)和1(真)。例如,上述例子中的“布什”由一个向量x = x[1] … x[D]表示如下。只有15个元素是1。

x[1] = 0 // 当前词不是‘Alice’ x[2] = 1 // 当前词是‘Bush’ x[3] = 0 // 当前词不是‘Charlie’x[15029] = 1 // 当前词性是专有名词 x[15030] = 0 // 当前词性不是动词x[39181] = 0 // 前一个词不是‘Henry’ x[39182] = 1 // 前一个词是‘Herbert

我真的不明白这里的二进制向量是如何构建的。我知道我错过了一个微妙的点,但有人能帮我理解吗?


回答:

他们省略了一个词袋词汇构建步骤。

基本上,你需要构建一个从训练集中(非罕见)词到索引的映射。假设你的训练集中有2万个独特词。你将有一个从训练集中的每个词到[0, 20000]的映射。

然后,特征向量基本上是几个非常稀疏的向量的连接,这些向量对应于特定词有一个1,其余19,999个是0,然后对应于特定词性有一个1,其余50个非活动词性是0。这通常被称为独热编码。 http://en.wikipedia.org/wiki/One-hot

def encode_word_feature(word, POStag, char_type, word_index_mapping, POS_index_mapping, char_type_index_mapping)):  # 使用稀疏编码向量而不是密集列表更有意义,但这样更清晰  ret = empty_vec(len(word_index_mapping) + len(POS_index_mapping) + len(char_type_index_mapping))  so_far = 0  ret[word_index_mapping[word] + so_far] = 1  so_far += len(word_index_mapping)  ret[POS_index_mapping[POStag] + so_far] = 1  so_far += len(POS_index_mapping)  ret[char_type_index_mapping[char_type] + so_far] = 1  return retdef encode_context(context):  return encode_word_feature(context.two_words_ago, context.two_pos_ago, context.two_char_types_ago,              word_index_mapping, context_index_mapping, char_type_index_mapping) +         encode_word_feature(context.one_word_ago, context.one_pos_ago, context.one_char_types_ago,              word_index_mapping, context_index_mapping, char_type_index_mapping) +          # ... 模式很明显

所以你的特征向量大约有10万个大小,加上一些额外的词性和字符标签,几乎全部是0,除了根据你的特征到索引映射选择的位置上的15个1。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注