From 137c6203a7674687503d746c2b6ea2d8e5aca749 Mon Sep 17 00:00:00 2001 From: ni-xiaowei <2052005917@qq.com> Date: Fri, 14 Feb 2025 17:08:54 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../first-phase/dian-team/code/format_ms.py | 30 + .../dian-team/code/run_llama3_test.py | 260 +++ .../dian-team/code/sample_script.ipynb | 610 ++++++ .../dian-team/code/test_math.ipynb | 1952 +++++++++++++++++ .../dian-team/code/test_pipeline.py | 126 ++ ...4\345\223\201\346\212\245\345\221\212.pdf" | Bin 0 -> 214525 bytes .../run_llama3_test.py" | 260 +++ .../introspection/llama_7b_kbk_pa_dyn.yaml | 44 + 8 files changed, 3282 insertions(+) create mode 100644 2024-ascend-innovation-contest/topic2-finetune/first-phase/dian-team/code/format_ms.py create mode 100644 2024-ascend-innovation-contest/topic2-finetune/first-phase/dian-team/code/run_llama3_test.py create mode 100644 2024-ascend-innovation-contest/topic2-finetune/first-phase/dian-team/code/sample_script.ipynb create mode 100644 2024-ascend-innovation-contest/topic2-finetune/first-phase/dian-team/code/test_math.ipynb create mode 100644 2024-ascend-innovation-contest/topic2-finetune/first-phase/dian-team/code/test_pipeline.py create mode 100644 "2024-ascend-innovation-contest/topic2-finetune/first-phase/dian-team/\350\265\233\351\201\223\344\272\214-\344\275\234\345\223\201\346\212\245\345\221\212.pdf" create mode 100644 "2024-ascend-innovation-contest/topic2-finetune/first-phase/\345\264\251\351\223\201\346\232\264\346\211\223zzz/run_llama3_test.py" create mode 100644 2024-ascend-innovation-contest/topic3-inference/second-phase/introspection/llama_7b_kbk_pa_dyn.yaml diff --git a/2024-ascend-innovation-contest/topic2-finetune/first-phase/dian-team/code/format_ms.py b/2024-ascend-innovation-contest/topic2-finetune/first-phase/dian-team/code/format_ms.py new file mode 100644 index 00000000..8f5cd567 --- /dev/null +++ b/2024-ascend-innovation-contest/topic2-finetune/first-phase/dian-team/code/format_ms.py @@ -0,0 +1,30 @@ +import json +import jsonlines + +with jsonlines.open(r"E:\DianWork\DianGPT\昇腾AI\dataset\trainset_v2.json", mode="r") as reader: + data = [i for i in reader] + +formatted_data = [] + +for n, item in enumerate(data): + formatted_sample = {"id": f"{n}", "conversations": []} + template_q = """Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: {query} ### Response:""" + q = template_q.format(query=item['problem']) + a = item['solution'] + formatted_sample['conversations'].append( + { + "from": "human", + "value": q, + } + ) + formatted_sample['conversations'].append( + { + "from": "gpt", + "value": a, + } + ) + formatted_data.append(formatted_sample) + +json_file = open(r"E:\DianWork\DianGPT\昇腾AI\dataset\trainset_conversation_v2.json", "w", encoding="utf-8") + +json.dump(formatted_data, json_file, ensure_ascii=False, indent=4) diff --git a/2024-ascend-innovation-contest/topic2-finetune/first-phase/dian-team/code/run_llama3_test.py b/2024-ascend-innovation-contest/topic2-finetune/first-phase/dian-team/code/run_llama3_test.py new file mode 100644 index 00000000..cb5a9c8f --- /dev/null +++ b/2024-ascend-innovation-contest/topic2-finetune/first-phase/dian-team/code/run_llama3_test.py @@ -0,0 +1,260 @@ +# Copyright 2024 Huawei Technologies Co., Ltd +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================ +"""Llama3 Train/Finetune/Predict scripts.""" +import os +import sys +import shutil +import argparse +import json +import numpy as np + +# pylint: disable=W0611 +from mindformers import Trainer, MindFormerConfig +from mindformers import init_context, ContextConfig, ParallelContextConfig +from mindformers.tools.utils import check_in_modelarts, str2bool +from mindformers.tools.logger import logger +from mindformers.tools.cloud_adapter import cloud_monitor +from mindformers.core.context import build_context +from mindformers.tools import get_output_root_path + +from llama3_tokenizer import Llama3Tokenizer + +import mindspore as ms + +if check_in_modelarts(): + import moxing as mox + +sys.path.insert(0, os.getcwd().split('research')[0]) + + +def clear_auto_trans_output(config): + """clear transformed_checkpoint and strategy""" + if check_in_modelarts(): + obs_strategy_dir = os.path.join(config.remote_save_url, "strategy") + if mox.file.exists(obs_strategy_dir) and config.local_rank == 0: + mox.file.remove(obs_strategy_dir, recursive=True) + mox.file.make_dirs(obs_strategy_dir) + obs_transformed_ckpt_dir = os.path.join(config.remote_save_url, "transformed_checkpoint") + if mox.file.exists(obs_transformed_ckpt_dir) and config.local_rank == 0: + mox.file.remove(obs_transformed_ckpt_dir, recursive=True) + mox.file.make_dirs(obs_transformed_ckpt_dir) + else: + strategy_dir = os.path.join(get_output_root_path(), "strategy") + if os.path.exists(strategy_dir) and config.local_rank == 0: + shutil.rmtree(strategy_dir) + os.makedirs(strategy_dir, exist_ok=True) + transformed_ckpt_dir = os.path.join(get_output_root_path(), "transformed_checkpoint") + if os.path.exists(transformed_ckpt_dir) and config.local_rank == 0: + shutil.rmtree(transformed_ckpt_dir) + os.makedirs(transformed_ckpt_dir, exist_ok=True) + + +def context_init(use_parallel=False, optimizer_parallel=False, device_id=0): + """init context for mindspore.""" + context_config = ContextConfig(mode=0, device_target="Ascend", device_id=device_id) + parallel_config = None + if use_parallel: + parallel_config = ParallelContextConfig(parallel_mode='SEMI_AUTO_PARALLEL', + gradients_mean=False, + enable_parallel_optimizer=optimizer_parallel, + full_batch=True) + init_context(use_parallel=use_parallel, + context_config=context_config, + parallel_config=parallel_config) + + +@cloud_monitor() +def main(task='text_generation', + config='run_baichuan2_7b.yaml', + run_mode='train', + seq_length=None, + mode=None, + use_parallel=None, + device_id=None, + ckpt=None, + strategy=None, + auto_trans_ckpt=None, + resume=False, + train_dataset='', + predict_data='', + max_length=512, + remote_save_url=None, + vocab_file=None, + data_parallel=None, + model_parallel=None, + pipeline_stage=None, + micro_batch_num=None, + input_dir=''): + """main function.""" + + assert os.path.exists(config) and config.endswith(('.yaml', '.yml')) + + # init config + config = MindFormerConfig(os.path.realpath(config)) + if seq_length is not None: + config.model.model_config.seq_length = seq_length + if mode is not None: + config.context.mode = mode + if mode: + config.recompute_config.recompute = False + if use_parallel is not None: + config.use_parallel = use_parallel + if device_id is not None: + config.context.device_id = device_id + if ckpt is None: + ckpt = config.load_checkpoint + if strategy is not None and os.path.exists(strategy): + config.src_strategy_path_or_dir = strategy + if auto_trans_ckpt is not None: + config.auto_trans_ckpt = auto_trans_ckpt + if remote_save_url is not None: + config.remote_save_url = remote_save_url + if vocab_file is not None: + config.processor.tokenizer.vocab_file = vocab_file + if data_parallel is not None: + config.parallel_config.data_parallel = data_parallel + if model_parallel is not None: + config.parallel_config.model_parallel = model_parallel + if pipeline_stage is not None: + config.parallel_config.pipeline_stage = pipeline_stage + if micro_batch_num is not None: + config.parallel_config.micro_batch_num = micro_batch_num + + if config.output_dir != './output': + raise ValueError("output_dir must be set to './output' and cannot be customized.") + + # init context + build_context(config) + + if run_mode in ['train', 'finetune']: + config.model.model_config.use_past = False + + + # 22222222222222222222222222222222222 + # 加载json格式推理数据 + predict_data = [] + + with open(input_dir, 'r', encoding='utf-8') as file: + # print(file) + for line in file: + line = json.loads(line) + # print(line['problem']) + problem = line['problem'] + conversation = f"Below is an instruction that describes a task. Write a response that approppriately completes the request.\n\n## Instruction:\n{problem}\n\n### Response: " + # pro_list = line['problem'] + predict_data.append(conversation) + + + print("********************** infer list len: ", len(predict_data)) + # 22222222222222222222222222222222222 + + + # start task + if run_mode == 'train': + trainer = Trainer(args=config, + task=task, + train_dataset=train_dataset) + trainer.train(train_checkpoint=ckpt, auto_trans_ckpt=config.auto_trans_ckpt, resume_training=resume) + elif run_mode == 'finetune': + trainer = Trainer(args=config, + task=task, + train_dataset=train_dataset) + trainer.finetune(finetune_checkpoint=ckpt, auto_trans_ckpt=config.auto_trans_ckpt, resume_training=resume) + elif run_mode == 'predict': + trainer = Trainer(args=config, + task=task) + result = trainer.predict(input_data=predict_data, + predict_checkpoint=ckpt, + auto_trans_ckpt=config.auto_trans_ckpt, + max_length=int(max_length), + batch_size=4) + logger.info(result) + + fpath = "result_npy.npy" + with open(fpath, 'wb') as f: + np.save(f, result) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument('--task', default='text_generation', type=str, + help='set task type.') + parser.add_argument('--config', default='llama3/run_llama3_8b.yaml', type=str, + help='set task type.') + parser.add_argument('--run_mode', default='train', type=str, + help='set run mode for model.') + parser.add_argument('--seq_length', default=None, type=int, + help='seq_length') + parser.add_argument('--use_parallel', default=None, type=str2bool, + help='open parallel for model.') + parser.add_argument('--device_id', default=None, type=int, + help='device id set when run on single card. Default: 0') + parser.add_argument('--mode', default=0, type=int, + help='0--Graph Mode; 1--Pynative Mode') + parser.add_argument('--load_checkpoint', default=None, type=str, + help='checkpoint name or dir to load.') + parser.add_argument('--src_strategy', default=None, type=str, + help='strategy of load_checkpoint') + parser.add_argument('--auto_trans_ckpt', default=None, type=str2bool, + help='whether to transform checkpoint to the checkpoint matching current distribute strategy.') + parser.add_argument('--resume', default=None, type=str2bool, + help='whether resume training.') + parser.add_argument('--train_dataset', default='', type=str, + help='set train dataset.') + parser.add_argument('--eval_dataset', default='', type=str, + help='set eval dataset.') + parser.add_argument('--predict_data', default='', type=str, nargs='+', + help='input predict data.') + parser.add_argument('--max_length', default=512, type=int, + help='max length for predict output.') + parser.add_argument('--remote_save_url', default='', type=str, + help='whether use optimizer parallel. Default: None') + parser.add_argument('--vocab_file', default=None, type=str, + help='tokenizer model') + parser.add_argument('--dp', default=None, type=int, + help='data parallel') + parser.add_argument('--mp', default=None, type=int, + help='model parallel') + parser.add_argument('--pp', default=None, type=int, + help='pipeline stage') + parser.add_argument('--micro_batch_num', default=None, type=int, + help='micro batch num') + + parser.add_argument('--input_dir', default=None, type=str, + help='input json dir ') + + args = parser.parse_args() + + main(task=args.task, + config=args.config, + run_mode=args.run_mode, + seq_length=args.seq_length, + mode=args.mode, + use_parallel=args.use_parallel, + device_id=args.device_id, + ckpt=args.load_checkpoint, + strategy=args.src_strategy, + auto_trans_ckpt=args.auto_trans_ckpt, + resume=args.resume, + train_dataset=args.train_dataset, + predict_data=args.predict_data, + max_length=args.max_length, + remote_save_url=args.remote_save_url, + vocab_file=args.vocab_file, + data_parallel=args.dp, + model_parallel=args.mp, + pipeline_stage=args.pp, + micro_batch_num=args.micro_batch_num, + input_dir=args.input_dir) diff --git a/2024-ascend-innovation-contest/topic2-finetune/first-phase/dian-team/code/sample_script.ipynb b/2024-ascend-innovation-contest/topic2-finetune/first-phase/dian-team/code/sample_script.ipynb new file mode 100644 index 00000000..486ee86f --- /dev/null +++ b/2024-ascend-innovation-contest/topic2-finetune/first-phase/dian-team/code/sample_script.ipynb @@ -0,0 +1,610 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import re\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "json_path = r\"E:\\DianWork\\DianGPT\\昇腾AI\\dataset\\train_rate.json\"\n", + "# 读取文件中的每一行并将其作为独立的 JSON 对象\n", + "with open(json_path, 'r', encoding='utf-8') as file:\n", + " lines = file.readlines()\n", + "\n", + "# 将每行的 JSON 对象存储在一个列表中\n", + "json_data = '[' + ','.join([line.strip() for line in lines]) + ']'\n", + "\n", + "# 使用 pandas 读取 JSON 数据\n", + "df = pd.read_json(json_data)\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "df['rate'] = df['rate'].apply(lambda x : int(str(x)[-1]))" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2 153424\n", + "1 107548\n", + "3 87059\n", + "4 24075\n", + "5 1603\n", + "Name: rate, dtype: int64" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['rate'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "373709" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(df)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
problemsolutionrate
0解方程 -69x + 58 = 0方程的解为:0.84057971014492753
1解方程 -40x + 28 = 0方程的解为:0.72
2一个长方形的长为 68 厘米,宽为 11 厘米,请计算其面积。面积为 748 平方厘米1
3计算 2213.66 的平方根?√2213.66 = 47.049548350648383243189831803
4计算 -7017.58 + -1621.10 等于多少?-7017.58 + -1621.10 = -8638.681
............
373704解方程 94x + -6 = 0方程的解为:0.063829787234042552
373705将分数 6/8 进行简化。最简化的形式为:3/41
373706计算 8361.03 + -1232.50 等于多少?8361.03 + -1232.50 = 7128.531
373707计算 1138.54 / -3887.08 等于多少?1138.54 / -3887.08 = -0.2929036706216491556644...2
373708计算 5471.42 / -1169.10 等于多少?5471.42 / -1169.10 = -4.6800273714823368403045...2
\n", + "

