0

我正在研究自然语言处理,尤其是文本中的句子边界检测 (SBD)。目前,我想建立自己的基于条件随机场的 SBD 模型,因为我读过 CRF 是序列标记的一个很好的起点。作为包,我使用 sklearn_crfsuite 并按照教程 ( https://sklearn-crfsuite.readthedocs.io/en/latest/tutorial.html ) 进行实施。我的想法是标记文本并为每个标记分配一个标签。作为标签,我使用 B(用于句子的开头)、E(用于句子的结尾)和 O(用于其他,所以在句子中)。我有 6 个带句子边界的带注释文本。例如,我的火车数据如下所示:

string = 'This is a test sentence. This is a second test sentence!'
tokenized_String = ['This', 'is', 'a', 'test', 'sentence', '.', 'This', 'is', 'a', 'second', 'test', 'sentence', '!']
X_train = [feature_dict_token1, ... , feature_dict_token13]
y_train = [B, O, O, O, E, B, O, O, O, O, E]
crf = sklearn_crfsuite.CRF()
crf.fit([X_train], [y_train])

使用 X_train 和 y_train 作为包含 6 个文本中的所有数据的平面列表来训练 CRF 是否正确?或者训练数据必须看起来像这样,在 X_train、y_train 列表中的每个句子都有一个条目?

string = 'This is a test sentence. This is a second test sentence!'
tokenized_String = ['This', 'is', 'a', 'test', 'sentence', '.', 'This', 'is', 'a', 'second', 'test', 'sentence', '!']
X_train = [[dict_token1, ..., dict_token6 (end of sentence one)] , [dict_token7, ..., dict_token13]]
y_train = [[B, O, O, O, E], [B, O, O, O, O, E]]
crf = sklearn_crfsuite.CRF()
crf.fit(X_train, y_train)
4

0 回答 0