首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于火车和测试设备的POS标签: ValueError

用于火车和测试设备的POS标签: ValueError
EN

Stack Overflow用户
提问于 2021-02-17 19:54:18
回答 1查看 221关注 0票数 0

我正在尝试从以下数据集中提取POS标记信息

代码语言:javascript
复制
                 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

我正在执行以下职能:

(在Arya的建议之后)

代码语言:javascript
复制
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,我想将同样的步骤应用于我的数据(仍然考虑Xy,例如X=df[['Sentences','Characters']]y=df['Label'] )。

代码语言:javascript
复制
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)

此步骤应将数据集拆分为训练和测试。但是,我已经有了这些信息,所以我不需要将数据集拆分为训练和测试。

代码语言:javascript
复制
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)

运行我的数据集,我会得到错误:

代码语言:javascript
复制
----> 8 X_train,y_train=prepareData(train_df)

ValueError: not enough values to unpack (expected 2, got 1)

我希望你能告诉我如何修复ValueError。

我需要用句子来分配标签。困难在于使用我的数据集(训练和测试)来完成与我共享的链接相同的操作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-17 21:46:04

好吧我明白问题所在了。嗯,这三个问题。

问题1. prepareData变量名

您没有仔细地复制你所用的教程。这就是他们如何定义prepareData的方法

代码语言:javascript
复制
def prepareData(tagged_sentences):
    X,y=[],[]
    for sentences in tagged_sentences:
        X.append([features(untag(sentences), index) for index in range(len(sentences))])
        y.append([tag for word,tag in sentences])
    return X,y

(顺便说一句,他们调用了变量sentences而不是sentence,这是一个令人非常困惑的命名约定,因为它只包含一个sentence

但是,当您复制教程时,您在两个地方更改了名称tagged_sentences,每个地方都是不同的东西!

作为函数参数的名称,您将其更改为已使用的sentences。作为函数中变量的名称,您将其更改为training_sentences。这两个名称都会使您感到困惑,因为它们在代码中有其他含义。但他们应该匹配!尝试在两处将其重命名为tagged_sentences

问题2. prepareData不是为DataFrame而设计的。

一旦你解决了那个问题,你就会有一个新的问题。本教程没有使用DataFrame。它用的是一张清单。您将在线路上遇到问题:

代码语言:javascript
复制
    for sentences in tagged_sentences:

因为在Pandas DataFrame循环上循环列名。(见我的答案这里。)

相反,你想要的是只看句子。

将这一行改为:

代码语言:javascript
复制
    for sentences in tagged_sentences.Sentences:

这样,您只会得到您所关心的Series。(无论如何,您没有使用Characters列!)

问题3.你不是在做词性标注!你不需要CRF!

我只是想澄清一下。POS标记意味着,对于一个句子中的每个输入单词,您可以为该单词预测一个标签。(标签是单词的词性部分。)

你不能那么做。您正在为整个句子创建一个标签。(请参阅您的Label列。)对于这种类型的问题,你不需要CRF。没有输出链。Logistic回归是一种等价的模型,它能满足你的需要。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66249062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档