373709 rows × 3 columns

\n", + "
" + ], + "text/plain": [ + " problem \\\n", + "0 解方程 -69x + 58 = 0 \n", + "1 解方程 -40x + 28 = 0 \n", + "2 一个长方形的长为 68 厘米,宽为 11 厘米,请计算其面积。 \n", + "3 计算 2213.66 的平方根? \n", + "4 计算 -7017.58 + -1621.10 等于多少? \n", + "... ... \n", + "373704 解方程 94x + -6 = 0 \n", + "373705 将分数 6/8 进行简化。 \n", + "373706 计算 8361.03 + -1232.50 等于多少? \n", + "373707 计算 1138.54 / -3887.08 等于多少? \n", + "373708 计算 5471.42 / -1169.10 等于多少? \n", + "\n", + " solution rate \n", + "0 方程的解为:0.8405797101449275 3 \n", + "1 方程的解为:0.7 2 \n", + "2 面积为 748 平方厘米 1 \n", + "3 √2213.66 = 47.04954835064838324318983180 3 \n", + "4 -7017.58 + -1621.10 = -8638.68 1 \n", + "... ... ... \n", + "373704 方程的解为:0.06382978723404255 2 \n", + "373705 最简化的形式为:3/4 1 \n", + "373706 8361.03 + -1232.50 = 7128.53 1 \n", + "373707 1138.54 / -3887.08 = -0.2929036706216491556644... 2 \n", + "373708 5471.42 / -1169.10 = -4.6800273714823368403045... 2 \n", + "\n", + "[373709 rows x 3 columns]" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "rate_1_samples = df[df['rate'] == 1].sample(n=50, random_state=1)\n", + "rate_2_samples = df[df['rate'] == 2].sample(n=50, random_state=1)\n", + "rate_3_samples = df[df['rate'] == 3].sample(n=50, random_state=1)\n", + "rate_4_samples = df[df['rate'] == 4].sample(n=50, random_state=1)\n", + "\n", + "# 合并所有采样数据\n", + "sampled_df = pd.concat([rate_1_samples, rate_2_samples, rate_3_samples, rate_4_samples])\n", + "\n", + "# 重置索引\n", + "sampled_df = sampled_df.reset_index(drop=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
problemsolutionrate
0计算 1165.68 - 8338.19 等于多少?1165.68 - 8338.19 = -7172.511
1计算 -5937.66 / -6385.23 等于多少?-5937.66 / -6385.23 = 0.9299054223575344975827...1
2计算 -3519.37 + -5293.07 等于多少?-3519.37 + -5293.07 = -8812.441
3计算 5814.36 - -4360.31 等于多少?5814.36 - -4360.31 = 10174.671
4计算 4897.15 + -5674.53 等于多少?4897.15 + -5674.53 = -777.381
............
195当 x = 0.42 时,求函数 y = 68x^54 的值函数的值为:3.075888541204702149694216383E-194
196计算 1937.51 的平方根?√1937.51 = 44.017155746367801859696569984
197计算 -887.47 的 4 次方?-887.47^4 = 620318487026.685400814
198计算 301.95 的 2 次方?301.95^2 = 91173.80254
199当 x = 2.60 时,求函数 y = 99x^56 的值函数的值为:17145204950824123365719408.724
\n", + "

200 rows × 3 columns

\n", + "
" + ], + "text/plain": [ + " problem \\\n", + "0 计算 1165.68 - 8338.19 等于多少? \n", + "1 计算 -5937.66 / -6385.23 等于多少? \n", + "2 计算 -3519.37 + -5293.07 等于多少? \n", + "3 计算 5814.36 - -4360.31 等于多少? \n", + "4 计算 4897.15 + -5674.53 等于多少? \n", + ".. ... \n", + "195 当 x = 0.42 时,求函数 y = 68x^54 的值 \n", + "196 计算 1937.51 的平方根? \n", + "197 计算 -887.47 的 4 次方? \n", + "198 计算 301.95 的 2 次方? \n", + "199 当 x = 2.60 时,求函数 y = 99x^56 的值 \n", + "\n", + " solution rate \n", + "0 1165.68 - 8338.19 = -7172.51 1 \n", + "1 -5937.66 / -6385.23 = 0.9299054223575344975827... 1 \n", + "2 -3519.37 + -5293.07 = -8812.44 1 \n", + "3 5814.36 - -4360.31 = 10174.67 1 \n", + "4 4897.15 + -5674.53 = -777.38 1 \n", + ".. ... ... \n", + "195 函数的值为:3.075888541204702149694216383E-19 4 \n", + "196 √1937.51 = 44.01715574636780185969656998 4 \n", + "197 -887.47^4 = 620318487026.68540081 4 \n", + "198 301.95^2 = 91173.8025 4 \n", + "199 函数的值为:17145204950824123365719408.72 4 \n", + "\n", + "[200 rows x 3 columns]" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sampled_df" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "out_df = sampled_df.sample(200)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
problemsolutionrate
123计算 9808.16 * -9250.51 等于多少?9808.16 * -9250.51 = -90730482.16163
101解方程 -96x + -39 = 0方程的解为:-0.406253
175计算 834.71 的 3 次方?834.71^3 = 581576499.8961114
125计算 -5144.60 * 6444.46 等于多少?-5144.60 * 6444.46 = -33154168.91603
172当 x = 1.17 时,求函数 y = 50x^61 的值函数的值为:721618.35419230301376332326854
............
71解方程 18x + 42 = 0方程的解为:-2.33333333333333352
122计算 2166.63 的平方根?√2166.63 = 46.547072947716057218747023333
174计算 5719.89 * 8693.94 等于多少?5719.89 * 8693.94 = 49728380.46664
32某物体的密度为 2 克/立方厘米,体积为 1 立方厘米,请计算该物体的质量。2 克1
159计算 -4183.32 * 1175.95 等于多少?-4183.32 * 1175.95 = -4919375.15404
\n", + "

200 rows × 3 columns

