首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ValueError: spacy.strings.StringStore大小更改,可能表示二进制不兼容。预期来自C头的80,来自PyObject的64

ValueError: spacy.strings.StringStore大小更改,可能表示二进制不兼容。预期来自C头的80,来自PyObject的64
EN

Stack Overflow用户
提问于 2021-04-11 06:09:31
回答 4查看 3.8K关注 0票数 2

我正在使用python3.8.5和jupyter笔记本电脑

spacy = 3.0.5

神经元库因子= 4.0

下面是我运行的用于测试的代码

代码语言:javascript
复制
import datetime
import re
import time

import pandas as pd

from formative_assessment.dataset_extractor import ConvertDataType
from formative_assessment.feature_extractor import FeatureExtractor


class AEGrading:
    """
        Automatically evaluates, grades and provides feedback to students' answers of the datasets.
        Provides feedback as dict including total data of the student answer.
    """

    def __init__(self, qid, stu_answer, dataset, dataset_path, score=5):

        self.qid = qid
        self.stu_answer = stu_answer
        self.dataset = dataset
        self.length_ratio = len(stu_answer) / len(dataset[qid]["desired_answer"])
        self.score = score
        self.fe = FeatureExtractor(qid, stu_answer, dataset, dataset_path)
        self.wrong_terms = {}

        self.feedback = {"id": self.qid, "question": self.dataset[self.qid]["question"],
                         "desired_answer": self.dataset[self.qid]["desired_answer"], "student_answer": stu_answer,
                         "length_ratio": self.length_ratio, "is_answered": "-", "is_wrong_answer": "not wrong answer",
                         "interchanged": "-", "missed_topics": "-", "missed_terms": "-", "irrelevant_terms": "-",
                         "score_avg": 0, "our_score": 0}

    def is_answered(self, default="not answered"):
        """
            Checks if the student answered or not given the default evaluator's string. Assigns score to 'zero' if not
            answered.

        :param default: str
            String to be checked if student not answered
        :return: bool
            True if student answered, else False
        """

        re_string = " *" + default + " *"

        if re.match(re_string, self.stu_answer.lower()):
            self.feedback["is_answered"] = "not answered"
            self.score = 0
            return False

        else:
            self.feedback["is_answered"] = "answered"
            return True

    def iot_score(self):
        """
            Checks if there are any interchange of topics or missed topics and deduce the score accordingly. Deduce
            nothing from the score if there are no interchange of topics or missed topics

        :return: None
        """
        iot = self.fe.get_interchanged_topics()

        interchanged = iot["interchanged"]
        missed_topics = iot["missed_topics"]
        total_relations = iot["total_relations"]
        topics_num = iot["total_topics"]

        self.feedback["interchanged"] = interchanged
        self.feedback["missed_topics"] = missed_topics

        if interchanged:
            iot_deduce = len(interchanged) / total_relations
            self.score = self.score - (iot_deduce * self.score)

        if missed_topics:
            missed_deduce = len(missed_topics) / topics_num
            self.score = self.score - (missed_deduce * self.score)

    def missed_terms_score(self):
        """
            Checks if there are any missed terms in the student answer and deduce score accordingly

        :return: None
        """

        missed_terms = self.fe.get_missed_terms()
        self.feedback["missed_terms"] = missed_terms.keys()

        total = round(sum(missed_terms.values()), 3)
        self.score = self.score - (total * self.score)  # self.score/2

    def irrelevant_terms_score(self):
        """
            Checks if there are any irrelevant terms in the student answer. We do not deduce score for this feature, as
            we consider any irrelevant term as noise.

        :return: None
        """
        self.feedback["irrelevant_terms"] = self.fe.get_irrelevant_terms()


