【问题标题】:Numeric conversion of textual features in crfsuitecrfsuite中文本特征的数值转换
【发布时间】:2020-09-10 07:56:01
【问题描述】:

我正在查看 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:] 之类的特征是字符,它们如何转换为数字项?

【问题讨论】:

    标签: python machine-learning nlp named-entity-recognition python-crfsuite


    【解决方案1】:

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

    lower case of word
    suffix containing last 3 characters
    suffix containing last 2 characters
    flags to determine upper-case, title-case, numeric data and POS tag
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-13
      • 2013-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-13
      • 2015-11-23
      • 1970-01-01
      相关资源
      最近更新 更多