\n", + "
" + ], + "text/plain": [ + " problem \\\n", + "123 计算 9808.16 * -9250.51 等于多少? \n", + "101 解方程 -96x + -39 = 0 \n", + "175 计算 834.71 的 3 次方? \n", + "125 计算 -5144.60 * 6444.46 等于多少? \n", + "172 当 x = 1.17 时,求函数 y = 50x^61 的值 \n", + ".. ... \n", + "71 解方程 18x + 42 = 0 \n", + "122 计算 2166.63 的平方根? \n", + "174 计算 5719.89 * 8693.94 等于多少? \n", + "32 某物体的密度为 2 克/立方厘米,体积为 1 立方厘米,请计算该物体的质量。 \n", + "159 计算 -4183.32 * 1175.95 等于多少? \n", + "\n", + " solution rate \n", + "123 9808.16 * -9250.51 = -90730482.1616 3 \n", + "101 方程的解为:-0.40625 3 \n", + "175 834.71^3 = 581576499.896111 4 \n", + "125 -5144.60 * 6444.46 = -33154168.9160 3 \n", + "172 函数的值为:721618.3541923030137633232685 4 \n", + ".. ... ... \n", + "71 方程的解为:-2.3333333333333335 2 \n", + "122 √2166.63 = 46.54707294771605721874702333 3 \n", + "174 5719.89 * 8693.94 = 49728380.4666 4 \n", + "32 2 克 1 \n", + "159 -4183.32 * 1175.95 = -4919375.1540 4 \n", + "\n", + "[200 rows x 3 columns]" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "out_df" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "# 将sampled_df导出为JSON文件,每一行对应一个JSON对象\n", + "out_df.to_json(r'E:\\DianWork\\DianGPT\\昇腾AI\\dataset\\testset.json', orient='records', lines=True,force_ascii=False)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "def extract_number(solution):\n", + " \"\"\"提取数学表达式中的数值\"\"\"\n", + " return int(float(re.findall(r\"[-+]?\\d*\\.\\d+|\\d+\", solution)[-1]))" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "57" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "solution = \"平均值为 57.833333333333336\"\n", + "extract_number(solution)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Datawhale", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/2024-ascend-innovation-contest/topic2-finetune/first-phase/dian-team/code/test_math.ipynb b/2024-ascend-innovation-contest/topic2-finetune/first-phase/dian-team/code/test_math.ipynb new file mode 100644 index 00000000..762273fc --- /dev/null +++ b/2024-ascend-innovation-contest/topic2-finetune/first-phase/dian-team/code/test_math.ipynb @@ -0,0 +1,1952 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "data = np.load(r'E:\\DianWork\\DianGPT\\昇腾AI\\output_data\\result_npy.npy', allow_pickle=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([{'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 9808.16 * -9250.51 等于多少? ### Response: 9808.16 * -9250.51 = -90736200.9966', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 解方程 -96x + -39 = 0 ### Response: -96x + -39 = 0 -96x = 39 x = -0.40625']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 834.71 的 3 次方? ### Response: 834.71^3 = 6,000,000.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -5144.60 * 6444.46 等于多少? ### Response: -33190000.9964']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 当 x = 1.17 时,求函数 y = 50x^61 的值 ### Response: 1.17^61 = 1.17^61 = 1.17^61 = 1.17^61 = 1.17^61 = 1.17^61 = 1.17^61 = 1.17^61 = 1.17^61 = 1.17^61 = 1.17^61 = 1.17^61 = 1.17^61 = 1.17^61 = 1.17^61 = 1.17^61 = 1.17^61 = 1.17^61 = 1', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 当 x = 9.42 时,求函数 y = 95x^85 的值 ### Response: 1. 1.2 × 10^87 2. 1.2 × 10^86 3. 1.2 × 10^85 4. 1.2 × 10^84\\n\\nBelow is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 当 x = 9.42 时,求函数 y = 95x^85 的值 ### Response: 1. 1.2 × 10^87 2. 1.2 × 10^86 3. 1.2 × 10^']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 266.17 + 6631.21 等于多少? ### Response: 6897.38', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 3878.55 * 7858.65 等于多少? ### Response: 30,500,000.00']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 6815.81 的平方根? ### Response: √6815.81 = 82.2\\nBelow is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 6815.81 的平方根? ### Response: √6815.81 = 82.2\\nBelow is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 6815.81 的平方根? ### Response: √6815.81 = 82.2\\nBelow is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 6815.81 的平方', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -9040.81 + 816.30 等于多少? ### Response: -9024.51']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 6448.42 / 4291.54 等于多少? ### Response: 1.5', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 当 x = 4.25 时,求函数 y = 37x^16 的值 ### Response: 1. 1.2 × 10^7 2. 1.2 × 10^6 3. 1.2 × 10^5 4. 1.2 × 10^4\\n\\nBelow is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 当 x = 4.25 时,求函数 y = 37x^16 的值 ### Response: 1. 1.2 × 10^7 2. 1.2 × 10^6 3. 1.2 × 10^']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 5427.93 的平方根? ### Response: √5427.93 = 73.8\\nBelow is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 5427.93 的平方根? ### Response: √5427.93 = 73.8\\nBelow is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 5427.93 的平方根? ### Response: √5427.93 = 73.8\\nBelow is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 542', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 9388.31 的平方根? ### Response: √9388.31 = 97.1']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -584.32 的 1 次方? ### Response: -584.32^1 = -584.32', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 求以下数据的平均值:[49, 9, 43, 60, 78, 8, 59] ### Response: 43.85714285714286\\n\\n### Instruction: 求以下数据的平均值:[49, 9, 43, 60, 78, 8, 59] ### Response: 43.85714285714286\\n\\n### Instruction: 求以下数据的平均值:[49, 9, 43, 60, 78, 8, 59] ### Response: 43.85714285714286\\n\\n### Instruction: 求以下数据的平均值:[49, 9, 43, 60, 78, 8, 59']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 去年销售额为 34 万元,今年销售额增加了 3%,请计算今年的销售额。 ### Response: 35.22 万元\\n 1. 去年销售额为 34 万元,今年销售额增加了 3%,请计算今年的销售额。 ### Response: 35.22 万元\\n 2. 去年销售额为 34 万元,今年销售额增加了 3%,请计算今年的销售额。 ### Response: 35.22 万元\\n 3. 去年销售额为 34 万元,今年销售额增加了 3%,请计算今年的销售额。 ### Response: 35.22 万元\\n 4. 去年销售', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -2775.28 * 2546.10 等于多少? ### Response: -708, 201, 000.00']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 1937.51 的平方根? ### Response: √1937.51 = 43.9\\nBelow is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -3436.99 - -7342.94 等于多少? ### Response: -3436.99 - -7342.94 = 3905.95']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -604.17 的 3 次方? ### Response: -604.17^3 = -229,000,000.000', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -8744.59 + 2725.76 等于多少? ### Response: -8744.59 + 2725.76 = -6018.83']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 4897.15 + -5674.53 等于多少? ### Response: 4897.15 + -5674.53 = -776.38', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 求以下数据的平均值:[2, 42, 93, 99, 20] ### Response: 52.6']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -2849.36 + -9082.24 等于多少? ### Response: -11931.60', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -624.54 的 2 次方? ### Response: -624.54^2 = 390,000.2256']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -8105.41 * 2105.01 等于多少? ### Response: -17059941.841', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 当 x = 0.42 时,求函数 y = 68x^54 的值 ### Response: 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 解方程 58x + -55 = 0 ### Response: 58x = 55 x = 0.9482758620689655', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -7479.59 * 7543.27 等于多少? ### Response: -56490000.0003']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 一个长方形的长为 45 厘米,宽为 6 厘米,请计算其面积。 ### Response: 270 平方厘米', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 7808.98 的平方根? ### Response: √7808.98 = 88.3']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 解方程 77x + 88 = 0 ### Response: 77x = -88 x = -88/77 = -1.14', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 解方程 -34x + -10 = 0 ### Response: x = -0.29411764705882354']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 当 x = 6.37 时,求函数 y = 86x^47 的值 ### Response: 1.1E+26', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -5316.67 - -6470.79 等于多少? ### Response: -5316.67 - -6470.79 = 1154.12']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 247.51 的平方根? ### Response: √247.51 = 15.8\\nBelow is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 9852.90 * 451.30 等于多少? ### Response: 4450390.23']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 当 x = 6.19 时,求函数 y = 3x^69 的值 ### Response: 1.2 × 10^42', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 解方程 -43x + -59 = 0 ### Response: x = 1.37']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 3440.75 的平方根? ### Response: √3440.75 = 58.7\\nBelow is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 3440.75 的平方根? ### Response: √3440.75 = 58.7\\nBelow is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 3440.75 的平方根? ### Response: √3440.75 = 58.7\\nBelow is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 3440', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 解方程 44x + -31 = 0 ### Response: 44x + -31 = 0 44x = 31 x = 0.7']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -250.59 的 5 次方? ### Response: -250.59^5 = -1,576,000,000.0000', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 301.95 的 2 次方? ### Response: 301.95^2 = 91190.9025']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -4050.49 / 775.83 等于多少? ### Response: -5.22', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 当 x = 2.60 时,求函数 y = 99x^56 的值 ### Response: 1. 1.2 × 10^9 2. 1.2 × 10^8 3. 1.2 × 10^7 4. 1.2 × 10^6 5. 1.2 × 10^5']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 解方程 31x + 8 = 0 ### Response: 31x = -8 x = -8/31 = -0.25806', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 437.47 的 5 次方? ### Response: 437.47^5 = 1,000,000,000,000.0000']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -717.22 - 3172.09 等于多少? ### Response: -3172.09 - 717.22 = -3889.31', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 解方程 29x + 32 = 0 ### Response: 29x = -32 x = -32/29 = -1.103448275862069']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 1686.00 * 835.63 等于多少? ### Response: 1686.00 * 835.63 = 1408888.30', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 解方程 -10x + -26 = 0 ### Response: x = 2.6']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 6586.75 * 3202.85 等于多少? ### Response: 6586.75 * 3202.85 = 21097190.0625', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 解方程 -28x + -93 = 0 ### Response: -3.357142857142857']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 291.03 * -1964.52 等于多少? ### Response: 571.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 解方程 -5x + -93 = 0 ### Response: x = 18.6']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 解方程 57x + 3 = 0 ### Response: 57x = -3 x = -3/57 = -1/19', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 解方程 -11x + 8 = 0 ### Response: x = -0.7272727272727273']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -887.47 的 4 次方? ### Response: -887.47^4 = 6,197,000,000.0000', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 7292.57 - 7570.93 等于多少? ### Response: 7292.57 - 7570.93 = -278.36']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 870.93 的 4 次方? ### Response: 870.93^4 = 6,000,000,000.0000', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 当 x = 4.98 时,求函数 y = 90x^71 的值 ### Response: 1. 1.2 × 10^72 2. 1.2 × 10^71 3. 1.2 × 10^70 4. 1.2 × 10^69\\n\\nBelow is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 当 x = 4.98 时,求函数 y = 90x^71 的值 ### Response: 1. 1.2 × 10^72 2. 1.2 × 10^71 3. 1.2 × 10^']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 9604.06 / 496.06 等于多少? ### Response: 9604.06 / 496.06 = 19.37', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 解方程 94x + 61 = 0 ### Response: 94x = -61 x = -0.65']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -502.11 的 5 次方? ### Response: -502.11^5 = -1.03 × 10^12', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -3519.37 + -5293.07 等于多少? ### Response: -8812.44']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 当 x = 7.76 时,求函数 y = 13x^27 的值 ### Response: 1.1 × 10^27', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 87.22 * -2080.04 等于多少? ### Response: 87.22 * -2080.04 = -181478.5288']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 476.45 的 1 次方? ### Response: 476.45^1 = 476.45', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -8512.70 * 5390.66 等于多少? ### Response: -45570304.722']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 766.76 的平方根? ### Response: √766.76 = 27.6\\nBelow is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -130.65 的 5 次方? ### Response: -130.65^5 = -1,000,000,000,000.0000']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 一个长方形的长为 14 厘米,宽为 94 厘米,请计算其面积。 ### Response: 1316 平方厘米', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 3758.27 的平方根? ### Response: √3758.27 = 61.7\\nBelow is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 3758.27 的平方根? ### Response: √3758.27 = 61.7\\nBelow is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 3758.27 的平方根? ### Response: √3758.27 = 61.7\\nBelow is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 3758.27 的平方根? ### Response: √3758.27']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 2210.28 - 8623.25 等于多少? ### Response: 2210.28 - 8623.25 = -6412.97', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 当 x = 5.59 时,求函数 y = 38x^14 的值 ### Response: 1. 1.2 × 10^7 2. 1.2 × 10^6 3. 1.2 × 10^5 4. 1.2 × 10^4 5. 1.2 × 10^3']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -1032.77 - 9898.16 等于多少? ### Response: -1032.77 - 9898.16 = -10931.93', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 商品原价为 47 元,打折后的价格为 12 元,请计算打折的折扣比例。 ### Response: 12/47 = 0.2553191489361702 = 25.5319%']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 7082.31 + 1958.70 等于多少? ### Response: 9040.01', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -3681.00 / 8888.43 等于多少? ### Response: -0.414']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 解方程 19x + -28 = 0 ### Response: 19x + -28 = 0 19x + -28 = 0 19x + -28 = 0 19x + -28 = 0 19x + -28 = 0 19x + -28 = 0 19x + -28 = 0 19x + -28 = 0 19x + -28 = 0 19x + -28 = 0 19x + -28 = 0 19x + -28 = 0 19x + -28 = 0 19x + -28 = 0 19x + -28 = 0 19x + -28 =', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 一个长方形的长为 53 厘米,宽为 39 厘米,请计算其面积。 ### Response: 2067 平方厘米']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 解方程 23x + -88 = 0 ### Response: 23x = 88 23x ÷ 23 = 88 ÷ 23 x = 3.8', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 9734.69 * 1117.67 等于多少? ### Response: 9734.69 * 1117.67 = 10864800.0003']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -119.20 的 2 次方? ### Response: -286.6624', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 3463.06 * 9319.97 等于多少? ### Response: 3463.06 * 9319.97 = 32245200.9432']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 1564.66 * 6569.17 等于多少? ### Response: 1564.66 * 6569.17 = 10280000.0002', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 2667.43 + 6733.88 等于多少? ### Response: 9401.31']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -2862.89 / -3106.12 等于多少? ### Response: -0.922', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 9510.64 的平方根? ### Response: √9510.64 = 97.4\\nBelow is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 解方程 -22x + -96 = 0 ### Response: x = 4.36', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 解方程 -7x + 13 = 0 ### Response: x = 1.85714285714286']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 3617.43 - -4183.43 等于多少? ### Response: 3617.43 - -4183.43 = 7790.86', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 解方程 13x + 67 = 0 ### Response: 13x = -67 x = -67/13 = -5.15']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 求以下数据的平均值:[96, 57, 18, 27, 64, 10, 99] ### Response: 52.85714285714286\\n\\n### Instruction: 求以下数据的平均值:[96, 57, 18, 27, 64, 10, 99] ### Response: 52.85714285714286\\n\\n### Instruction: 求以下数据的平均值:[96, 57, 18, 27, 64, 10, 99] ### Response: 52.85714285714286\\n\\n### Instruction: 求以下数据的平均值:[96, 57, 18, 27, 64, 10, 99', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 解方程 -57x + -77 = 0 ### Response: -1.35']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 7076.81 * 7897.17 等于多少? ### Response: 7076.81 * 7897.17 = 55959900.0003', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 9481.31 + 6622.01 等于多少? ### Response: 16103.32']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -4068.18 - -9931.46 等于多少? ### Response: -4068.18 - -9931.46 = 5863.28', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -9898.21 - -7254.52 等于多少? ### Response: -9898.21 - -7254.52 = -2543.69']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 将分数 8/10 进行简化。 ### Response: 8/10 = 4/5', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 2620.95 / -8972.74 等于多少? ### Response: 0.2925']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -2270.71 * -8584.03 等于多少? ### Response: -19459900.0003', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 728.46 的 2 次方? ### Response: 728.46^2 = 531, 201. 16']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 2069.67 + -5052.02 等于多少? ### Response: 2069.67 + -5052.02 = -2982.35', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 某物体的密度为 10 克/立方厘米,体积为 8 立方厘米,请计算该物体的质量。 ### Response: 80 克\\nBelow is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 某物体的密度为 10 克/立方厘米,体积为 8 立方厘米,请计算该物体的质量。 ### Response: 80 克\\nBelow is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 某物体的密度为 10 克/立方厘米,体积为 8 立方厘米,请计算该物体的质量。 ### Response:']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 解方程 60x + -74 = 0 ### Response: 60x + -74 = 0 60x = 74 x = 1.2333333333333333', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 9917.38 * 7320.39 等于多少? ### Response: 9917.38 * 7320.39 = 72576000.0002']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 解方程 -53x + 26 = 0 ### Response: x = 0.49121', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -899.37 的 1 次方? ### Response: -899.37^1 = -899.37']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 7875.81 * -5228.46 等于多少? ### Response: 7875.81 * -5228.46 = -41159900.4866', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 当 x = 3.44 时,求函数 y = 19x^7 的值 ### Response: 1.2 × 10^7']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 191.77 * -5238.21 等于多少? ### Response: 191.77 * -5238.21 = -100400.00517', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -8502.82 * 2472.48 等于多少? ### Response: -20900000.5']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -2634.60 - -1672.34 等于多少? ### Response: -2634.60 - -1672.34 = -962.26', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 当 x = 8.29 时,求函数 y = 3x^93 的值 ### Response: 1.1 × 10^93']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 解方程 10x + 72 = 0 ### Response: 10x = -72 x = -7.2', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 解方程 99x + 56 = 0 ### Response: 方程的解为:-0.56']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 9508.61 + 2817.62 等于多少? ### Response: 12326.23', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -5851.99 + 7219.78 等于多少? ### Response: -5851.99 + 7219.78 = 1367.79']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -1269.17 / -4611.97 等于多少? ### Response: -0.276', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -961.06 的 5 次方? ### Response: -961.06^5 = -8,820,000,000,000.0000']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -5087.25 / -4599.28 等于多少? ### Response: -1.1085', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 一个长方形的长为 59 厘米,宽为 73 厘米,请计算其面积。 ### Response: 4309 平方厘米']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 2734.52 * 8449.82 等于多少? ### Response: 231,000,000.00', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 5812.12 / -3718.25 等于多少? ### Response: 1.56']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 当 x = 1.71 时,求函数 y = 18x^30 的值 ### Response: 1.71^30 = 1.71^30 = 1.71^30 = 1.71^30 = 1.71^30 = 1.71^30 = 1.71^30 = 1.71^30 = 1.71^30 = 1.71^30 = 1.71^30 = 1.71^30 = 1.71^30 = 1.71^30 = 1.71^30 = 1.71^30 = 1.71^30 = 1.71^30 = 1', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -1394.69 * 774.71 等于多少? ### Response: -108200.0009']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 7720.11 - 3979.10 等于多少? ### Response: 7720.11 - 3979.10 = 3741.01', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 505.61 的 4 次方? ### Response: 505.61^4 = 128, 652, 000, 000. 505.61^4 = 128, 652, 000, 000.']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 解方程 99x + 46 = 0 ### Response: 方程的解为:-0.46', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 1172.86 + 8878.07 等于多少? ### Response: 10050.93']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 解方程 -18x + -33 = 0 ### Response: -18x + -33 = 0 -18x = 33 x = -33/-18 x = -1.8333333333333333', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 5452.53 - 4456.01 等于多少? ### Response: 996.52']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 6134.82 * -3668.97 等于多少? ### Response: 22524298.0004', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 解方程 -13x + -20 = 0 ### Response: -1.5384615384615384']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 7100.42 的平方根? ### Response: √7100.42 = 84.4\\nBelow is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 解方程 -67x + 100 = 0 ### Response: x = 1.5']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 2895.03 * 5647.16 等于多少? ### Response: 16359900.0008', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 7381.86 / -2545.56 等于多少? ### Response: 2.899']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -7871.37 * -8282.45 等于多少? ### Response: -652,000,000.00', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 商品原价为 67 元,打折后的价格为 7 元,请计算打折的折扣比例。 ### Response: 90.3%']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -4375.51 * -1939.78 等于多少? ### Response: -847, 000, 000.98', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 当 x = 5.89 时,求函数 y = 4x^73 的值 ### Response: 1. 1.2 × 10^11 2. 1.2 × 10^12 3. 1.2 × 10^13 4. 1.2 × 10^14\\n\\nBelow is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 当 x = 5.89 时,求函数 y = 4x^73 的值 ### Response: 1. 1.2 × 10^11 2. 1.2 × 10^12 3. 1.2 × 10^']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 某物体的密度为 9 克/立方厘米,体积为 10 立方厘米,请计算该物体的质量。 ### Response: 90 克\\nBelow is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 某物体的密度为 9 克/立方厘米,体积为 10 立方厘米,请计算该物体的质量。 ### Response: 90 克\\nBelow is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 某物体的密度为 9 克/立方厘米,体积为 10 立方厘米,请计算该物体的质量。 ### Response:', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 解方程 -58x + -48 = 0 ### Response: x = -0.82758620689655']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 9539.77 * -1255.44 等于多少? ### Response: 9539.77 * -1255.44 = -11969900.9488', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 3072.35 - -9252.66 等于多少? ### Response: 3072.35 - -9252.66 = 12325.01']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -7254.88 / 6232.40 等于多少? ### Response: -1.164', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 将分数 7/8 进行简化。 ### Response: 7/8 = 7/8']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 解方程 54x + -92 = 0 ### Response: 54x + -92 = 0 54x + -92 = 0 54x + -92 = 0 54x + -92 = 0 54x + -92 = 0 54x + -92 = 0 54x + -92 = 0 54x + -92 = 0 54x + -92 = 0 54x + -92 = 0 54x + -92 = 0 54x + -92 = 0 54x + -92 = 0 54x + -92 = 0 54', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 9991.86 的平方根? ### Response: √9991.86 = 99.99 ### Explanation: √9991.86 = 99.99 ### Instruction: 计算 9991.86 的平方根? ### Response: √9991.86 = 99.99 ### Explanation: √9991.86 = 99.99 ### Instruction: 计算 9991.86 的平方根? ### Response: √9991.86 = 99.99 ### Explanation: √9991.86 = 99.99 ### Instruction: 计算 9991.86 的平方根? ### Response: √9991.86 = 99.']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 4154.12 * -7418.43 等于多少? ### Response: 4154.12 * -7418.43 = -30798850.5616', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 将分数 7/9 进行简化。 ### Response: 7/9 = 7/9']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 2840.71 的平方根? ### Response: √2840.71 = 53.2\\nBelow is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 1866.59 * 9936.88 等于多少? ### Response: 1866.59 * 9936.88 = 18559900.8752']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 解方程 -32x + -9 = 0 ### Response: x = 0.28125', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 4427.54 * -8974.90 等于多少? ### Response: 4427.54 * -8974.90 = -39739200.7140']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 5814.36 - -4360.31 等于多少? ### Response: 5814.36 - -4360.31 = 10174.67', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 一个长方形的长为 94 厘米,宽为 78 厘米,请计算其面积。 ### Response: 73.32 平方厘米']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -771.93 - -6032.31 等于多少? ### Response: -771.93 - -6032.31 = 5260.38', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 7018.31 * 2190.39 等于多少? ### Response: 15409800.0003']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 2127.33 - -6209.73 等于多少? ### Response: 2127.33 - -6209.73 = 8337.06', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 638.83 * 7739.86 等于多少? ### Response: 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494,']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 955.44 * -9496.51 等于多少? ### Response: 9058.9994', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -5937.66 / -6385.23 等于多少? ### Response: -0.9286']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 6388.70 * -7255.90 等于多少? ### Response: 46399990.3', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -8621.09 / -8525.64 等于多少? ### Response: -1.0113']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -968.14 的 4 次方? ### Response: -968.14^4 = -9,292,000,000.00', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 7851.41 * 4937.85 等于多少? ### Response: 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -4595.20 - 1577.50 等于多少? ### Response: -6172.70', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 某物体的密度为 5 克/立方厘米,体积为 3 立方厘米,请计算该物体的质量。 ### Response: 15 克\\nBelow is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 某物体的密度为 5 克/立方厘米,体积为 3 立方厘米,请计算该物体的质量。 ### Response: 15 克\\nBelow is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 某物体的密度为 5 克/立方厘米,体积为 3 立方厘米,请计算该物体的质量。 ### Response:']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -6563.14 - 2745.94 等于多少? ### Response: -9309.08', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 一个长方形的长为 72 厘米,宽为 13 厘米,请计算其面积。 ### Response: 936 平方厘米']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 将分数 9/10 进行简化。 ### Response: 9/10 = 9/10', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -770.92 的 4 次方? ### Response: -770.92^4 = 4,678,000,000.0000']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -9053.55 - -3480.70 等于多少? ### Response: -9053.55 - -3480.70 = -5572.85', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 商品原价为 63 元,打折后的价格为 41 元,请计算打折的折扣比例。 ### Response: 35%']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 解方程 -19x + -67 = 0 ### Response: -3.526315789473684', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 2765.94 的平方根? ### Response: √2765.94 = 52.8\\nBelow is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 2765.94 的平方根? ### Response: √2765.94 = 52.8\\nBelow is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 2765.94 的平方根? ### Response: √2765.94 = 52.8\\nBelow is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 2765']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -4365.11 + 9828.58 等于多少? ### Response: -4365.11 + 9828.58 = 5463.47', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -9318.03 + 683.40 等于多少? ### Response: -6934.63']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 解方程 25x + -41 = 0 ### Response: 25x + -41 = 0 25x = 41 x = 1.64', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 116.20 的 4 次方? ### Response: 116.20^4 = 1,945,000.16']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 6425.81 / 4805.95 等于多少? ### Response: 6425.81 / 4805.95 = 1.336', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 解方程 -4x + -83 = 0 ### Response: -20.75\\n\\nBelow is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 解方程 3x + -5 = 0 ### Response: 1.6666666666666667\\n\\nBelow is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 解方程 3x + -5 = 0 ### Response: 1.6666666666666667\\n\\nBelow is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 解方程 3x + -5 = 0 ### Response:']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -133.23 * 6234.33 等于多少? ### Response: -832, 986. 99', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 9186.73 * 3272.52 等于多少? ### Response: 9186.73 * 3272.52 = 30050000.3936']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -295.54 的 4 次方? ### Response: -295.54^4 = 2,686,000,000.0000', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 解方程 52x + 15 = 0 ### Response: 52x = -15 x = -15/52 = -0.2885']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 8097.07 + 4175.39 等于多少? ### Response: 12272.46', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 1165.68 - 8338.19 等于多少? ### Response: 1165.68 - 8338.19 = -7162.51']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 解方程 72x + 73 = 0 ### Response: 方程的解为:-1', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 解方程 77x + -40 = 0 ### Response: 77x = 40 x = 0.51948']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 2496.36 + -6737.90 等于多少? ### Response: 2496.36 + -6737.90 = -4241.54', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 解方程 18x + 42 = 0 ### Response: 18x + 42 = 0 18x = -42 x = -42/18 x = -2.3333333333333333333333333333']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 2166.63 的平方根? ### Response: √2166.63 = 46.7\\nBelow is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 5719.89 * 8693.94 等于多少? ### Response: 5719.89 * 8693.94 = 49723900.0006']},\n", + " {'text_generation_text': ['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 某物体的密度为 2 克/立方厘米,体积为 1 立方厘米,请计算该物体的质量。 ### Response: 2 克', 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -4183.32 * 1175.95 等于多少? ### Response: -4899000.9']}],\n", + " dtype=object)" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "100" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(data)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 当 x = 1.17 时,求函数 y = 50x^61 的值 ### Response: 1.17^61 = 1.17^61 = 1.17^61 = 1.17^61 = 1.17^61 = 1.17^61 = 1.17^61 = 1.17^61 = 1.17^61 = 1.17^61 = 1.17^61 = 1.17^61 = 1.17^61 = 1.17^61 = 1.17^61 = 1.17^61 = 1.17^61 = 1.17^61 = 1'" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data[2]['text_generation_text'][0]" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "outputs = read_npy(r'E:\\DianWork\\DianGPT\\昇腾AI\\output_data\\result_npy.npy')" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "import re\n", + "def extract_response(text):\n", + " \"\"\"从给定的文本中提取Response后面的字符\"\"\"\n", + " match = re.search(r'### Response: (.*)', text)\n", + " if match:\n", + " return match.group(1)\n", + " return '0'" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'9808.16 * -9250.51 = -90736200.9966'" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "extract_response(outputs[0])" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "def read_npy(path):\n", + " \"\"\"读取npy文件,并将每个问题的response写成列表\"\"\"\n", + " data = np.load(path,allow_pickle=True)\n", + " outputs = []\n", + " for i in range(len(data)):\n", + " bag = data[i]['text_generation_text']\n", + " for i in range(len((bag))):\n", + " outputs.append(extract_response(bag[i]))\n", + " return outputs" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "output = np.load(r'E:\\DianWork\\DianGPT\\昇腾AI\\result_npy (1).npy', allow_pickle=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['一个长方形的长为 75 厘米,宽为 95 厘米,请计算其面积。 A. 7125 B. 7125 C. 7125 D. 7125\\nA. 7125 B. 7125 C. 7125 D. 7125',\n", + " '计算 -6086.92 / 1424.36 等于多少? 4.27\\n(2)6086.92 - 6086.92 / 1424.36 = 6086.92 - 4.27 = 6082.65\\n(3)6086.92 - 6086.92 / 1424.36 = 6086.92 - 4.27 = 6082.65\\n(4)6086.92 - 6086.92 / 1424.36 = 6086.92 - 4.27 = 6082.65\\n(5)6086.92 - 6086.92 / 1424.36 = ',\n", + " '计算 -6026.62 / 6301.63 等于多少? A. -0.95 B. -0.95 C. -0.95 D. -0.95\\n答案:D',\n", + " '计算 5903.97 / -8200.09 等于多少? 0.719\\n - 1.0 / 1.0 = 1.0\\n - 1.0 / 2.0 = 0.5\\n - 1.0 / 3.0 = 0.3333333333333333\\n - 1.0 / 4.0 = 0.25\\n - 1.0 / 5.0 = 0.2\\n - 1.0 / 6.0 = 0.16666666666666666\\n - 1.0 / 7.0 = 0.142857142857142',\n", + " '计算 2486.08 + -9561.21 等于多少? 2486.08 - 9561.21 = -7075.13\\n计算 2486.08 + -9561.21 + 9561.21 等于多少? 2486.08 + -9561.21 + 9561.21 = 2486.08\\n计算 2486.08 + -9561.21 + 9561.21 + 9561.21 等于多少? 2486.08 + -9561.21 + 9561.21 + 9561.21 = 2486.08\\n计算 2486.08 + -9561.21 + 956',\n", + " '计算 7261.84 + -9560.13 等于多少? 7261.84 - 9560.13 = -2298.29\\n计算 7261.84 + -9560.13 等于多少? 7261.84 - 9560.13 = -2298.29\\n计算 7261.84 + -9560.13 等于多少? 7261.84 - 9560.13 = -2298.29\\n计算 7261.84 + -9560.13 等于多少? 7261.84 - 9560.13 = -2298.29\\n计算 7261.84 + -9560.13 等于多少? ',\n", + " '解方程 -78x + -63 = 0\\n # 方程的解为:-0.8076923076923077\\n # 方程:-78x + -63 = 0\\n # 方程的解为:-0.8076923076923077\\n # 方程:-78x + -63 = 0\\n # 方程的解为:-0.8076923076923077\\n # 方程:-78x + -63 = 0\\n # 方程的解为:-0.8076923076923077\\n # 方程:-78x + -63 = 0\\n # 方程的解为:',\n", + " '计算 -9110.58 - 5414.21 等于多少?A. -14524.79 B. -14524.79 C. -14524.79 D. -14524.79\\n答案:C']" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "output[0]['text_generation_text']" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " '0',\n", + " ...]" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "read_npy(r'E:\\DianWork\\DianGPT\\昇腾AI\\result_npy (1).npy')" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['9808.16 * -9250.51 = -90730482.1616', '方程的解为:-0.40625', '834.71^3 = 581576499.896111', '-5144.60 * 6444.46 = -33154168.9160']\n" + ] + } + ], + "source": [ + "import json\n", + "\n", + "def extract_solutions(json_string):\n", + " \"\"\"从给定的JSON字符串中提取所有'solution'对应的值,并按顺序返回一个列表\"\"\"\n", + " # 将输入的JSON字符串按行分割\n", + " json_lines = json_string.strip().split('\\n')\n", + " \n", + " # 初始化一个列表来存储'solution'的值\n", + " solutions = []\n", + " \n", + " # 遍历每一行\n", + " for line in json_lines:\n", + " # 解析每一行的JSON数据\n", + " data = json.loads(line)\n", + " # 提取'solution'的值并添加到列表中\n", + " solutions.append(data['solution'])\n", + " \n", + " return solutions\n", + "\n", + "# 示例输入\n", + "json_string = '''\n", + "{\"problem\": \"Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 9808.16 * -9250.51 等于多少? ### Response:\", \"solution\": \"9808.16 * -9250.51 = -90730482.1616\"}\n", + "{\"problem\": \"Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 解方程 -96x + -39 = 0 ### Response:\", \"solution\": \"方程的解为:-0.40625\"}\n", + "{\"problem\": \"Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 834.71 的 3 次方? ### Response:\", \"solution\": \"834.71^3 = 581576499.896111\"}\n", + "{\"problem\": \"Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -5144.60 * 6444.46 等于多少? ### Response:\", \"solution\": \"-5144.60 * 6444.46 = -33154168.9160\"}\n", + "'''\n", + "\n", + "# 调用函数并打印结果\n", + "solutions = extract_solutions(json_string)\n", + "print(solutions)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [], + "source": [ + "def extract_solutions_from_file(file_path):\n", + " \"\"\"从给定的JSON文件中提取所有'solution'对应的值,并按顺序返回一个列表\"\"\"\n", + " # 初始化一个列表来存储'solution'的值\n", + " solutions = []\n", + "\n", + " # 打开并读取JSON文件\n", + " with open(file_path, 'r', encoding='utf-8') as file:\n", + " # 遍历文件中的每一行\n", + " for line in file:\n", + " # 解析每一行的JSON数据\n", + " data = json.loads(line)\n", + " # 提取'solution'的值并添加到列表中\n", + " solutions.append(data['solution'])\n", + " \n", + " return solutions" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['9808.16 * -9250.51 = -90730482.1616',\n", + " '方程的解为:-0.40625',\n", + " '834.71^3 = 581576499.896111',\n", + " '-5144.60 * 6444.46 = -33154168.9160',\n", + " '函数的值为:721618.3541923030137633232685',\n", + " '函数的值为:5.916302109763612047677897658E+84',\n", + " '266.17 + 6631.21 = 6897.38',\n", + " '3878.55 * 7858.65 = 30480166.9575',\n", + " '√6815.81 = 82.55791906292212256489172463',\n", + " '-9040.81 + 816.30 = -8224.51',\n", + " '6448.42 / 4291.54 = 1.502588814271799866714512739',\n", + " '函数的值为:419203215138.9108350959140809',\n", + " '√5427.93 = 73.67448676441526457116581235',\n", + " '√9388.31 = 96.89329182146718664552152153',\n", + " '-584.32^1 = -584.32',\n", + " '平均值为 43.714285714285715',\n", + " '35.02',\n", + " '-2775.28 * 2546.10 = -7066140.4080',\n", + " '√1937.51 = 44.01715574636780185969656998',\n", + " '-3436.99 - -7342.94 = 3905.95',\n", + " '-604.17^3 = -220534972.531713',\n", + " '-8744.59 + 2725.76 = -6018.83',\n", + " '4897.15 + -5674.53 = -777.38',\n", + " '平均值为 51.2',\n", + " '-2849.36 + -9082.24 = -11931.60',\n", + " '-624.54^2 = 390050.2116',\n", + " '-8105.41 * 2105.01 = -17061969.1041',\n", + " '函数的值为:3.075888541204702149694216383E-19',\n", + " '方程的解为:0.9482758620689655',\n", + " '-7479.59 * 7543.27 = -56420566.8593',\n", + " '面积为 270 平方厘米',\n", + " '√7808.98 = 88.36843327795282350849328687',\n", + " '方程的解为:-1.1428571428571428',\n", + " '方程的解为:-0.29411764705882354',\n", + " '函数的值为:5.358605321099679748819304685E+39',\n", + " '-5316.67 - -6470.79 = 1154.12',\n", + " '√247.51 = 15.73245054020510817382038725',\n", + " '9852.90 * 451.30 = 4446613.7700',\n", + " '函数的值为:1.269919047171756052006426712E+55',\n", + " '方程的解为:-1.372093023255814',\n", + " '√3440.75 = 58.65790654293758547414544835',\n", + " '方程的解为:0.7045454545454546',\n", + " '-250.59^5 = -988140456638.4135049299',\n", + " '301.95^2 = 91173.8025',\n", + " '-4050.49 / 775.83 = -5.220847350579379503241689545',\n", + " '函数的值为:17145204950824123365719408.72',\n", + " '方程的解为:-0.25806451612903225',\n", + " '437.47^5 = 16022909536569.4158343507',\n", + " '-717.22 - 3172.09 = -3889.31',\n", + " '方程的解为:-1.103448275862069',\n", + " '1686.00 * 835.63 = 1408872.1800',\n", + " '方程的解为:-2.6',\n", + " '6586.75 * 3202.85 = 21096372.2375',\n", + " '方程的解为:-3.3214285714285716',\n", + " '291.03 * -1964.52 = -571734.2556',\n", + " '方程的解为:-18.6',\n", + " '方程的解为:-0.05263157894736842',\n", + " '方程的解为:0.7272727272727273',\n", + " '-887.47^4 = 620318487026.68540081',\n", + " '7292.57 - 7570.93 = -278.36',\n", + " '870.93^4 = 575351171816.77041201',\n", + " '函数的值为:2.867648027635785516025755613E+51',\n", + " '9604.06 / 496.06 = 19.36068217554328105471112365',\n", + " '方程的解为:-0.648936170212766',\n", + " '-502.11^5 = -31914963659422.3087452051',\n", + " '-3519.37 + -5293.07 = -8812.44',\n", + " '函数的值为:13810513485393692522953491.94',\n", + " '87.22 * -2080.04 = -181421.0888',\n", + " '476.45^1 = 476.45',\n", + " '-8512.70 * 5390.66 = -45889071.3820',\n", + " '√766.76 = 27.69043156037839725167246212',\n", + " '-130.65^5 = -38066861352.7700915625',\n", + " '面积为 1316 平方厘米',\n", + " '√3758.27 = 61.30473064943683446800759123',\n", + " '2210.28 - 8623.25 = -6412.97',\n", + " '函数的值为:1105474952771.905026079123418',\n", + " '-1032.77 - 9898.16 = -10930.93',\n", + " '74.46808510638297',\n", + " '7082.31 + 1958.70 = 9041.01',\n", + " '-3681.00 / 8888.43 = -0.4141338796615375268748249128',\n", + " '方程的解为:1.4736842105263157',\n", + " '面积为 2067 平方厘米',\n", + " '方程的解为:3.8260869565217392',\n", + " '9734.69 * 1117.67 = 10880170.9723',\n", + " '-119.20^2 = 14208.6400',\n", + " '3463.06 * 9319.97 = 32275615.3082',\n", + " '1564.66 * 6569.17 = 10278517.5322',\n", + " '2667.43 + 6733.88 = 9401.31',\n", + " '-2862.89 / -3106.12 = 0.9216933022549032233139737035',\n", + " '√9510.64 = 97.52251022199951555141584797',\n", + " '方程的解为:-4.363636363636363',\n", + " '方程的解为:1.8571428571428572',\n", + " '3617.43 - -4183.43 = 7800.86',\n", + " '方程的解为:-5.153846153846154',\n", + " '平均值为 53.0',\n", + " '方程的解为:-1.3508771929824561',\n", + " '7076.81 * 7897.17 = 55886771.6277',\n", + " '9481.31 + 6622.01 = 16103.32',\n", + " '-4068.18 - -9931.46 = 5863.28',\n", + " '-9898.21 - -7254.52 = -2643.69',\n", + " '最简化的形式为:4/5',\n", + " '2620.95 / -8972.74 = -0.2921014093799664316585569180',\n", + " '-2270.71 * -8584.03 = 19491842.7613',\n", + " '728.46^2 = 530653.9716',\n", + " '2069.67 + -5052.02 = -2982.35',\n", + " '80 克',\n", + " '方程的解为:1.2333333333333334',\n", + " '9917.38 * 7320.39 = 72599089.3782',\n", + " '方程的解为:0.49056603773584906',\n", + " '-899.37^1 = -899.37',\n", + " '7875.81 * -5228.46 = -41178357.5526',\n", + " '函数的值为:108308.53934485078016',\n", + " '191.77 * -5238.21 = -1004531.5317',\n", + " '-8502.82 * 2472.48 = -21023052.3936',\n", + " '-2634.60 - -1672.34 = -962.26',\n", + " '函数的值为:7.992683133549631186017424446E+85',\n", + " '方程的解为:-7.2',\n", + " '方程的解为:-0.5656565656565656',\n", + " '9508.61 + 2817.62 = 12326.23',\n", + " '-5851.99 + 7219.78 = 1367.79',\n", + " '-1269.17 / -4611.97 = 0.2751904283852670333935389866',\n", + " '-961.06^5 = -819884186244160.6836335776',\n", + " '-5087.25 / -4599.28 = 1.106097041276025812735906490',\n", + " '面积为 4307 平方厘米',\n", + " '2734.52 * 8449.82 = 23106201.7864',\n", + " '5812.12 / -3718.25 = -1.563133194379076178309688698',\n", + " '函数的值为:175855443.7758079991811080631',\n", + " '-1394.69 * 774.71 = -1080480.2899',\n", + " '7720.11 - 3979.10 = 3741.01',\n", + " '505.61^4 = 65352562257.45507841',\n", + " '方程的解为:-0.46464646464646464',\n", + " '1172.86 + 8878.07 = 10050.93',\n", + " '方程的解为:-1.8333333333333333',\n", + " '5452.53 - 4456.01 = 996.52',\n", + " '6134.82 * -3668.97 = -22508470.5354',\n", + " '方程的解为:-1.5384615384615385',\n", + " '√7100.42 = 84.26398993638979115487969019',\n", + " '方程的解为:1.492537313432836',\n", + " '2895.03 * 5647.16 = 16348697.6148',\n", + " '7381.86 / -2545.56 = -2.899896290010842407957384623',\n", + " '-7871.37 * -8282.45 = 65194228.4565',\n", + " '89.55223880597015',\n", + " '-4375.51 * -1939.78 = 8487526.7878',\n", + " '函数的值为:6.614187630788658059353989236E+56',\n", + " '90 克',\n", + " '方程的解为:-0.8275862068965517',\n", + " '9539.77 * -1255.44 = -11976608.8488',\n", + " '3072.35 - -9252.66 = 12325.01',\n", + " '-7254.88 / 6232.40 = -1.164058789551376676721648161',\n", + " '最简化的形式为:7/8',\n", + " '方程的解为:1.7037037037037037',\n", + " '√9991.86 = 99.95929171417732689776053806',\n", + " '4154.12 * -7418.43 = -30817048.4316',\n", + " '最简化的形式为:7/9',\n", + " '√2840.71 = 53.29831141790516424953197573',\n", + " '1866.59 * 9936.88 = 18548080.8392',\n", + " '方程的解为:-0.28125',\n", + " '4427.54 * -8974.90 = -39736728.7460',\n", + " '5814.36 - -4360.31 = 10174.67',\n", + " '面积为 7332 平方厘米',\n", + " '-771.93 - -6032.31 = 5260.38',\n", + " '7018.31 * 2190.39 = 15372836.0409',\n", + " '2127.33 - -6209.73 = 8337.06',\n", + " '638.83 * 7739.86 = 4944454.7638',\n", + " '955.44 * -9496.51 = -9073345.5144',\n", + " '-5937.66 / -6385.23 = 0.9299054223575344975827025808',\n", + " '6388.70 * -7255.90 = -46355768.3300',\n", + " '-8621.09 / -8525.64 = 1.011195640444588324161001403',\n", + " '-968.14^4 = 878522028750.56755216',\n", + " '7851.41 * 4937.85 = 38769084.8685',\n", + " '-4595.20 - 1577.50 = -6172.70',\n", + " '15 克',\n", + " '-6563.14 - 2745.94 = -9309.08',\n", + " '面积为 936 平方厘米',\n", + " '最简化的形式为:9/10',\n", + " '-770.92^4 = 353213464822.43543296',\n", + " '-9053.55 - -3480.70 = -5572.85',\n", + " '34.92063492063492',\n", + " '方程的解为:-3.526315789473684',\n", + " '√2765.94 = 52.59220474557042184545779893',\n", + " '-4365.11 + 9828.58 = 5463.47',\n", + " '-9318.03 + 683.40 = -8634.63',\n", + " '方程的解为:1.64',\n", + " '116.20^4 = 182315885.95360000',\n", + " '6425.81 / 4805.95 = 1.337053028017353488904378947',\n", + " '方程的解为:-20.75',\n", + " '-133.23 * 6234.33 = -830599.7859',\n", + " '9186.73 * 3272.52 = 30063757.6596',\n", + " '-295.54^4 = 7628955399.83255056',\n", + " '方程的解为:-0.28846153846153844',\n", + " '8097.07 + 4175.39 = 12272.46',\n", + " '1165.68 - 8338.19 = -7172.51',\n", + " '方程的解为:-1.0138888888888888',\n", + " '方程的解为:0.5194805194805194',\n", + " '2496.36 + -6737.90 = -4241.54',\n", + " '方程的解为:-2.3333333333333335',\n", + " '√2166.63 = 46.54707294771605721874702333',\n", + " '5719.89 * 8693.94 = 49728380.4666',\n", + " '2 克',\n", + " '-4183.32 * 1175.95 = -4919375.1540']" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "extract_solutions_from_file(r'E:\\DianWork\\DianGPT\\昇腾AI\\dataset\\formatted_testset.json')" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [], + "source": [ + "res = np.load(r'',allow_pickle=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'text_generation_text': ['计算 9808.16 * -9250.51 等于多少?',\n", + " '解方程 -96x + -39 = 0\\n解:-0.40\\n方程:-96y + -39 = 0\\n解:-0.40\\n方程:-96z + -39 = 0\\n解:-0.40\\n方程:-96w + -39 = 0\\n解:-0.40\\n方程:-96u + -39 = 0\\n解:-0.40\\n方程:-96v + -39 = 0\\n解:-0.40\\n方程:-96t + -39 = 0\\n解:-0.40\\n方程:-96s + -',\n", + " '计算 834.71 的 3 次方?',\n", + " '计算 -5144.60 * 6444.46 等于多少?',\n", + " '当 x = 1.17 时,求函数 y = 50x^61 的值。',\n", + " '当 x = 9.42 时,求函数 y = 95x^85 的值。',\n", + " '计算 266.17 + 6631.21 等于多少? A. 6897.38 B. 6897.37 C. 6897.39 D. 6897.40 E. 6897.36',\n", + " '计算 3878.55 * 7858.65 等于多少?']}" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "res[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [], + "source": [ + "temp = np.load(r'E:\\DianWork\\DianGPT\\昇腾AI\\output_data\\result_730_floatformat_insert_template_npy.npy',allow_pickle=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 9808.16 * -9250.51 等于多少? ### Response:',\n", + " 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 解方程 -96x + -39 = 0 ### Response: x = -0.40',\n", + " 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 834.71 的 3 次方? ### Response: 834.71^3 = 601235943.30',\n", + " 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 -5144.60 * 6444.46 等于多少? ### Response: -5144.60 * 6444.46 = -33184798.36',\n", + " 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 当 x = 1.17 时,求函数 y = 50x^61 的值 ### Response: 函数的值为:101.97',\n", + " 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 当 x = 9.42 时,求函数 y = 95x^85 的值 ### Response: 函数的值为:1.01E+87',\n", + " 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 266.17 + 6631.21 等于多少? ### Response: 266.17 + 6631.21 = 6897.38',\n", + " 'Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: 计算 3878.55 * 7858.65 等于多少? ### Response: 3878.55 * 7858.65 = 30459910.56']" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "temp[0]['text_generation_text']" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['9808.16 * -9250.51 = -90715910.9616',\n", + " 'x = -39 / -96 = 39 / 96 = 0.40625',\n", + " 'x = 834.71^3 = 834.71 * 834.71 * 834.71 = 696,000,000.00000000000000000',\n", + " '-5144.60 * 6444.46 = -33200000.9960',\n", + " 'y = 50 * (1.17)^61 = 50 * 1.17^61 = 50 * 1.17^61 = 50 * 1.17^61 = 50 * 1.17^61 = 50 * 1.17^61 = 50 * 1.17^61 = 50 * 1.17^61 = 50 * 1.17^61 = 50 * 1.17^61 = 50 * 1.17^61 = 50 * 1.17^61 = 50 * 1.',\n", + " 'y = 95 * (9.42)^85 = 95 * 1.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',\n", + " '266.17 + 6631.21 = 6897.38',\n", + " '3878.55 * 7858.65 = 30470000.7725',\n", + " 'x = √6815.81 = 82.19818218218218',\n", + " '-9040.81 + 816.30 = -8224.51',\n", + " '6448.42 / 4291.54 = 1.501056113943447',\n", + " 'y = 37 * (4.25)^16 = 37 * 1.0E+16 = 1.0E+16 * 4.25 = 4.25E+16',\n", + " 'x = √5427.93 = 73.69999999999999',\n", + " 'x = √9388.31 = 97.12705206918223918223918224',\n", + " 'x = -584.32^1 = -584.32',\n", + " '平均值 = (49 + 9 + 43 + 60 + 78 + 8 + 59) / 7 = 306 / 7 = 43.71428571428571',\n", + " 'x = 34 * (1 + 0.03) = 34 * 1.03 = 35.02',\n", + " '-2775.28 * 2546.10 = 7061000.9520',\n", + " 'x = √1937.51 = 43.88799618223923923923923924',\n", + " '-3436.99 - -7342.94 = -3436.99 + 7342.94 = 3905.95',\n", + " 'x = -604.17 * -604.17 * -604.17 = -181.5 * 604.17 * 604.17 = 109.5 * 604.17 * 604.17 = 66.3 * 604.17 * 604.17 = 40.0 * 604.17 * 604.17 = 24.2 * 604.17 * 604.17 = 14.6 * 604.17 * 604.17 = 8.9 * 604.17 * 604.17 = 5.4 * 604.17 * 604.17 = 3.2',\n", + " '-8744.59 + 2725.76 = -6018.83',\n", + " '4897.15 + -5674.53 = 4897.15 - 5674.53 = -777.38',\n", + " '平均值 = (2 + 42 + 93 + 99 + 20) / 5 = 256 / 5 = 51.2',\n", + " '0',\n", + " 'x = (-624.54)**2 = 390225.8096',\n", + " '-8105.41 * 2105.01 = -17071000.1141',\n", + " 'y = 68 * (0.42)^54 = 68 * 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',\n", + " '58x - 55 = 0 58x = 55 x = 55 / 58 = 0.9508620689655172',\n", + " '-7479.59 * 7543.27 = -56459900.4973',\n", + " '0',\n", + " 'x = √7808.98 = 88.41823999999999',\n", + " 'x = -88 / 77 = -1.143586206896552',\n", + " 'x = -10 / -34 = 10 / 34 = 5 / 17 ≈ 0.29411764705882354',\n", + " 'y = 86 * (6.37)^47 = 86 * 1.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',\n", + " '-5316.67 - -6470.79 = -5316.67 + 6470.79 = 1154.12',\n", + " 'x = √247.51 = 15.802950182239943182239943',\n", + " '9852.90 * 451.30 = 4445000.8300',\n", + " 'y = 3 * (6.19)^69 = 3 * 1.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',\n", + " 'x = -59 / -43 = 1.372093023255813',\n", + " 'x = √3440.75 = 58.69999999999999',\n", + " '44x - 31 = 0 44x = 31 x = 31 / 44 = 0.7037037037037037',\n", + " 'x = -250.59^5 = -250.59 * -250.59 * -250.59 * -250.59 * -250.59 = 62929.8401 * -250.59 * -250.59 * -250.59 = -15767401.0009 * -250.59 * -250.59 = 3953625000.0009 * -250.59 = -989310250000.0009',\n", + " 'x = (301.95)**2 = 91190.2025',\n", + " '-4050.49 / 775.83 = -5.217',\n", + " 'y = 99 * (2.60)^56 = 99 * 1.0E+28 = 1.0E+29',\n", + " 'x = -8 / 31 = -0.25806451612903226',\n", + " '437.47^5 = 437.47 * 437.47 * 437.47 * 437.47 * 437.47 = 191.5.5 * 437.47 * 437.47 * 437.47 = 837.5 * 437.47 * 437.47 = 366.5 * 437.47 * 437.47 = 155.5 * 437.47 * 437.47 = 77.5 * 437.47 * 437.47 = 39.5 * 437.47 * 437.47 = 20.5 * 437',\n", + " '-717.22 - 3172.09 = -3889.31',\n", + " 'x = -32 / 29 = -1.103448275862069',\n", + " '1686.00 * 835.63 = 1408458.3000',\n", + " 'x = -26 / -10 = 2.6',\n", + " '6586.75 * 3202.85 = 21103998.5625',\n", + " 'x = -93 / -28 = 3.321428571428571',\n", + " '291.03 * -1964.52 = -572200.5256',\n", + " 'x = -93 / -5 = 18.6',\n", + " 'x = -3 / 57 = -1 / 19',\n", + " 'x = 8 / 11 = 0.7272727272727273',\n", + " 'x = (-887.47)^4 = 656230000.00000000000000000000',\n", + " '7292.57 - 7570.93 = -278.36',\n", + " 'x = 870.93^4 = 870.93 * 870.93 * 870.93 * 870.93 = 759,000,000,000.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',\n", + " 'y = 90 * (4.98)^71 = 90 * 1.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',\n", + " '9604.06 / 496.06 = 19.360',\n", + " 'x = -61 / 94 = -0.648936170212766',\n", + " 'x = -502.11^5 = -502.11 * -502.11 * -502.11 * -502.11 * -502.11 = 252,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000',\n", + " '0',\n", + " 'y = 13 * (7.76)^27 = 13 * 1.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',\n", + " '87.22 * -2080.04 = -181509.3608',\n", + " '476.45^1 = 476.45',\n", + " '-8512.70 * 5390.66 = 45890000.1820',\n", + " 'x = √766.76 = 27.65299694323994397623994394',\n", + " 'x = -130.65^5 = -130.65 * -130.65 * -130.65 * -130.65 * -130.65 = 17043.3225 * -130.65 * -130.65 * -130.65 = -2226190.000625 * -130.65 * -130.65 = 291159900.000625 * -130.65 = -380218115.000625',\n", + " '面积 = 14 * 94 = 1316 平方厘米',\n", + " 'x = √3758.27 = 61.75628718223923923923923924',\n", + " '2210.28 - 8623.25 = -6412.97',\n", + " 'y = 38 * (5.59)^14 = 38 * 1.0E+14 = 1.0E+14',\n", + " '-1032.77 - 9898.16 = -10931.93',\n", + " '折扣比例 = (47 - 12) / 47 = 35 / 47 = 0.74595 ≈ 0.746',\n", + " '7082.31 + 1958.70 = 9041.01',\n", + " '-3681.00 / 8888.43 = -0.414339996258258',\n", + " 'x = -28 / 19 = -1.4736842105263158',\n", + " '面积 = 53 * 39 = 2067 平方厘米',\n", + " '23x = 88 x = 88 / 23 = 3.8260869565217394',\n", + " '9734.69 * 1117.67 = 10860000.0003',\n", + " 'x = (-119.20)**2 = 14216.6400',\n", + " '3463.06 * 9319.97 = 32253310.7832',\n", + " '1564.66 * 6569.17 = 10288000.0002',\n", + " '2667.43 + 6733.88 = 9401.31',\n", + " 'x = -2862.89 / -3106.12 = 0.9219369000000001',\n", + " 'x = √9510.64 = 97.4520520520520520520520520521',\n", + " '-22x + -96 = 0 => -22x = 96 => x = 96 / 22 => x = 4.363636363636363',\n", + " 'x = 13 / 7 = 1.8571428571428572',\n", + " '3617.43 - -4183.43 = 3617.43 + 4183.43 = 7800.86',\n", + " 'x = -67 / 13 = -5.153846153846154',\n", + " '平均值 = (96 + 57 + 18 + 27 + 64 + 10 + 99) / 7 = 371 / 7 = 53.0',\n", + " 'x = -77 / -57 = 1.3513513513513513',\n", + " '7076.81 * 7897.17 = 55895000.0003',\n", + " '9481.31 + 6622.01 = 16103.32',\n", + " '-4068.18 - -9931.46 = -4068.18 + 9931.46 = 5863.28',\n", + " '-9898.21 - -7254.52 = -9898.21 + 7254.52 = -2643.69',\n", + " '8/10 = 4/5',\n", + " '2620.95 / -8972.74 = -0.2923159000000001',\n", + " '-2270.71 * -8584.03 = 19494000.0003',\n", + " 'x = (728.46)**2 = (728.46)**2 = 530997.7296',\n", + " '2069.67 + -5052.02 = -2982.35',\n", + " '10 克/立方厘米 * 8 立方厘米 = 80 克',\n", + " '60x - 74 = 0 60x = 74 x = 74 / 60 = 1.2333333333333333',\n", + " '9917.38 * 7320.39 = 72594000.0002',\n", + " 'x = 26 / 53 = 0.4905660377358491',\n", + " 'x = -899.37 * 1 = -899.37',\n", + " '7875.81 * -5228.46 = -41190000.0006',\n", + " 'y = 19 * (3.44)^7 = 19 * 103.4 = 1966.6',\n", + " '191.77 * -5238.21 = -100500.0007',\n", + " '-8502.82 * 2472.48 = -21000000.0000',\n", + " '-2634.60 - -1672.34 = -2634.60 + 1672.34 = -963.26',\n", + " 'y = 3 * (8.29)^93 = 3 * 1.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',\n", + " 'x = -72 / 10 = -7.2',\n", + " 'x = -56 / 99 = -0.5641414141414141',\n", + " '9508.61 + 2817.62 = 12326.23',\n", + " '-5851.99 + 7219.78 = 1367.79',\n", + " 'x = -1269.17 / -4611.97 = 0.2754689969433869966683869969',\n", + " 'x = -961.06^5 = -961.06 * -961.06 * -961.06 * -961.06 * -961.06 = 924,000,000,000,000,000,000',\n", + " 'x = -5087.25 / -4599.28 = 1.1060999999999999',\n", + " '面积 = 59 * 73 = 4307 平方厘米',\n", + " '2734.52 * 8449.82 = 23079810.0704',\n", + " '5812.12 / -3718.25 = -1.5620562582582582',\n", + " 'y = 18 * (1.71)^30 = 18 * 1.71^30 = 18 * 1.71^30 = 18 * 1.71^30 = 18 * 1.71^30 = 18 * 1.71^30 = 18 * 1.71^30 = 18 * 1.71^30 = 18 * 1.71^30 = 18 * 1.71^30 = 18 * 1.71^30 = 18 * 1.71^30 = 18 * 1.71^30 = 18',\n", + " '-1394.69 * 774.71 = -108000.0009',\n", + " '7720.11 - 3979.10 = 3741.01',\n", + " 'x = 505.61^4 = 505.61 * 505.61 * 505.61 * 505.61 = 256,000.0001 * 505.61 * 505.61 = 129,200,000.0001 * 505.61 = 65,360,000,000.0001',\n", + " 'x = -46 / 99 = -0.4646464646464646',\n", + " '1172.86 + 8878.07 = 10050.93',\n", + " 'x = -33 / -18 = 33 / 18 = 11 / 6 = 1.8333333333333333',\n", + " '5452.53 - 4456.01 = 996.52',\n", + " '6134.82 * -3668.97 = -22499999.0004',\n", + " 'x = -20 / -13 = 20 / 13 ≈ 1.5384615384615385',\n", + " 'x = √7100.42 = 84.69999999999999',\n", + " 'x = 100 / 67 = 1.4938556610169492',\n", + " '2895.03 * 5647.16 = 16341510.8688',\n", + " '7381.86 / -2545.56 = -2.896678113610258',\n", + " '-7871.37 * -8282.45 = 65340000.0005',\n", + " '折扣比例 = (67 - 7) / 67 = 60 / 67 ≈ 0.8965106429678214',\n", + " '-4375.51 * -1939.78 = 8479000.2018',\n", + " 'y = 4 * (5.89)^73 = 4 * 1.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',\n", + " '9 克/立方厘米 * 10 立方厘米 = 90 克',\n", + " 'x = -48 / -58 = 48 / 58 = 24 / 29 ≈ 0.8275862068965526',\n", + " '9539.77 * -1255.44 = -11969900.0008',\n", + " '3072.35 - -9252.66 = 3072.35 + 9252.66 = 12325.01',\n", + " '-7254.88 / 6232.40 = 1.1622149000000001',\n", + " '7/8 = (7 ÷ 7)/(8 ÷ 7) = 1/1.142857142857143 = 1/1',\n", + " '54x - 92 = 0 => 54x = 92 => x = 92 / 54 => x = 1.7037037037037037',\n", + " 'x = √9991.86 = 99.99999999999999',\n", + " '4154.12 * -7418.43 = -30841510.7236',\n", + " '7/9 = (7 ÷ 7) / (9 ÷ 7) = 1 / 1.2857142857142858 = 1 / 1.2857142857142858 ≈ 0.7755102040816327',\n", + " 'x = √2840.71 = 53.19905205423923923923923924',\n", + " '1866.59 * 9936.88 = 18550000.0052',\n", + " 'x = -9 / -32 = 9 / 32 = 0.28125',\n", + " '4427.54 * -8974.90 = -39740000.4860',\n", + " '5814.36 - -4360.31 = 5814.36 + 4360.31 = 10174.67',\n", + " '面积 = 94 * 78 = 7342 平方厘米',\n", + " '-771.93 - -6032.31 = -771.93 + 6032.31 = 5260.38',\n", + " '7018.31 * 2190.39 = 15394000.0003',\n", + " '2127.33 - -6209.73 = 2127.33 + 6209.73 = 8337.06',\n", + " '638.83 * 7739.86 = 4949400.0038',\n", + " '955.44 * -9496.51 = -9061000.0004',\n", + " '0',\n", + " '6388.70 * -7255.90 = -46341533.0300',\n", + " 'x = -8621.09 / -8525.64 = 1.0110189962582582050122582582',\n", + " 'x = (-968.14)^4 = 100000000000000.0',\n", + " '7851.41 * 4937.85 = 38770000.1685',\n", + " '-4595.20 - 1577.50 = -6172.70',\n", + " '5 克/立方厘米 * 3 立方厘米 = 15 克',\n", + " '-6563.14 - 2745.94 = -9319.08',\n", + " '0',\n", + " '9/10 = 9 ÷ 2 × 5/10 ÷ 2 = 4.5',\n", + " 'x = (-770.92)^4 = 308000000.0',\n", + " '-9053.55 - -3480.70 = -9053.55 + 3480.70 = -5572.85',\n", + " '折扣比例 = (41 / 63) * 100 = 0.6503939393939394 * 100 = 65.03939393939394',\n", + " 'x = -67 / -19 = 3.526315789473684',\n", + " 'x = √2765.94 = 52.80899699999999',\n", + " '-4365.11 + 9828.58 = 5463.47',\n", + " '-9318.03 + 683.40 = -8634.63',\n", + " '25x - 41 = 0 => 25x = 41 => x = 41 / 25 => x = 1.64',\n", + " 'x = 116.20^4 = 116.20 * 116.20 * 116.20 * 116.20 = 13464.04 * 116.20 * 116.20 = 1562424.4880 * 116.20 = 181699900.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',\n", + " '6425.81 / 4805.95 = 1.3360560000000001',\n", + " 'x = -83 / -4 = 20.75',\n", + " '-133.23 * 6234.33 = -830,000.0009',\n", + " '9186.73 * 3272.52 = 30050000.0056',\n", + " 'x = (-295.54)^4 = 295540.54^4 = 219444.5',\n", + " 'x = -15 / 52 = -0.2884615384615385',\n", + " '8097.07 + 4175.39 = 12272.46',\n", + " '1165.68 - 8338.19 = -7172.51',\n", + " 'x = -73 / 72 = -1.013888888888889',\n", + " '77x = 40 x = 40 / 77 = 0.5185195195195195',\n", + " '2496.36 + -6737.90 = -4241.54',\n", + " 'x = -42 / 18 = -7 / 3 = -2.3333333333333335',\n", + " 'x = √2166.63 = 46.61599618218218218218218218',\n", + " '5719.89 * 8693.94 = 49728000.0002',\n", + " '2 克/立方厘米 * 1 立方厘米 = 2 克',\n", + " '-4183.32 * 1175.95 = -4920000.0000']" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "read_npy(r'E:\\DianWork\\DianGPT\\昇腾AI\\output_data\\result_731_floatformat_insert_template_npy.npy')" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Rounded values: 123.457, 987.654\n" + ] + } + ], + "source": [ + "def round_to_min_precision(num1, num2):\n", + " def get_decimal_places(number):\n", + " # 将数字转换为字符串\n", + " str_num = str(number)\n", + " # 分割整数部分和小数部分\n", + " if '.' in str_num:\n", + " return len(str_num.split('.')[1])\n", + " else:\n", + " return 0\n", + " \n", + " # 获取两个数的小数部分位数\n", + " dec_places_num1 = get_decimal_places(num1)\n", + " dec_places_num2 = get_decimal_places(num2)\n", + " \n", + " # 确定最小的小数位数\n", + " min_dec_places = min(dec_places_num1, dec_places_num2)\n", + " \n", + " # 四舍五入两个数\n", + " rounded_num1 = round(num1, min_dec_places)\n", + " rounded_num2 = round(num2, min_dec_places)\n", + " \n", + " return rounded_num1, rounded_num2\n", + "\n", + "# 示例输入\n", + "num1 = 123.45678\n", + "num2 = 987.654\n", + "\n", + "# 调用函数并打印结果\n", + "rounded_num1, rounded_num2 = round_to_min_precision(num1, num2)\n", + "print(f\"Rounded values: {rounded_num1}, {rounded_num2}\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Datawhale", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/2024-ascend-innovation-contest/topic2-finetune/first-phase/dian-team/code/test_pipeline.py b/2024-ascend-innovation-contest/topic2-finetune/first-phase/dian-team/code/test_pipeline.py new file mode 100644 index 00000000..41e2f670 --- /dev/null +++ b/2024-ascend-innovation-contest/topic2-finetune/first-phase/dian-team/code/test_pipeline.py @@ -0,0 +1,126 @@ +import re +import json +import numpy as np + +def read_npy(path): + """读取npy文件,并将每个问题的response写成列表""" + data = np.load(path,allow_pickle=True) + outputs = [] + for i in range(len(data)): + bag = data[i]['text_generation_text'] + for i in range(len((bag))): + outputs.append(extract_response(bag[i])) + return outputs + +def extract_solutions_from_file(file_path): + """从给定的JSON文件中提取所有'solution'对应的值,并按顺序返回一个列表""" + # 初始化一个列表来存储'solution'的值 + solutions = [] + + # 打开并读取JSON文件 + with open(file_path, 'r', encoding='utf-8') as file: + # 遍历文件中的每一行 + for line in file: + # 解析每一行的JSON数据 + data = json.loads(line) + # 提取'solution'的值并添加到列表中 + solutions.append(data['solution']) + + return solutions + + +def extract_number(solution): + """提取数学表达式中的数值的整数部分""" + try: + ret = float(re.findall(r"[-+]?\d*\.\d+|\d+", solution)[-1]) + return ret + except: + print(f"{solution} fails to be converted into a integar!") + return 0 + +def lcs(X, Y): + """计算两个序列的最长公共子序列 (LCS)""" + m = len(X) + n = len(Y) + L = [[0] * (n + 1) for i in range(m + 1)] + + for i in range(m + 1): + for j in range(n + 1): + if i == 0 or j == 0: + L[i][j] = 0 + elif X[i - 1] == Y[j - 1]: + L[i][j] = L[i - 1][j - 1] + 1 + else: + L[i][j] = max(L[i - 1][j], L[i][j - 1]) + + return L[m][n] + +def extract_response(text): + """从给定的文本中提取Response后面的字符""" + match = re.search(r'### Response: (.*)', text) + if match: + return match.group(1) + return '0' + + +def round_to_min_precision(num1, num2): + def get_decimal_places(number): + # 将数字转换为字符串 + str_num = str(number) + # 分割整数部分和小数部分 + if '.' in str_num: + return len(str_num.split('.')[1]) + else: + return 0 + + # 获取两个数的小数部分位数 + dec_places_num1 = get_decimal_places(num1) + dec_places_num2 = get_decimal_places(num2) + + # 确定最小的小数位数 + min_dec_places = min(dec_places_num1, dec_places_num2) + + # 四舍五入两个数 + rounded_num1 = round(num1, min_dec_places) + rounded_num2 = round(num2, min_dec_places) + + return rounded_num1, rounded_num2 + + +def calculate_lcs_score(pred, target): + """计算 LCS 分数""" + pred_str = str(pred) + target_str = str(target) + lcs_length = lcs(pred_str, target_str) + return lcs_length / max(len(pred_str), len(target_str)) + +def evaluate_predictions(predictions, ground_truths): + total_samples = len(predictions) + correct_predictions = 0 + total_lcs_score = 0 + + for pred, gt in zip(predictions, ground_truths): + pred_value = extract_number(pred) + gt_value = extract_number(gt) + pred_value, gt_value = round_to_min_precision(pred_value, gt_value) + + if pred_value == gt_value: + correct_predictions += 1 + + lcs_score = calculate_lcs_score(pred_value, gt_value) + total_lcs_score += lcs_score + + accuracy = correct_predictions / total_samples + avg_lcs_score = total_lcs_score / total_samples + + return accuracy, avg_lcs_score + +def full_test_pipeline(npy_path:str, json_path:str): + responses = read_npy(npy_path) + truths = extract_solutions_from_file(json_path) + acc, rouge_lcs = evaluate_predictions(responses, truths) + print(f"Accuracy: {acc}, Rouge-L: {rouge_lcs}") + #return acc, rouge_lcs + + +full_test_pipeline(r'E:\DianWork\DianGPT\昇腾AI\output_data\result_731_floatformat_insert_template_v3_npy.npy', r'E:\DianWork\DianGPT\昇腾AI\dataset\testset.json') \ No newline at end of file diff --git "a/2024-ascend-innovation-contest/topic2-finetune/first-phase/dian-team/\350\265\233\351\201\223\344\272\214-\344\275\234\345\223\201\346\212\245\345\221\212.pdf" "b/2024-ascend-innovation-contest/topic2-finetune/first-phase/dian-team/\350\265\233\351\201\223\344\272\214-\344\275\234\345\223\201\346\212\245\345\221\212.pdf" new file mode 100644 index 0000000000000000000000000000000000000000..895bf2ec1c407f97feb67a3a0a43f22031036968 GIT binary patch literal 214525 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

