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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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