if __name__ == '__main__':

    PATH = "dataset/mohler/cleaned/"
    max_score = 5

    # Convert the data into  dictionary with ids, their corresponding questions, desired answers and student answers
    convert_data = ConvertDataType(PATH)
    dataset_dict = convert_data.to_dict()

    id_list = list(dataset_dict.keys())
    data = []

    # random.seed(20)
    for s_no in id_list[:7]:

        # s_no = random.choice(id_list)
        question = dataset_dict[s_no]["question"]
        desired_answer = dataset_dict[s_no]["desired_answer"]

        student_answers = dataset_dict[s_no]["student_answers"]
        scores = dataset_dict[s_no]["scores"]
        # score_me = dataset_dict[s_no]["score_me"]
        # score_other = dataset_dict[s_no]["score_other"]

        for index, _ in enumerate(student_answers):
            # index = random.randint(0, 12)
            start = time.time()
            student_answer = str(student_answers[index])

            print(s_no, student_answer)
            aeg = AEGrading(s_no, student_answer, dataset_dict, PATH, max_score)

            if aeg.is_answered():
                aeg.iot_score()
                aeg.missed_terms_score()
                aeg.irrelevant_terms_score()
                if aeg.score == 0:
                    aeg.feedback["is_wrong_answer"] = "wrong_answer"

            # aeg.feedback["score_me"] = score_me[index] # Only for mohler data
            # aeg.feedback["score_other"] = score_other[index]
            aeg.feedback["score_avg"] = scores[index]
            aeg.feedback["our_score"] = round((aeg.score * 4)) / 4  # Score in multiples of 0.25

            data.append(aeg.feedback)
            print(aeg.feedback)
            print("It took ", time.time() - start, " secs")
            print("----------------------------------------------------------")

            if len(data) % 50 == 0:
                df = pd.DataFrame(data)
                SAVE_PATH = "outputs/automatic_evaluation/II_NN/" + str(datetime.datetime.now()) + ".csv"
                df.to_csv(SAVE_PATH, sep=",")

    df = pd.DataFrame(data)
    SAVE_PATH = "outputs/automatic_evaluation/II_NN/" + str(datetime.datetime.now()) + ".csv"
    df.to_csv(SAVE_PATH, sep=",")

在我运行以上代码之后,我得到了如下所示的错误

9只进口熊猫的ValueError追踪(最近一次呼叫)为pd 10 -> 11从formative_assessment.dataset_extractor进口ConvertDataType 12从formative_assessment.feature_extractor进口FeatureExtractor 13

~\Desktop\FYP\Automatic-Formative-Assessment-main\formative_assessment\dataset_extractor.py在8个进口熊猫中作为pd 9-> 10从formative_assessment.utilities.utils进口实用程序11

从输入清单12 -> 13进口神经醇14进口numpy为np 15进口pytextrank

~\anaconda3\lib\site-packages\neuralcoref_init_.py in 12 warnings.filterwarnings(“忽略”,message="spacy.strings.StringStore size更改") 13 -> 14从.neuralcoref导入NeuralCoref 15从.file_utils导入NEURALCOREF_MODEL_URL,NEURALCOREF_MODEL_PATH,NEURALCOREF_CACHE,cached_path 16

strings.pxd in init neuralcoref.neuralcoref()

ValueError: spacy.strings.StringStore大小更改,可能表示二进制不兼容。预期80来自C头,64来自PyObject

**我试着安装follwing方法

pip卸载神经凉亭

pip安装神经库-非二元神经库

的问题还是一样,希望有人能帮我,非常感谢.**

EN

回答 4

Stack Overflow用户

发布于 2021-08-18 13:13:01

正如其他人已经指出的,spaCy 3和更高版本不支持神经凹区。基于的评论,spaCy团队正在积极地研究coref解析问题,以便将其包含在隐藏的库中,所以请继续关注。

最后,如果您现在需要这个库,您应该创建一个单独的环境并执行以下操作:

代码语言:javascript
复制
git clone https://github.com/huggingface/neuralcoref.git
cd neuralcoref
pip install -r requirements.txt
pip install -e .
票数 2
EN

Stack Overflow用户

发布于 2021-04-27 13:25:29

在我的例子中,我必须将其降级为Python3.7.4,并且它可以工作。在这里查看一下:https://pypi.org/project/neuralcoref/#files,您可以看到"neuralcoref“只支持Python3.5、3.6和3.7。

票数 1
EN

Stack Overflow用户

发布于 2021-08-15 12:54:11

请看一下这个答案https://stackoverflow.com/a/62844213/1264899

为了运行,您需要使用spaCy版本2.1.0和pythonVersion3.7。这是在Ubuntu16.04和Mac上唯一的组合。

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

https://stackoverflow.com/questions/67041981

复制
相关文章

相似问题

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