crfsuite中文本特征的数值转换

我在查看crfsuite-python文档中提供的示例代码时,发现了以下用于定义特征的代码。

def word2features(sent, i):word = sent[i][0]postag = sent[i][1]features = [    'bias',    'word.lower=' + word.lower(),    'word[-3:]=' + word[-3:],    'word[-2:]=' + word[-2:],    'word.isupper=%s' % word.isupper(),    'word.istitle=%s' % word.istitle(),    'word.isdigit=%s' % word.isdigit(),    'postag=' + postag,    'postag[:2]=' + postag[:2],]if i > 0:    word1 = sent[i-1][0]    postag1 = sent[i-1][1]    features.extend([        '-1:word.lower=' + word1.lower(),        '-1:word.istitle=%s' % word1.istitle(),        '-1:word.isupper=%s' % word1.isupper(),        '-1:postag=' + postag1,        '-1:postag[:2]=' + postag1[:2],    ])else:    features.append('BOS')    if i < len(sent)-1:    word1 = sent[i+1][0]    postag1 = sent[i+1][1]    features.extend([        '+1:word.lower=' + word1.lower(),        '+1:word.istitle=%s' % word1.istitle(),        '+1:word.isupper=%s' % word1.isupper(),        '+1:postag=' + postag1,        '+1:postag[:2]=' + postag1[:2],    ])else:    features.append('EOS')            return features

我理解像isupper()这样的特征可以是0或1,但对于像word[-2:]这样的字符特征,它们是如何转换成数值的呢?


回答:

CRF通过输入数据序列进行训练,以学习从一个状态(标签)到另一个状态的转换。为了启用这种算法,我们需要定义考虑不同转换的特征。在下面的word2features()函数中,我们将每个单词转换为一个特征字典,描述以下属性或特征:

单词的小写形式包含最后3个字符的后缀包含最后2个字符的后缀标志以确定大写、标题大写、数字数据和POS标签

我们还附加了与前一个和后一个单词或标签相关的属性,以确定句子的开头(BOS)或结尾(EOS)

Related Posts

多维度Top-k评分

例如,在机器学习中的自然语言处理中,通常使用波束搜索来…

R – Caret train() “错误:停止” 与 “在newdata中未找到对象中使用的所有变量名”

我正在尝试为蘑菇数据构建一个简单的朴素贝叶斯分类器。我…

创建训练和测试数据集分割,数据嵌套在多个文件夹中

我正在准备数据以训练一个图像识别模型。目前我有一个文件…

我的神经网络预测出现错误:IndexError: list index out of range

我正在进行一个简单的垃圾邮件/非垃圾邮件文本分类。我的…

python 给出数组是一维的,但索引了两个维度错误

我已经为 miniBatchGradientDesce…

TensorFlow自定义训练步骤使用不同的损失函数

背景 根据TensorFlow文档,可以使用以下方式执…

发表回复

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