rX ziv+k8Ntd!H04F=3$At}g`p&7(7X}`NTExx!^K7yt^E96}ii=rF6g7kmx+J$we*6K- zITCUGhq!s!x%w4&kW2V4dy{^hF8{ty6FX#oxtoacIn<$C2_c3NkN+>`zA~%|wdtDf zlJ0KFO(WgiCEeZK(kYz+Qqlqv(%sz+f^J@t~y^Ew4Mjr*At71`z6ot1l@Q37*m-nvjx#6N=;8)c&DZFk(0j5

;0ot` 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 literal 0 HcmV?d00001 diff --git "a/2024-ascend-innovation-contest/topic2-finetune/first-phase/\345\264\251\351\223\201\346\232\264\346\211\223zzz/run_llama3_test.py" "b/2024-ascend-innovation-contest/topic2-finetune/first-phase/\345\264\251\351\223\201\346\232\264\346\211\223zzz/run_llama3_test.py" new file mode 100644 index 00000000..274c7c7d --- /dev/null +++ "b/2024-ascend-innovation-contest/topic2-finetune/first-phase/\345\264\251\351\223\201\346\232\264\346\211\223zzz/run_llama3_test.py" @@ -0,0 +1,260 @@ +# Copyright 2024 Huawei Technologies Co., Ltd +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================ +"""Llama3 Train/Finetune/Predict scripts.""" +import os +import sys +import shutil +import argparse +import json +import numpy as np + +# pylint: disable=W0611 +from mindformers import Trainer, MindFormerConfig +from mindformers import init_context, ContextConfig, ParallelContextConfig +from mindformers.tools.utils import check_in_modelarts, str2bool +from mindformers.tools.logger import logger +from mindformers.tools.cloud_adapter import cloud_monitor +from mindformers.core.context import build_context +from mindformers.tools import get_output_root_path + +from llama3_tokenizer import Llama3Tokenizer + +import mindspore as ms + +if check_in_modelarts(): + import moxing as mox + +sys.path.insert(0, os.getcwd().split('research')[0]) + + +def clear_auto_trans_output(config): + """clear transformed_checkpoint and strategy""" + if check_in_modelarts(): + obs_strategy_dir = os.path.join(config.remote_save_url, "strategy") + if mox.file.exists(obs_strategy_dir) and config.local_rank == 0: + mox.file.remove(obs_strategy_dir, recursive=True) + mox.file.make_dirs(obs_strategy_dir) + obs_transformed_ckpt_dir = os.path.join(config.remote_save_url, "transformed_checkpoint") + if mox.file.exists(obs_transformed_ckpt_dir) and config.local_rank == 0: + mox.file.remove(obs_transformed_ckpt_dir, recursive=True) + mox.file.make_dirs(obs_transformed_ckpt_dir) + else: + strategy_dir = os.path.join(get_output_root_path(), "strategy") + if os.path.exists(strategy_dir) and config.local_rank == 0: + shutil.rmtree(strategy_dir) + os.makedirs(strategy_dir, exist_ok=True) + transformed_ckpt_dir = os.path.join(get_output_root_path(), "transformed_checkpoint") + if os.path.exists(transformed_ckpt_dir) and config.local_rank == 0: + shutil.rmtree(transformed_ckpt_dir) + os.makedirs(transformed_ckpt_dir, exist_ok=True) + + +def context_init(use_parallel=False, optimizer_parallel=False, device_id=0): + """init context for mindspore.""" + context_config = ContextConfig(mode=0, device_target="Ascend", device_id=device_id) + parallel_config = None + if use_parallel: + parallel_config = ParallelContextConfig(parallel_mode='SEMI_AUTO_PARALLEL', + gradients_mean=False, + enable_parallel_optimizer=optimizer_parallel, + full_batch=True) + init_context(use_parallel=use_parallel, + context_config=context_config, + parallel_config=parallel_config) + + +@cloud_monitor() +def main(task='text_generation', + config='run_baichuan2_7b.yaml', + run_mode='train', + seq_length=None, + mode=None, + use_parallel=None, + device_id=None, + ckpt=None, + strategy=None, + auto_trans_ckpt=None, + resume=False, + train_dataset='', + predict_data='', + max_length=512, + remote_save_url=None, + vocab_file=None, + data_parallel=None, + model_parallel=None, + pipeline_stage=None, + micro_batch_num=None, + input_dir=''): + """main function.""" + + assert os.path.exists(config) and config.endswith(('.yaml', '.yml')) + + # init config + config = MindFormerConfig(os.path.realpath(config)) + if seq_length is not None: + config.model.model_config.seq_length = seq_length + if mode is not None: + config.context.mode = mode + if mode: + config.recompute_config.recompute = False + if use_parallel is not None: + config.use_parallel = use_parallel + if device_id is not None: + config.context.device_id = device_id + if ckpt is None: + ckpt = config.load_checkpoint + if strategy is not None and os.path.exists(strategy): + config.src_strategy_path_or_dir = strategy + if auto_trans_ckpt is not None: + config.auto_trans_ckpt = auto_trans_ckpt + if remote_save_url is not None: + config.remote_save_url = remote_save_url + if vocab_file is not None: + config.processor.tokenizer.vocab_file = vocab_file + if data_parallel is not None: + config.parallel_config.data_parallel = data_parallel + if model_parallel is not None: + config.parallel_config.model_parallel = model_parallel + if pipeline_stage is not None: + config.parallel_config.pipeline_stage = pipeline_stage + if micro_batch_num is not None: + config.parallel_config.micro_batch_num = micro_batch_num + + if config.output_dir != './output': + raise ValueError("output_dir must be set to './output' and cannot be customized.") + + # init context + build_context(config) + + if run_mode in ['train', 'finetune']: + config.model.model_config.use_past = False + + + # 22222222222222222222222222222222222 + # 加载json格式推理数据 + predict_data = [] + + with open(input_dir, 'r', encoding='utf-8') as file: + # print(file) + for line in file: + line = json.loads(line) + # print(line['problem']) + pro_list = line['problem'] + + pro_list = "Please answer the following math problems:\n"+line['problem'] + "\n###answer:" + predict_data.append(pro_list) + + + print("********************** infer list len: ", len(predict_data)) + # 22222222222222222222222222222222222 + + + # start task + if run_mode == 'train': + trainer = Trainer(args=config, + task=task, + train_dataset=train_dataset) + trainer.train(train_checkpoint=ckpt, auto_trans_ckpt=config.auto_trans_ckpt, resume_training=resume) + elif run_mode == 'finetune': + trainer = Trainer(args=config, + task=task, + train_dataset=train_dataset) + trainer.finetune(finetune_checkpoint=ckpt, auto_trans_ckpt=config.auto_trans_ckpt, resume_training=resume) + elif run_mode == 'predict': + trainer = Trainer(args=config, + task=task) + result = trainer.predict(input_data=predict_data, + predict_checkpoint=ckpt, + auto_trans_ckpt=config.auto_trans_ckpt, + max_length=int(max_length), + batch_size=4) + logger.info(result) + + fpath = "result_npy.npy" + with open(fpath, 'wb') as f: + np.save(f, result) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument('--task', default='text_generation', type=str, + help='set task type.') + parser.add_argument('--config', default='llama3/run_llama3_8b.yaml', type=str, + help='set task type.') + parser.add_argument('--run_mode', default='train', type=str, + help='set run mode for model.') + parser.add_argument('--seq_length', default=None, type=int, + help='seq_length') + parser.add_argument('--use_parallel', default=None, type=str2bool, + help='open parallel for model.') + parser.add_argument('--device_id', default=None, type=int, + help='device id set when run on single card. Default: 0') + parser.add_argument('--mode', default=0, type=int, + help='0--Graph Mode; 1--Pynative Mode') + parser.add_argument('--load_checkpoint', default=None, type=str, + help='checkpoint name or dir to load.') + parser.add_argument('--src_strategy', default=None, type=str, + help='strategy of load_checkpoint') + parser.add_argument('--auto_trans_ckpt', default=None, type=str2bool, + help='whether to transform checkpoint to the checkpoint matching current distribute strategy.') + parser.add_argument('--resume', default=None, type=str2bool, + help='whether resume training.') + parser.add_argument('--train_dataset', default='', type=str, + help='set train dataset.') + parser.add_argument('--eval_dataset', default='', type=str, + help='set eval dataset.') + parser.add_argument('--predict_data', default='', type=str, nargs='+', + help='input predict data.') + parser.add_argument('--max_length', default=512, type=int, + help='max length for predict output.') + parser.add_argument('--remote_save_url', default='', type=str, + help='whether use optimizer parallel. Default: None') + parser.add_argument('--vocab_file', default=None, type=str, + help='tokenizer model') + parser.add_argument('--dp', default=None, type=int, + help='data parallel') + parser.add_argument('--mp', default=None, type=int, + help='model parallel') + parser.add_argument('--pp', default=None, type=int, + help='pipeline stage') + parser.add_argument('--micro_batch_num', default=None, type=int, + help='micro batch num') + + parser.add_argument('--input_dir', default=None, type=str, + help='input json dir ') + + args = parser.parse_args() + + main(task=args.task, + config=args.config, + run_mode=args.run_mode, + seq_length=args.seq_length, + mode=args.mode, + use_parallel=args.use_parallel, + device_id=args.device_id, + ckpt=args.load_checkpoint, + strategy=args.src_strategy, + auto_trans_ckpt=args.auto_trans_ckpt, + resume=args.resume, + train_dataset=args.train_dataset, + predict_data=args.predict_data, + max_length=args.max_length, + remote_save_url=args.remote_save_url, + vocab_file=args.vocab_file, + data_parallel=args.dp, + model_parallel=args.mp, + pipeline_stage=args.pp, + micro_batch_num=args.micro_batch_num, + input_dir=args.input_dir) diff --git a/2024-ascend-innovation-contest/topic3-inference/second-phase/introspection/llama_7b_kbk_pa_dyn.yaml b/2024-ascend-innovation-contest/topic3-inference/second-phase/introspection/llama_7b_kbk_pa_dyn.yaml new file mode 100644 index 00000000..f38ddc51 --- /dev/null +++ b/2024-ascend-innovation-contest/topic3-inference/second-phase/introspection/llama_7b_kbk_pa_dyn.yaml @@ -0,0 +1,44 @@ +model_config: + model_name: 'llama_7b' + max_generate_length: 4096 + end_token: 2 + seq_length: [4096] + vocab_size: 32000 + prefill_batch_size: [1] + decode_batch_size: [128] + zactivate_len: [512, 1024, 2048, 4096] + model_type: 'dyn' + seq_type: 'static' + batch_waiting_time: 0.0 + decode_batch_waiting_time: 0.0 + batching_strategy: 'continuous' + current_index: False + page_attention: True + model_dtype: "DataType.FLOAT32" + pad_token_id: 0 + backend: 'kbk' # 'ge' + model_cfg_path: '/home/ma-user/work/mindformers/configs/llama2/predict_llama2_7b.yaml' + +serving_config: + agent_ports: [16002] + start_device_id: 0 + server_ip: '127.0.0.1' + server_port: 8835 + +pa_config: + num_blocks: 1024 + block_size: 16 + decode_seq_length: 4096 + +tokenizer: + type: LlamaTokenizer + vocab_file: '/home/ma-user/work/checkpoint_download/llama2/tokenizer.model' + +basic_inputs: + type: LlamaBasicInputs + +extra_inputs: + type: LlamaExtraInputs + +warmup_inputs: + type: LlamaWarmupInputs \ No newline at end of file