【发布时间】:2021-05-20 18:17:04
【问题描述】:
我正在尝试从以下数据集中提取 POS 标签信息
Sentences Characters Label
803 A Complete Bibliography of Scientific American... 128 1
1373 Mandated MVNO access would 'likely lead to del... 244 0
1257 What is PANS/PANDAS? And Why Are Cases On The ... 212 0
2405 St Laurence School | Care • Inspire • Succ Hea... 124 1
2589 Study reveals: The 50 most Instagrammed island... 212 0
我正在应用以下功能:
(根据艾莉亚的建议)
import nltk
tagged_sentences = nltk.corpus.treebank.tagged_sents()
cutoff = int(.75 * len(tagged_sentences))
import nltk
tagged_sentences = nltk.corpus.treebank.tagged_sents()
cutoff = int(.75 * len(tagged_sentences))
def features(sentence, index):
return {
'word': sentence[index],
'is_first_word': int(index == 0),
'is_last_word': int(index == len(sentence) - 1),
'is_capitalized': sentence[index][0].upper() == sentence[index][0],
'is_all_upper': int(sentence[index].upper() == sentence[index]),
'is_all_lower': int(sentence[index].lower() == sentence[index]),
'prev_word': '' if index == 0 else sentence[index - 1],
'next_word': '' if index == len(sentence) - 1 else sentence[index + 1],
'prefix-1': sentence[index][0],
'prefix-2': sentence[index][:2],
'prefix-3': sentence[index][:3],
'suffix-1': sentence[index][-1],
'suffix-2': sentence[index][-2:],
'suffix-3': sentence[index][-3:],
}
按照本文中描述的步骤:https://medium.com/analytics-vidhya/pos-tagging-using-conditional-random-fields-92077e5eaa31,我想将其应用于我的数据(仍在考虑X、y,例如X=df[['Sentences','Characters']] 和y=df['Label']。
X=df[['Sentences','Characters']]
y=df['Label']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=40)
train_df= pd.concat([X_train, y_train], axis=1)
test_df = pd.concat([X_test, y_test], axis=1)
此步骤应将数据集拆分为训练和测试。但是,我已经有了这些信息,所以我不需要将数据集拆分为训练和测试。
def untag(tagged_sentences):
return [w for w, t in tagged_sentences]
def prepareData(tagged_sentences):
X,y=[],[]
for sentence in tagged_sentences.Sentences:
X.append([features(untag(sentence), index) for index in range(len(sentence))])
y.append([tag for word,tag in sentence])
return X,y
X_train,y_train=prepareData(train_df)
X_test,y_test=prepareData(test_df)
运行我的数据集,我得到了错误:
----> 8 X_train,y_train=prepareData(train_df)
ValueError: not enough values to unpack (expected 2, got 1)
希望您能告诉我如何修复 ValueError。
我需要使用句子来分配标签。困难在于使用我的数据集(训练和测试)来执行与我共享的链接中相同的操作。
【问题讨论】:
-
您的问题不需要 CRF,因为 y 不是结构化的;这是一个标量。相反,逻辑回归就足够了。
-
请发帖minimal reproducible example。变量 training_sentences 未定义。
-
对不起,艾莉亚,我没有明白你的意思。你能解释一下吗?我认为其他帖子可能很有用,但我知道我应该在那里替换什么:nlpforhackers.io/training-pos-tagger 我正在尝试在我的数据框中使用这些句子。所以 training_sentence 应该是我的训练数据集(train_df)中的句子。我想我把所有信息都放在那里了,但很高兴提供更多信息
-
您从哪里获得 POS 标签?我看到的只有 L,整个句子是 0 或 1。
-
@StupidWolf 是的,我们必须解决其他问题才能解决这个问题。我们正在下面的聊天中讨论它。
标签: python scikit-learn