先日の「
CRF で名詞句の判定をしてみた」で、
CRF の alogorithm を変更した場合の精度を比較してみました。
変更箇所は sklearn_crfsuite.CRF() のパラメータのみです。
今回つかったデータでは algorithm=lbfgs、l2sgd、ap、pa で同程度、
algorithm=arow が精度が低いという結果になりました。
■algorithm=lbfgs, c1=0.1, c2=0.1
crf = sklearn_crfsuite.CRF(
algorithm='lbfgs',
c1=0.1,
c2=0.1,
max_iterations=100,
all_possible_transitions=True
)
0.9441077916505949
■algorithm=lbfgs, c1=0.5, c2=0.5
crf = sklearn_crfsuite.CRF(
algorithm='lbfgs',
c1=0.5,
c2=0.5,
max_iterations=100,
all_possible_transitions=True
)
0.945220761760303
■algorithm=l2sgd, c2=0.1
crf = sklearn_crfsuite.CRF(
algorithm='l2sgd',
c2=0.1,
max_iterations=100,
all_possible_transitions=True
)
0.9426298984809508
■algorithm=l2sgd, c2=0.5
crf = sklearn_crfsuite.CRF(
algorithm='l2sgd',
c2=0.5,
max_iterations=100,
all_possible_transitions=True
)
0.9449389892604881
■algorithm=ap
crf = sklearn_crfsuite.CRF(
algorithm='ap',
max_iterations=100,
all_possible_transitions=True
)
0.9418937778719487
■algorithm=pa
crf = sklearn_crfsuite.CRF(
algorithm='pa',
max_iterations=100,
all_possible_transitions=True
)
0.9407907098905913
■algorithm=arow
crf = sklearn_crfsuite.CRF(
algorithm='arow',
max_iterations=100,
all_possible_transitions=True
)
0.8690576483344261