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

如何从数据集中移除EXIF数据?

我在尝试从数据集中的图像中移除EXIF数据(这些数据将…

用于Python中的“智能点”游戏的遗传算法不工作

过去几天我一直在尝试实现所谓的“智能点”游戏。我第一次…

哪个R平方得分更有帮助?

data.drop(‘Movie Title’, ax…

使用线性回归预测GRE分数对录取率的影响

我正在学习线性回归,并尝试在Jupyter笔记本中用P…

使用mlrMBO贝叶斯优化进行SVM超参数调优时出现错误

我试图针对一个分类任务优化SVM,这个方法在许多其他模…

Keras模型的二元交叉熵准确率未发生变化

我在网上看到了很多关于这个问题的提问,但没有找到明确的…

发表回复

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