├── models └── __init__.py ├── utils ├── __init__.py ├── data_process │ ├── __init__.py │ ├── convert_id.py │ └── to_sample_for_data_source.py ├── input_args.py └── data_helper.py ├── datasets ├── spm.model └── Dialog_sample │ ├── README.md │ ├── Emotional_sample.txt │ ├── LCCC_sample.txt │ ├── weibo_sample.txt │ ├── tencent_sample.txt │ └── douban_sample.txt ├── pics └── diag_ids.png ├── .gitignore ├── bin ├── run_predict.sh └── run_train.sh ├── convert_data_into_idx.py ├── run_dialogue.py └── README.md /models/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /utils/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /utils/data_process/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /datasets/spm.model: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyj555/LICS2021_Dialogue/HEAD/datasets/spm.model -------------------------------------------------------------------------------- /pics/diag_ids.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyj555/LICS2021_Dialogue/HEAD/pics/diag_ids.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/ 2 | *.pyc 3 | *.zip 4 | *.docx 5 | *.tar.gz 6 | __pycache__ 7 | .DS_STORE 8 | datasets/output 9 | datasets/Dialog_testA 10 | output 11 | unified_transformer-12L-cn 12 | unified_transformer-12L-cn-luge 13 | -------------------------------------------------------------------------------- /bin/run_predict.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Author: liuyongjie 4 | # Email: 626671935@qq.com 5 | # GitHub: https://github.com/lyj555 6 | # Date: 2021-05-04 7 | # Brief: 8 | # LICS Dialogue部分 predict 9 | # Arguments: 10 | # $1: model_path, required, the pretrained model path 11 | # $2: device, optional, cpu or gpu, default is gpu 12 | # $3: predict_data_path, optional, default is ./dataset/test.json 13 | # $4: python_path, optional, if empty, will use default python 14 | # Example: bash run_eval.sh 15 | # Returns: 16 | # succ: exit 0 17 | # fail: exit 1 18 | 19 | model_path=$1 20 | device=$2 21 | predict_data_path=$3 22 | python_path=$4 23 | 24 | sh_dir=$(cd $(dirname ${BASH_SOURCE[0]}); pwd) # current directory path 25 | project_dir=${sh_dir}/.. 26 | 27 | # [1]. check params 28 | [[ ! -d $model_path ]] && echo "model_path: $model_path is not valid directory" && exit 1 29 | [[ -z $device ]] && device="gpu" 30 | [[ -z $test_data_path ]] && test_data_path=${project_dir}/dataset/output/test.txt 31 | [[ -z $python_path ]] && python_path=$(which python) 32 | [[ ! -x $python_path ]] && echo "the python_path: $python_path is not executable!" && exit 1 33 | 34 | pretrained_model_path=$model_path 35 | model_name=$(basename $pretrained_model_path) 36 | output_dir=${project_dir}/output/predict/$(date +%m%d_%H%M)_model_name_$model_name # output directory 37 | mkdir -p $output_dir 38 | 39 | batch_size=2 40 | model_type="uniLM" 41 | # decode strategy 42 | decode_strategy="sampling" # 'greedy_search', 'sampling', 'beam_search' 43 | 44 | 45 | # [2]. do predict 46 | ${python_path} ${project_dir}/run_dialogue.py \ 47 | --do_train 0 --do_eval 0 \ 48 | --do_predict 1 --test_data_path $predict_data_path \ 49 | --output_dir $output_dir \ 50 | --device $device --model_type $model_type \ 51 | --pretrained_model_path $pretrained_model_path \ 52 | --batch_size $batch_size \ 53 | --decode_strategy $decode_strategy 54 | 55 | -------------------------------------------------------------------------------- /bin/run_train.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Author: liuyongjie 4 | # Email: 626671935@qq.com 5 | # GitHub: https://github.com/lyj555 6 | # Date: 2021-05-03 7 | # Brief: 8 | # LICS Dialogue部分模型训练 9 | # Arguments: 10 | # $1: train_data_path, optional, train data path 11 | # $2: valid_data_path, optional, dev data path 12 | # $3: device, optional, cpu or gpu, default is gpu 13 | # $4: python_path, optional, if empty, will use default python 14 | # Example: bash run_train.sh 15 | # Returns: 16 | # succ: exit 0 17 | # fail: exit 1 18 | 19 | train_data_path=$1 20 | valid_data_path=$2 21 | device=$3 22 | python_path=$4 23 | 24 | [[ -z $device ]] && device="cpu" 25 | [[ -z $python_path ]] && python_path=$(which python) 26 | [[ ! -x $python_path ]] && echo "the python_path: $python_path is not executable!" && exit 1 27 | 28 | sh_dir=$(cd $(dirname ${BASH_SOURCE[0]}); pwd) # current directory path 29 | project_dir=${sh_dir}/.. 30 | 31 | [[ -z $train_data_path ]] && train_data_path=${project_dir}/output/train.txt 32 | [[ -z $valid_data_path ]] && valid_data_path=${project_dir}/output/dev.txt 33 | output_dir=${project_dir}/output/train/$(date +%m%d_%H%M) # output directory 34 | 35 | model_type="uniLM" 36 | pretrained_model_path="unified_transformer-12L-cn" 37 | train_epochs=2 38 | batch_size=8192 39 | 40 | # optimizer(adamX) 41 | lr=1e-5 42 | weight_decay=0.01 43 | warmup_steps=4000 44 | max_grad_norm=0.1 45 | 46 | # steps 47 | logging_steps=1000 48 | save_steps=100000 49 | 50 | 51 | ${python_path} ${project_dir}/run_dialogue.py \ 52 | --do_train 1 --train_data_path $train_data_path \ 53 | --do_eval 1 --valid_data_path $valid_data_path \ 54 | --do_predict 0 \ 55 | --output_dir $output_dir \ 56 | --device $device --seed 666666 --model_type $model_type \ 57 | --pretrained_model_path $pretrained_model_path \ 58 | --train_epochs $train_epochs --batch_size $batch_size \ 59 | --logging_steps $logging_steps --save_steps $save_steps \ 60 | --lr $lr --weight_decay $weight_decay \ 61 | --warmup_steps $warmup_steps --max_grad_norm $max_grad_norm \ 62 | --logging_steps $logging_steps --save_steps $save_steps 63 | -------------------------------------------------------------------------------- /datasets/Dialog_sample/README.md: -------------------------------------------------------------------------------- 1 | ## 三个子任务,9个数据集。具体为: 2 | 3 | 4 | 1.知识对话数据:百度的DuConv[1] 5 | 2.推荐对话数据:百度的DuRecDial[2] 6 | 3.画像对话数据:百度的画像对话数据集(Chinese Persona Chat,CPC) 7 | 4.其他对话数据:华为的微博数据[3],北航和微软的豆瓣多轮对话[4],清华的LCCC[5],清华的情感对话数据集[6],清华的KdConv[7],腾讯的检索辅助生成对话数据集[8] 8 | 9 | 10 | 文献引用 11 | [1] Wenquan Wu, Zhen Guo, Xiangyang Zhou, Hua Wu, Xiyuan Zhang, Rongzhong Lian, and Haifeng Wang. 2019. Proactive human-machine conversation with explicit conversation goal. In ACL. 12 | [2] Zeming Liu, Haifeng Wang, Zheng-Yu Niu, Hua Wu, Wanxiang Che, Ting Liu. 2020. Towards Conversational Recommendation over Multi-Type Dialogs. In ACL. 13 | [3] Lifeng Shang, Zhengdong Lu, Hang Li. 2015. Neural Responding Machine for Short-Text Conversation. In ACL. 14 | [4] Yu Wu, Wei Wu, Chen Xing, Ming Zhou, Zhoujun Li. 2017. Sequential Matching Network: A New Archtechture for Multi-turn Response Selection in Retrieval-based Chatbots. In ACL. 15 | [5] Yida Wang, Pei Ke, Yinhe Zheng, Kaili Huang, Yong Jiang, Xiaoyan Zhu, Minlie Huang. 2020. A Large-Scale Chinese Short-Text Conversation Dataset. In NLPCC 16 | [6]Hao Zhou, Minlie Huang, Tianyang Zhang, Xiaoyan Zhu, Bing Liu. 2019. Emotional Chatting Machine: Emotional Conversation Generation with Internal and External Memory. In AAAI. 17 | [7] Hao Zhou, Chujie Zheng, Kaili Huang, Minlie Huang, Xiaoyan Zhu. 2020. KdConv: A Chinese Multi-domain Dialogue Dataset Towards Multi-turn Knowledge-driven Conversation. In ACL. 18 | [8] Deng Cai, Yan Wang, Wei Bi, Zhaopeng Tu, Xiaojiang Liu, Shuming Shi. 2019. Retrieval-guided Dialogue Response Generation via a Matching-to-Generation Framework. In EMNLP. 19 | 20 | 21 | ## 文件说明 22 | . 23 | |-- Dialog_sample 样例数据集 24 | | |-- douban_sample.txt 北航和微软的豆瓣多轮对话 25 | | |-- duconv_sample.txt 百度的DuConv 26 | | |-- DuRecDial_sample.txt 百度的DuRecDial 27 | | |-- Emotional_sample.txt 清华的情感对话数据集 28 | | |-- kdconv_sample.txt 清华的KdConv 29 | | |-- LCCC_sample.txt 清华的LCCC 30 | | |-- Persona_sample.txt 百度的画像对话数据集(Chinese Persona Chat) 31 | | |-- tencent_sample.txt 腾讯的检索辅助生成对话数据集 32 | | |-- weibo_sample.txt 华为的微博数据 33 | | |-- README.md 说明文件 34 | | `-- License.docx License 35 | 36 | |-- Dialog_train 训练数据集 37 | | |-- douban_train.txt 北航和微软的豆瓣多轮对话 38 | | |-- duconv_train.txt 百度的DuConv 39 | | |-- DuRecDial_train.txt 百度的DuRecDial 40 | | |-- Emotional_train.txt 清华的情感对话数据集 41 | | |-- kdconv_train.txt 清华的KdConv 42 | | |-- LCCC_train.json 清华的LCCC 43 | | |-- Persona_train.json 百度的画像对话数据集(Chinese Persona Chat) 44 | | |-- tencent_train.txt 腾讯的检索辅助生成对话数据集 45 | | |-- weibo_train.txt 华为的微博数据 46 | | |-- README.md 说明文件 47 | | `-- License.docx License 48 | 49 | |-- Dialog_dev 验证集 50 | | |-- douban_dev.txt 北航和微软的豆瓣多轮对话 51 | | |-- duconv_dev.txt 百度的DuConv 52 | | |-- DuRecDial_dev.txt 百度的DuRecDial 53 | | |-- Emotional_dev.txt 清华的情感对话数据集 54 | | |-- kdconv_dev.txt 清华的KdConv 55 | | |-- LCCC_dev.json 清华的LCCC 56 | | |-- Persona_dev.json 百度的画像对话数据集(Chinese Persona Chat) 57 | | |-- tencent_dev.txt 腾讯的检索辅助生成对话数据集 58 | | |-- weibo_dev.txt 华为的微博数据 59 | | |-- README.md 说明文件 60 | | `-- License.docx License 61 | 62 | |-- Dialog_testA 测试集A 63 | | |-- douban_testA.txt 北航和微软的豆瓣多轮对话 64 | | |-- duconv_testA.txt 百度的DuConv 65 | | |-- DuRecDial_testA.txt 百度的DuRecDial 66 | | |-- Emotional_testA.txt 清华的情感对话数据集 67 | | |-- kdconv_testA.txt 清华的KdConv 68 | | |-- LCCC_dev.txt 清华的LCCC 69 | | |-- Persona_testA.json 百度的画像对话数据集(Chinese Persona Chat) 70 | | |-- tencent_testA.txt 腾讯的检索辅助生成对话数据集 71 | | |-- weibo_testA.txt 华为的微博数据 72 | | |-- README.md 说明文件 73 | | `-- License.docx License 74 | -------------------------------------------------------------------------------- /utils/data_process/convert_id.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import re 4 | 5 | 6 | type_dict = {"chitchat": 30001, "knowledge": 30002, "persona": 30002, "recommend": 30003} 7 | 8 | # 0: both(context and respone) meet the requirements 9 | # 1: last utterance of context is too long and trunc 10 | # 2: first utterance of context is too long and trunc 11 | # 3: other utterance of context is too long and trunc 12 | # 4: respone is too long and trunc 13 | # truncate_type_stat = {0: 0, 1: 0, 2: 0, 3: 0, 4: 0} 14 | 15 | 16 | def truncate_ids_list(ids_list, cut_len=512, truncate_first_turn=False): 17 | if sum([len(x) for x in ids_list]) <= cut_len: 18 | return 0, ids_list 19 | 20 | new_ids_list = [] 21 | ids_list.reverse() 22 | len_cnt = 0 23 | cut_type = 0 24 | 25 | for i, ids in enumerate(ids_list): 26 | if len_cnt + len(ids) > cut_len: 27 | if len_cnt == 0 and (len(ids_list) > 1 or not truncate_first_turn): 28 | new_ids_list.append(ids[-cut_len:]) 29 | len_cnt = cut_len 30 | cut_type = 1 # last utterance of context is too long 31 | elif truncate_first_turn and i == len(ids_list) - 1 and len_cnt + 1 < cut_len: 32 | new_ids_list.append(ids[:cut_len - len_cnt - 1] + [ids[-1]]) 33 | len_cnt = cut_len 34 | cut_type = 2 # first utterance of context is too long and trunc 35 | else: 36 | cut_type = 3 # other utterance of context is too long and trunc 37 | break 38 | else: 39 | len_cnt += len(ids) 40 | new_ids_list.append(ids) 41 | 42 | new_ids_list.reverse() 43 | return cut_type, new_ids_list 44 | 45 | 46 | def convert_sample_to_numerical(input_data, max_seq_len=512, 47 | max_response_len=128, truncate_first_turn=False, 48 | is_test=False, truncate_type_stat=None, sp=None): 49 | assert "type" in input_data and "context" in input_data and "response" in input_data and "knowledge" in input_data 50 | 51 | for key in input_data: 52 | input_data[key] = re.sub(" +", " ", input_data[key]) 53 | 54 | data_type = input_data["type"] 55 | context = input_data["context"] 56 | response = input_data["response"] 57 | knowledge = input_data["knowledge"] 58 | 59 | # type 60 | assert data_type in type_dict 61 | type_id = type_dict[data_type] 62 | 63 | # tokenize response 64 | response_ids = sp.EncodeAsIds(response) + [2] 65 | if len(response_ids) > max_response_len - 1: 66 | new_response_ids = response_ids[1 - max_response_len:] 67 | truncate_type_stat[4] += 1 68 | if not is_test: 69 | return None 70 | else: 71 | new_response_ids = response_ids[:] 72 | 73 | # tokenize context 74 | context_ids_list = [] 75 | if knowledge != "": 76 | knowledge_ids = sp.EncodeAsIds(knowledge) + [2] 77 | context_ids_list.append(knowledge_ids) 78 | 79 | if context != "": 80 | for utterance in context.split('\t'): 81 | utterance_ids = sp.EncodeAsIds(utterance) + [2] 82 | context_ids_list.append(utterance_ids) 83 | 84 | truncate_type, new_context_ids_list = \ 85 | truncate_ids_list(context_ids_list, max_seq_len - max_response_len - 2, 86 | truncate_first_turn=truncate_first_turn) 87 | truncate_type_stat[truncate_type] += 1 88 | 89 | if truncate_type == 1 and not is_test: 90 | return None 91 | 92 | # deal context tokens 93 | token_ids = [1, type_id] 94 | sent_ids = [0, 0] 95 | for ids in new_context_ids_list: 96 | token_ids += ids 97 | sent_ids += ([0] * len(ids)) 98 | 99 | # deal reply tokens 100 | if not is_test: 101 | token_ids += [1] 102 | sent_ids += [1] 103 | token_ids += new_response_ids 104 | sent_ids += ([1] * len(new_response_ids)) 105 | 106 | assert (len(token_ids) == len(sent_ids)) 107 | position_ids = range(len(token_ids)) 108 | 109 | output_list = [] 110 | for l in [token_ids, sent_ids, position_ids]: 111 | output_list.append(' '.join([str(x) for x in l])) 112 | 113 | return output_list 114 | 115 | 116 | -------------------------------------------------------------------------------- /utils/input_args.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import argparse 4 | 5 | 6 | def parse_args(input_arg=None): 7 | parser = argparse.ArgumentParser(__doc__) 8 | parser.add_argument("--do_train", default=1, type=int, help="Whether to train the model.") 9 | parser.add_argument('--train_data_path', type=str, default='./datasets/train.txt', 10 | help='Specify the path to load train data.') 11 | parser.add_argument("--do_eval", default=1, type=int, help="Whether or not do evaluation") 12 | parser.add_argument('--valid_data_path', type=str, default='./datasets/valid.txt', 13 | help='Specify the path to load valid data.') 14 | parser.add_argument("--do_predict", default=1, type=int, help="Whether or not predict") 15 | parser.add_argument('--test_data_path', type=str, default='./datasets/test.txt', 16 | help='Specify the path to load test data.') 17 | parser.add_argument("--model_type", default="uniLM", type=str, 18 | help="Type of pre-trained model, now supported values is [uniLM, ] ") 19 | parser.add_argument('--pretrained_model_path', type=str, default='unified_transformer-12L-cn', 20 | help='The path or shortcut name of the pre-trained model.') 21 | parser.add_argument("--output_dir", type=str, default="output", 22 | help="The output directory where the model predictions and checkpoints will be written.") 23 | # run environment config 24 | parser.add_argument('--seed', type=int, default=2021, help='Random seed for initialization.') 25 | parser.add_argument("--device", type=str, default="gpu", help="Device for selecting for the training.") 26 | 27 | # model config 28 | parser.add_argument('--train_epochs', type=int, default=3, 29 | help='Total number of training epochs to perform.') 30 | parser.add_argument('--batch_size', type=int, default=4, required=True, 31 | help='Batch size per GPU/CPU for training.') 32 | ## model optimization 33 | parser.add_argument('--lr', type=float, default=1e-5, help='The initial learning rate.') 34 | parser.add_argument('--weight_decay', type=float, default=0.01, help='The weight decay for optimizer.') 35 | parser.add_argument('--warmup_steps', type=int, default=4000, help='The number of warmup steps.') 36 | parser.add_argument('--max_grad_norm', type=float, default=0.1, help='The max value of grad norm.') 37 | 38 | # model steps 39 | parser.add_argument('--logging_steps', type=int, default=500, help='Log every X updates steps.') 40 | parser.add_argument('--save_steps', type=int, default=100000, help='Save checkpoint every X updates steps.') 41 | 42 | # model lengths 43 | parser.add_argument('--sort_pool_size', type=int, default=65536, help='The pool size for sort in build batch data.') 44 | parser.add_argument('--min_dec_len', type=int, default=1, help='The minimum sequence length of generation.') 45 | parser.add_argument('--max_dec_len', type=int, default=64, help='The maximum sequence length of generation.') 46 | parser.add_argument('--num_samples', type=int, default=20, help='The decode numbers in generation.') 47 | parser.add_argument('--decode_strategy', type=str, default='sampling', help='The decode strategy in generation.') 48 | parser.add_argument('--top_k', type=int, default=5, 49 | help='The number of highest probability vocabulary tokens to keep for top-k sampling.') 50 | parser.add_argument('--temperature', type=float, default=1.0, 51 | help='The value used to module the next token probabilities.') 52 | parser.add_argument('--top_p', type=float, default=1.0, help='The cumulative probability for top-p sampling.') 53 | parser.add_argument('--num_beams', type=int, default=30, help='The number of beams for beam search.') 54 | parser.add_argument('--length_penalty', type=float, default=1.0, 55 | help='The exponential penalty to the sequence length for beam search.') 56 | parser.add_argument('--early_stopping', type=eval, default=True, 57 | help='Whether to stop the beam search when at least `num_beams`' 58 | ' sentences are finished per batch or not.') 59 | 60 | if input_arg: 61 | args = parser.parse_args(input_arg.split()) 62 | else: 63 | args = parser.parse_args() 64 | return args 65 | 66 | -------------------------------------------------------------------------------- /convert_data_into_idx.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import os 4 | import argparse 5 | 6 | import sentencepiece as spm 7 | 8 | from utils.data_process.to_sample_for_data_source import ToSampleForDataSource as tda 9 | from utils.data_process.convert_id import convert_sample_to_numerical 10 | 11 | 12 | def process_file(data_list): 13 | for [input_list, output_file, sample_num_threshold] in data_list: 14 | truncate_type_stat = {i: 0 for i in range(5)} 15 | with open(output_file, "w") as fout: 16 | for [input_file, handle_method, truncate_first_turn, is_test] in input_list: 17 | train_sample_num = 0 18 | for sample in handle_method(input_file, is_test=is_test): 19 | numerical = \ 20 | convert_sample_to_numerical(sample, is_test=is_test, truncate_type_stat=truncate_type_stat, 21 | truncate_first_turn=truncate_first_turn, sp=sp) 22 | if numerical is not None: 23 | train_sample_num += 1 24 | fout.write(';'.join(numerical) + "\n") 25 | if not is_test and 0 < sample_num_threshold <= train_sample_num: 26 | break 27 | t_sum = sum(truncate_type_stat.values()) 28 | print(f"Total num: {t_sum}") 29 | for i in range(1, 5): 30 | print(f"truncate type {i}, num is {truncate_type_stat[i]}, rate is {truncate_type_stat[i]/t_sum}") 31 | 32 | 33 | if __name__ == "__main__": 34 | parser = argparse.ArgumentParser(description=__doc__) 35 | parser.add_argument("--sp_data_path", default="datasets/spm.model", 36 | type=str, help="Whether to train the model.") 37 | args = parser.parse_args() 38 | 39 | sp = spm.SentencePieceProcessor() 40 | sp.load(args.sp_data_path) 41 | 42 | # change the input and output files to your real files 43 | data_process_list = [ 44 | # [ 45 | # [ 46 | # ["./datasets/Dialog_sample/duconv_sample.txt", tda.to_sample_for_duconv, True, False], 47 | # ], 48 | # "./datasets/output/train_sample.txt", 49 | # 500 50 | # ] 51 | [ 52 | [ 53 | # ["./datasets/Dialog_train/weibo_train.txt", tda.to_sample_for_weibo, False, False], 54 | # ["./datasets/Dialog_train/douban_train.txt", tda.to_sample_for_douban, False, False], 55 | # ["./datasets/Dialog_train/LCCC_train.json", tda.to_sample_for_lccc, False, False], 56 | ["./datasets/Dialog_train/duconv_train.txt", tda.to_sample_for_duconv, True, False], 57 | # ["./datasets/Dialog_train/kdconv_train.txt", tda.to_sample_for_kdconv, True, False], 58 | # ["./datasets/Dialog_train/tencent_train.txt", tda.to_sample_for_tencent, True, False], 59 | ["./datasets/Dialog_train/DuRecDial_train.txt", tda.to_sample_for_durecdial, True, False], 60 | ["./datasets/Dialog_train/Persona_train.json", tda.to_sample_for_persona, True, False], 61 | # ["./datasets/Dialog_train/Emotional_train.txt", tda.to_sample_for_emotional, True, False] 62 | ], 63 | "./datasets/output/train.txt", 64 | 100000, 65 | ], 66 | [ 67 | [ 68 | ["./datasets/Dialog_dev/weibo_dev.txt", tda.to_sample_for_weibo, False, False], 69 | ["./datasets/Dialog_dev/douban_dev.txt", tda.to_sample_for_douban, False, False], 70 | ["./datasets/Dialog_dev/LCCC_dev.json", tda.to_sample_for_lccc, False, False], 71 | ["./datasets/Dialog_dev/duconv_dev.txt", tda.to_sample_for_duconv, True, False], 72 | # ["./datasets/Dialog_dev/kdconv_dev.txt", tda.to_sample_for_kdconv, True, False], 73 | # ["./datasets/Dialog_dev/tencent_dev.txt", tda.to_sample_for_tencent, True, False], 74 | ["./datasets/Dialog_dev/DuRecDial_dev.txt", tda.to_sample_for_durecdial, True, False], 75 | ["./datasets/Dialog_dev/Persona_dev.json", tda.to_sample_for_persona, True, False], 76 | # ["./datasets/Dialog_dev/Emotional_dev.txt", tda.to_sample_for_emotional, True, False] 77 | ], 78 | "./datasets/output/dev.txt", 79 | 10000, 80 | ], 81 | [ 82 | [ 83 | ["./datasets/Dialog_testA/duconv_test.txt", tda.to_sample_for_duconv, True, True], 84 | ["./datasets/Dialog_testA/DuRecDial_test.txt", tda.to_sample_for_durecdial, True, True], 85 | ["./datasets/Dialog_testA/Persona_test.json", tda.to_sample_for_persona, True, True], 86 | ], 87 | "./datasets/output/test1.txt", 88 | 0 89 | ], 90 | [ 91 | [ 92 | ["./datasets/Dialog_testB/duconv_testB.txt", tda.to_sample_for_duconv, True, True], 93 | ["./datasets/Dialog_testB/DuRecDial_testB.txt", tda.to_sample_for_durecdial, True, True], 94 | ["./datasets/Dialog_testB/Persona_testB.json", tda.to_sample_for_persona, True, True], 95 | ], 96 | "./datasets/output/test2.txt", 97 | 0 98 | ], 99 | ] 100 | process_file(data_process_list) 101 | -------------------------------------------------------------------------------- /datasets/Dialog_sample/Emotional_sample.txt: -------------------------------------------------------------------------------- 1 | {"knowledge": [3, 4], "history": "打 什么 电话 , 你 瘾 过 够 没", "response": "你 打 电话 我 不 接 , 你 打 它 有 啥 用 啊 ?"} 2 | {"knowledge": [1, 1], "history": "祝 老爷 生日 快乐", "response": "谢谢 同 是 人 龟 家族 的 麻米 小 朋友"} 3 | {"knowledge": [5, 5], "history": "十 月 十二 咯 。 玩具 展 。 到时 看 你 有空 没 咯", "response": "来 几 天 晚上 也 有空 的 哈 哈哈"} 4 | {"knowledge": [5, 5], "history": "3 你 也 玩 微博 了 ? 哈哈 乐 死 我 了 ! 2", "response": "高兴 九 好 !"} 5 | {"knowledge": [0, 1], "history": "榴莲 糍", "response": "超 好吃 . . ."} 6 | {"knowledge": [0, 5], "history": "是 一 大堆", "response": "哈哈 , 是 呀 那 头 人形 猪 令 我 太 烦躁 了 !"} 7 | {"knowledge": [0, 3], "history": "认识 不同 行业 的 人 ,", "response": "乞丐 都 系 一 份 至高 无 尝 噶 职业 , 你 敢 去 做 咩 。 五 臭 叼"} 8 | {"knowledge": [3, 0], "history": "呵呵 其实 上网 要是 没事 做 的 话 也 是 很 无聊 的", "response": "真的 是 没事 可 做 。"} 9 | {"knowledge": [5, 5], "history": "生 快 哈 , 迟到 的 生日 祝福 !", "response": "谢谢 , 嘿嘿 !"} 10 | {"knowledge": [5, 5], "history": "哈哈 。 还 真的 爆 风雨 啊", "response": "哈哈 , 我们 都 是 重心 不 稳 的 人 吃饭 了 吗 ?"} 11 | {"knowledge": [5, 0], "history": "方 生生 快 , 快点 回来 陪", "response": "割接 中 , 预计 下周 回来"} 12 | {"knowledge": [0, 1], "history": "懂 少女 心理 的 楠 姐 .", "response": "恩 , 我 懂 !"} 13 | {"knowledge": [1, 5], "history": "生意兴隆 啊", "response": "就是 就是 要 好 哈 。 哈哈 。 回来 就 来 照顾 我 生意 哈 。"} 14 | {"knowledge": [0, 0], "history": "这些 女 朋友 干 的 比较 多", "response": "是 的 , 所以 要 向 恋爱 中 的 女生 学习 。"} 15 | {"knowledge": [1, 3], "history": "她 是 美丽 女神 !", "response": "得 潘 爷 如此 厚重 之 言 , 诚惶诚恐 ! 唯 诺诺 而 羞 !"} 16 | {"knowledge": [2, 4], "history": "我 爸 老 问 我 海珠 湖 在 哪 ! 哥 没 答 上 ! 羞愧 !", "response": "我 叫 他 自己 明天 看 采访 车 , 忽悠 他 了 !"} 17 | {"knowledge": [3, 0], "history": "什么 啊", "response": "视频 里 说 的 少 了 两 个 字 领养 的 孩子 ~"} 18 | {"knowledge": [3, 2], "history": "短发 啥 时 ? 这么 爱美 的 你 怎 啥 得", "response": "唉 , 去年 年 前 的 事 啦"} 19 | {"knowledge": [0, 5], "history": "谁 以前 说 不 喜欢 骷髅 的 !", "response": "现在 我 是 重 口味 , 哈哈 。"} 20 | {"knowledge": [3, 0], "history": "发 点 有 食欲 点 的 好 么 !", "response": "闲 几 年糕 汤 , 面 道 交 观 好"} 21 | {"knowledge": [3, 4], "history": "传言 也 是 个人 观点 , 何必 去 纠正 呢 ? !", "response": "谁 去 纠正 了 再说 我 对 我 自己 说 纠正 自己 不行 吗"} 22 | {"knowledge": [0, 1], "history": "明晚 翻 学校 。", "response": "好 的 , 岭南 欢迎 你 ~ !"} 23 | {"knowledge": [4, 3], "history": "什么 情况 ! !", "response": "各种 不 好吃 啊"} 24 | {"knowledge": [1, 1], "history": "加油 加油 ! 受 你 的 鼓舞 我们 明天 要 去 梁 皇宝 忏 了 。 很 期待 。", "response": "谢谢 你们 热情 周到 的 照顾 这次 澳洲 之 行 太 好 了"} 25 | {"knowledge": [1, 1], "history": "我 朋友 的", "response": "很 牛 很 强大 。 。"} 26 | {"knowledge": [4, 5], "history": "在 李刚 家 发呆 被 警察 击毙 了 … 我 招 谁 惹 谁 了", "response": "哈哈 ! 不过 我 愿意 和 你 换 ~ 你 愿意 乜 ?"} 27 | {"knowledge": [5, 3], "history": "别 忘 了 我家 朵朵 的 啊 哈哈 你 会 不会 杀 了 我 我 天天 烦 你", "response": "你 那 580 的 4 张 应该 没 问题 , 位置 也 说 了 , 主要 那 低价 票 比较 少"} 28 | {"knowledge": [1, 2], "history": "你 还有 魄力 竟然 能 听 完 厉害 厉害 不愧 是 诗人", "response": "我 只是 好奇 最后 结果 是 不是 被 门夹 死 了 , 最后 无 悬念 , 确实 被 门夹 死 了"} 29 | {"knowledge": [0, 5], "history": "追 完了 ?", "response": "终于 完 啦 , 哈 哈哈 !"} 30 | {"knowledge": [0, 2], "history": "惠州 这边 下 很 大 雨 , 那边 天气 怎样 啊", "response": "我 回到 家 啦 , 那边 没 怎么 下"} 31 | {"knowledge": [3, 1], "history": "吃 精 着 点 呗 别 胡 吃 牛肉 鱼肉 低 脂肪 的", "response": "哦 哦 , 这样 啊 , 呵呵"} 32 | {"knowledge": [1, 5], "history": "你 终究 还是 忍不住 放 帅哥 照片 啦 哈哈", "response": "哈 哈哈 我 忘 说 还 能 证明 一点 就是 “ 女人 的确 都 是 花痴 ” 我 是 花痴 之 一"} 33 | {"knowledge": [2, 2], "history": "她 哭 了 吗 好 舍 不得", "response": "哭 了 我 愿意 时候 哭 了 好 心疼"} 34 | {"knowledge": [1, 3], "history": "这个 看 上去 真 好吃 , 哪 吃 的", "response": "东 三环 的 盐 色 , 典型 的 不 好吃 又 贵 的 。"} 35 | {"knowledge": [2, 5], "history": "这 也 是 为 你们 女生 着 想 啊 , 可 害 苦 了 我们 !", "response": "哈 哈哈 , 你们 男生 也 吃不起 了"} 36 | {"knowledge": [0, 3], "history": "你 懂 的 。 。 。", "response": "我 姓 董 恶 伐 懂 啥 您 懂 啊 ?"} 37 | {"knowledge": [1, 1], "history": "今天 第 二 首 就 唱 了 这 首 歌 , 很 好听", "response": "哦 侧 那 偶像 没有 看到"} 38 | {"knowledge": [0, 4], "history": "恩 , 这 是 其中 一个 环节 。", "response": "现在 还要 拿 立案 证明 吗 ?"} 39 | {"knowledge": [2, 2], "history": "唐 老师 , 大 过节 的 , 可否 暂时 不 去 理会 这些 沉重 的 事情 ?", "response": "对 很多 人 来说 , 节日 好过 , 日子 难过 。"} 40 | {"knowledge": [0, 1], "history": "抨击", "response": "哦 也 . 没的说 , 姐们 儿 挺 你 ."} 41 | {"knowledge": [5, 5], "history": "我 笑 了 … …", "response": "笑 吧 多 笑 总是 好 的"} 42 | {"knowledge": [4, 4], "history": "你好 鬼 孤寒 阿 居然 要 我 地 一 条 鱼 蛋 5 人 分 。", "response": "粘 好 ! ! 你 死 咯 你 无害 人家 觉觉 误会 我 哈"} 43 | {"knowledge": [0, 1], "history": "还有 一个 美女 是 谁", "response": "和 搭档 过 城市 私家 车 的 佳佳 , 刚烈 女子 , 正义 感 女王 , 你 伤 不 起 啊"} 44 | {"knowledge": [1, 0], "history": "真 行 啊 你", "response": "同事 姐姐 老公 送来 的 , 我 跟着 曾 吃 曾 喝"} 45 | {"knowledge": [2, 3], "history": "唉 , 好好 的 一 枚 帅哥 , 为何 要 走 上 这 条 不 归路 ~", "response": "怎么 会 这样 呢 ? 唔 通 像 商业 总 经理 郭总 看齐 ?"} 46 | {"knowledge": [0, 0], "history": "电话", "response": "有 个 人 在 等待 。"} 47 | {"knowledge": [3, 3], "history": "没 得 吃 啊 , 饿 着 呗 …", "response": "找 别的 吃 啦 ! 别 学 西瓜 和 四 奶 这样 病 到 啊"} 48 | {"knowledge": [1, 1], "history": "有空 一定 去 旁听 每次 听 森 哥 讲 世界 经济 都 有 新 的 收获", "response": "给 我 这么 高 的 评价 呀 !"} 49 | {"knowledge": [2, 2], "history": "真的 吗 ? 不 舍得 阿", "response": "真的 ! 我 也 觉得 好 不 舍得 !"} 50 | {"knowledge": [0, 0], "history": "我 认得 你 在 说 哪个 男人 !", "response": "一 天 就 只 知道 乱说 。"} 51 | {"knowledge": [3, 5], "history": "筛 盅 啊 伐 要 用 了 先进 满 先进 额 !", "response": "哈哈 ! 。 亲爱 的 我 想 你 了 !"} 52 | {"knowledge": [0, 0], "history": "二锅头 三百 毫升 , 随时 服 下 , 马 上 实现 !", "response": "31 集 , 加 戏 !"} 53 | {"knowledge": [4, 3], "history": "反正 我 也 信 了 。 这 句 话 好 讥讽 啊 ! 哈哈", "response": "不是 讥讽 , 而是 自信 。 别 误解"} 54 | {"knowledge": [2, 2], "history": "我 都 热 醒 了 !", "response": "我 一宿 还 没 睡 呢 , 还 那么 有 精力 呀 ~ 我 的 天呀 。"} 55 | {"knowledge": [1, 5], "history": "同感 , 真 败兴 。 还是 让 韩 老师 来 吧 。", "response": "听 大 嘴 韩 的 解说 可以 醒 瞌睡 , 嘻嘻 ~"} 56 | {"knowledge": [0, 0], "history": "是 呀 , 咱们 也 去 小街 吧", "response": "可以 加 一 场 , 周三 或者 周四 晚上"} 57 | {"knowledge": [5, 5], "history": "下班 回到 家 啦 ?", "response": "恩 , 回来 咯 , 准备 去 洗澡 了 哦 , 好 累 哦"} 58 | {"knowledge": [5, 2], "history": "那 又 好 啦 ?", "response": "唉 一言难尽 啊 . . ."} 59 | {"knowledge": [4, 1], "history": "不 告诉 你 你 你 ! ! !", "response": "真的 要 离开 了 吧 ? 30 又 少 了 个 人 了 , 要 加油 啊 番薯 恩 !"} 60 | {"knowledge": [0, 1], "history": "嗯 、 不过 是 大学 ,", "response": "年轻 就是 好 啊"} 61 | {"knowledge": [3, 3], "history": "请问 啥 机器 ? 酸奶 机能 做 纳豆 ?", "response": "就 那个 红 元帅 的 , 酸奶 机 一般 做不了 纳豆 , 可能 发酵 温度 不够 , 拉 不 出来 丝"} 62 | {"knowledge": [0, 0], "history": "曹 掌门", "response": "你 每天 晚上 数 一 数 就 知道 了"} 63 | {"knowledge": [0, 3], "history": "北海 对面 的 烤 鸡翅 不 不错 , 不过 人 太多 总是 排队 比较 烦人", "response": "你们 对 美食 可 真 敏感 啊 !"} 64 | {"knowledge": [0, 0], "history": "夜里 安静 , 不 被 打扰 。", "response": "可以 静静 的 思考 , 写出 人间 的 不平 !"} 65 | {"knowledge": [3, 3], "history": "说 真话 是 做人 的 起码 准则 , 难道 讲 真话 也 是 奢侈 吗 ?", "response": "不是 说 真话 不 对 , 而是 肯 有 可能 在 避重就轻 。 而且 在 掩盖 什么 东西 ?"} 66 | {"knowledge": [1, 3], "history": "你 喜欢 看 步步 惊心 啊 ?", "response": "不 , 我 觉得 电视 机 拍 的 挺 一般 的 。 随便 看看 而已"} 67 | {"knowledge": [3, 3], "history": "应该 老 百姓 每个 人 轮流 当 首相 , 社会 就 更 稳定 了", "response": "中国 就 乱 了 , 让 中国 人 有 那么 多 民主 还 真 不会 用"} 68 | {"knowledge": [1, 1], "history": "如果 你 能 带 她 去 很多 地方 , 我 会 很 乐意 的 , 想必 小 闹钟 也 会 很 开心 的", "response": "这 是 真的 爱 一样 东西 啊 !"} 69 | {"knowledge": [3, 3], "history": "这样 的 一级 作家 , 不 知道 怎么 混 来 的 . 忘 八 耻 的 典型 代表 .", "response": "这样 的 痞子 , 还是 体制 内 的 研究 员 ?"} 70 | {"knowledge": [3, 5], "history": "我 宿舍 都 饮 起码 你 唔 住宿", "response": "哈哈 。 你 喝 的 菌 比 我 多"} 71 | {"knowledge": [3, 4], "history": "那 不是 你 的 脚 啦 , 是 的 , 你 眼花 啦 兔子", "response": "我 一时 快手 打 错 , 对不起 了 . 我 乱 认 你 了"} 72 | {"knowledge": [4, 3], "history": "我们 去 办 健身 卡 ? ?", "response": "不 办 卡 , 浪费 钱 , 想 别的"} 73 | {"knowledge": [0, 0], "history": "好吃 吗 ? 下次 我 去 帮 称 下 !", "response": "吃 过 才 知道 哦"} 74 | {"knowledge": [0, 0], "history": "你 懂 的 我 也 一样", "response": "懂得 懂得 思 密 达"} 75 | {"knowledge": [1, 5], "history": "下次 把 后面 的 电脑 屏幕 关掉 比较 好 , 要不 煞 风景 啊 煞 风景 ~", "response": "哈 哈哈 是 哈 下次 注意"} 76 | {"knowledge": [5, 3], "history": "哈哈 , 你 反正 就是 比 , 有 木 有 !", "response": "你 再 嘴硬 也 改变 不 了 你 是 比 的 客观 事实 。"} 77 | {"knowledge": [5, 4], "history": "我 车 你 就 有 咯 , 哈 !", "response": "就 系 叫 你 车 我 哇 , 死 变态 佬"} 78 | {"knowledge": [1, 1], "history": "那 买 包 七 个 小 矮人 , 颜色 又 多 味道 又 多", "response": "没 更 童真 得 咩 ~ 但是 我 喜欢 !"} 79 | {"knowledge": [1, 1], "history": "亲 , 你 是 人气 美食 吗", "response": "亲 , 是 的 哦 ~ 订阅 本 微薄 可 包 邮 哦 ~"} 80 | {"knowledge": [5, 5], "history": "哈哈 , 知道 啦 , 你 都 是 啊 。", "response": "哈哈 , 我 会"} 81 | {"knowledge": [2, 2], "history": "没有 门票 怎么 去 ! 哭 阿 !", "response": "可怜 的 妹 纸 . . ."} 82 | {"knowledge": [1, 0], "history": "睡姿 不 对 , 仰卧 会 好 点", "response": "就是 仰卧 , 是 传说 中 的 鬼压身 那种"} 83 | {"knowledge": [3, 1], "history": "你 这 评论 已经 很 打击 我 去 影院 看 的 兴趣 了", "response": "还 行 啦 , 看 个 热闹 。 还是 有人 对 它 评价 不错 的 ~"} 84 | {"knowledge": [3, 0], "history": "毕竟 你们 能 用 的 空域 有限 , 理解 !", "response": "空域 只是 其中 一个 因素 , 其实 最 重要 的 是 飞行 和 管制 之间 的 相互 信任"} 85 | {"knowledge": [0, 2], "history": "来 。 走 一个 ~", "response": "小 蜗 可 不会 喝 白 的 ~ 会 不会 很 丢人 呀 ?"} 86 | {"knowledge": [0, 3], "history": "孟 老师 没空 理 你 的 。 。 。", "response": "你 怎么 就 知道 , 哼 , 你 跟 他 又 不 熟"} 87 | {"knowledge": [4, 5], "history": "不要 喷饭 啊 !", "response": "笑 死 我 咯 !"} 88 | {"knowledge": [3, 0], "history": "难怪 人家 称 你 为 杜 师爷 呢 , 哈哈", "response": "唐 老师 认为 有 道理 ? 哈哈"} 89 | {"knowledge": [5, 0], "history": "了解 了 = = 斯 内裤 大 老板 同学 哈哈 。", "response": "正 解 ! 话 说 小 日本 的 发音 就是 如此 神奇"} 90 | {"knowledge": [1, 5], "history": "真的 很 像 呢 !", "response": "要 不要 我 带 个 回 南京 实物 鉴定 哈 呀 , 哈哈 … …"} 91 | {"knowledge": [4, 0], "history": "肿 么 了 肿 么 了 这 是 ! ! !", "response": "那 记者 眼神 有 问题 。"} 92 | {"knowledge": [2, 2], "history": "们 卡 上 还有 几百 块 怎么 办 呢 ?", "response": "哎 ! 忙 再说 !"} 93 | {"knowledge": [2, 2], "history": "你 的 11 路 比 跑车 还 快 啊 … ! 哈哈", "response": "哎 ! 惭愧 惭愧 !"} 94 | {"knowledge": [0, 0], "history": "昨天 就 知道 了 , 完全 是 向着 一 场 政治 秀 前进 !", "response": "说明 你 我 兄弟 之前 的 判断 , 奇 准 。"} 95 | {"knowledge": [4, 5], "history": "打 了 一 分钟 挂 了 , 诅咒 他 老婆 坏 掉 ! !", "response": "哈哈 ! 活该 !"} 96 | {"knowledge": [5, 5], "history": "小 日子 够 惬意 的 呀", "response": "哈哈 , 其实 前 两 天 那个 芝麻 糖 土豆 泥 最好 吃 , 哪 天 你 来 我家 让 他 给 咱 做"} 97 | {"knowledge": [0, 5], "history": "把 耳朵 眼睛 鼻子 一起 关 起", "response": "哈哈 就是 关 起"} 98 | {"knowledge": [0, 0], "history": "系 就 即刻 跳 海 死 左 距 罗 !", "response": "你 通知 红 姐 星期 二 赏脸 去 食 饭"} 99 | {"knowledge": [5, 5], "history": "果然 无敌 啦 你", "response": "哈哈 你 现在 才 知道 呀 ? !"} 100 | {"knowledge": [1, 1], "history": "三 岁 的 娃娃 来 按 门铃 , 肯定 灰 常 可爱 ! 哈哈 ~", "response": "是 啊 ! 超 可爱 的 小 正太 ! 看到 所有 狗 狗 都 叫 猪肝 。"} 101 | -------------------------------------------------------------------------------- /datasets/Dialog_sample/LCCC_sample.txt: -------------------------------------------------------------------------------- 1 | {"conversation": ["晚上 泡个 热水 脚 , 喝杯 纯牛奶 会 好点 。 不泡 脚 , 喝牛奶 才 是 重点 。 我 也 随时 睡不着 , 就 喝牛奶 就 好些", "今晚 试试 喃 ~ 脑壳 晕 的 很"], "goal": [], "knowledge": []} 2 | {"conversation": ["注定 看不到 今天 的 夕阳 了", "你 在 哪"], "goal": [], "knowledge": []} 3 | {"conversation": ["我 已经 死 了", "我 没 穿 呢 。"], "goal": [], "knowledge": []} 4 | {"conversation": ["快 来看 桃花 , 我 等 着 你", "看 了 都 没得 桃花运"], "goal": [], "knowledge": []} 5 | {"conversation": ["你 陪 我 一起 脱", "我要 读书 !", "装 什么 学霸 - -"], "goal": [], "knowledge": []} 6 | {"conversation": ["钱包 是不是 一 紧 ! !", "不要 说 出来"], "goal": [], "knowledge": []} 7 | {"conversation": ["生快 哈", "嘿嘿 谢 啦 ~"], "goal": [], "knowledge": []} 8 | {"conversation": ["我 就是 背 了 一个 胖子 的 名 , 中看 不中用", "好 事情 , 你 摸 悲观 嘛", "恩 , 必须 是 好 事情 , 否则 我 肯定 要 疯"], "goal": [], "knowledge": []} 9 | {"conversation": ["下 星期五 来 我们 家", "吃晚饭 下十 五子棋"], "goal": [], "knowledge": []} 10 | {"conversation": ["想起 女票 说 她们 学校 看见 有人 中午 在 车上 放 了 一瓶 水 , 刚好 车停 在 水 房门口 , 然后 就 有 同学 把 暖壶 放上去 了 … 下午 的 时候 车上 已经 五六个 暖壶 了", "哈哈哈 呵呵 呵"], "goal": [], "knowledge": []} 11 | {"conversation": ["我们 00 后 比 90 后 有 爱心 , 是 有 希望 的 一代 , 不是 垮掉 的 一代 。", "90 后 咋 滴 你 了"], "goal": [], "knowledge": []} 12 | {"conversation": ["你 个 脑比人 打 了 一枪 ?", "在 我 心上 用力 地开 一枪 , 让 一切 归零 在 这声 巨响"], "goal": [], "knowledge": []} 13 | {"conversation": ["你 竟然 可以 一年 只 喝 两次 奶茶 ! ! !", "我 太懒 了"], "goal": [], "knowledge": []} 14 | {"conversation": ["低帮 有 吗 蹲 低 帮", "杨 总", "哈哈哈哈 巧 啦"], "goal": [], "knowledge": []} 15 | {"conversation": ["我 觉得 在 南方 的 冬天 才 是 一个 星期 洗 一次 澡", "是 的 是 的 , 北方 孩子 到 南方 冬天 拒绝 洗澡 瓦", "是 的 , 我 在 南方 上学 恨不得 一个 冬天 不 洗澡"], "goal": [], "knowledge": []} 16 | {"conversation": ["宝贝 , 现在 怎么 都 不 更新 啦", "这 不 今儿 刚 更 了 么"], "goal": [], "knowledge": []} 17 | {"conversation": ["你 这个 原色 咋 又 回来 了", "掉色 掉 的 了 , 我 也 很 无奈"], "goal": [], "knowledge": []} 18 | {"conversation": ["小 壁虎 很狂 到处 乱窜 怎么办 的 八卦", "我 都 把 牠 赶到 比较 高 的 地方 以防 没 注意 去 伤 到 牠"], "goal": [], "knowledge": []} 19 | {"conversation": ["我们 局长 想 逮捕 你", "我 说服 他 遣送 你 回国"], "goal": [], "knowledge": []} 20 | {"conversation": ["原来 二哥 你 喜好 后门 啊 。 。 。", "人生 是 有 捷径 的"], "goal": [], "knowledge": []} 21 | {"conversation": ["脑子 是 个 好 东西 可惜 是 颗 植物", "别 侮辱 植物"], "goal": [], "knowledge": []} 22 | {"conversation": ["毛 都 没得 , 好丑", "你 有 毛 , 你 好看 惨 了"], "goal": [], "knowledge": []} 23 | {"conversation": ["今太热 了", "热 的 不想 出门", "我 都 晒 太 黑 了", "我 是 宋 小宝 同款"], "goal": [], "knowledge": []} 24 | {"conversation": ["之前 他 和 黄小 琥来 成都 有 一个 公益 歌友会 我 还有 去 看 你 是 我 的 眼 我 唱 最 大声 还 被 他 点名 他 笑 说 刚刚 谁 唱 最 大声 哈哈哈 哈哈哈", "他 好像 也 是 主打 台语歌 是不是", "嗯 他 台语歌 比较 多", "还有 一首 就是 末班车"], "goal": [], "knowledge": []} 25 | {"conversation": ["我 觉得 你 很 用心 我 很 喜欢 你 的 妆容", "那 我 就 只 给 你 看 哈哈哈"], "goal": [], "knowledge": []} 26 | {"conversation": ["再见 啊 大黑", "小心 我 给 你 泼 泥水 。"], "goal": [], "knowledge": []} 27 | {"conversation": ["短发 像 个 男 的 ? 帅 吧", "不男不女 的"], "goal": [], "knowledge": []} 28 | {"conversation": ["大渣 男 心疼 苏 蓉蓉 想 和 苏 蓉蓉 百合 毕竟 一起 喝 了 七盏 茶 呢", "辣鸡 楚留香", "我 之前 还 送 过 他 礼物 心疼 我 自己", "我 也 送 了 !"], "goal": [], "knowledge": []} 29 | {"conversation": ["晚安", "你 的 世界 是 颠倒 的 吗 ? 半夜 才 出现 ?"], "goal": [], "knowledge": []} 30 | {"conversation": ["回来 了 不 吭气 噢", "当天 就 走 了 就 吃 了 午饭"], "goal": [], "knowledge": []} 31 | {"conversation": ["早安 哦", "没劲"], "goal": [], "knowledge": []} 32 | {"conversation": ["打乒乓球 呢", "基本上 是 废 了 发现 一个 新 的 甜品店 , 你 回来 立马 联系 我", "好 嘞 话 说 我 昨晚 上 还 梦 到 咱们 一起 相约 去 甜品店 呢"], "goal": [], "knowledge": []} 33 | {"conversation": ["大润发 满 38 加 10 兑换 的 公仔", "送 我 了", "给 你 给 你 , 辣 眼睛 , 我 不要", "明天 给 我"], "goal": [], "knowledge": []} 34 | {"conversation": ["下车", "车速 太快 下 不了", "开 下去"], "goal": [], "knowledge": []} 35 | {"conversation": ["我要 跟 你 谈谈", "好 啊"], "goal": [], "knowledge": []} 36 | {"conversation": ["如果 把 这个 相亲 女 换成 一个 清秀 小哥 , 不知 他 还 会 不会 这么 回复", "哪来 的 如果"], "goal": [], "knowledge": []} 37 | {"conversation": ["你 肥来 啦 红鞋子 同款 ! 我 是 黑 的", "我 也 有 黑 的 ~"], "goal": [], "knowledge": []} 38 | {"conversation": ["你 好像 发福 了", "人到中年", "你 干嘛 还 不 睡"], "goal": [], "knowledge": []} 39 | {"conversation": ["想 吃 ! 有 酒 吗 !", "当然 有 酒 撒"], "goal": [], "knowledge": []} 40 | {"conversation": ["那个 船 咋 翻 了 呐", "它 一个 想不通"], "goal": [], "knowledge": []} 41 | {"conversation": ["四级 考 不过 , 安慰 下 自己", "不要 沮丧 啊 。 。 。 四级 不要 你 我要 你"], "goal": [], "knowledge": []} 42 | {"conversation": ["她 越 得意 她 的 男朋友 糊 的 越 快", "真相 了"], "goal": [], "knowledge": []} 43 | {"conversation": ["什么 食堂 还 能 预定 鸡蛋 呢", "我 实在 是 不想 排队 了"], "goal": [], "knowledge": []} 44 | {"conversation": ["坐等", "躺 送 你", "嘛 ?", "送上 热门", "不用 不用", "都 不用 你 回复 都 能 上去", "你们 聊", "我们 聊 , 你 下 了 吧", "得 嘞"], "goal": [], "knowledge": []} 45 | {"conversation": ["我要 在 你 锁骨 那里 游泳", "顺便 养个 鱼 ?"], "goal": [], "knowledge": []} 46 | {"conversation": ["看来 北京 应该 对 外来人口 有所 限制 了 , 否则 人满为患 。", "我 总 觉得 有 的 地方 好 可怕 , 住 了 那么 多人 , 如果 大家 都 下楼 , 会 不会 没有 地方 站 ! ?", "会 哦 !"], "goal": [], "knowledge": []} 47 | {"conversation": ["我 整个 寒假 都 有事 好气 啊", "说 的 我 好像 没事 一样", "你 要 相亲 么"], "goal": [], "knowledge": []} 48 | {"conversation": ["昨晚 喝醉 了", "哈哈 看 吧 你 就 不 应该 让 我 猜 的", "那 你 别 猜 了", "那 你 告诉 我 啊", "咳咳", "我 总是 直击 事件 真相", "你 觉得 有", "酒量 可以 继续 开发"], "goal": [], "knowledge": []} 49 | {"conversation": ["感觉 今年 好多 紫色 卫衣 的 身影", "因为 显白 又 好看"], "goal": [], "knowledge": []} 50 | {"conversation": ["口红 好看", "难道 不 夸 我 皂片 好看 ? ?", "人 好看 快 夸 我", "爱 你 一万年"], "goal": [], "knowledge": []} 51 | {"conversation": ["晚安", "晚安 , 睡 吧"], "goal": [], "knowledge": []} 52 | {"conversation": ["屏幕 指纹 一点 都 不灵", "重新 录入"], "goal": [], "knowledge": []} 53 | {"conversation": ["第一次", "太 诡异 了", "为啥"], "goal": [], "knowledge": []} 54 | {"conversation": ["你 是 哪儿 的 ?", "没 标记 位置 吗"], "goal": [], "knowledge": []} 55 | {"conversation": ["缓 过来 了 么", "昨晚 我们 在 做 游戏 , 下次 把 你 带上", "不带 不是 人"], "goal": [], "knowledge": []} 56 | {"conversation": ["水果 我 都 还 没吃过 !", "感觉 还是 经典 的 最 好吃 之前 蛋挞 出果 馅儿 的 就 觉得 不 好吃"], "goal": [], "knowledge": []} 57 | {"conversation": ["不 值得 花钱 去 看 我 不 知道 为啥 有人 会 哭 我 反正 没 感触", "只 看 了 书 和 电视剧 觉得 还好", "嗯 呢"], "goal": [], "knowledge": []} 58 | {"conversation": ["还 处于 青春期", "是 的 … … … . 我 表示 压力 很大"], "goal": [], "knowledge": []} 59 | {"conversation": ["文艺 少女", "嗯 呐 ~"], "goal": [], "knowledge": []} 60 | {"conversation": ["生日快乐", "我 又 小 一岁", "该 上 幼儿园 了 吧"], "goal": [], "knowledge": []} 61 | {"conversation": ["有 难度 … … 我 天天 想着 挑战 一个月 不 喝咖啡 , 可是 今天 已经 是 连续 喝咖啡 第 30 天 了 … …", "喝咖啡 还 可以 提神 喝 奶茶 除了 长胖 一无是处", "加油"], "goal": [], "knowledge": []} 62 | {"conversation": ["自恋", "咋 了 ? 我 啥 都 没 做"], "goal": [], "knowledge": []} 63 | {"conversation": ["宝贝 晚上 好", "晚上 好"], "goal": [], "knowledge": []} 64 | {"conversation": ["防晒 那个 没看 懂 …", "因 该是 表示 涂 了 一层 黑色 的 膜 在 脸上 起到 防晒 作用"], "goal": [], "knowledge": []} 65 | {"conversation": ["遇到 你 这样 的 好 教员 好 老师 真是 福气", "您 过奖"], "goal": [], "knowledge": []} 66 | {"conversation": ["呵呵 ~ 你 还 在 备战 高考 好 吗 ~ 快回 高中 去 !", "我 就是 在 宿舍 复习 语文 中 , 没 看到 我 使用 了 正在 背 的 古诗文 嘛", "背错 了 好 吗 ~ ~ ~", "我 知道 是 月 , 但是 我们 才 几天 没 出 太阳 , 用 月 不 合适"], "goal": [], "knowledge": []} 67 | {"conversation": ["老师 不回 多 正常 呀 , 那么 多 学生 。 我 记得 你 中会 过 了 呀", "过 是 过 了 啊 , 主要 周 老师 对 我 很 照顾 。 。 你 懂 的 !", "照顾 ? 我 真心 不 懂 。 。 。"], "goal": [], "knowledge": []} 68 | {"conversation": ["为什么 我 不能 嫁给 薛之谦 ! ! ! !", "你 前面 有 我"], "goal": [], "knowledge": []} 69 | {"conversation": ["谁 能 告诉 我 是 什么 时候 ! ! ! !", "拿 糖 来 换", "没有"], "goal": [], "knowledge": []} 70 | {"conversation": ["超级 重 的 … … 第一次 觉得 8 寸 的 噶重", "那 我 买 个 小 的"], "goal": [], "knowledge": []} 71 | {"conversation": ["用钝 刀子 慢慢 割 , 还 不许 上 麻药 !", "我刚 要说"], "goal": [], "knowledge": []} 72 | {"conversation": ["好 想来 云南 我要 做客", "双手 双脚 欢迎"], "goal": [], "knowledge": []} 73 | {"conversation": ["分手 我 也 要 照相", "来来来 你 上来", "我 头发 没干"], "goal": [], "knowledge": []} 74 | {"conversation": ["摸摸 不 难过 了", "基友 么 小兄弟 3", "你 猜"], "goal": [], "knowledge": []} 75 | {"conversation": ["狗子 , 几日 不见 , 你 成网 红 了", "厉害 了 吧"], "goal": [], "knowledge": []} 76 | {"conversation": ["治安 好 不 ?", "好 啊 , 博物馆 里面", "原来 在 里面 , 怪不得 环境 这么 美 ~"], "goal": [], "knowledge": []} 77 | {"conversation": ["。 。 。 亲 。 。 。 你 难道 看不出 我 已 迷恋 到 无法自拔 了 么 。 。 。", "哈哈哈哈 , 这个 可以 有 , 没有 最深 只有 更深 ! !"], "goal": [], "knowledge": []} 78 | {"conversation": ["在 单位 呢 我 可是 要 上班 的 人 。", "为啥 那么 晚 还要 上班"], "goal": [], "knowledge": []} 79 | {"conversation": ["演 的 确实 好 但 你 不 觉得 加戏 过 了 吗 女 三成 了 女 一 还有 通稿 各种 艳压 本来 对 她 挺 有 好感 的 导致 现在 男女 主和片 方说 拜拜 了", "有 什么 谣言 你 还 就 信 什么 谣言 阿 呵呵 女三 戏份 比女 一多 ? 歪曲事实 666", "你 才 是 个 没 主见 的 人 至少 我 是 看过 剧 客观 评价 的 你 呢 说话 过于 偏激 了 吧"], "goal": [], "knowledge": []} 80 | {"conversation": ["哈哈 , 我们 原来 是 学术 帝 阿 , 我 记性 超差 的 。 。 。 。", "哈哈 你 是 天才 小 才女"], "goal": [], "knowledge": []} 81 | {"conversation": ["我 记得 你 之前 在 上海 啊 , 回 武汉 发展 了 ?", "回家 了 , 然后 现在 去 上海 。"], "goal": [], "knowledge": []} 82 | {"conversation": ["床 看着 不错", "看 重点 !"], "goal": [], "knowledge": []} 83 | {"conversation": ["喝醉 了", "并 没有 哈"], "goal": [], "knowledge": []} 84 | {"conversation": ["辽宁 舰 航行 一次 要 烧 多少 汽油 你 知道 吗 ? 坐 一次 比 飞机 还贵 !", "你 是 老实人 啊 她 的 意思 是 航母 打 过去"], "goal": [], "knowledge": []} 85 | {"conversation": ["要 叫 妈妈", "妈妈"], "goal": [], "knowledge": []} 86 | {"conversation": ["刚 毕业 就 结婚 了 , 真不错", "额 , 没 结婚 只是 拍 着 玩 的", "好 吧 , 下次 活动 聚", "嗯 , 好 的"], "goal": [], "knowledge": []} 87 | {"conversation": ["望 鹿哥 健健康康 , 开开心心", "嗯 , 愿 他 一生 平安 喜乐"], "goal": [], "knowledge": []} 88 | {"conversation": ["这 女人 为了 火 , 真 卖命 !", "我 给 她 p 的", "你 就是 幕后 推手 !"], "goal": [], "knowledge": []} 89 | {"conversation": ["抱佛脚", "嗯 呐"], "goal": [], "knowledge": []} 90 | {"conversation": ["愚人节 没有 朋友 可以 戏弄 怎么办", "对 着 镜子 戏弄 自己 啊"], "goal": [], "knowledge": []} 91 | {"conversation": ["这个 学校 , 真的 值得 向往 嘛 ?", "学校 宿舍 很 好"], "goal": [], "knowledge": []} 92 | {"conversation": ["为什么 还要 挨骂 呀 ? 今天 不是 被 骂 过 了 吗 ?", "今天 我 不是 下班 了 都 没 啥 我 就 走 了 嘛 , 以为 没事 , 结果 刚到 家 电话 就 来 了 , 给 我 说 了 一顿 , 然后 说 明天 上班 再说 … …", "天 哪 ! 那 你 就 放平 心态 , 别 听到 脑子里 , 反正 也 没 办法 反抗", "是 呢 , 我 已经 决定 睡 了 。 不然 我 可能 会 秃 晚安", "哈哈哈 哈哈哈 好 的 , 晚安 !"], "goal": [], "knowledge": []} 93 | {"conversation": ["为什么 没有 时间 ! 你 个 坏人 !", "哈哈 人家 不是 怕 你 累 嘛", "你 懂 太 多 了 阔 怕"], "goal": [], "knowledge": []} 94 | {"conversation": ["欢迎", "晚饭 烧 起来 老子 去 你家", "老子 今晚 不 回家"], "goal": [], "knowledge": []} 95 | {"conversation": ["你 又 换 名字 啦", "对 啊 , 以后 改名 先 跟 你 申请 啊"], "goal": [], "knowledge": []} 96 | {"conversation": ["十一 回家 给 我秀 一下 哦 ! 我 把 头发 给 染黑 了 ~ ~ ~", "哎麻 ' 我 都 好几个 月 没整 头发 了 ' 嘎嘎"], "goal": [], "knowledge": []} 97 | {"conversation": ["我 特意 把 你 的 照片 翻 粗 来看 了 一眼 , 在 哪里 ? !", "哈哈哈 , 你 太 勤勉 了 … … 那 时候 堵 啦 , 但是 堵 的 东西 掉 了 , 于是 大 牙缝 再震 江湖 ~", "哈哈哈 , 是 大 门牙 中间 的 缝儿 么 ?", "可不 ~ 不忍 直视 啊", "哦 , 那 喝茶 隔 不了 茶渣 了 … … 我 也 想整 , 但是 我 的 牙医 不让 我整 … … 不开森 … …"], "goal": [], "knowledge": []} 98 | {"conversation": ["和 你 坐 着 喝 喝酒", "不会 啊", "我 也 不会 瞎 喝 呗"], "goal": [], "knowledge": []} 99 | {"conversation": ["真 羡慕 能 到处 旅游 的 人", "胖死 了 出去 一圈"], "goal": [], "knowledge": []} 100 | {"conversation": ["同乐 同乐 〜 〜 〜", "嗯 嗯 这个 周末 可以 嗨 一下 了 哈哈"], "goal": [], "knowledge": []} 101 | -------------------------------------------------------------------------------- /run_dialogue.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import os 4 | import random 5 | import time 6 | import math 7 | import logging 8 | 9 | import numpy as np 10 | import paddle 11 | 12 | import paddle.nn as nn 13 | import paddle.nn.functional as F 14 | from paddle.io import DataLoader 15 | from paddle.optimizer.lr import NoamDecay 16 | from paddle.optimizer import AdamW 17 | 18 | from paddlenlp.transformers import UnifiedTransformerLMHeadModel, UnifiedTransformerTokenizer 19 | 20 | from utils.input_args import parse_args 21 | from utils.data_helper import DialogueDataset, select_response 22 | 23 | logging.basicConfig(format='%(asctime)s - %(levelname)s: %(message)s', level=logging.INFO) 24 | 25 | 26 | class ModelOperation(object): 27 | """ModelTrain""" 28 | 29 | def __init__(self): 30 | self.cur_process_num = paddle.distributed.get_world_size() # PADDLE_TRAINERS_NUM 的值,默认值为1 31 | self.cur_process_rank = paddle.distributed.get_rank() # PADDLE_TRAINER_ID 的值,默认值为0 32 | self.model_class = { 33 | "uniLM": (UnifiedTransformerLMHeadModel, UnifiedTransformerTokenizer), 34 | } 35 | self.data_helper = None 36 | 37 | def _initialize_run_env(self, device, seed): 38 | assert device in ("cpu", "gpu", "xpu"), \ 39 | f"param device({device}) must be in ('cpu', 'gpu', 'xpu')!!!" 40 | paddle.set_device(device) 41 | if self.cur_process_num > 1: 42 | paddle.distributed.init_parallel_env() 43 | if seed: 44 | self.set_seed(seed) 45 | 46 | def _initialize_model(self, model_type, pretrained_model_path): 47 | assert os.path.exists(pretrained_model_path), \ 48 | f"model path {pretrained_model_path} must exists!!!" 49 | logging.info(f"initialize model from {pretrained_model_path}") 50 | 51 | model_class, tokenizer_class = self.model_class[model_type] 52 | self.tokenizer = tokenizer_class.from_pretrained(pretrained_model_path) 53 | self.model = model_class.from_pretrained(pretrained_model_path) 54 | 55 | if self.cur_process_num > 1: 56 | self.model = paddle.DataParallel(self.model) 57 | 58 | def _initialize_optimizer(self, args): 59 | self.lr_scheduler = NoamDecay(1 / (args.warmup_steps * (args.lr ** 2)), 60 | args.warmup_steps) 61 | # Generate parameter names needed to perform weight decay. 62 | # All bias and LayerNorm parameters are excluded. 63 | decay_params = [ 64 | p.name for n, p in self.model.named_parameters() 65 | if not any(nd in n for nd in ["bias", "norm"]) 66 | ] 67 | self.optimizer = AdamW( 68 | learning_rate=self.lr_scheduler, 69 | parameters=self.model.parameters(), 70 | weight_decay=args.weight_decay, 71 | apply_decay_param_fun=lambda x: x in decay_params, 72 | grad_clip=nn.ClipGradByGlobalNorm(args.max_grad_norm)) 73 | 74 | def _start_train(self, args): 75 | # load train data loader 76 | train_dataset = DialogueDataset( 77 | args.train_data_path, 78 | args.batch_size, 79 | self.tokenizer.pad_token_id, 80 | self.tokenizer.cls_token_id, 81 | args.sort_pool_size, 82 | args.seed, 83 | mode='train') 84 | train_data_loader = DataLoader(train_dataset, return_list=True, batch_size=None) 85 | # initialize optimizer 86 | self._initialize_optimizer(args) 87 | global_step = 0 88 | tic_train = time.time() 89 | for epoch in range(args.train_epochs): 90 | for batch in train_data_loader: 91 | # logging.info(f"Epoch: {epoch+1}/{args.train_epochs}, step is {step}") 92 | global_step += 1 93 | token_ids, type_ids, pos_ids, generation_mask, tgt_label, tgt_pos = batch 94 | 95 | logits = self.model(token_ids, type_ids, pos_ids, generation_mask, tgt_pos) 96 | loss = F.cross_entropy(logits, tgt_label) 97 | 98 | if global_step % args.logging_steps == 0: 99 | logging.info(f"global step {global_step}, epoch: {epoch+1}/{args.train_epochs}," 100 | f" loss: {loss}, speed: {args.logging_steps / (time.time() - tic_train):.2f} step/s") 101 | tic_train = time.time() 102 | loss.backward() 103 | self.optimizer.step() 104 | self.lr_scheduler.step() 105 | self.optimizer.clear_gradients() 106 | 107 | if self.cur_process_rank == 0: 108 | output_dir = \ 109 | os.path.join(args.output_dir, "model_{}".format(global_step)) 110 | if not os.path.exists(output_dir): 111 | os.makedirs(output_dir) 112 | # need better way to get inner model of DataParallel 113 | model_to_save = \ 114 | self.model._layers if isinstance(self.model, paddle.DataParallel) else self.model 115 | model_to_save.save_pretrained(output_dir) 116 | self.tokenizer.save_pretrained(output_dir) 117 | print('Saving checkpoint to:', output_dir) 118 | 119 | @paddle.no_grad() 120 | def evaluation(self, args): 121 | self.model.eval() 122 | valid_dataset = DialogueDataset( 123 | args.valid_data_path, 124 | args.batch_size, 125 | self.tokenizer.pad_token_id, 126 | self.tokenizer.cls_token_id, 127 | args.sort_pool_size, 128 | args.seed, 129 | mode='valid') 130 | valid_data_loader = DataLoader(valid_dataset, return_list=True, batch_size=None) 131 | total_tokens = 0 132 | total_loss = 0.0 133 | start_time = time.time() 134 | step = 0 135 | for inputs in valid_data_loader: 136 | step += 1 137 | token_ids, type_ids, pos_ids, generation_mask, tgt_label, tgt_pos = inputs 138 | 139 | logits = self.model(token_ids, type_ids, pos_ids, generation_mask, tgt_pos) 140 | loss = F.cross_entropy(logits, tgt_label, reduction='sum') 141 | 142 | total_loss += loss.numpy()[0] 143 | total_tokens += tgt_label.shape[0] 144 | 145 | avg_loss = total_loss / total_tokens 146 | ppl = math.exp(avg_loss) 147 | avg_speed = (time.time() - start_time) / step 148 | logging.info('loss: %.4f - ppl: %.4f - %.3fs/step\n' % (avg_loss, ppl, avg_speed)) 149 | self.model.train() 150 | 151 | @paddle.no_grad() 152 | def _infer(self, data_loader): 153 | self.model.eval() 154 | total_time = 0.0 155 | start_time = time.time() 156 | responses = [] 157 | for step, inputs in enumerate(data_loader, 1): 158 | logging.info(f"step is {step}") 159 | token_ids, type_ids, pos_ids, generation_mask = inputs 160 | ids, scores = self.model.generate( 161 | input_ids=token_ids, 162 | token_type_ids=type_ids, 163 | position_ids=pos_ids, 164 | attention_mask=generation_mask, 165 | max_length=args.max_dec_len, 166 | min_length=args.min_dec_len, 167 | decode_strategy=args.decode_strategy, 168 | temperature=args.temperature, 169 | top_k=args.top_k, 170 | top_p=args.top_p, 171 | num_beams=args.num_beams, 172 | length_penalty=args.length_penalty, 173 | early_stopping=args.early_stopping, 174 | num_return_sequences=args.num_samples) 175 | 176 | total_time += (time.time() - start_time) 177 | if step % args.logging_steps == 0: 178 | logging.info(f'step {step} - {total_time / args.logging_steps:.3f}s/step') 179 | total_time = 0.0 180 | results = select_response(ids, scores, self.tokenizer, 181 | args.max_dec_len, args.num_samples) 182 | responses.extend(results) 183 | start_time = time.time() 184 | self.model.train() 185 | return responses 186 | 187 | def predict(self, args): 188 | # [1]. initialize dataset loader 189 | test_dataset = DialogueDataset( 190 | args.test_data_path, 191 | args.batch_size, 192 | self.tokenizer.pad_token_id, 193 | self.tokenizer.cls_token_id, 194 | args.sort_pool_size, 195 | args.seed, 196 | mode='test') 197 | valid_data_loader = DataLoader(test_dataset, return_list=True, batch_size=None) 198 | # [2]. do inference 199 | responses = self._infer(valid_data_loader) 200 | # [3]. save result 201 | output_path = os.path.join(args.output_dir, "predict.txt") 202 | with open(output_path, 'w', encoding='utf-8') as f: 203 | for response in responses: 204 | f.write(response + '\n') 205 | 206 | def train_and_eval(self, args): 207 | self._initialize_run_env(args.device, args.seed) 208 | self._initialize_model(args.model_type, args.pretrained_model_path) 209 | 210 | # start training 211 | if args.do_train: 212 | logging.info("start training...") 213 | self._start_train(args) 214 | logging.info("train success.") 215 | # start evaluation 216 | if args.do_eval: 217 | logging.info("start evaluating...") 218 | self.evaluation(args) 219 | logging.info("evaluate success.") 220 | # start predicting 221 | if args.do_predict: 222 | logging.info("start predicting...") 223 | self.predict(args) 224 | logging.info("predict success.") 225 | 226 | @staticmethod 227 | def set_seed(random_seed): 228 | random.seed(random_seed) 229 | np.random.seed(random_seed) 230 | paddle.seed(random_seed) 231 | 232 | 233 | if __name__ == '__main__': 234 | # input_args = "--do_train 1 --train_data_path ./datasets/output/train.txt " \ 235 | # "--do_eval 1 --valid_data_path ./datasets/output/train.txt " \ 236 | # "--do_predict 0 --test_data_path ./datasets/small_test.json " \ 237 | # "--device cpu --model_type uniLM " \ 238 | # "--pretrained_model_path unified_transformer-12L-cn --train_epochs 1 " \ 239 | # "--batch_size 8192" 240 | args = parse_args(input_arg=None) 241 | logging.info('----------- Configuration Arguments -----------') 242 | for arg, value in sorted(vars(args).items()): 243 | logging.info(f'{arg}: {value}') 244 | logging.info('------------------------------------------------') 245 | 246 | model_oper = ModelOperation() 247 | model_oper.train_and_eval(args) 248 | -------------------------------------------------------------------------------- /datasets/Dialog_sample/weibo_sample.txt: -------------------------------------------------------------------------------- 1 | {"knowledge": ["", ""], "history": "香港 卖 touchpad 的 页面 直接 打不开 。 大家 的 热情 燃烧 了 全世界 。", "response": "求 通风报信 兼 捎带 啊"} 2 | {"knowledge": ["", ""], "history": "我 猜中 了 过程 却 没有 猜中 结局 ! 好悲 催 的 小白兔 啊 。", "response": "这 这 这 。 好 凶残 的 熊猫 君"} 3 | {"knowledge": ["", ""], "history": "别 了 新闻 , 收获 爱情", "response": "没有 告别 新闻 , 也 没有 收获 爱情 。"} 4 | {"knowledge": ["", ""], "history": "对不起 , 我 已经 习惯 了 不该 习惯 的 习惯 。", "response": "已经 习惯 了 不该 习惯 的 习惯 ! !"} 5 | {"knowledge": ["", ""], "history": "这 TMD 是 足球 吗 ? 分明 是 NBA !", "response": "这 一夜 有人 高兴 , 有人 悲伤 , 有人 再也 看不到 …"} 6 | {"knowledge": ["", ""], "history": "博客 更新 《 童年 时光 你 慢慢 走 》", "response": "乖乖 的 葡萄 妹 我 去 看看"} 7 | {"knowledge": ["", ""], "history": "一个 北京 运动鞋 网站 每月 从 导航 网站 来 的 订单 ( 真实 到 个位数 )", "response": "确定 不假 吧 , 转发 留底 … …"} 8 | {"knowledge": ["", ""], "history": "12 月 17 日 【 人民日报 、 经济日报 、 光明日报 、 解放军报 】 头版", "response": "好玩儿 吗 ? 有 劲儿 吗 ? 谁 看 呐 !"} 9 | {"knowledge": ["", ""], "history": "十四年 , 终于 有 前台 啦 。 我 在 :", "response": "啊 ! 我 的 青春 居然 荒废 在 一个 没有 前台 的 网站 上 。 悲剧 啊 。"} 10 | {"knowledge": ["", ""], "history": "这 两口子 , 有人 认识 不 ?", "response": "这 不是 林黛玉 和 贾宝玉 吗"} 11 | {"knowledge": ["", ""], "history": "【 午休 时刻 】 今天 星期五 呀 , 明天 不 上班 呀 。", "response": "苦 逼 的 , 卖车 的 , 没有 休息日 ! 明后天 照常上班 !"} 12 | {"knowledge": ["", ""], "history": "睡不着 觉时 就 会 这 副 傻样 , 然后 开始 胡思乱想 。", "response": "好 吧 那 我 决定 睡觉 发呆 的"} 13 | {"knowledge": ["", ""], "history": "这 让 我们 编 报纸 的 都 觉得 很 尴尬 哈哈哈哈", "response": "哈哈哈 啊哈 ! 大河 报 = 大 实话"} 14 | {"knowledge": ["", ""], "history": "【 37 种 鸡翅 的 做法 】 赶快 收藏 起来 , 留着 慢慢 学 。 ( 转 )", "response": "有 存在 , 便 有 希望 , 有 希望 , 便是 光明 。 alink"} 15 | {"knowledge": ["", ""], "history": "方文山 这词 不如 青花瓷 , 但是 配 上 林志玲 的 念白 , 雷 !", "response": "周杰伦 这 首歌 不好 。 ╮ ( ╯ ﹏ ╰ ) ╭"} 16 | {"knowledge": ["", ""], "history": "人世 忒 不 清静 , 名利 惹人 心烦 。 何时 收拾 行李 , 独自 遁入 秋山 。", "response": "我 也 想 进山 住 一段时间 , 哪怕 就 一天 。"} 17 | {"knowledge": ["", ""], "history": "通篇 只有 一个 读音 的 中国 古文 。", "response": "这 是 练 四个 音调 的 吧 。"} 18 | {"knowledge": ["", ""], "history": "计划生育 标语 : “ 你 违法 生 孩子 , 我 依法 拆 房子 ”", "response": "先 办手续 , 后 办事 . 出处 山东 计生 宣传"} 19 | {"knowledge": ["", ""], "history": "第一个 将 " robust " 翻译成 " 鲁棒 " 的 人 应该 被 枪毙", "response": "爱 晶体 , 这个 如何 ?"} 20 | {"knowledge": ["", ""], "history": "走 到 哪里 , 都 希望 你 在 身旁 。 晚安 , 没有 远近 的 世界 。 🙏", "response": "小贤姐 觉得 张 亚东 先生 怎么样 要 不 在 一起 吧"} 21 | {"knowledge": ["", ""], "history": "思考 : 沉浸 在 自我 表演 和 自我 感动 中 , 这样 的 企业 有 前途 吗 ?", "response": "如果 企业 换成 ZF , 它 有 前途 吗 ?"} 22 | {"knowledge": ["", ""], "history": "把 孩子 培养 成 普通人 : 一位 父亲 的 18 个 忠告 !", "response": "作为 父母 , 我们 应该 反思 !"} 23 | {"knowledge": ["", ""], "history": "喵 星人 绝技 : 轻功 水上漂 … …", "response": "后面 的 人 已经 暴露 了 一切 了 。"} 24 | {"knowledge": ["", ""], "history": "童鞋 们 知道 熊猫 是 肿 么 长大 滴 不 !", "response": "可爱 , 但 起初 还 以为 是 老鼠 , 邪恶 了 !"} 25 | {"knowledge": ["", ""], "history": "视频 - 《 体育 评书 》 刘翔 摔倒 是 怎样 一出戏", "response": "高处不胜 寒 , 刘翔 也 是 生 不由 己 。"} 26 | {"knowledge": ["", ""], "history": "这 篇文章 好感 人 , 程序员 的 老婆 。", "response": "好 美的 童话 , 程序员 哪来 的 老婆 ?"} 27 | {"knowledge": ["", ""], "history": "懒 爸爸 牌 喂奶 工具 , 为了 好好 过 一节 , 容易 嘛 !", "response": "这样 小朋友 会 被 呛到 吧 。"} 28 | {"knowledge": ["", ""], "history": "放松 心情 , 尽地 一铺 ! 大学 见 !", "response": "引些 师妹 去 广大 ? 。"} 29 | {"knowledge": ["", ""], "history": "求 P 图 大神 赐 我 500 万 , 让 我 看着 很 有钱 , 很 带感 。", "response": "背景 也 应该 改一改 , 不像 身价 500W 的 人 啊 !"} 30 | {"knowledge": ["", ""], "history": "你 有 被 它们 诱惑 到 吗 ? 说 真话 哦", "response": "姑娘 衣柜 里 永远 都 少件 衣服 。"} 31 | {"knowledge": ["", ""], "history": "在 巴克利 和 奥尼尔 面前 , 巨石 强森好 渣 。 「 转 」", "response": "THEROCK 应该 没 196 吧 , 顶多 190 。"} 32 | {"knowledge": ["", ""], "history": "17173 被 征途 包场 了 , 征途 2 太给力 了", "response": "希望 征途 2 越来越 好 !"} 33 | {"knowledge": ["", ""], "history": "xx 到此一游 的 症结 其实 在 《 西游记 》 , 我 相信 很多 人 都 是从 这学 的 !", "response": "家长 教子 无方 丢人现眼"} 34 | {"knowledge": ["", ""], "history": "终于 回来 了 , 我们 的 家 … … = \" \" )", "response": "愿 你们 不离 不弃 一直 走 下去 大熊 加油 !"} 35 | {"knowledge": ["", ""], "history": "【 未成年人 慎入 】 图片 分别 来自 卡索 拉 推特 和 吉鲁 推特 。", "response": "快乐 不 一定 源于 夺冠"} 36 | {"knowledge": ["", ""], "history": "《 泰坦尼克号 2 : 杰克 的 归来 》 第二部 。 吓死 爹 啦 !", "response": "这 感觉 怎么 这么 吓人 ? 。"} 37 | {"knowledge": ["", ""], "history": "童心未泯 , 是 一件 值得 骄傲 的 事情 ! 大家 儿童节 快乐 哟 🎀", "response": "每个 人 心里 都 住 着 个 小盆友 。"} 38 | {"knowledge": ["", ""], "history": "喝下 一罐 可乐 后 1 小时 内 身体 的 反应 ` ` ` ( via _ 方方 土 )", "response": "以后 不能 喝 可乐 了 。"} 39 | {"knowledge": ["", ""], "history": "郑在 签售 。 ( 助理 代发 )", "response": "郑 老师 不 打算 吃饭 啦 ?"} 40 | {"knowledge": ["", ""], "history": "原来 我 的 微博是 没有 沟通 功能 的 , 基本 只会 吸引 圣母 降临 。", "response": "岚少 , 筛选 屏蔽 一下 吧 , 大波 的 傻 逼 脑残 真心 没药 治"} 41 | {"knowledge": ["", ""], "history": "大家 猜猜 这位 童鞋 是 谁 呀 ?", "response": "易立 , 你 的 背 好 恐怖 。"} 42 | {"knowledge": ["", ""], "history": "【 下班 分享 】 意大利 五 渔村 , 向往 之地 。 via 环球 家居", "response": "这样 的 渔村 太 梦幻 了 。"} 43 | {"knowledge": ["", ""], "history": "跨越 种族 的 爱 最终 是 没有 结果 的 。", "response": "看 动态图 , 这 交配 时间 像是 以秒计 的"} 44 | {"knowledge": ["", ""], "history": "各位 大侠 , 黄金 暴跌 和 中国 经济 数据 低迷 之间 有无 关联 ?", "response": "央行 卖金 , 投机者 压注"} 45 | {"knowledge": ["", ""], "history": "什么 时候 你 会 毫不犹豫 下手 卸载掉 一个 app ?", "response": "除了 fb 其他 随便 删 。"} 46 | {"knowledge": ["", ""], "history": "喜欢 喝 伏特加 的 童鞋 请举手 !", "response": "在 酒吧 喝 过 , 但是 味道 真心 很 重 !"} 47 | {"knowledge": ["", ""], "history": "看图知 真相 看到 最后 , 我 承认 我 心酸 了 。 ( 图转 )", "response": "看着 好想哭 。 这娃 打扮 打扮 也 满乖 的 。 可以 抱 回家 养 。"} 48 | {"knowledge": ["", ""], "history": "思考 : 沉浸 在 自我 表演 和 自我 感动 中 , 这样 的 企业 有 前途 吗 ?", "response": "如果说 的 是 茅台 , 那 答案 是 : 没 问题 !"} 49 | {"knowledge": ["", ""], "history": "是 什么 让 中国 人 睡 不好 觉 ? ( 下 一期 , 4 月 1 日刊 )", "response": "不愿 开始 新 的 一天 。"} 50 | {"knowledge": ["", ""], "history": "全 社会 把 衡量 英雄 的 标准 都 变成 有没有 钱 了", "response": "太对 了 , 而且 只有 在 中国 …"} 51 | {"knowledge": ["", ""], "history": "删号 算了 , 粉丝 质量 太差 了 , 点赞 的 都 是 啥 心态 ?", "response": "跟 在 辣椒 后面 点 了 个 … 我 真的 是 手滑 …"} 52 | {"knowledge": ["", ""], "history": "1930 年 拜 耳 阿司匹林 广告 , 代言人 是 在 当时 “ 大名鼎鼎 ” 的 阮玲玉", "response": "拜 阿斯匹林 〜 高端 洋气 上档次 !"} 53 | {"knowledge": ["", ""], "history": "看看 亚马逊 和 申通 在 忙碌 的 时候 的 区别 。 ( 转 )", "response": "差距 , 还是 需要 时间 去 弥补"} 54 | {"knowledge": ["", ""], "history": "# 飞鱼 秀 # 话题 : 你 最近 一次 爬楼梯 是 什么 时候 ? 谈谈 感受 吧 。", "response": "上气不接下气 的 感觉"} 55 | {"knowledge": ["", ""], "history": "拍照 前后 的 对比 , 萌翻 了 !", "response": "现在 信 了 , 猫君 表情 太 多 , 待遇 到 投缘 的 , 就 抱 回家 。"} 56 | {"knowledge": ["", ""], "history": "对 着 镜子 照相 的 正确 方法", "response": "哈哈哈 我们 一直 是 这么 拍 的 ! 每个 爱自 拍 的 女生 都 是 折翼 的 geek !"} 57 | {"knowledge": ["", ""], "history": "CIC : 中国 年轻 消费者 喜欢 什么", "response": "年轻人 是 网购 的 主力军 , 得 年轻人 者 得 天下 !"} 58 | {"knowledge": ["", ""], "history": "今日 留一 「 扇 」 , 他 日 好 相见 。", "response": "sammi 生日 , 送祝福 俾 佢 喇 。"} 59 | {"knowledge": ["", ""], "history": "最近 这张 图片 广为流传 , 如果 是 你 , 你 想 说 什么 ?", "response": "从 物理学 知识 分析 , 不 可能 发生 这种 现象 。"} 60 | {"knowledge": ["", ""], "history": "谁 也 想不到 啊 想不到 ! 这是 棉花 糖 … … 想 歪 的 自觉 转发 。 !", "response": "如此 邪恶 的 包装 , 不想 歪才 神人 咧 !"} 61 | {"knowledge": ["", ""], "history": "这么 冷 的 天 , 还有 这么 多人 练球", "response": "拜 又 打歪 了 球 的 上帝"} 62 | {"knowledge": ["", ""], "history": "# 小米 手机 随手 拍 # 神 车神 标 忍者神龟 , 大众 大腕 万事大吉", "response": "有些 美好 的 时刻 , 会 止不住 地 , 不想 忘 。"} 63 | {"knowledge": ["", ""], "history": "能 猜出 那 密密麻麻 的 是 什么 吗 ?", "response": "鱼翅 吧 , , 反正 没吃过 。"} 64 | {"knowledge": ["", ""], "history": "有时候 , 我们 做错事 , 是因为 该用 脑子 的 时候 却 动用 了 感情 。", "response": "有时候 , 我们 做错事 , 是因为 该用 脑子 的 时候 却 动用 了 感情 。"} 65 | {"knowledge": ["", ""], "history": "浦东 机场 竟然 也 有 我们 360 的 牌子", "response": "你 确定 这个 360 就是 你 的 360 么 ? 哈哈"} 66 | {"knowledge": ["", ""], "history": "记住 一句 话 : 越 努力 , 越 幸运 !", "response": "噢 , 那 我 努力 工作 去 了"} 67 | {"knowledge": ["", ""], "history": "冯仑 妙语 : 金钱 可以 买来 快乐 , 不能 买来 尊严 。", "response": "金钱 可以 买 可乐 , 但是 买不来 配方 。"} 68 | {"knowledge": ["", ""], "history": "红牛 和 法拉利 的 前翼 高度 对比 ( 请 查看 原大图 ) 。", "response": "太 明显 的 变形 了 , 不 知道 变形 测试 怎么 通过 的"} 69 | {"knowledge": ["", ""], "history": "延安 暴雨 中 的 一幕 ! ( 小佰姓 )", "response": "希望 最后 有人 帮 了 他们 一把 。 阿弥陀佛 !"} 70 | {"knowledge": ["", ""], "history": "知乎 ( 问答 社区 ) 有人 在 用 吗 ? 好用 吗 ?", "response": "没多大用 , 谁 没事 老去 那里 免费 写 论文 ; 还是 微博 比较 合适"} 71 | {"knowledge": ["", ""], "history": "环保 马桶 , 水箱 当 洗手池 用 , 一举两得 , 马桶 前 的 小台 也 很 别致 。", "response": "下水 配个 开关 , 有些 水 就 直接 流走 ."} 72 | {"knowledge": ["", ""], "history": "ok 了 晚安 ! 明天 给 我们 加油打气 吧 !", "response": "加油 加油 ! 明天 现场 支持 !"} 73 | {"knowledge": ["", ""], "history": "今天 周六 ! 太 欢乐 啦 。 还有 一天 ! 好 欢乐 , 好 欢乐 !", "response": "还有 一天 ? 是 什么 事 这么 开心 啊 ?"} 74 | {"knowledge": ["", ""], "history": "据说 容量 计算 出 了 新 单位 1T = 59.535 郭 = 1024G 。 ( 转 )", "response": "那么 1 郭 就 等于 17.2 G 咯"} 75 | {"knowledge": ["", ""], "history": "关于 领土问题 , 没有 谈判 , 只有 战争 。 - - - 普京", "response": "真是 打仗 的话 , 中国 能 承受 吗 ?"} 76 | {"knowledge": ["", ""], "history": "# 樱花 时节 # 2012 樱花 导览 图 , 是不是 有点 武大 的 范儿 ?", "response": "我 现在 想 去 看 樱花 。 如果 这次 可以 。"} 77 | {"knowledge": ["", ""], "history": "昨天 PM2.5 是 360 , 今天 413 ! 雾都 北京 名副其实 !", "response": "这 让 伦敦 人民 情 何以堪"} 78 | {"knowledge": ["", ""], "history": "尸语者 2 《 无声 的 证词 》 开始 预售", "response": "继续 支持 这 类 读物 !"} 79 | {"knowledge": ["", ""], "history": "在 这个 上面 坐 过额 请 自觉 转 走 :", "response": "我 靠 要 不要 那么 怀念 以前 坐 班车 我 最 爱 坐 这里 屁股 要 热 烂掉 !"} 80 | {"knowledge": ["", ""], "history": "这样 的 多层 巴士 , 你 敢不敢 坐 ?", "response": "一块 石头 就 给 绊倒 了 !"} 81 | {"knowledge": ["", ""], "history": "祖国 , 我 真的 爱 你 , 你 爱我吗 ? !", "response": "没法 代表 某某 , 因此 只能 简单 地说 — — 我爱你 !"} 82 | {"knowledge": ["", ""], "history": "狗拿耗子 就算 了 , 连猫 都 抓 蛇 了 。 猫咪 你 真 强悍 !", "response": "早就 见过 现场版 噶 啦"} 83 | {"knowledge": ["", ""], "history": "自由 万岁 , 星条旗 永远 飘扬", "response": "拜美 主义者 , 自由 个 P !"} 84 | {"knowledge": ["", ""], "history": "一口 一口 消灭 这卖萌 的 世界 。", "response": "我 的 天 啊 , 最 受不了 那个 杯子 里 的"} 85 | {"knowledge": ["", ""], "history": "Android 用户 的 十二 星座 , 你 能 找到 属于 你 的 星座 吗 ?", "response": "凭 啥 说 巨蟹 不好 ? 在 我 眼里 巨蟹 最 可爱 了 。"} 86 | {"knowledge": ["", ""], "history": "你 周五 下班 时 是不是 也 这样 ? 周末 愉快 。", "response": "可惜 今晚 要 培训 啊 。"} 87 | {"knowledge": ["", ""], "history": "长 这么 大 了 , 还 没 去 过夜 店 的 请 转 一个 。", "response": "我 去过 。 感觉 不到 自己 的 存在 , 只 听到 心跳声 , 好 HIGHT"} 88 | {"knowledge": ["", ""], "history": "今晚 读书会 的 主持人 和 两位 嘉宾 。 沈志华 教授 和 马勇 教授 。", "response": "人生 中 值得 认识 的 人"} 89 | {"knowledge": ["", ""], "history": "新鲜 的 葵花籽 , 舍不得 吃 呢 。", "response": "好 大好 漂亮 啊 ! 让 人 不忍 下手 吧"} 90 | {"knowledge": ["", ""], "history": "今晚 与 施正荣 博士 秉烛夜谈 , 交流 光伏 产业 的 昨天 、 今天 和 明天", "response": "不 懂 经济 的 行政官员 妄图 指导 市场 , 不 出 问题 才 怪"} 91 | {"knowledge": ["", ""], "history": "朋友 发 的 20 年前 的 报纸 , 控 房价 ! 我 觉得 不错 。", "response": "那时 的 房价 太低 了 , 工资 也 太 低 了"} 92 | {"knowledge": ["", ""], "history": "哈哈 。 估计 买 了 iphone4s 的 人 要 哭 死 ! 一起 坐等 iphone5 哦 !", "response": "每年 升 一次 级 , 等 什么 ? 有钱 出来 就 买 , 没钱 用 烂 再说 !"} 93 | {"knowledge": ["", ""], "history": "既然 地球 人 这么 热情 , 那 我 就 回应 一下 吧 。", "response": "明明 就是 “ 你 来 你 来 ” “ 你 快 走 你 快 走 ” 的 对话 呀"} 94 | {"knowledge": ["", ""], "history": "那么 多年 了 , 她 终于 也 累 了 。", "response": "您 能 歇 的 表 这么 豪放 么"} 95 | {"knowledge": ["", ""], "history": "# 虎 扑 话题 # 踢球 的 时侯 你 嘴里 最 喜欢 喊 什么 话 ?", "response": "iku 。 iku 。 iku 。 iku 。 , ."} 96 | {"knowledge": ["", ""], "history": "# 郑 眼看 日本 # 和 日本 小学生 及 老师 交流 , 我 提 无数个 问题 。", "response": "期待 问题 汇总 , 让 咱 汗颜 一下 。"} 97 | {"knowledge": ["", ""], "history": "陈奕迅 , 他 只是 Eason 而已 。 看 完 真心 觉得 被 感动 到 了 !", "response": "从 K歌之王 开始 , 对 他 无法自拔 。"} 98 | {"knowledge": ["", ""], "history": "工作 已经 太久 , 昐 着 早点 退休 。 白天 弄弄 花草 , 晚上 打打 酱油 。", "response": "就 盼 哪天 退休 , 不再 劳神 开会 。 早晨 想起 才 起 , 晚上 愿 睡 就 睡 。"} 99 | {"knowledge": ["", ""], "history": "北京市 50 名 老干部 获聘 网络 监督员 - - 组织 人事 - 人民网", "response": "挺 好 。 很快 又 多 了 50 个 愤青 。"} 100 | {"knowledge": ["", ""], "history": "儿子 为 妈妈 做 的 桌面 。 又 搞笑 又 有 爱 。", "response": "哈哈 以后 可以 借鉴 , 这里 打开 是 斗地主 、 这里 打开 是 新闻 … …"} 101 | -------------------------------------------------------------------------------- /utils/data_helper.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import numpy as np 4 | from glob import glob 5 | 6 | import paddle.distributed as dist 7 | from paddle.io import IterableDataset 8 | from paddlenlp.transformers.tokenizer_utils import convert_to_unicode 9 | 10 | 11 | class DialogueDataset(IterableDataset): 12 | def __init__(self, 13 | filepattern, 14 | batch_size, 15 | pad_token_id, 16 | bos_token_id, 17 | sort_pool_size=2**16, 18 | seed=1, 19 | n_gpus=None, 20 | rank=None, 21 | mode='test'): 22 | super(DialogueDataset, self).__init__() 23 | 24 | self.file_list = glob(filepattern) 25 | self.sort_pool_size = 0 if mode == 'test' else sort_pool_size 26 | self.n_gpus = n_gpus if n_gpus else dist.get_world_size() 27 | self.rank = rank if rank else dist.get_rank() 28 | self.batch_size = batch_size * self.n_gpus # len(batch) * max_len <= this value 29 | self.shuffle = True if mode == 'train' else False 30 | self.mode = mode 31 | self.pad_id = pad_token_id # [PAD] 32 | self.bos_id = bos_token_id # [CLS] 33 | self.global_rng = np.random.RandomState(seed) 34 | 35 | assert len(self.file_list) > 0, 'There is no files in %s.' % filepattern 36 | 37 | def load_file(self, file_path): 38 | """ 39 | 读取ID化的文件,文件每一行代表一个样本,一个样本由三部分id构成,分别为token_ids, type_ids和pos_ids 40 | """ 41 | with open(file_path, 'r', encoding='utf-8') as fin: 42 | for i, line in enumerate(fin): 43 | cols = convert_to_unicode(line).strip().split(";") 44 | cols = list(map(lambda x: list(map(int, x.split(" "))), cols)) 45 | if len(cols) > 3: 46 | cols = cols[:3] 47 | token_ids, type_ids, pos_ids = cols 48 | # 找打label序列的起始位置 49 | if self.mode == 'test': 50 | tgt_start_idx = len(cols[0]) 51 | else: 52 | tgt_start_idx = token_ids.index(self.bos_id, 1) 53 | # data_id = i 54 | sample = [token_ids, type_ids, pos_ids, tgt_start_idx] 55 | yield sample 56 | 57 | def get_sorted_batch(self, pool): 58 | """Generate sorted batches from pool.""" 59 | pool = sorted(pool, key=lambda sample: len(sample[0])) 60 | batches = [] 61 | batch, max_len = [], 0 62 | for sample in pool: 63 | max_len = max(max_len, len(sample[0])) 64 | if self.mode == 'test': 65 | to_append = len(batch) < self.batch_size 66 | else: 67 | to_append = (len(batch) + 1) * max_len <= self.batch_size 68 | if to_append: 69 | batch.append(sample) 70 | else: 71 | batches.append(batch) 72 | batch, max_len = [sample], len(sample[0]) 73 | if len(batch) > 0: 74 | batches.append(batch) 75 | if self.shuffle: 76 | self.global_rng.shuffle(batches) 77 | for batch in batches: 78 | yield batch 79 | 80 | @property 81 | def get_batch(self): 82 | all_files = list(self.file_list) 83 | if self.shuffle: 84 | self.global_rng.shuffle(all_files) 85 | if self.sort_pool_size > 0: 86 | pool = [] 87 | for file_path in all_files: 88 | for sample in self.load_file(file_path): 89 | pool.append(sample) 90 | if len(pool) == self.sort_pool_size: 91 | for batch in self.get_sorted_batch(pool): 92 | yield batch 93 | pool = [] 94 | if len(pool) > 0: 95 | for batch in self.get_sorted_batch(pool): 96 | yield batch 97 | else: 98 | batch, max_len = [], 0 99 | for file_path in all_files: 100 | for sample in self.load_file(file_path): 101 | max_len = max(max_len, len(sample[0])) 102 | if self.mode == 'test': 103 | to_append = len(batch) < self.batch_size 104 | else: 105 | to_append = (len(batch) + 1) * max_len <= self.batch_size 106 | if to_append: 107 | batch.append(sample) 108 | else: 109 | yield batch 110 | batch, max_len = [sample], len(sample[0]) 111 | if len(batch) > 0: 112 | yield batch 113 | 114 | def pad_batch_data(self, batch): 115 | """Pad the instances to the max sequence length in batch. """ 116 | max_len = max(map(len, batch)) 117 | batch_data = np.array( 118 | [ 119 | list(data) + [self.pad_id] * (max_len - len(data)) 120 | for data in batch 121 | ], 122 | dtype='int64') 123 | return batch_data 124 | 125 | def gen_tgt_label_and_pos(self, batch_token_ids, batch_tgt_start_idx): 126 | max_len = max(map(len, batch_token_ids)) 127 | tgt_label = [] 128 | tgt_pos = [] 129 | for sent_index, sent in enumerate(batch_token_ids): 130 | sent_b_index = batch_tgt_start_idx[sent_index] 131 | need_cal = True 132 | tgt_label.extend(sent[sent_b_index + 1:]) 133 | tgt_pos.extend([ 134 | sent_index * max_len + i for i in range(sent_b_index, len(sent) - 1) 135 | ]) 136 | tgt_label = np.array(tgt_label).astype("int64") 137 | tgt_pos = np.array(tgt_pos).astype("int64") 138 | 139 | return tgt_label, tgt_pos 140 | 141 | def gen_self_attn_mask(self, batch_token_ids, batch_tgt_start_idx): 142 | max_len = max(map(len, batch_token_ids)) 143 | input_mask_data = np.zeros((len(batch_token_ids), max_len, max_len)) 144 | for index, mask_data in enumerate(input_mask_data): 145 | start = batch_tgt_start_idx[index] 146 | end = len(batch_token_ids[index]) 147 | mask_data[:end, :start] = 1.0 148 | # Generate the lower triangular matrix using the slice of matrix 149 | b = np.tril(np.ones([end - start, end - start]), 0) 150 | mask_data[start:end, start:end] = b 151 | return input_mask_data.astype("float32") 152 | 153 | def __iter__(self): 154 | for batch_data in self.get_batch: 155 | # sample [token_ids, type_ids, pos_ids, tgt_start_idx] 156 | # raw_batch [sample0, sample1, ...] 157 | if self.n_gpus > 1: 158 | batch_data = batch_data[self.rank::self.n_gpus] 159 | batch_data = zip(*batch_data) 160 | # if not batch_data: 161 | # continue 162 | token_ids, type_ids, pos_ids, tgt_start_idx = batch_data 163 | 164 | pad_token_ids = self.pad_batch_data(token_ids) 165 | pad_type_ids = self.pad_batch_data(type_ids) 166 | pad_pos_ids = self.pad_batch_data(pos_ids) 167 | 168 | generation_mask = self.gen_self_attn_mask(token_ids, tgt_start_idx) 169 | 170 | if self.mode == 'test': 171 | # [batch_size, 1] 172 | tgt_ids = np.array( 173 | [[self.bos_id]] * len(token_ids), dtype="int64") 174 | tgt_type = np.ones((len(token_ids), 1), dtype="int64") 175 | tgt_pos = np.array(tgt_start_idx, dtype="int64").reshape(-1, 1) 176 | tgt_generation_mask = generation_mask[:, 0:1, :].astype( 177 | "float32") 178 | 179 | pad_token_ids = np.concatenate((pad_token_ids, tgt_ids), axis=1) 180 | pad_type_ids = np.concatenate((pad_type_ids, tgt_type), axis=1) 181 | pad_pos_ids = np.concatenate((pad_pos_ids, tgt_pos), axis=1) 182 | generation_mask = np.concatenate( 183 | (generation_mask, tgt_generation_mask), axis=1) 184 | 185 | append_mask = np.zeros( 186 | (generation_mask.shape[0], generation_mask.shape[1], 1), 187 | dtype="float32") 188 | append_mask[:, -1, :] = 1.0 189 | generation_mask = np.concatenate( 190 | (generation_mask, append_mask), axis=2) 191 | generation_mask = (generation_mask - 1.0) * 1e9 192 | generation_mask = np.expand_dims(generation_mask, axis=1) 193 | yield (pad_token_ids, pad_type_ids, pad_pos_ids, 194 | generation_mask) 195 | else: 196 | tgt_label, tgt_pos = self.gen_tgt_label_and_pos(token_ids, tgt_start_idx) 197 | generation_mask = (generation_mask - 1.0) * 1e9 198 | generation_mask = np.expand_dims(generation_mask, axis=1) 199 | yield (pad_token_ids, pad_type_ids, pad_pos_ids, 200 | generation_mask, tgt_label, tgt_pos) 201 | 202 | 203 | def post_process_response(token_ids, tokenizer): 204 | """ 205 | Post-process the decoded sequence. Truncate from the first 206 | and remove the and tokens currently. 207 | """ 208 | eos_pos = len(token_ids) 209 | for i, tok_id in enumerate(token_ids): 210 | if tok_id == tokenizer.sep_token_id: 211 | eos_pos = i 212 | break 213 | token_ids = token_ids[:eos_pos] 214 | tokens = tokenizer.convert_ids_to_tokens(token_ids) 215 | response = tokenizer.merge_subword(tokens) 216 | return token_ids, response 217 | 218 | 219 | def get_in_turn_repetition(pred, is_cn=False): 220 | """Get in-turn repetition.""" 221 | if len(pred) == 0: 222 | return 1.0 223 | if isinstance(pred[0], str): 224 | pred = [tok.lower() for tok in pred] 225 | if is_cn: 226 | pred = "".join(pred) 227 | tri_grams = set() 228 | for i in range(len(pred) - 2): 229 | tri_gram = tuple(pred[i:i + 3]) 230 | if tri_gram in tri_grams: 231 | return True 232 | tri_grams.add(tri_gram) 233 | return False 234 | 235 | 236 | def select_response(ids, scores, tokenizer, max_dec_len=None, num_samples=1): 237 | ids = ids.numpy().tolist() 238 | scores = scores.numpy() 239 | 240 | if len(ids) != len(scores) or (len(ids) % num_samples) != 0: 241 | raise ValueError( 242 | "the length of `ids` is {}, but the `num_samples` is {}".format( 243 | len(ids), num_samples)) 244 | 245 | group = [] 246 | tmp = [] 247 | for pred, score in zip(ids, scores): 248 | pred_token_ids, pred_tokens = post_process_response(pred, tokenizer) 249 | num_token = len(pred_token_ids) 250 | response = " ".join(pred_tokens) 251 | 252 | in_turn_repetition = get_in_turn_repetition( 253 | pred_tokens, True) or get_in_turn_repetition(pred_token_ids) 254 | # not ending 255 | if max_dec_len is not None and num_token >= max_dec_len: 256 | score -= 1e3 257 | elif in_turn_repetition: 258 | score -= 1e3 259 | 260 | tmp.append([response, score]) 261 | if len(tmp) == num_samples: 262 | group.append(tmp) 263 | tmp = [] 264 | 265 | results = [] 266 | for preds in group: 267 | preds = sorted(preds, key=lambda x: -x[1]) 268 | results.append(preds[0][0]) 269 | return results 270 | 271 | 272 | if __name__ == "__main__": 273 | from paddle.io import DataLoader 274 | from paddlenlp.transformers import UnifiedTransformerLMHeadModel, UnifiedTransformerTokenizer 275 | 276 | model_name_or_path = 'unified_transformer-12L-cn' 277 | # model = UnifiedTransformerLMHeadModel.from_pretrained(model_name_or_path) 278 | tokenizer = UnifiedTransformerTokenizer.from_pretrained(model_name_or_path) 279 | # 训练batch_size 280 | batch_size = 8192 # 8192 281 | # 组batch进行排序和shuffle的pool_size 282 | sort_pool_size = 65536 283 | 284 | # 训练集路径,注意与数据预处理输出路径保持一致 285 | train_data_path = './datasets/output/train.txt' 286 | # 初始化Dataset 287 | train_dataset = DialogueDataset( 288 | train_data_path, 289 | batch_size, 290 | tokenizer.pad_token_id, 291 | tokenizer.cls_token_id, 292 | sort_pool_size, 293 | mode='train') # train 294 | 295 | train_dataloader = DataLoader(train_dataset, return_list=True, batch_size=None) 296 | for inputs in train_dataloader: 297 | token_ids, type_ids, pos_ids, generation_mask, tgt_label, tgt_pos = inputs 298 | break 299 | # token_ids [batch_length, max_len] 不同于batch_size的大小 300 | # type_ids [batch_length, max_len] 301 | # pos_ids [batch_length, max_len] 302 | # mask [batch_length, 1, 254, 254] 303 | # tgt_label [n] 该batch内所有的label的列表 304 | # tgt_pos [n] 该batch内所有的label的idx列表 305 | -------------------------------------------------------------------------------- /utils/data_process/to_sample_for_data_source.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import re 4 | import json 5 | 6 | 7 | class ToSampleForDataSource(object): 8 | @staticmethod 9 | def to_sample_for_douban(input_file, data_type="chitchat", is_test=False): 10 | """ 11 | base data info: 豆瓣多轮对话 500000(train) 25001(dev) 1186(test) 单轮 开放域 12 | :param input_file: 13 | :param data_type: 14 | :param is_test: 15 | :return: 16 | """ 17 | with open(input_file, encoding='utf8') as fp: 18 | for line in fp: 19 | data = json.loads(line.strip()) 20 | 21 | history = data["history"] 22 | response = data["response"] if "response" in data else "" 23 | 24 | if not is_test: 25 | sample = {"type": data_type, 26 | "knowledge": "", 27 | "context": history, 28 | "response": response} 29 | yield sample 30 | else: 31 | sample = {"type": data_type, 32 | "knowledge": "", 33 | "context": '\t'.join(history), 34 | "response": response} 35 | 36 | yield sample 37 | 38 | @staticmethod 39 | def to_sample_for_lccc(input_file, data_type="chitchat", is_test=False): 40 | """ 41 | base data info: 清华LCCC 11987759(train) 20000(dev) 10000(dev) 多轮 开放域 42 | :param input_file: 43 | :param data_type: 44 | :param is_test: 45 | :return: 46 | """ 47 | with open(input_file, encoding='utf8') as fp: 48 | for line in fp: 49 | data = json.loads(line.strip()) 50 | if not is_test: 51 | conversation = data["conversation"] 52 | 53 | for i in range(1, len(conversation)): 54 | sample = {"type": data_type, 55 | "knowledge": "", 56 | "context": '\t'.join(conversation[:i]), 57 | "response": conversation[i]} 58 | 59 | yield sample 60 | else: 61 | history = data["history"] 62 | response = data["response"] if "response" in data else "" 63 | 64 | sample = {"type": data_type, 65 | "knowledge": "", 66 | "context": '\t'.join(history), 67 | "response": response} 68 | 69 | yield sample 70 | 71 | @staticmethod 72 | def to_sample_for_weibo(input_file, data_type="chitchat", is_test=False): 73 | """ 74 | process weibo data 75 | :param input_file: 76 | :param data_type: 77 | :param is_test: 78 | :return: 79 | """ 80 | with open(input_file, encoding='utf8') as fp: 81 | for line in fp: 82 | data = json.loads(line.strip()) 83 | 84 | history = data["history"] 85 | response = data["response"] if "response" in data else "" 86 | 87 | if not is_test: 88 | sample = {"type": data_type, 89 | "knowledge": "", 90 | "context": history, 91 | "response": response} 92 | 93 | yield sample 94 | 95 | else: 96 | sample = {"type": data_type, 97 | "knowledge": "", 98 | "context": '\t'.join(history), 99 | "response": response} 100 | 101 | yield sample 102 | 103 | @staticmethod 104 | def to_sample_for_duconv(input_file, data_type="knowledge", is_test=False): 105 | with open(input_file, encoding='utf8') as fp: 106 | for line in fp: 107 | data = json.loads(line.strip()) 108 | 109 | goal = data["goal"] 110 | knowledge = data["knowledge"] 111 | 112 | goal_knowledge = ' '.join([' '.join(spo) for spo in goal + knowledge]) 113 | 114 | if not is_test: 115 | conversation = data["conversation"] 116 | 117 | for i in range(0, len(conversation), 2): 118 | sample = {"type": data_type, 119 | "knowledge": goal_knowledge, 120 | "context": '\t'.join(conversation[:i]), 121 | "response": conversation[i]} 122 | 123 | yield sample 124 | else: 125 | history = data["history"] 126 | response = data["response"] if "response" in data else "" 127 | 128 | sample = {"type": data_type, 129 | "knowledge": goal_knowledge, 130 | "context": '\t'.join(history), 131 | "response": response} 132 | 133 | yield sample 134 | 135 | @staticmethod 136 | def to_sample_for_kdconv(input_file, data_type="knowledge", is_test=False): 137 | with open(input_file, encoding='utf8') as fp: 138 | for line in fp: 139 | data = json.loads(line.strip()) 140 | knowledge = data["knowledge"] 141 | 142 | knowledge = ' '.join([' '.join(spo) for spo in knowledge]) 143 | 144 | if not is_test: 145 | conversation = data["conversation"] 146 | for i in range(len(conversation)): 147 | sample = {"type": data_type, 148 | "knowledge": knowledge, 149 | "context": '\t'.join(conversation[:i]), 150 | "response": conversation[i]} 151 | 152 | yield sample 153 | else: 154 | history = data["history"] 155 | response = data["response"] if "response" in data else "" 156 | 157 | sample = {"type": data_type, 158 | "knowledge": knowledge, 159 | "context": '\t'.join(history), 160 | "response": response} 161 | 162 | yield sample 163 | 164 | @staticmethod 165 | def to_sample_for_tencent(input_file, data_type="knowledge", is_test=False): 166 | with open(input_file, encoding='utf8', errors="ignore") as fp: 167 | for line in fp: 168 | data = json.loads(line.strip()) 169 | 170 | knowledge = data["knowledge"] 171 | history = data["history"] 172 | response = data["response"] if "response" in data else "" 173 | 174 | knowledge = ' '.join(knowledge) 175 | 176 | if not is_test: 177 | sample = {"type": data_type, 178 | "knowledge": knowledge, 179 | "context": history, 180 | "response": response} 181 | 182 | yield sample 183 | 184 | else: 185 | sample = {"type": data_type, 186 | "knowledge": knowledge, 187 | "context": '\t'.join(history), 188 | "response": response} 189 | 190 | yield sample 191 | 192 | @staticmethod 193 | def to_sample_for_durecdial(input_file, data_type="recommend", is_test=False): 194 | def goal_processing(goal): 195 | format_goal = [] 196 | while isinstance(goal, list): 197 | goal = goal[0] 198 | goal = goal.split('-->') 199 | for i, g in enumerate(goal): 200 | format_g = [] 201 | g = g.strip() 202 | si, ei = g.find('['), g.find(']') 203 | if si != 0 or ei <= si + 1 or not g[si + 1:ei].isdigit(): 204 | continue 205 | 206 | g = g.split(g[si:ei + 1])[-1] 207 | g_n = g.split('(', 1)[0].strip() 208 | g_d = g.split('(', 1)[-1].strip() 209 | 210 | format_g.append(g_n) 211 | 212 | if "新闻" in g_n or g_n.replace(' ', '') in ["关于明星的聊天", "兴趣点推荐", "音乐推荐", "播放音乐", "美食推荐", "poi推荐", "电影推荐", 213 | "音乐点播", "问日期", "新闻推荐", "新闻点播", "问答"]: 214 | left = -1 215 | for right, c in enumerate(g_d): 216 | if c == "『": 217 | left = right + 1 218 | elif c == "』": 219 | if 0 <= left < right: 220 | item = g_d[left:right].strip() 221 | if item not in format_g and item.replace(' ', '') != "参考知识": 222 | format_g.append(item) 223 | left = -1 224 | 225 | format_goal.append(format_g) 226 | 227 | if len(format_goal) > 3: 228 | format_goal = [format_goal[0], format_goal[-2], format_goal[-1]] 229 | 230 | return format_goal 231 | 232 | def user_profile_processing(user_profile): 233 | accept_key = ["拒绝", "喜欢的电影", "喜欢的明星", "喜欢的poi", "喜欢的音乐", 234 | "喜欢的新闻", "同意的新闻", "同意的音乐", "同意的美食", "同意的poi", "同意的电影"] 235 | format_user_profile = [] 236 | for key in user_profile: 237 | if key.replace(' ', '') in accept_key: 238 | if isinstance(user_profile[key], list): 239 | format_user_profile.append([key, ' '.join(user_profile[key])]) 240 | else: 241 | format_user_profile.append([key, user_profile[key]]) 242 | 243 | return format_user_profile 244 | 245 | def strip_utterance(utterance_list): 246 | for i, utterance in enumerate(utterance_list): 247 | utterance = utterance.split(' ') 248 | if re.match("\[\d+\]", utterance[0]) is not None: 249 | utterance = utterance[1:] 250 | utterance = ' '.join(utterance) 251 | utterance_list[i] = utterance 252 | 253 | with open(input_file, encoding='utf8') as fp: 254 | for line in fp: 255 | data = json.loads(line.strip()) 256 | 257 | situation = data["situation"] 258 | goal = data["goal"] 259 | user_profile = data["user_profile"] 260 | knowledge = data["knowledge"] 261 | 262 | goal = goal_processing(goal) 263 | user_profile = user_profile_processing(user_profile) 264 | 265 | bot_mode = 0 if goal[0][0] == '寒暄' else 1 266 | 267 | goal = ' '.join([' '.join(g) for g in goal]) 268 | user_profile = ' '.join([' '.join(up) for up in user_profile]) 269 | knowledge = ' '.join([' '.join(spo) for spo in knowledge]) 270 | 271 | background = ' '.join([goal, situation, user_profile, knowledge]) 272 | 273 | if not is_test: 274 | conversation = data["conversation"] 275 | 276 | strip_utterance(conversation) 277 | 278 | for i, utterance in enumerate(conversation): 279 | if i % 2 != bot_mode: 280 | continue 281 | 282 | sample = {"type": data_type, 283 | "knowledge": background, 284 | "context": '\t'.join(conversation[:i]), 285 | "response": conversation[i]} 286 | 287 | yield sample 288 | else: 289 | history = data["history"] 290 | response = data["response"] if "response" in data else "" 291 | 292 | strip_utterance(history) 293 | 294 | sample = {"type": data_type, 295 | "knowledge": background, 296 | "context": '\t'.join(history), 297 | "response": response} 298 | 299 | yield sample 300 | 301 | @staticmethod 302 | def to_sample_for_persona(input_file, data_type="persona", is_test=False): 303 | with open(input_file, encoding='utf8') as fp: 304 | for line in fp: 305 | data = json.loads(line.strip()) 306 | if not is_test: 307 | conversation = data["conversation"] 308 | p1_persona = [u'画像 : ' + p for p in data['p1_persona']] 309 | p2_persona = [u'画像 : ' + p for p in data['p2_persona']] 310 | for reply_index in range(0, len(conversation)): 311 | persona = None 312 | if conversation[reply_index].startswith('p1 : '): 313 | persona = p1_persona 314 | elif conversation[reply_index].startswith('p2 : '): 315 | persona = p2_persona 316 | else: 317 | print(line) 318 | print >> sys.stderr, "invalid personal tag" 319 | continue 320 | conversation[reply_index] = conversation[reply_index].lstrip('p1 : ').lstrip('p2 : ') 321 | if reply_index == 0: 322 | continue 323 | 324 | sample = {"type": data_type, 325 | "knowledge": '\t'.join(persona), 326 | "context": '\t'.join(conversation[:reply_index]), 327 | "response": conversation[reply_index]} 328 | 329 | yield sample 330 | else: 331 | persona = [u'画像 : ' + data["profile"][pkey] for pkey in data["profile"]] 332 | 333 | history = data["history"] 334 | response = data["response"] if "response" in data else "" 335 | 336 | sample = {"type": data_type, 337 | "knowledge": '\t'.join(persona), 338 | "context": '\t'.join(history), 339 | "response": response} 340 | 341 | yield sample 342 | 343 | @staticmethod 344 | def to_sample_for_emotional(input_file, data_type="knowledge", is_test=False): 345 | emotion_dict = {0: '空', 1: '喜欢', 2: '伤心', 3: '厌恶', 4: '愤怒', 5: '高兴'} 346 | with open(input_file, encoding='utf8') as fp: 347 | for line in fp: 348 | data = json.loads(line.strip()) 349 | 350 | knowledge = data["knowledge"] 351 | history = data["history"] 352 | response = data["response"] if "response" in data else "" 353 | 354 | emotion = ' '.join([emotion_dict[knowledge[0]], emotion_dict[knowledge[1]]]) 355 | 356 | if not is_test: 357 | sample = {"type": data_type, 358 | "knowledge": emotion, 359 | "context": history, 360 | "response": response} 361 | yield sample 362 | else: 363 | sample = {"type": data_type, 364 | "knowledge": emotion, 365 | "context": '\t'.join(history), 366 | "response": response} 367 | yield sample 368 | -------------------------------------------------------------------------------- /datasets/Dialog_sample/tencent_sample.txt: -------------------------------------------------------------------------------- 1 | {"response": "最后 一句 , 我 囧 了 ......", "knowledge": ["喜欢 上 明星 是 一个 杯具", "大杯 具"], "history": "喜欢 上 明星 是 一个 杯具"} 2 | {"response": "蔡 赟 怎 末 可以 这样 呢", "knowledge": ["以后 出门 记得 带 纸巾", "记住 了"], "history": "【 亚 运 看点 】 大家 可以 学 一下 , 以后 出门 不用 带 纸巾 了 。"} 3 | {"response": "当代 不必 有 阳 明 , 阳 明 不必 在 当代 ; 心 学 有 继 , 无 阳 明 何妨 , 朴 学 无 传 , 有 阳 明 何用 。 朴 学 万 世 , 并 未 远 人 , 人 自 远 尔", "knowledge": ["当代 , 当代", "当代 人民 艺术家 也 是 艺术家 了 ! ! !"], "history": "如果 阳 明 大人 在 当代 , 会 如何"} 4 | {"response": "那 正是 欧 洲 人 “ 师 夷 长 技 以 制 夷 ” 啊", "knowledge": ["怎么 下载 《 我们 》 短片 啊", "找 找 短片 , 去 下面 找 下载 地址 就 成 了"], "history": "短片 《 混乱 三 千 年 》 ! 在 2 分 30 秒 处 , 亮 了 !"} 5 | {"response": "不是 。 。 我 是 倾向 南方 姑娘 的 江浙 安徽 。 。 重庆 四川 都 是 好 姑娘", "knowledge": ["东北 爷们儿 是不是 不 喜欢 南方 女生", "南方 北方 没有 关系 阿"], "history": "东北 爷们儿 是不是 不 喜欢 南方 女生"} 6 | {"response": "龙 舞 帅 得 浑身 发光 幸福 的 光", "knowledge": ["这 意思 你 要 天亮 未眠", "不至于"], "history": "一夜 , 未眠 。 转 眼 , 即 天亮 。 起身 沐浴 , 迎接 人生 的 新 篇 章 。"} 7 | {"response": "菠菜 面 啊 , 你 应该 尝 下 肉 丸 胡 辣 汤 , 再配 根 油条", "knowledge": ["哎 , 早餐 都 没 吃", "我 也 没 吃 啊"], "history": "一定 要 吃 早餐 哦 ! 我 昨天 就 没 吃 , 哎 ! 我 在 :"} 8 | {"response": "还 不错 , 2 年前 的 主流 配置", "knowledge": ["电脑 配个 置", "显卡 + 主板 + cpu 就 得 接近 5500 , 电源 需要 500w 至少 , 也 得 300 上下 , 太 便宜 的 不好 , 5800 , 剩 700 块钱 , , , 200 买个 4g 内存 , 400 买个 1t 硬盘 , 再 买个 99 的 最 垃圾 机箱"], "history": "我家 电 脑 配 置 怎么样"} 9 | {"response": "喝 的 多 了 自然 就 好 了 … …", "knowledge": ["怎么 才能 喝酒 厉害 , 我要 当 酒神", "多 喝 !"], "history": "怎么 才能 喝酒 厉害 , 我要 当 酒神"} 10 | {"response": "来 来 回 回 地 坐 公交 在 海 堤 上 发呆", "knowledge": ["补充 对联 上天 摘 月 下海 捞 针揽 天下 名品 ______________ 献 人间 真情", "上天 摘 月 下海 捞 针揽 天下 名品 。 仙人指路 观音 送福献 人间 真情"], "history": "生活 中 能 让 你 放松 的 事情 / 方式 是 ______________"} 11 | {"response": "牛奶 过期 两天 没事 。 那个 日期 之前 喝 只是 口感 更好 而已", "knowledge": ["我 正在 喝 一盒 已过期 两天 的 纯牛奶", "我 以前 喝 过 过期 一个月 的 , 第一口 就 喷 了 ~"], "history": "我 正在 喝 一盒 已 过 期 两天 的 纯牛奶"} 12 | {"response": "考研 道路 痛 苦 不 堪 , 还是 要 坚 持 不 懈 , 戏剧 影视 学 , 我 磕 了 !", "knowledge": ["没睡 的 来 说句话 吧", "唉 , 真 讨厌"], "history": "还有 没有 睡 的 ? 出来 说句 此时 最想 说 的话 吧 : )"} 13 | {"response": "这个 创意 的 照片 在 国内 有 能 拍 的 摄影 店 么 ?", "knowledge": ["月 如梭", "日月如梭 : 梭 : 织布 时 牵引 纬线 的 工具"], "history": "花掉 一生 时间 照 的 相片 ! 岁 月 如 梭 , 几张 相片 , 已 是 一生"} 14 | {"response": "真正 的 功夫 足球 啊 !", "knowledge": ["中国 足球 出神入化", "中国 足球 加油"], "history": "★ 这 足球 玩得 , 出神入化 啊 !"} 15 | {"response": "不 通 顺 。 读 起来 不 知道 怎么回事", "knowledge": ["提问 通不过", "不会 啊"], "history": "这 提问 通 顺 吗"} 16 | {"response": "这 是 科 8 哪个 配色 ? 谁 告诉 我 ? 好好看 !", "knowledge": ["这 小腿 细 的", "美丽 的 大脚"], "history": "科比 在 巴西 接受 采访 的 截图 , 这 小腿 细 又 长 。"} 17 | {"response": "娱乐圈 的 人 要 没 粉丝 还 混 什么", "knowledge": ["我 还 粉丝 ; 来", "你 粉丝 多"], "history": "我 看着 你 , 你 却 看不到 我 ; 我 的 爱 , 早已 被 你 的 粉丝 淹没 。"} 18 | {"response": "确定 是 一个 人 在 画 ?", "knowledge": ["有个 电影 和 《 肖 生克 的 救赎 》 有些 类似 的 电影 是", "基督山 伯爵 , 天 , 你 是 90 后 吧 , 两个 一点 都 不 一样 , 就是 逃跑 的 情节 类似"], "history": "左 右 手 同时 画 《 肖 恩 克 的 救赎 》 的 两个 主角 , 太牛 了 !"} 19 | {"response": "我 的 愿望 是 , 有 抽奖 , 而 我 成为 幸运 观众", "knowledge": ["淘宝 十周年", "专注 淘宝 十年 有余"], "history": "今天 淘宝 十周年 晚会 会 不会 出现 一个 金 盆 ?"} 20 | {"response": "C o d e r - > P r o g r a m m e r - > E n g i n e e r", "knowledge": ["数学 问题 : 什么 是 全面 调查", "抽样调查 是 , 一种 非 全面 调查 , 它 是从 全部 调查 研究 对象 样本 中 , 抽选 一部分 样本 进行 调查 , 并据 以 对 全部 调查 研究 对象 作出 估计 和 推断 的 一种 调查 方法"], "history": "分享 图片 : 看看 这个 数学 的 可能 职业 图 。 全面 吗 ? 同意 吗 ?"} 21 | {"response": "嗨 , 初中 时候 最 迷恋 的 帅哥", "knowledge": ["精灵 王子", "那么 帅 的 精灵 族 王子 !"], "history": "精灵 王子 , 10 年 后 又 见面 了 。"} 22 | {"response": "现在 当然 对 外 开 放", "knowledge": ["武大 是 啥", "武大 是 你 老头子"], "history": "那 啥 , 武大 是 对 外 开 放 的 不"} 23 | {"response": "我 还 在 纳闷 , 怎么 木有", "knowledge": ["今年 春 晚会 有 矣 及 发来 的 贺电 吗", "今年 的 贺电 , 已经 取消 了"], "history": "今年 春晚 主持人 没有 念 世界各地 发来 的 贺电 , 是 进步 。"} 24 | {"response": "宫崎骏 的", "knowledge": ["求 经典 动漫", "海贼王 绝对 经典 啊 。 火影"], "history": "求 经典 动漫"} 25 | {"response": "大概 是 营养 丰富 卡 路 里 又 不 高 的 能量 吧", "knowledge": ["什么 是 \" 静 能量", "物体 内静 能量 的 数量 依赖于 其 质量 , 并 以 公式 e = mc2 给出 。 质量 就是 静 能量"], "history": "什么 是 \" 正 能量"} 26 | {"response": "the best things i n life are f r e e", "knowledge": ["世界 上 最 美好 的 东西 都 是 免费 的", "还 比如 临危 救难 没 签合同 的 国王"], "history": "您 发现 了 吗 ? 生活 中 最 美好 的 东西 都 是 免费 的 。"} 27 | {"response": "说 呢 , 他 我 知道 你 一定 很 纠结 他 是否 喜欢 你 , 你 可以 有 以下 几种 做法 1 直接 问 他 , 这是", "knowledge": ["怎样 知道 他 是否 喜欢 我", "既然 你 喜欢 他 , 就 不必要 去 问 他 , 是否 喜欢 你 ."], "history": "怎样 知道 他 是否 喜欢 我"} 28 | {"response": "油 炸 鬼 配 肠粉 ! 炸 两 !", "knowledge": ["豆浆 和 油条 最配 了", "是 很配 我 也 喜欢 吃 可是 油条 真的 很 好吃 啊"], "history": "早上好 ! 你们 会 有 谁 觉得 早餐 还是 豆浆 配 油条 最赞 ?"} 29 | {"response": "哎 呦 喂 啊 , 你 这 是 要 连载 啊 !", "knowledge": ["防盗 门窗", "两种 都 不是 很 好 , 从 防盗 的 角度 来说 , 还是 用彩钢 的 比较 牢 , 要是 用 不锈钢 的话 , 也 要 在 里加 钢筋 , 才 够 牢固"], "history": "打开 防盗门 的 小 窗 一看 , 什么 也 没有 , 会 不会 已经 进来 了"} 30 | {"response": "没用 的 软件 算命 小孩 玩意", "knowledge": ["请 大师 帮忙 算命", "没用 的 软件 算命 小孩 玩意"], "history": "请 大师 帮忙 算命"} 31 | {"response": "当年 我 也 背过 如此 的 包 , 加油 ! 期待 你们 的 好消息 , 祝 平安", "knowledge": ["有事 早说 过时不候", "请 你 吃 颗 糖 ..."], "history": "早 些 时 候 照片 , 现场 应急 工 作 队 出 队 。"} 32 | {"response": "哈林哥 , 中秋 快乐 ! 別 哀怨 了 , 阳明山 夜景 耶 , 好 羨 慕", "knowledge": ["就 、 有 多少 人 中秋 去 山上 赏月 了", "要 赏月 也 是 出去 看看 吧 … … 不过 想来 确实 以前 在 塔纳 利斯 练级 的 时候 转身 看到 月亮 看 呆 了"], "history": "別人 中秋 赏月 , 我 在 山上 哀怨 ! 横批 : 阳明山 录影 中 !"} 33 | {"response": "无 重 力 先生 晚安 !", "knowledge": ["还 在 漂浮 着", "同 是 天涯 漂流 人 啊"], "history": "心中 的 容器 漂浮 着 , 空 , 无 重 力 先生 。"} 34 | {"response": "恋爱 谈 的 越 久 , 越 不想 结", "knowledge": ["最近 居然 有 了 想 结婚 的 念头", "恋爱 谈 的 越久 , 越 不想 结"], "history": "最近 居然 有 了 想 结婚 的 念头"} 35 | {"response": "我 只要 上面 的 三 文 鱼 、", "knowledge": ["寿司 里 的 饭 是 什么 米", "真正 的 用 寿司 米 , 如果 找 不到 可以 用 珍珠米 加 一般 食用 的 香米"], "history": "见过 这么 大 的 寿司 吗 , 真是太 给力 了 。 不过 我 抗拒 底下 的 大 米 饭 !"} 36 | {"response": "坐 着 聊天", "knowledge": ["女孩 可以 和 你 聊聊 吗", "不 寂寞 也 可以 聊天 啊"], "history": "女孩 可以 和 你 聊聊 吗"} 37 | {"response": "看 快乐 星球 的 时候 就 觉得 她 眼距 宽 了 长大 了 更加 . . .", "knowledge": ["快乐 星球 的 冰 柠檬 现在 长 这样", "哈哈哈 我 也 是 我 记得 有个 吃 的 好像 跟 这个 名字 好像 是 星球 杯 吧 ?"], "history": "快乐 星球 的 冰 柠檬 现在 长 这样"} 38 | {"response": "枫 林 晚 餐厅", "knowledge": ["求 一个 餐厅 的 名字", "餐厅 的 名字 直接 关系 的 餐厅 之后 的 成长 之 路 , 我 还是 建议 你 请 专人 取名 比较 好"], "history": "求 一个 高大 上 的 餐厅 名字"} 39 | {"response": "送 一朵 鲜花", "knowledge": ["送 女生 礼物", "去 买 个 小 礼物 送 呗 , 你 自己 做个 也 行"], "history": "送 女生 礼物"} 40 | {"response": "你 什么 户口", "knowledge": ["初中 没 毕业 可以 当兵 吗", "规定 上 是 不 可以 的 , 最低 的 当兵 学历 是 农村户口 的 , 但 也 要是 初中 毕业 才 可以"], "history": "初中 毕业 可以 当兵 吗"} 41 | {"response": "会 做梦 高中 的 时候 玩过 那个 让 自己 窒息 的 游戏", "knowledge": ["晕倒 过去 是 什么 感觉", "会 做梦 高中 的 时候 玩过 那个 让 自己 窒息 的 游戏"], "history": "晕倒 过去 是 什么 感觉"} 42 | {"response": "算 吧 , 初恋 是 对 自己 来说 的 , 那种 感觉 , 刻骨铭心", "knowledge": ["暗恋 算是 初恋 吗", "不算 , 初恋 就算 是 恋爱 了 , 恋爱 是 两个 人 之间 的 事 。 而 暗恋 只是 自己 单方面 的 , 所以 暗恋 不算 初恋"], "history": "暗恋 算是 初恋 吗"} 43 | {"response": "你 很 自私", "knowledge": ["我 是不是 很 过分", "我 觉得 不过 分 啊"], "history": "我 是不是 很 过分"} 44 | {"response": "好 想 听 喻舟 弹 唱 大 西边 … …", "knowledge": ["我想练 吉它", "你 想 自学 啊 ? 最好 是 身边 有 认识 的 人 , 不 懂 可以 问 一下 . 或者 你 可以 找 一些 吉他 的 网站 , 比如 虫虫 吉他 之类 的 , 内容 很全 , 有 教程 也 有 曲谱 . 再 或者 就是 买 本书 看 , 但 这样 有 可能 会 看不懂 . 所以 我 觉得 最好 还是 请教 身边 的 朋友"], "history": "练个 吉 它 , 没 把 我 气死"} 45 | {"response": "电商 是 个 大饼 , 也 是 个 大饼", "knowledge": ["关闭 酷 我 音乐", "好 的 , 听 你 的 哦"], "history": "乐 酷 天 的 关闭 意味着 什么"} 46 | {"response": "鸵鸟 : 小样 , 我 还 不 信 了", "knowledge": ["也许 是 马路上 遇见 过", "马路上 你 都 能 认出 我"], "history": "假如 开车 外出 在 马路上 遇见 这货 … …"} 47 | {"response": "这个 真心 不错 , 经典 值得 品味", "knowledge": ["想要 找 一部 无聊 时候 可以 看看 的 电影", "大逃杀 系列 - - - - 杀戮 , 血腥 , 少年"], "history": "超级 全 的 好看 电影 , 无聊 可以 找 一部 看看 。"} 48 | {"response": "怎样 才 算 完整 的 人生", "knowledge": ["追求 完整 的 人生", "不 完美 的 人生 会 有 很多 痛苦 呢"], "history": "不 追求 人生 的 完美 , 但 追求 人生 的 完整 。"} 49 | {"response": "卤 煮 刚拔 的 咩 ? 痛 不 痛 呀 ? 拔过 之后 脸型 会变 咩", "knowledge": ["怎么 把 智齿 做成 戒指 或 吊 坠", "磨圆 然后 弄个 链子 串 起来"], "history": "怎么 把 智齿 做成 戒指 或 吊 坠"} 50 | {"response": "栗子 不 好吃 哇 。 。 还是 原味 的 好吃", "knowledge": ["深圳 哪里 有 好吃 的", "有 啊 . 看 你 想 吃 什么 口味 的 ? 深圳 粤菜 地道 , 如果 想 吃 可以 去 胜记 , 那里 的 东西 不错 香蜜湖 美食 广场 不太 建议 去 , 路途 远 , 而且 呢 , 东西 不太 好吃"], "history": "请问 深圳 哪里 有 好吃 的 泡 芙"} 51 | {"response": "没有 歌手 名字 很难 找 !", "knowledge": ["喜欢 ] [ 喜欢 ] [ 喜欢", "[ 喜欢 ]"], "history": "【 听 10 秒 就 会 喜欢 上 的 歌曲 】 绝对 值得 收藏 !"} 52 | {"response": "母鸡 。 。 。 那个 传说 中 的 女装 一条街 我 还 没 仔细 逛过", "knowledge": ["杭州 有没有 男装 一条街 之类 的 地方", "母鸡 。 。 。 那个 传说 中 的 女装 一条街 我 还 没 仔细 逛过"], "history": "杭州 有没有 男装 一条街 之类 的 地方"} 53 | {"response": "看 神 氣 的 。 。 。 可 憐 的 前 前 前", "knowledge": ["前前 前女友 半夜 打电话 给 你", "可能 是 想 找 你 锻炼 , 我 有 几个 前前 前前 ... 前女友 直接 提出 这样 的 要求 , 还 特别 兴奋 的"], "history": "前 前 前女友 半夜 打电话 给 你"} 54 | {"response": "船袜 啊 , 毛巾 底 的 还 吸 汗", "knowledge": ["帆布鞋 ( 白色 ) 配 哪种 袜子 好看 阿", "白色 袜子 但是 有 红色 的 边 露出 来 感觉 比较 好看 吧"], "history": "帆布鞋 ( 白色 ) 配 哪 种 袜子 好看 阿"} 55 | {"response": "我 去 · · · 被 蒙 了 · · ·", "knowledge": ["这 只 小猩猩 太 可爱 啦", "我 差点 自己 对 号 入 坐"], "history": "小猩猩 好 可爱 又 有 毅力 , 第 40 下 竟然 断 啦 。"} 56 | {"response": "最好 能 爆 一个 要是 不爆 我 才 不会 拿 陨 石 换", "knowledge": ["80 领主 粉 念珠 审判 带 怎样", "念珠 样子 恶心 ~"], "history": "80 领主 粉 念 珠 审判 带 怎样"} 57 | {"response": "你好 你 可以 选 着 信用贷款 的 , 你 可以 咨询 一下 \" 数 银 在线 \" 网络 贷款 超市", "knowledge": ["想 贷款 买车", "可以 , 一般 是 首付 3 成 , 最多供 三年"], "history": "我 想 贷款 买车"} 58 | {"response": "明月 别 枝 惊 雀 , 清风 半夜 鸣 蝉 。 稻 花香 里 说 丰年 , 听 取 蛙 声 一片 。", "knowledge": ["有没有 人 看过 《 花月 》 啊", "我 看过 啊 , 中央 六佳片 有 约 放 的"], "history": "郎 静 山 1 9 5 4 年 摄影 《 花 好 月 圆 》"} 59 | {"response": "越发 喜欢 老 了 宝 哥哥 。", "knowledge": ["颁 吗 给 奖", "满满 一等奖 非几莫属"], "history": "和 奥 运 体操 冠军 邢 傲 伟 给 红 人 奖 得 主 颁 奖"} 60 | {"response": "因为 我 是 13 岁 的 女生 我 个人 应该 比较 喜欢 那种 看上去", "knowledge": ["怎么 追 一个 我 喜欢 的 孩", "当然 不 长久 , 用 你 的 心去 打动 她 吧 , 如果 她 喜欢 你 , 那 她 不会 去 计较 金钱 的 , 在 一起 , 快乐 , 幸福 最 重要 . 勇敢 去 说 吧 , 喜欢 一个 人 , 是 不能 用 金钱 来 衡量 滴"], "history": "怎么 追 女 孩 啊"} 61 | {"response": "是 在 集体 培训 么 ? 。 \\ ( ≧ 皿 ≦ ) / 。", "knowledge": ["公交 地铁 真的 好 挤", "所以 挤 的 都 不用 穿 裤子 了 咩 哈哈哈"], "history": "天气 热 了 , 坐 公交 、 挤 地铁 的 妹妹 们 , 你们 感受 下 !"} 62 | {"response": "震撼 的 图片 , 应该 可以 得 国际 大奖 !", "knowledge": ["如果 你 是 图片 正中间 的 那个 男人 , 你 该 如何 脱身", "回城 、 单传 或 疾风 步 或 闪烁 , 都 不行 的话 祭坛 复活 吧"], "history": "如果 你 是 图片 正 中 间 的 那个 男人 , 你 该 如何 脱 身 ?"} 63 | {"response": "自带 浏览器 , 自带 杀 软", "knowledge": ["常用 的 浏览器", "360 安全 浏览器"], "history": "你 常用 的 手机 浏览器 和 杀 软 是 什么 ? 为什么 ?"} 64 | {"response": "原来 还有 跟 我 一样 喜欢 原创 诗歌 的 孩子 。", "knowledge": ["送 汪伦", "我 表哥 让 他 三岁 的 儿子 给 我 背 一首 < 悯 农 > , 小家伙 奶声奶气 地 开始 : 悯 农 ~ ~ ~ ~ 鹅鹅鹅 , 曲项 向天歌 = _ = #"], "history": "日照 香 炉 生 紫 烟 , 不及 汪 伦 送 我情 !"} 65 | {"response": "帅 啊 , 想 去 体验 一把", "knowledge": ["神马 和 你 比 都 弱 爆 了", "噗 哈哈哈 ~"], "history": "海豚 神马 的 弱 爆 了 。 看看 哥 !"} 66 | {"response": "河南 焦 作 云 台 山 , 不错 的 地方 !", "knowledge": ["查看 大图", "把 原图 保存 下来 ? 查看 原图 点开 就是 一张 照片"], "history": "云 台 山 的 美丽 , 查看 大图"} 67 | {"response": "难 在 自己 往 自己 身上 扎 一刀", "knowledge": ["我 的 养老金 哪去 了", "到 你 交 第一次 社保 的 地方 去 找 找 , 或者 看 你 养老 手册 上 是 怎么 记录 的 , 有没有 公章 什么 的"], "history": "废 除 养老金 双 轨 制 难 在 哪 ?"} 68 | {"response": "不过 你 想 考 大 学 , 可能 要 先 去 日本 的 语言 学校 , 然后 在 语言 学校 里 参加 留学生 试验 , 然后 报 考 日本 的 大学", "knowledge": ["日本 留学 问题", "学习 股 , 专业 办理 留学 , 签证 率 很 高"], "history": "日本 留学 问题"} 69 | {"response": "家庭 动画 目前 暂时 完结 , 共 2 0 3 集", "knowledge": ["家庭教师 2 什么 时候 出", "你 的 2 指 的 是 什么 ? 动画 暂时 到 未来 篇 结束 , 漫画 还 在 连载"], "history": "家庭教师 2 0 4 什么 时候 出"} 70 | {"response": "我 也 想 戴 。 。 。 可是 我 老 了 啊 。 。 。 肿 么 办", "knowledge": ["想箍牙 带牙 套求 指点 啊 亲", "我 也 想 戴牙套 啊 ~"], "history": "想 箍 牙 带 牙 套 求 指点 啊 亲"} 71 | {"response": "好 奇怪 呦 , 我 差不多 对 了 90 %", "knowledge": ["暗示 心理 的 问题", "找出 他 心理 暗示 的 矛盾 点 , 从 身边 的 事物 慢慢 聊 上去 , 将 他 的 问题 打碎 支解 , 让 他 混沌 , 再 引导 他 从 矛盾 中心 走向 你 , 最后 把 打碎 的 问题 重新整理 清楚 , 让 他 一一 认识 , 他 应该 就 会 清醒 了"], "history": "心理 暗示 , 建议 , 最好 用 手机 看 , 太牛 了"} 72 | {"response": "萧敬腾 ? 何 许 人 也 ? 元芳 : 告诉 我 一下 !", "knowledge": ["求 萧敬腾", "什么 情况 亲 ~"], "history": "某地 大 旱 , 灾民 祭祀 求 雨 , 供 桌上 摆 的 全是 萧敬腾 爱 吃 的 。"} 73 | {"response": "扎 西 德 勒 ! 我 的 慈 善 大使 !", "knowledge": ["无论 身在 何方 都 不想 打", "姑娘 这是 病得治"], "history": "无论 身在 何方 , 我 心里 满满 都 是 你 !"} 74 | {"response": "不 开心 的 时候 看一看", "knowledge": ["我 的 仓鼠 好 可爱", "呜呜 呜呜 我 也 要 有 可爱 的 仓鼠 嘛 t t"], "history": "吃 惊 的 小 仓鼠 ! 看 一次 笑 一次 , 太 可爱 了 !"} 75 | {"response": "这 不是 小米 的 路 子 吗 ?", "knowledge": ["更强 了", "内在 更强 了"], "history": "发布会 主 体 是 更 高 、 更 快 、 更强 !"} 76 | {"response": "在 天龙八部 游戏 中 关于 暗器 的 使用 相信 有 不少 的 玩家 都 是 比较 感兴趣 吧", "knowledge": ["天龙八部 暗器 问题", "暗器 是 可以 加 人物 的 血 上限 和 攻击力 的 , 那 是 90 级 的 暗器 护体 技能"], "history": "天龙八部 暗器 问题"} 77 | {"response": "语言 是 征服 不了 思想 的 。", "knowledge": ["你 [ 真 ] 是", "什么 了 : )"], "history": "【 情绪 管理 】 语言 很多 时候 都 是 假 的 , 一起 经历 的 事情 才 是 真的 。"} 78 | {"response": "关机 之前 把 所有 正在 运行 的 软件 全部 关闭 , 停止 运行 , 在 关机 看看 , 应该 是 没 问题 了", "knowledge": ["win7 无法 关机", "系统 问题 , 系统 与 你 的 电脑 不 兼容 , 换个 win7 版本 试试"], "history": "win7 无法 关机"} 79 | {"response": "章子怡 是 斜 视 吧 ? 她 的 海报 有时候 很 明显", "knowledge": ["弱弱 的 问 你们 有人 斜视 嚒", "对 我 也 是 两个 眼睛 度数 不 一样 不 注意 或者 近距离 看 东西 的 时候 就 会 斜视"], "history": "弱弱 的 问 你们 有人 斜 视 嚒"} 80 | {"response": "p t 目前为止 只有 普通 路线 的 3 体 2 耐", "knowledge": ["p 和 t 怎么 分", "t 是 男方 , p 是 女方"], "history": "p t 怎么 加点"} 81 | {"response": "所以 说 , 不能 有 对比 啊 - -", "knowledge": ["一张 图片 告诉 你 中 西方 女性 的 差别", "中 西方 女性 差距 很大 , 不过 跟 中 西方 男性 的 差距 比 起来"], "history": "一张 图 告诉 你 中 西方 女性 的 差别 。 ( 转 )"} 82 | {"response": "真 庆幸 我 不是 这种 人 ( 本来 就 不 可能 啦", "knowledge": ["cp 腐女 最爱", "是 盗墓 笔记 的 同人 版本 的 意思 ? … … 我 看 的 盗墓 小说 超级 多 的 , 腐文 也 是 超级 多 的 … … 不过 还是 不 懂 你 这 啥意思 啊 … …"], "history": "用 大脑 科学 解释 腐女 以及 掐 CP 时 的 思考 模式"} 83 | {"response": "从来 没 逃 过", "knowledge": ["大家 研究 下 怎么 逃票 吧", "从来不 逃票"], "history": "大家 研究 下 怎么 逃票 吧"} 84 | {"response": "春天 来 了 吗 ? 还是 犯 病 了 呀 狗 哥 !", "knowledge": ["这 两天 好开心", "美女"], "history": "最近 两天 好开心 好 幸福 啊 !"} 85 | {"response": "我 心情 也 不好 . . .", "knowledge": ["我 心情 好 低落", "同 低落 , 打开 电脑 , 小 音响 , 开 大 , 听听 , 唱唱 就 好 了"], "history": "跟 室友 冷 战 , 心情 低落"} 86 | {"response": "如果 跳 不 高 , 容易 扭 到 腰 , 扭 腰 还 不算 , 小心 两个 蛋 。", "knowledge": ["都 不 对 哈 , 交大 的", "土木 否 ?"], "history": "哈 西 交 警 大 队 , 你 太 有 才 了 !"} 87 | {"response": "做 一只 勤劳 的 小 蚂 蚁", "knowledge": ["有 一只 蚂蚁", "留 那么 多白 我 以为 我 抢 到 沙发 了 ..."], "history": "清晨 , 一只 推 着 露珠 前行 的 蚂蚁"} 88 | {"response": "子 曰 : 巧 言 令 色 , 鲜 矣 仁 。", "knowledge": ["龙应台 评 小说", "你 现在 手里 有 龙应台 评 小说 这 本书 吗 ?"], "history": "龙应台 : 写给 不会 “ 闹 事 ” 的 大学生"} 89 | {"response": "能 不能不要 这么 可爱 啊", "knowledge": ["他 竟然 问 我 要 不要 一起 玩英 ! 雄 ! 联 ! 盟", "让 他 滚蛋"], "history": "这是 一只 有 志 学习 英 雄 联 盟 的 猫"} 90 | {"response": "多 泡 会 , 把 上面 一层 淀粉 泡 没 就行了", "knowledge": ["为什么 我 炒 的 土豆丝 非常 粘锅", "加好 油里 加点 盐 也 可以 防粘锅"], "history": "为什么 我 炒 土豆丝 每次 都 粘 锅底"} 91 | {"response": "也 难怪 别人 瞧不起 咱们", "knowledge": ["这样 说 , 我 就 看不懂 了", "玩笑话 晚安 : )"], "history": "对外 是 豆腐 , 对内 是 钢铁 , 这样 的 ZF , 我 看不懂 。"} 92 | {"response": "如果 在 国外 , 留个 \" \" B I G \" \" 的 \" \" B \" \" , “ S M A L L ” 的 \" \" S \" \" , 岂 不是 组成 了 ' SB '", "knowledge": ["双胞胎 如何 区分 大小", "可以 取 不同 的 名字 穿 不 一样 的 衣服 啊"], "history": "看 高手 妈妈 如何 区分 双胞胎 宝宝 。 太有 创意 了 !"} 93 | {"response": "我家 两个 狗 一个 猫 、 、 、 难道 就 不活 了 ?", "knowledge": ["一把 辛酸泪 啊 ( _ ) 我 有时候 也 会 觉得 很 想 说 什么 但是", "但是 , 四下 无人 可 说"], "history": "家有 宠物 , 一把 辛酸泪 ( ┳ _ ┳ ) 。 ( 转 )"} 94 | {"response": "她 人 还 不错 就是 演技 着急", "knowledge": ["嫣 了", "通假"], "history": "看 跑 男 感觉 唐 嫣 好 可爱 啊"} 95 | {"response": "菩提 心 化 三千 界 , 生活 禅 开 八 万 门 。", "knowledge": ["昨晚 不试", "试 了"], "history": "昨晚 试 新 笔 乱 涂 的 大家 新年好"} 96 | {"response": "你 头像 头发 剪 德 好 短 啊 。", "knowledge": ["1 ) o , t , a , c ( 2 ) o , s , e , u , l , b ( 3 ) b , t , o , s , o ( 4 ) v , s , e , g , o , l ( 5 ) f , s , r , a , c ( 6 ) t , h , a", "1 . coat 外套"], "history": "瓦 片 做 的 揪 揪 ! t h x u for f e s t i v a l de C a n n e s !"} 97 | {"response": "穿 得 这么 白 皇上 你 是 崩 还是 殂 啊 … …", "knowledge": ["发型 明显 是 山寨 的", "哈哈哈哈 哈哈哈哈 哈哈哈 .. 搞笑"], "history": "这 发型 让 我 有 当 皇上 的 感觉 , 尽管 山寨 了 点 , 但 还是 很 激动 !"} 98 | {"response": "a 8 不 说 是 新华社 的 车 么", "knowledge": ["广州 高档 的 消费 场所", "丽柏 广场 [ 广州 最 高档 的 的 商店 ]"], "history": "北京 豪华 楼盘 和 高档 消费 场所 有 一个 共同点 : 挂 京 A 8 和 京 V 0 的 车 扎 堆"} 99 | {"response": "阿 , 好烦 阿 。 还是 不 喜欢 你 是 嵩 哥 女朋友 。", "knowledge": ["把 心 填满", "想法 是 好 的 !"], "history": "把 家里 一点点 填满 的 同时 心 也 慢慢 被 填满 了"} 100 | {"response": "还有 , 密码 只能 换衣服 ( 冒险 套装 , 可以 显示 对方 的 资料 )", "knowledge": ["赛尔 分子 密码 是 多少", "你 必需 买 一样 东西 , 获得 分子 密码 才行"], "history": "赛尔 号 分子 密码 是 多少"} 101 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # LICS2021 多技能对话 2 | 3 | ## 1. 项目&任务介绍 4 | 5 | 本项目基于官方给定的baseline([**lics2021_baseline**](https://github.com/PaddlePaddle/PaddleNLP/tree/release/2.0-rc/examples/dialogue/lic2021_baseline))进行二次改造,对整个代码框架做了重构,对数据加载部分做了注释说明,一些小的细节也做了改进,最终B榜的排名为11名。 6 | 7 | 本次任务为[2021语言与智能技术竞赛](http://lic2021.ccf.org.cn/):多技能对话任务,真实世界的人机交互同时涉及到多种对话技能,比如知识对话、推荐对话等。在人机对话中如何自然地融合多个对话技能,从而有效地提升用户体验,是一个重要的挑战。 8 | 9 | 本次任务则需要构建一个**对话系统**,使其可以具备如下三种对话能力: 10 | 11 | - 知识对话 12 | 13 | 是否可以生成流畅的、与角色信息一致的对话回复。 14 | 15 | - 输入:对话目标g(部分数据集没有)、知识信息M、对话历史H(u_1, u_2, …, u_t-1) 16 | - 输出:符合对话历史和对话目标,且自然流畅、信息丰富的机器回复u_t。 17 | 18 | - 推荐对话 19 | 20 | 是否可以在对话过程中充分利用**外部知识**,并且在生成对话回复的过程中引入外部知识。 21 | 22 | - 输入:第一个对话目标g_1、最后两个对话目标g_L-1和g_L、知识信息M、用户Profile (画像)P、对话场景S、对话历史H(u_1, u_2, …, u_t-1) 23 | - 输出:符合对话历史和对话目标序列,且自然流畅、信息丰富的机器回复u_t。 24 | 25 | - 画像对话 26 | 27 | 是否可以在对话过程中基于用户兴趣以及用户的实时反馈,主动对用户做出推荐。 28 | 29 | - 输入:机器画像信息,对话历史H(u_1, u_2, …, u_t-1) 30 | - 输出:符合对话历史和画像信息,且自然流畅、信息丰富的机器回复u_t。 31 | 32 | ## 2. 数据介绍 33 | 34 | 本次比赛官方提供了九份开源的中文对话数据,大致介绍如下, 35 | 36 | | 对话技能名称 | 数据集 | 训练集样例数量 | 开发集样例数量 | 测试集样例数量 | 单/多轮 | 领域 | 37 | | :----------: | :---------------------------------------: | :------------- | :------------- | :------------- | :------- | :-------------------------------------: | 38 | | 知识对话 | 百度DuConv | 19858 | 2000 | 5000 | 多轮 | 电影 | 39 | | 推荐对话 | 百度DuRecDial | 6618 | 946 | 4645 | 多轮 | 明星、电影、音乐、新闻、天气、美食、POI | 40 | | 画像对话 | 百度画像数据集(Chinese Persona Chat, CPC) | 23000 | 1500 | 3000 | 多轮 | 开放域 | 41 | | 其他 | 微博数据 | 3103764 | 443394 | 886790 | 单轮 | 开放域 | 42 | | 其他 | 豆瓣多轮对话 | 500000 | 25001 | 1186 | 单轮 | 开放域 | 43 | | 其他 | 清华LCCC | 11987759 | 20000 | 10000 | 多轮 | 开放域 | 44 | | 其他 | 清华情感数据集 | 899207 | 110000 | 110000 | 单轮 | 开放域 | 45 | | 其他 | 腾讯检索辅助生成对话数据集 | 5498480 | 107332 | 156706 | 单轮 | 开放域 | 46 | | 其他 | 清华KdConv | 3000 | 300 | 2751 | 多轮 | 电影、音乐、旅游 | 47 | 48 | 训练集和开发集以session形式组织,每个session包括对话目标序列、对话相关的背景知识、对话场景、用户Profile和对话内容;测试集以样本形式组织,每个样本包括对话第1个目标和最后2个目标、对话相关的背景知识、对话场景、用户Profile和对话历史,要求模型输出机器角色的回复。数据中,各部分介绍如下: 49 | 50 | 1. 对话目标序列 : 给定了session的话题转移路径; 51 | 2. 用户Profile:包括用户的一些个人信息、领域偏好和实体偏好; 52 | 3. 相关知识信息(knowledge):提供了对话所需的所有SPO形式的背景知识; 53 | 4. 对话场景:包括聊天的时间、地点和主题等; 54 | 5. 对话内容:完整的机器和用户对话序列; 55 | 6. 对话历史:从首轮开始到当前机器角色回复之前的对话内容,如果当前机器角色的回复为首轮,则对话历史为空。 56 | 57 | ### 2.1 百度DuConv(知识对话) 58 | 59 | 每一个样本代表一个json串,json串中共包含三个key,分别为`goal`、`knowledge`和`conversation` 60 | 61 | - `conversation` 62 | 63 | 代表整个对话的过程,由数组存储,数组中每个元素代表一句话,整个数组代表一个对话过程。 64 | 65 | - `knowledge` 66 | 67 | 代表一些知识的信息,由数组存储,数组中每个元素有SPO三元组组成。 68 | 69 | - `goal` 70 | 71 | 代表了对话所围绕的主题以及主题的信息,由数组存储,表示主题的内容和主题的信息。 72 | 73 | 下面以一个例子为代表, 74 | 75 | ```json 76 | { 77 | 'goal': 78 | [['START', '闹事者', '神探 蒲松龄 之 兰若 仙踪'], 79 | ['闹事者', '类型', '喜剧'], 80 | ['神探 蒲松龄 之 兰若 仙踪', '类型', '喜剧']], 81 | 'knowledge': 82 | [['闹事者', '是否 上映', '已 上映'], 83 | ['闹事者', '国家', '俄罗斯'], 84 | ['闹事者', '导演', 'Mariya Mak hanko'], 85 | ['闹事者', '类型', '喜剧'], 86 | ['闹事者', '领域', '电影'], 87 | ['神探 蒲松龄 之 兰若 仙踪', '是否 上映', '未 上映'], 88 | ['神探 蒲松龄 之 兰若 仙踪', '类型', '古装'], 89 | ['神探 蒲松龄 之 兰若 仙踪', '口碑', '口碑 很 差'], 90 | ['神探 蒲松龄 之 兰若 仙踪', '类型', '喜剧'], 91 | ['神探 蒲松龄 之 兰若 仙踪', '领域', '电影'], 92 | ['闹事者', '发布 日期 信息', '5 年前 上映'], 93 | ['闹事者', '主演', 'Mikhail Grebenshikov']], 94 | 'conversation': 95 | ['你好 , 在 看 什么 电影 吗 ?', 96 | '没有 , 你 可以 推荐 一部 。', 97 | '《 闹事者 》 5 年前 上映 的 , 主演 是 Mikhail Grebenshikov 您 有 时间 可以 看一下 。', 98 | '好 的 , 有 时间 一定 去 看 。', 99 | '我 再 给 你 推荐 一部 喜剧 电影 , 叫 神探 蒲松龄 之 兰若 仙踪 。', 100 | '这个 我 有 听 朋友 说过 。', 101 | '是 个 古装片 , 虽然 口碑 不是 很好 , 不过 我 觉得 值得 一看 哦 !', 102 | '但是 我 可能 不是 很 感兴趣 。']} 103 | ``` 104 | 105 | ### 2.2 百度DuRecDial(推荐对话) 106 | 107 | 每一个样本代表一个json串,json串中共包含五个key,分别为`situation`、`goal`、`user_profile`、`knowledge`和`conversation` 108 | 109 | - `situation` 110 | 111 | 一个字符串,指定会话的背景,比如聊天的时间、地点、主题等 112 | 113 | - `goal` 114 | 115 | 一个字符串,对会话内容的要求 116 | 117 | - `user_profile` 118 | 119 | map结构,用户的画像,key为属性、value为取值 120 | 121 | - `knowledge` 122 | 123 | 同上面的三元组信息,代表一些知识的信息,由数组存储,数组中每个元素有SPO三元组组成。 124 | 125 | - `conversation` 126 | 127 | 代表整个对话的过程,由数组存储,数组中每个元素代表一句话,整个数组代表一个对话过程。 128 | 129 | 下面以一个例子代表, 130 | 131 | ```json 132 | { 133 | 'situation': '聊天 时间 : 晚上 22 : 00 , 在 家里', 134 | 'goal': '[1] 问答 ( User 主动 问 电影 『 导火线 』 主演 是 谁 ? Bot 回答 『 范冰冰 』 , User 满足 并 好评 ) --> [2] 关于 明星 的 聊天 ( Bot 主动 , 根据 给定 的 明星 信息 聊 『 范冰冰 』 相关 内容 , 至少 要 聊 2 轮 , 避免 话题 切换 太 僵硬 , 不够 自然 ) --> [3] 电影 推荐 ( Bot 主动 , Bot 使用 『 手机 』 的 某个 评论 当做 推荐 理由 来 推荐 『 手机 』 , User 先问 电影 『 国家 地区 、 导演 、 类型 、 主演 、 口碑 、 评分 』 中 的 一个 或 多个 , Bot 回答 , 最终 User 接受 ) --> [4] 再见', 135 | 'user_profile': {'姓名': '徐玲琴', 136 | '性别': '女', 137 | '居住地': '佛山', 138 | '年龄区间': '26-35', 139 | '职业状态': '学生', 140 | '喜欢 的 明星': ['范冰冰'], 141 | '喜欢 的 电影': ['手足情'], 142 | '喜欢 的 新闻': ['范冰冰 的新闻'], 143 | '同意 的 美食': '红烧肉', 144 | '同意 的 poi': '洞庭湖湘菜馆', 145 | '拒绝': ['音乐'], 146 | '接受 的 电影': ['我不是潘金莲', '导火线', '爱情呼叫转移'], 147 | '没有接受 的 电影': ['万物生长']}, 148 | 'knowledge': [['范冰冰', '主演', '导火线'], 149 | ['范冰冰', '主演', '手机'], 150 | ['导火线', '评论', '我 当 警察 这么 多年 有没有 抓 错过 人 ? 留给 法官 回答'], 151 | ['导火线', '评论', '甄子丹 动作片 里 的 经典之作 !'], 152 | ['导火线', '评论', '还 不错 。 有些 镜头 有 印象 。'], 153 | ['导火线', '评论', '一个 警察 和 一个 卧底 对付 三个 坏人'], 154 | ['导火线', '评论', '打 得 很漂亮 。 。'], 155 | ['手机', '评论', '现在 看来 也 是 不 落伍 的 , 还有我 觉得 一个 好 的 演员 要 看 他 怎么 开车 !'], 156 | ['手机', '评论', '对 , 啊 , 行 , 噢 , 啊 , 嗨'], 157 | ['手机', '评论', '重温 经典 , 感觉 不错 !'], 158 | ['手机', '评论', '现实 批判主义'], 159 | ['手机', '评论', '冯导 的 喜剧 永远 都 有 葛优 的 幽默'], 160 | ['手机', '国家地区', '中国'], 161 | ['手机', '导演', '冯小刚'], 162 | ['手机', '类型', '剧情 喜剧'], 163 | ['手机', '主演', '葛优 范冰冰 徐帆 张国立'], 164 | ['手机', '口碑', '口碑 还好'], 165 | ['手机', '评分', '7.2'], 166 | ['范冰冰', '获奖', '大众 电影 百花奖 _ 最佳 女主角'], 167 | ['范冰冰', '获奖', '台湾 电影 金马奖 _ 金马奖 - 最佳 女 配角奖'], 168 | ['范冰冰', '获奖', '香港电影 金像奖 _ 金像奖 - 最佳 女配角'], 169 | ['范冰冰', '获奖', '华语 电影 传媒 大奖 _ 最佳 女演员'], 170 | ['范冰冰', '获奖', '华语 电影 传媒 大奖 _ 最佳 女配角'], 171 | ['范冰冰', '出生地', '中国 山东 青岛'], 172 | ['范冰冰', '简介', '娱乐圈 黄金 剩 女明星'], 173 | ['范冰冰', '简介', '“ 红毯 女王 ”'], 174 | ['范冰冰', '简介', '女能 人'], 175 | ['范冰冰', '简介', '娱乐圈 收入 过 亿 的 明星'], 176 | ['范冰冰', '简介', '吻 戏 超级 淡定 的 明星'], 177 | ['范冰冰', '体重', '56kg'], 178 | ['范冰冰', '成就', '北京 大学生 电影节 最佳 女主角'], 179 | ['范冰冰', '成就', '台湾 电影 金马奖 最佳 女配角'], 180 | ['范冰冰', '成就', '戛纳 国际 电影节 评委会 成员'], 181 | ['范冰冰', '成就', '金色 银幕 奖 最佳 女配角'], 182 | ['范冰冰', '成就', '华语 电影 传媒 大奖 最 受欢迎 女演员'], 183 | ['范冰冰', '评论', '妈呀 时光 网 终于 舍得 给 我 冰换 头像 了 .......'], 184 | ['范冰冰', '评论', '木秀于 林 , 风必摧之 。'], 185 | ['范冰冰', '评论', '为 毛 分数 那么 低 , 进来 顶 国产 美女'], 186 | ['范冰冰', '评论', '垃圾 中 的 垃圾 , 还特 么 叫 爷 ? ? 麻痹'], 187 | ['范冰冰', '评论', '好 , 哥 以后 也 决定 化身为 棒 棒冰 啦'], 188 | ['范冰冰', '生日', '1981 - 9 - 16'], 189 | ['范冰冰', '身高', '168cm'], 190 | ['范冰冰', '星座', '处女座'], 191 | ['范冰冰', '血型', 'B型']], 192 | 'conversation': ['[1] 你 知道 《 导火线 》 的 主演 是 谁 吗 ?', 193 | '当然 知道 了 , 是 范冰冰', 194 | '你 真棒 , 什么 都 知道', 195 | '[2] 说 到 范冰冰 , 她 可是 红毯 女王 呢', 196 | '范冰冰 确实 长得 很漂亮', 197 | '范冰冰 还是 北京 大学生 电影节 最佳 女主角 , 台湾 电影 金马奖 最佳 女配角 , 戛纳 国际 电影节 评委会 成员 哦 , 演技 也 很 厉害 的', 198 | '她 的 演技 确实 是 很 出色 的 。', 199 | '[3] 提到 演技 , 推荐 你 看看 她 主演 的 《 手机 》 , 是 一部 现实 批判主义 电影', 200 | '这是 一部 什么 类型 的 电影 呢 ? 评分 多少 ?', 201 | '这是 一部 喜剧 剧情片 , 评分 有 7.2', 202 | '那 我 有 时间 可得 去 看看 了', 203 | '相信 你 会 喜欢 的 。', 204 | '[4] 时间 不早了 , 我先 休息 了 , 下次 再聊 吧', 205 | '好 的 , 再见']} 206 | ``` 207 | 208 | ### 2.3 百度画像数据集(画像对话) 209 | 210 | 每一个样本代表一个json串,json串中共包含三个key,分别为`p1_persona`、`p2_persona`和`conversation`。 211 | 212 | - `p1_persona` 213 | 214 | 数组构成,代表该对话人物的画像(喜好内容) 215 | 216 | - `p2_persona` 217 | 218 | 数组构成,代表对话人物的画像(喜好内容) 219 | 220 | - `conversation` 221 | 222 | 数组构成,代表上面两个人物的对话内容 223 | 224 | 下面以一个例子为代表, 225 | 226 | ```json 227 | {'p1_persona': ['我 喜欢 跑步', 228 | '我 最喜欢 的 电影 是 " 大篷车 "', 229 | '我 有 2个 孩子', 230 | '我 喜欢 巧克力蛋糕', 231 | '我 每天 开车 10公里 上班'], 232 | 'p2_persona': ['我 是 一名 陆军', 233 | '作为 一名 军人 , 我 感到 很 光荣', 234 | '我 老婆 和 两个 孩子 在 老家', 235 | '我 不怕死'], 236 | 'conversation': ['p1 : 你好 , 有 机会 认识 一下 吗 ?', 237 | 'p2 : 当然 。', 238 | 'p1 : 你 喜欢 什么 职业 呀 ?', 239 | 'p2 : 我 从小 很喜欢 军营 生活 。 所以 就 一直 很喜欢 军人 。', 240 | 'p1 : 这 是 一个 很 伟大 的 职业 呀 ! 保家卫国 。', 241 | 'p2 : 这 对于 我们 军人 来说 , 是 应该 做 的 。 你 呢 ? 你 喜欢 什么 职业 ?', 242 | 'p1 : 我 因为 很喜欢 跑步 。 所以 现在 , 很喜欢 教练 这个 职业 。', 243 | 'p2 : 这 是 一份 很不错 的 职业 。 你 是 那种 私人 教练 吗 ?', 244 | 'p1 : 对 的 , 曾经 给 许多 明星 做 过 教练 。', 245 | 'p2 : 那 这 很 棒 啊 。', 246 | 'p1 : 再 棒 , 也 没有 你 厉害 啊 !', 247 | 'p2 : 过奖 了 , 这 是 我们 军人 该 做 的 。', 248 | 'p1 : 感觉 你 很 谦虚 , 但是 我 还要 夸 你 , 你 很厉害 。', 249 | 'p2 : 没有 没有 。', 250 | 'p1 : 我 都 被 你 圈 粉 了 , 我 要 去 好好 了解 了解 军人 这个 职业 。', 251 | 'p2 : 好 啊 ! 我 可以 帮 你 了解 我们 , 你 有 什么 想知道 的 都 可以 问 我 。']} 252 | ``` 253 | 254 | ### 2.4 微博对话数据 255 | 256 | 每一个样本代表一个json串,json串中共包含三个key,分别为`history`、`knowledge`和`response` 257 | 258 | - `history` 259 | 260 | 给定一句话,由一个字符串组成,属于单轮对话 261 | 262 | - `knowledge` 263 | 264 | 知识信息,样例数据中均为空 265 | 266 | - `response` 267 | 268 | 根据历史对话信息,所给出的应答,有一个字符串组成 269 | 270 | 以一个例子为代表, 271 | 272 | ```json 273 | { 274 | 'knowledge': ['', ''], 275 | 'history': '香港 卖 touchpad 的 页面 直接 打不开 。 大家 的 热情 燃烧 了 全世界 。', 276 | 'response': '求 通风报信 兼 捎带 啊'} 277 | ``` 278 | 279 | ### 2.5 豆瓣多轮对话 280 | 281 | 每一个样本代表一个json串,json串中共包含三个key,分别为`history`、`knowledge`和`response` 282 | 283 | - `history` 284 | 285 | 给定一句话,由一个字符串组成,属于单轮对话 286 | 287 | - `knowledge` 288 | 289 | 知识信息,样例数据中为一个数组,包含两个元素 290 | 291 | - `response` 292 | 293 | 根据历史对话信息,所给出的应答,有一个字符串组成 294 | 295 | 以一个例子为代表, 296 | 297 | ```json 298 | { 299 | 'response': '男士 能 住 我 现在 其实 住 17号 楼 9 月底 到期 要是 能 的 话 我 提前 订 了', 300 | 'knowledge': ['', ''], 301 | 'history': '招 室友 天通苑 距 地铁 5 分钟 2 家 合 住 豪华 装郁闷 你 这 环境 怎么 找到 的 我 这 想 找找 不到那 你 可以 来 住 啊 现成 的' 302 | } 303 | ``` 304 | 305 | ### 2.6 清华LCCC 306 | 307 | 每一个样本代表一个json串,json串中共包含三个key,分别为`conversation`、`goal`和`knowledge` 308 | 309 | - `conversation` 310 | 311 | 数组构成,多个对话组成 312 | 313 | - `goal` 314 | 315 | 同上,多数为空 316 | 317 | - `knowledge` 318 | 319 | 同上,多数为空 320 | 321 | 以一个例子为代表, 322 | 323 | ```json 324 | { 325 | 'conversation': ['我 就是 背 了 一个 胖子 的 名 , 中看 不中用', 326 | '好 事情 , 你 摸 悲观 嘛', 327 | '恩 , 必须 是 好 事情 , 否则 我 肯定 要 疯'], 328 | 'goal': [], 329 | 'knowledge': []} 330 | ``` 331 | 332 | ### 2.7 清华情感数据集 333 | 334 | 每一个样本代表一个json串,json串中共包含三个key,分别为`history`、`response`和`knowledge` 335 | 336 | - `history` 337 | 338 | 同上,历史对话由一个字符串组成 339 | 340 | - `knowledge` 341 | 342 | 数组构成,数组是是数字。 343 | 344 | 数字代表如下,emotion_dict = {0: '空', 1: '喜欢', 2: '伤心', 3: '厌恶', 4: '愤怒', 5: '高兴'} 345 | 346 | - `response` 347 | 348 | 一个字符串,代表回复的内容 349 | 350 | 以一个例子为代表 351 | 352 | ```json 353 | {'knowledge': [3, 0], 354 | 'history': '呵呵 其实 上网 要是 没事 做 的 话 也 是 很 无聊 的', 355 | 'response': '真的 是 没事 可 做 。'} 356 | ``` 357 | 358 | ### 2.8 腾讯检索辅助生成对话数据集 359 | 360 | 每一个样本代表一个json串,json串中共包含三个key,分别为`history`、`knowledge`和`response` 361 | 362 | - `history` 363 | 364 | 给定的历史对话信息,由一个字符串组成,属于多轮的对话,无法区分具体的speaker 365 | 366 | - `knowledge` 367 | 368 | 知识信息,样例数据中均为空 369 | 370 | - `response` 371 | 372 | 根据历史对话信息,所给出的应答,有一个字符串组成 373 | 374 | 以一个例子为代表, 375 | 376 | ```json 377 | # 样本 1 378 | {'response': '最后 一句 , 我 囧 了 ......', 379 | 'knowledge': ['喜欢 上 明星 是 一个 杯具', '大杯 具'], 380 | 'history': '喜欢 上 明星 是 一个 杯具'} 381 | # 样本 2 382 | {'response': '当代 不必 有 阳 明 , 阳 明 不必 在 当代 ; 心 学 有 继 , 无 阳 明 何妨 , 朴 学 无 传 , 有 阳 明 何用 。 朴 学 万 世 , 并 未 远 人 , 人 自 远 尔', 383 | 'knowledge': ['当代 , 当代', '当代 人民 艺术家 也 是 艺术家 了 ! ! !'], 384 | 'history': '如果 阳 明 大人 在 当代 , 会 如何'} 385 | ``` 386 | 387 | ### 2.9 清华KdConv 388 | 389 | 每一个样本代表一个json串,json串中共包含两个key,分别为`konwledge`和`conversation` 390 | 391 | - `knowledge` 392 | 393 | 类似于**百度DuRecDial(推荐对话)**的数据集的表示格式,有多个三元知识组构成。 394 | 395 | - `conversation` 396 | 397 | 数组构成,代表历史的一系列对话 398 | 399 | 以一个例子为代表, 400 | 401 | ```json 402 | { 403 | 'knowledge': [['太阳 ( 陈绮贞 音乐 专辑 )', '专辑 歌手', '陈绮贞'], 404 | ['太阳 ( 陈绮贞 音乐 专辑 )', '发行 时间', '2009 年 01 月 22 日'], 405 | ['太阳 ( 陈绮贞 音乐 专辑 )', '曲目 数量', '11 首'], 406 | ['太阳 ( 陈绮贞 音乐 专辑 )', '唱片 公司', '艾 迴 唱片'], 407 | ['太阳 ( 陈绮贞 音乐 专辑 )', '音乐风格', '摇滚'], 408 | ['太阳 ( 陈绮贞 音乐 专辑 )', '音乐风格', '流行'], 409 | ['太阳 ( 陈绮贞 音乐 专辑 )', '制作 人', '钟成 虎'], 410 | ['钟成 虎', '职业', '歌手 唱片 制作 人'], 411 | ['钟成 虎', '主要 成就', '第 16 届 金曲奖 流行 音乐 作曲 人奖'], 412 | ['钟成 虎', '代表作品', '《 华丽 的 冒险 》'], 413 | ['钟成 虎', '别名', '小虎 , 虎爷'], 414 | ['钟成 虎', '出生日期', '1974 年 2 月 18 日']], 415 | 'conversation': ['你 听 过 《 太阳 》 这张 专辑 吗 ?', 416 | '嗯 , 是 陈绮贞 演唱 的 , 具体 是 哪一年 发行 的 啊 ?', 417 | '哦 , 是 2009 年 发行 的 , 一 共收录 了 几首歌 呢 ?', 418 | '是 11 首歌 , 唱片 公司 你 听 过 的 吗 ?', 419 | '不是 很 了解 , 知道 是 艾 迴 唱片 , 音乐风格 是 什么 ?', 420 | '是 摇滚 和 流行 , 制作 人 你 可是 了解 的 吧 ?', 421 | '钟成 虎 , 我 不 太 清楚 , 你 能 给 我 讲讲 吗 ?', 422 | '好 的 , 我 知道 他 的 职业 是 歌手 、 唱片 和 制作 人 。', 423 | '那 你 有 什么 主要 成就 的 呢 ?', 424 | '我 只 知道 他 获得 了 第 16 届 金曲奖 流行 音乐 作曲 人奖 。', 425 | '哦 , 那 他 的 代表作 都 有 什么 呢 ?', 426 | '《 华丽 的 冒险 》 啊 , 你 知道 他 的 别 名叫 什么 吗 ?', 427 | '这个 我 还 真 听说 过 叫 小虎 , 虎爷 , 他 年龄 有 多 大 啊 ?', 428 | '听大 了 啊 , 是 1974 年 出生 的 。']} 429 | ``` 430 | 431 | > 以上所有的9个对话数据集的对话内容均进行了分词,由空格分割 432 | 433 | ## 3. 数据ID化 434 | 435 | 本部分主要介绍如何将上面的九个不同的数据格式转化为模型可接受的数据格式。 436 | 437 | ### 3.1 样本的归一化 438 | 439 | 针对上面不同形式的数据集,首先将其归一化为同一种形式,如下, 440 | 441 | 对于每个训练样本,定义为如下四元组, 442 | 443 | 分别为`type`、`knowledge`、`context`和`response` 444 | 445 | - `type` 446 | 447 | recommend、knowledge、persona和chitchat 448 | 449 | - `knowledge` 450 | 451 | type为chitchat的情况下,knowledge均为空 452 | 453 | 其余的情况下,会把所知道的内容,有一个字符串囊括进来,整体如下如下 454 | 455 | ```python 456 | # 清华KdConv数据 457 | knowledge = ' '.join([' '.join(spo) for spo in knowledge]) 458 | 459 | # 百度DuConv数据 460 | goal_knowledge = ' '.join([' '.join(spo) for spo in goal + knowledge]) 461 | 462 | # 腾讯检索辅助生成对话数据集 463 | knowledge = ' '.join(knowledge) 464 | 465 | # 清华情感数据集 466 | emotion_dict = {0: '空', 1: '喜欢', 2: '伤心', 3: '厌恶', 4: '愤怒', 5: '高兴'} 467 | knowledge = ' '.join([emotion_dict[knowledge[0]], emotion_dict[knowledge[1]]]) 468 | 469 | # 百度DuRecDial(推荐对话) 470 | # 将已知的goal,user_profile,knowledge和situation几部分信息都融入至knowledge中 471 | goal = ' '.join([' '.join(g) for g in goal]) 472 | user_profile = ' '.join([' '.join(up) for up in user_profile]) 473 | knowledge = ' '.join([' '.join(spo) for spo in knowledge]) 474 | background = ' '.join([goal, situation, user_profile, knowledge]) 475 | 476 | # 百度画像数据集 477 | knowledge = '\t'.join(persona) # 当前说话方的画像 478 | ``` 479 | 480 | - `context` 481 | 482 | 这里的context指的是历史的对话信息,也就是说如果给定的是一段对话(长度为n),那么会生成n-1个context,或者说n-1个样本。 483 | 484 | - `response` 485 | 486 | 对应的回答内容,可以理解为样本的标签,对应`context`。 487 | 488 | ### 3.2 转换为ID 489 | 490 | 上面提到了将一个样本分为四部分,分别为type、knowledge、context和response,接下来需要将这部分明文数据标准化为ID类的结构(这部分内容会作为模型的输入)。 491 | 492 | 将样本的四部分内容再次进行聚合,可以这样划分,type、knowledge和context为模型的input,也就是样本的**feature**,而response为模型的output,也就是label。 493 | 494 | 宏观可以表示为[CLS]+feature+[SEP]+reponse+[SEP]。 495 | 496 | - feature部分 497 | 498 | 对于type,其映射词典为 499 | 500 | ```json 501 | type_dict = {"chitchat": 30001, "knowledge": 30002, "persona": 30002, "recommend": 30003} 502 | ``` 503 | 504 | 对于knowledge, 505 | 506 | 直接通过`sentencepiece`转化为ID,`sp.EncodeAsIds(knowledge)` 507 | 508 | 对于context, 509 | 510 | 处理稍稍不同,没有直接转化为ID,而是将其切分为多个utterance(可以理解为其中一方说的话),然后每一个utterance转化为ID,每个utterance之间通过[SEP]连接。 511 | 512 | feature部分可以表示为[CLS]+[TYPE_ID]+[knowledge]+[utterance-1]+[SEP]+[utterance-n]+[SEP] 513 | 514 | - label部分 515 | 516 | 这部分对应到reponse,因为这部分就是其中一方说的话,即utterance,可以直接转化为ID 517 | 518 | 整体的ID化表述如下(参考官网的示例图), 519 | 520 | ![](pics/diag_ids.png) 521 | 522 | ## 4. 代码 523 | 524 | ### 4.1 所需运行环境 525 | 526 | 本代码运行基于python3.7,核心的package版本如下, 527 | 528 | ``` 529 | paddlepaddle 2.0.0 530 | paddlenlp 2.0.0rc16 531 | numpy 1.19.2 532 | scipy 1.6.2 533 | sentencepiece 0.1.95 534 | ``` 535 | 536 | > Note:建议通过`conda`命令创建一个py37的虚拟环境,然后通过conda或者pip安装包 537 | 538 | ### 4.2 代码结构 539 | 540 | 代码结构上,相较于官方的baseline有较大的变化,整体如下所示, 541 | 542 | ``` 543 | . 544 | ├── README.md 545 | ├── bin 546 | │   ├── run_predict.sh 547 | │   └── run_train.sh 548 | ├── convert_data_into_idx.py 549 | ├── datasets 550 | │   ├── Dialog_sample 551 | │   │   ├── DuRecDial_sample.txt 552 | │   │   ├── Emotional_sample.txt 553 | │   │   ├── LCCC_sample.txt 554 | │   │   ├── License.docx 555 | │   │   ├── Persona_sample.txt 556 | │   │   ├── README.md 557 | │   │   ├── douban_sample.txt 558 | │   │   ├── duconv_sample.txt 559 | │   │   ├── kdconv_sample.txt 560 | │   │   ├── tencent_sample.txt 561 | │   │   └── weibo_sample.txt 562 | │   ├── Dialog_sample.zip 563 | │   ├── Dialog_train.zip 564 | │   ├── Dialog_dev.zip 565 | │   ├── Dialog_testA 566 | │   │   ├── DuRecDial_test.txt 567 | │   │   ├── Emotional_test.txt 568 | │   │   ├── LCCC_test.txt 569 | │   │   ├── License.docx 570 | │   │   ├── Persona_test.json 571 | │   │   ├── README.md 572 | │   │   ├── douban_test.txt 573 | │   │   ├── duconv_test.txt 574 | │   │   ├── kdconv_test.txt 575 | │   │   ├── tencent_test.txt 576 | │   │   └── weibo_test.txt 577 | │   └── spm.model 578 | ├── models 579 | │   └── __init__.py 580 | ├── output 581 | │   └── predict.txt 582 | ├── pics 583 | │   └── diag_ids.png 584 | ├── run_dialogue.py 585 | └── utils 586 | ├── __init__.py 587 | ├── data_helper.py 588 | ├── data_process 589 | │   ├── __init__.py 590 | │   ├── convert_id.py 591 | │   └── to_sample_for_data_source.py 592 | └── input_args.py 593 | ``` 594 | 595 | > Note:数据目录中,训练集合和验证集未解压,可自行解压查看。 596 | 597 | ### 4.3 代码运行 598 | 599 | #### 4.3.1 模型数据生成 600 | 601 | 首先将训练数据统一转化为固定的格式&ID化。 602 | 603 | 运行命令如下 604 | 605 | ```python 606 | python convert_data_into_idx.py 607 | ``` 608 | 609 | > Note: 默认会将datasets/train、datasets/dev和datasets/test目录下的数据进行转化,可以修改文件`convert_data_into_idx.py`文件,指定哪些数据进行转换 610 | 611 | 最终会生成三个文件,分别为train.txt(用于训练)、dev.txt(用于验证)和test.txt(提交预测)文件。 612 | 613 | #### 4.3.2 模型训练 614 | 615 | 这部分直接参考文件`bin/run_train.sh`即可,运行命令如下, 616 | 617 | ``` 618 | bash bin/run_train.sh 619 | ``` 620 | 621 | > Note: 对于训练相关的详细参数,可以自行修改文件`bin/run_train.sh`。 622 | > 623 | > 对于其中的batch_size,和普通的batch_size含义不太相同,是指len(batch) * max_len的最大值 624 | 625 | #### 4.3.3 模型预测 626 | 627 | 这部分可参考文件`bin/run_predict.sh`,运行命令如下, 628 | 629 | ``` 630 | bash bin/run_predict.sh 631 | ``` 632 | 633 | ## 5. 提交记录 634 | 635 | - baseline默认配置 636 | 637 | 九份数据均使用,每个训练样本数据量限制在5w,共45w条训练数据。 638 | 639 | 训练配置: 640 | 641 | pretrained_model_path="unified_transformer-12L-cn" 642 | train_epochs=10 643 | batch_size=8192 644 | 645 | optimizer(adamX) 646 | 647 | lr=1e-5 648 | weight_decay=0.01 649 | warmup_steps=4000 650 | max_grad_norm=0.1 651 | 652 | 解码配置(均使用默认值): 653 | 654 | ``` 655 | parser.add_argument('--min_dec_len', type=int, default=1, help='The minimum sequence length of generation.') 656 | parser.add_argument('--max_dec_len', type=int, default=64, help='The maximum sequence length of generation.') 657 | parser.add_argument('--num_samples', type=int, default=20, help='The decode numbers in generation.') 658 | parser.add_argument('--decode_strategy', type=str, default='sampling', help='The decode strategy in generation.') 659 | parser.add_argument('--top_k', type=int, default=5, 660 | help='The number of highest probability vocabulary tokens to keep for top-k sampling.') 661 | parser.add_argument('--temperature', type=float, default=1.0, 662 | help='The value used to module the next token probabilities.') 663 | parser.add_argument('--top_p', type=float, default=1.0, help='The cumulative probability for top-p sampling.') 664 | parser.add_argument('--num_beams', type=int, default=0, help='The number of beams for beam search.') 665 | parser.add_argument('--length_penalty', type=float, default=1.0, 666 | help='The exponential penalty to the sequence length for beam search.') 667 | ``` 668 | 669 | 线上分数:score 0.631 670 | 671 | - 调整训练数据 672 | 673 | 仅仅使用三部分数据(百度自建数据)做训练,展开后,共计240276条数据。 674 | 675 | loss: 1.7037 - ppl: 5.4941 - 0.163s/step 676 | 677 | 线上分数:score 0.661 678 | 679 | - 调整预测策略(解码) 680 | 681 | beam_search,为了减低out of gpu memory,调低batch_size为2,num_samples=10,num_beams=10。 682 | 683 | 线上分数:score 0.631 684 | 685 | - 调整预训练模型(目前最优) 686 | 687 | 使用预训练模型为luge,预测策略仍然为sampling 688 | 689 | 线上分数:score 0.717 690 | 691 | - 调整训练策略 692 | 693 | 仍然使用预训练模型luge,预测策略为sampling 694 | 695 | 学习率为1e-5,warmup steps为1000,epoch为3 696 | 697 | 线上分数:score 0.684 698 | 699 | > Note:估计是epochs调低,学习率没有调整,导致学习不充分 700 | 701 | - 改变数据策略 702 | 703 | 使用分数为0.717的配置,将数据进行shuf操作,其余配置均不动。 704 | 705 | 线上分数:score 0.713 706 | 707 | - 改变解码策略 708 | 709 | 基于上面的模型,将num_samples由20调整为30, 710 | 711 | 线上分数:score 0.727 712 | 713 | - 加大数据量 714 | 715 | 将训练和验证的数据合并在一起训练,使用num_samples=20预测,结果为0.721(基于此模型对testB进行了预测,此时的num_samples=30) 716 | 717 | - 使用其他数据预训练(post-train) 718 | 719 | 阈值为5w,共计45w条数据,epoch=3,基于luge模型二次微调;基于微调的模型+训练&验证数据训练,使用num_samples=10预测,最终线上的结果为0.713 720 | 721 | 722 | ## 6. 待优化点记录 723 | 724 | 训练所用的数据 725 | 726 | 训练策略 727 | 728 | 解码策略 729 | 730 | 模型结构(goal细化表征,知识细化表征,知识模板化,copy机制) 731 | 732 | pretrain 733 | 734 | ## References 735 | 736 | - [官网多技能对话基线](https://aistudio.baidu.com/aistudio/projectdetail/1868344) 737 | - [官方多技能github]() 738 | 739 | -------------------------------------------------------------------------------- /datasets/Dialog_sample/douban_sample.txt: -------------------------------------------------------------------------------- 1 | {"response": "男士 能 住 我 现在 其实 住 17号 楼 9 月底 到期 要是 能 的 话 我 提前 订 了", "knowledge": ["", ""], "history": "招 室友 天通苑 距 地铁 5 分钟 2 家 合 住 豪华 装郁闷 你 这 环境 怎么 找到 的 我 这 想 找找 不到那 你 可以 来 住 啊 现成 的"} 2 | {"response": "这 〜", "knowledge": ["", ""], "history": "晒 今晚 跑步 成绩弱弱 的 问 一下 跑步 的 时候 手机 放 哪里 比较 舒服 呢 我 连 手表 都 不想 戴 是 我 太 弱 了我 拿手 上 有 时 带 手表我 放 裤兜 里 吼吼 〜我 穿 短裤 啊 兜 很 浅 的 放 里面 肯定 掉 出来"} 3 | {"response": "3q", "knowledge": ["", ""], "history": "原创 kindle mobi 完美 格式 电子 书 小 笨 霖 英语 笔记dd 那 项 是 灰色 的 其他人 有 这 现象 么杂志 格式 的 电子 书 是 没有 办法 改 类别 的 这个 让 我 也 很 纠结原来 如此 不过 做 得 很好 哈哈 期待 新 作品可以 用 kindle collection manager 改"} 4 | {"response": "与 君 共勉", "knowledge": ["", ""], "history": "忽然 间 觉得 什么 都 无望 了 也 就 这样 了 想 做点 疯狂去 献血 旅游 我 就 去 了 现在 离家 出走 状态恩恩 有 旅行 计划 离家 出走 是 跟 家里 闹 矛盾 了 嘛 还是 要 跟 家里 联系 了 要不 会 担心 的不是 矛盾 最近 失恋 心情 不好 作 的 有 联系 今天 超级 想 回家 听见 电话 里 我 爸 的 声音 眼泪 就 下来 了不 过 真的 想 通 了 家人 才是 真的 爱 自己 也 算 有 收获恩 时间 会 治愈 一切 痛 着 痛 着 也 就 习惯 了 然后 就 淡 了 再 就 忘记 了 生命 里 会 出现 很多 人 但 不 都会 陪 我们 到 最后 所以 顺 其 自然 然后 好好 爱 自己 爱 父母怎么 感觉 我 不是 来 提 建议 反倒 是 lz 来 安慰 我 lz 好人 抱 一个哈哈 现在 情绪 好 点 了 希望 大家 一切 安好 加油"} 5 | {"response": "好 吧", "knowledge": ["", ""], "history": "lz 你 好好 萌 啊170 表示 压力 很 大 萌 不 起来我 表示 175 一下 对 我 都是 萌 货那 和 你 卖萌 简直 太 容易 了我 190 会 乱说下 一句话 是不是 就是 坐标 是 硬伤壮 哉 我 大 承德来 避暑 山庄 玩 的 时候 记得 带 上 狗不理包子 和 大麻 花麻花 包子 换 姑娘 吗换 给 你 大清花 饺子 行 么清 花 是什么名字 而已 啦 就是 承德 比较 有名 的一种 饺子算是 吧"} 6 | {"response": "嗯 我 也 很 懒", "knowledge": ["", ""], "history": "有些 自卑 胆小 吧说 的对 啊 我 一直 在 读书 没 进 社会 也 不 怎么 参加 很多 人 的 活动 心里 确实 也 有些 自卑 得 训练 一下 自己 啊这个 要 有 意识 的 强迫 自己 我 以前 也 这样 虽然 现在 没有 完全 改变 但是 进步 是 有的 你 可以 从小 众 开始 慢慢 进步 不要 着急但是 你 怎么 训练 自己 说话 呢 亲 我 怎么 跟 陌生 人 话 好 少 跟 楼下的 同学说 的 一样 总是 固定 的 模式 说完 就 木 有 了 感觉 很 难 引起 别人 说话 的 兴趣 与 热情这个 还是 看 自己 想 不想 说 我 觉得 如果 想 进一步 沟通 你 肯定 就 会 找 话题 不想 沟通 的 你 肯定 回答 的 也 很 简略 不过 我 现在 也 不 太 爱 跟 人 讲话 懒得 讲"} 7 | {"response": "看 桃源 九 年 的 视频 真 希望 那 时候 在 现场", "knowledge": ["", ""], "history": "李志 b b 小组 被 关真的 挺 喜欢 李志 的 但是 李志 的 脑残粉 真的 让 我 发指 此 逼 组 和 彼 逼 组 真的 越来越 像 了 没有 小组 不 代表 李志 消食 了 多 在 官网 给 他 打点 钱 比 什么 都 强 用 行动 支持 他 吧 ps 当初 北京电视台 封 了 老郭 老郭 不是 照样 红红火火组 的 帖子 还 挺 逗 的 哈哈 现在 有 个 半死不活 的 李志 动物 凶猛 小组我 早就 退 了 李志 那个 组 了 受 不 鸟 那个 组 了 现在 李志 有 个 微博 会 发布 他 的 消息 这样 不是 也 挺好的 吗 还 怕 得 不到 他 的 演出 消息 吗 如果 别人 都 不知道 他 的 演出 消息 他 也 就不 用 演 了 本来 就是 个 歌手 被 当成 了 神 总是 感觉 荒谬恩 其实 有 心想 知道 消息 怎么 都 能 知道 吧 只不过 是 说 豆瓣 有 个 小组 会 比较 方便 一些 从来 都 觉得 歌手 是 用来 欣赏 的 不是 用来 顶礼膜拜 的逼 哥 的 歌 真心 喜欢 他 的 人 我 了解 的 少 但是 感觉 还是 不错 的 他 这 人 挺 低调 的 吧 这样 也好 省 的 不认识 他 的 人 因为 脑残粉 乱 骂 一通 真正 喜欢 他 的 还是 会 一直 关注 他 的 69 票 在 手 我 什么 的 都 不 怕 哈哈我 也 去 69 呢 但 想想 1000 多 号 人 挤 在 那儿 就 慌 他 的 歌 我 也是 很 喜欢 啊 之前 在 月亮 组 有 个 他 的 自爆 贴 文采斐然 哈哈一 升 精液 吧 挤 就 挤 吧 我 一定 会 找 个 靠边 的 地方 逼 粉 的 大 pogo 伤 不 起我 也 觉得 很 可惜 有 时候 希望 自己 喜欢 的 歌手 别 那么 出名 就 好 了有些 是 大 环境 所致 没 办法 坚持 自己 就 好 了"} 8 | {"response": "忍 住", "knowledge": ["", ""], "history": "快来 逗 我 开心喜闻乐见别 把 心里话 说 出来哈哈 哈哈 一 不 小心 暴露 了"} 9 | {"response": "点 开 我 的 豆瓣 然后 在 我 的 头像 下面 就 有 发 豆 邮 啊 点 开发 就 行 啦", "knowledge": ["", ""], "history": "埋线 丰胸好 高端 的 样子 卤煮 弄好 了 要 给 我 豆油 哦第一次 发帖 呀 怎么 给 你 豆油 呀 呵呵 我 是 菜鸟"} 10 | {"response": "祝 你 好运", "knowledge": ["", ""], "history": "绝对 的 教训都是 意外 就 当 自己 承担 一半 算 了问题 是 那 大姐 就是 不 承认 她 有 错 啊人家 怕 嘛我 也 没 扼 钱 啊 还没 耽误 她 工作 就不 能 那么 善良 痛 在 自己 的 身上"} 11 | {"response": "lz 说 的 是 我 的 板凳 分 你 一半", "knowledge": ["", ""], "history": "关 贴小 板凳 拿 好 了 准备 看戏都是 来 看 热闹 呀 不 做点 贡献 怎么 行"} 12 | {"response": "额 为 毛 要 这样 问 呢", "knowledge": ["", ""], "history": "周运 玛 娇丽 每周 占星 运势 730 8 5 羊 处 待★ ★ ★ 金牛座 译者 长 袜子 皮皮 本周 你 将 有机会 和 权威 人物 接触 那些 通常 能够 把 你 马上 换 掉 的 有 影响 力 的 人物 你 觉得 你 现在 和 他们 更加 和谐 一些 了 焦虑 在 减少 中 你 觉得 自己 甚至 都 可以 去 开口 要求 一些 你 想 得到 的 东东 了 或者 至少 你 能够 自信 地 往前 发展 了 可能 前 一段 时间 你 在家 或者 在 那些 你 爱着 的 人们 眼里 都是 不 受 重视 的 但是 现在 你 的 渴望 已经 更多 地 倾向 于 在 工作 上 先声夺人 了 所以 就 为了 你 的 野心 加 把 劲 吧我 可以 说 这个 确实 很 准 嘛我 其实 一直 都 想 知道 大家 是 怎么 能够 在 现在 知道 对 未来 的 预测 是 准 还是 不准 的 呢其实 我 一直 想 知道 你 和 天平 什么 关系"} 13 | {"response": "啊 谢谢", "knowledge": ["", ""], "history": "有问必答 贴 有 问题 来 这里 问岭南大学 宿舍 条件 怎么样 啊 有 wifi 么 有 空调 么 学校 各处 有 wifi 么 学校 里 有 starbucks 么 我 记得 港 大有 啊 然后 那个 学生 信用卡 是 怎么 回事 啊 去 各种 地方 有 打折 的 么 岭 大 是不是 离 市区 很 远 啊 到 市区 大概 要 多久 啊 交通 方 不 方便 啊 没有 军训 的 吧 我 报读 了 bachelor of arts 是不是 进去 了 再 细分 专业 的 啊 能 不能 申请 双学位 的 啊 选择 选修 课程 的 时候 能 不能 选择 不是 自己 专业 比如 数学物理 的 课程 的 啊 我 问题 好多 谢谢 谢谢有 wifi 免费 有 空调 收费 没有 星巴 客 学生 信用卡 你 指 的 哪个 银行 目前 只有 东亚 有 岭南大学 信用卡 免 年费 买 岭南大学 纪念品 的 时候 有 折扣 其它 基本 没有 折扣 花钱 多 了 积分 多 了 可以 换 电影 券 雪糕 券 你 的 市区 概念 是什么 如果 是 屯门区 市中心 小巴 10 分钟 左右 就 到了 其它 到 尖沙嘴 一带 大概 40 分钟 左右 到 港岛 中 寰 要 至少 一个 钟头 有 地铁 有 巴士 香港 到 哪里 交通 都 很 方便 没有 军训 你们 是 第 一年 这样 招生 详情 我们 之前 的 都 不 清楚 但是 按照 宣传 来 看 应该 是 按照 第 一年 成绩 分 专业 不能 申请 双学位 最多 申请 辅修 岭南 没有 理工科 这里 的 数学 最多 也 就学 到 线性代数 微积分 物理 还 不如 你 高 中学 的 具体 会 有 一 张 选修 课表 提供 给 你们 看不 明白 的 可以 追问谢谢 你 的 详细 解答 学生 信用卡 是 我 看到 岭南大学 官网 上 说 迎新 那 几天 会 让 我们 统一 办理 的 那 岭 大 附近 有 地铁站 吗 还是 一定 要 先 坐 小巴 啊 我 是 杭 高 的5 10 分钟 步行 到 地铁站 校门口 也 有 各 路 大巴 统一 办理 的 是 储蓄 卡 信用卡 是 自选 的 可以 不 办理 用 家里 大人 的 副 卡 当然 还是 自己 拿 卡 方便 哦 我 室友 说 杭 高 是 杭州 的 重点 中学 over明白 了 谢谢不 谢 终于 有人 用 帖子 问 问题 不是 用 豆油 了 以后 这些 对话 都 可以 给 之后 的 人参考 我 还要 谢谢 你 捧场 呀 建议 把 去年 的 新生 手册 什么 都 看看 还是 很 实用 的 有什么 问题 继续 回复 问呃 还有 几个 问题 同学 在 学校 里 交流 主要 用 什么 语言 啊 岭 大 网站 上 那个 important date 里 hostel orientation 是什么 意思 啊广东话 所以 先 从 看 tvb 开始 吧 广东话 真的 还 挺 重要 的 不过 我 觉得 你 不用 太 担心 拉 经验 来 看 南方 人 一般 都 学 的 很快 hostel orientation 就是 宿舍 迎新 活动 每 一个 宿舍 都 有 一个 学生组织 叫做 宿 生 会 他们 会 在 每个 学年 开始 组织 一次 3天 hostel d 四 天 的 迎新 表示 对 新 同学 的 欢迎 说白 了 就是 老 宿 生 带 新宿 生 玩 一般 费用 在 250 350 港币 之间 但是 内地 生 的 参加 率 一般 很 低 每年 能 有 12 个 参加 就不 错了 因为 太 凶残 了 女孩子 特别 注意 一下 水战 身体 不好 不要 参加 男生 有 过 参加 完 直接 病倒 的 快递 不 怎么 快 而且 咱 学校 是什么 偏远 地区 收 和 寄 要 额外 收 钱"} 14 | {"response": "你 说完 我 就 睡着 了", "knowledge": ["", ""], "history": "ab 型 水瓶 男 有什么 随便 问 直觉 回答 各类 问题 供血型 跟 星座 有什么 关系我 也 不知道 相互 制约 吧你 觉得 你 自己 是什么 样 的 水瓶我 还 挺 典型 的 吧 不喜欢 太 粘 但是 有 一些 奇怪 的 心里 舒适 度 精神 洁癖 什么 的精神 洁癖 对 爱情 也是 看中 精神就是 我 常 说 以前 如何 不管 和 我 在一起 之后 是 我 在乎 的 要 一心 一起 没有 暧昧 但是 正常 的 活动 我 不会 干涉 你 愿意 带 我 一起 玩 可以 觉得 带 着 我 尴尬 和 我 事前 说 一下 自己 去 也 没事 别 喝 烂醉 不 回家 就 行外表 标准 呢很 难说 反正 不能 看着 没 胃口 我 觉得 要求 不算 高 干净 点 就 ok 性格 好 更 重要那 还是 性格 内在 吧 你 闷骚 么有 时候 明骚 但是 本质 里 闷骚 心情 好 的 时候 明骚我 不知道 如何 靠近 他 上次 不知道 怎么 聊 到 女神 的 话题 他 说 我 为什么 告诉 你 我 的 女神 是 谁 我 挺 无语 的 我 没 直接 问 虽然 现在 还是 正常 聊天 但是 那 场 对话 以后 我 不知道 如何 了解 靠近 他他 似乎 有点 反应 过激 了 阿 自我 保护 这么 强 和 我 不 太 一样我 不 太 记得 了 就 记得 那句话 我 说什么 我 不 记 不得了 他 脾气 不 太 好 他 发 小说 的 因为 我 有 天 问 他 是不是 早就 知道 我 喜欢 他他 说 嗯 我 问 他 想 什么 他 说 没 怎么 想 喜欢 他 的 人 又 不 止 一个 后来 我 也 生气 了 得 瑟 什么好 拽 阿 这 话 心里 想想 也 就算 了 说 出来 就 掉 品 了 似乎 不 把 你 当 回事 儿 不 看好 优质 的 妹子 不该 委屈 自己 迎合 一个 不值得 的 人明天 再 聊吧 你 睡 吗"} 15 | {"response": "可不 可以 帮 我 也 发 下 邮箱 是 url", "knowledge": ["", ""], "history": "中医 自学 之 路艺术 类 学校 伤 不 起 什么 都 没有网上 有 不少 资源 有些 挺好的 包括 纪录 片 录音 课程 视频 如果 有 兴趣 您 可以 留下 邮箱 哈你 要 给 我 发 么好啊 url已 发 两个 查收 哈"} 16 | {"response": "是 学校 巡展 的 介绍 会 吗 最近 在 满世界 招生 呢 子 矜 在哪里 读", "knowledge": ["", ""], "history": "想 去 英国 学 艺术 史 有 同行 吗我 无论如何 看到 的 费用 都是 一年 三 学期 25000 胖 是 ma 吗那 是 漲 了 我 了解 的 是 去年 申 請 的 行情涨 这么 快 毫无 背景 和 收藏 经历 不过 sotheby 会 有 提供 去 拍卖 行 实习 的 机会 么嗯 我 記 得 介 紹 會 的 時 候 他 們 有 提到 實 習"} 17 | {"response": "那 是 因为 你 太 久 没 触发 了", "knowledge": ["", ""], "history": "雷神 的 精 准 之 视 触发 概率 大概 是多少 有没有 规律无 cd 无 概率 脸 好 连续 触发 脸 差 5 分钟 都 不 触发 除非 能 对 战斗 非常 熟悉 不然 这 4 秒 不好 把握不过 昨天 晚上 用 的 感觉 好像 是 有 规律 的 比如 开场 的 时候 就 特别 容易 触发 之后 基本 整 场 战斗 也 就 触发 两三 次 了"} 18 | {"response": "哈哈 因 為 看到 妳 寫 的 沒 有 五官 的 人 突然 讓 我 想到 這 件 事 有 感 而 發 樓 主 妳 中國 鬼故事 說 的 很 精彩 請 繼 續 別 被 我 打 斷", "knowledge": ["", ""], "history": "八卦 组怪谈 天朝 の 恐怖 都市传说 欢迎补充4 没有 五官 的 人 发生 于 某 高校 一个 女孩 深夜 去 自习室 学习 自习室 里 空无 一人 女孩 找 个 位子 坐下 专心致志 的 看 起 书 来 看到 一半 她 听到 身后 有 翻书 的 声音 女孩 回 过头 看到 身后 的 座位 坐 着 一个 女人 这个 女人 低着头 看 一本 厚厚 的 书 长发 遮住 脸 看不 到 长相 女孩 不经意 的 看 了一 眼 女人 桌 的 书 发现 书 上 什么 字 都 没有 每 一 页 都是 白纸 女孩 很好奇 的 问道 你 在 看 什么 女人 抬起头 是 一 张 没有 五官 的 白脸 我 在 看书 啊 解说 没有 五官 的 人 流传 于 全国各地 很多 人都 曾 亲眼 目睹 过 没有 五官 的 人 有 一种 说法 是 因为 毁容 心怀 怨恨 死去 的 灵魂沒 五官 的 我 有 遇到 類 似的 不 過 她 還 有 剩 一 張 嘴 曾 經 奶奶 住院 晚上 11 點 多 搭 醫 院 的 大 電 梯 我 就 在 鏡 子 的 反射 裡 看到 臉 很 白 眼睛 鼻子 都 沒 有 只 剩下 黑色 嘴唇 微微 上 揚 的 女人 站 在 最 角落 正 45 度 角 而且 一 動 也 不 動 雖 然 很 晚 但是 跟 我 搭 同 電 梯 的 人 不少 還 有 位 先生 坐 著 輪 椅 給 人 推 當 時 以 為 自己 看 錯 了不 當 回事 的 對 著 鏡 子 左 看 右 看 無 論 怎 麼 看 總 覺 得 她 好像 就是 在朝 自己 笑 因 為 好奇 我 看得 太 仔 細 發 現 她 的 色 澤 跟 身 邊 的 人 不 同 有 點 灰灰 的 一瞬 間 全身 雞 皮 疙瘩 開 始 明白 是 怎 麼 回事 後 就 開 始 害怕 了 完全 不敢 回 頭 啊 電 梯 很 安 靜 只有 幾 聲 咳嗽 聲 門 一 開 大家 幾 乎 爭 先 恐 後 的 衝 出 電 梯 連 推 輪 椅 的 人都 差 點 把 先生 推倒 了 出 來 的 人 裡 就是 沒 有 她 雖 然 沒 有人 討 論 大家 都 心照不宣 應 該 是 都 看到 了 吧台湾 有 很多 都市传说 啊 而且 极其 恐怖"} 19 | {"response": "那 就 去 争取 我 总 觉得 幸福 应该 掌握 在 自己 手 里 你 看 他 的 父母 也 很 喜欢 你 不是 吗 有的人 如果 错过 了 那 你 就 再 也 遇 不到 了 不要 放弃 加油 我 支持 你", "knowledge": ["", ""], "history": "永远 都 别 放弃 那个 你 每天 都在 想念 的 人深 有 同感 好想 他哎 总是 失去 了 才 懂得 成长 都是 以 疼痛 为 代价 啊今天 他 妈妈 打 电话 给 我 问 事情 的 始末 因为 他 不 愿 跟 家人 提及 阿姨 说 她 看 我 发 的 状态 很 心疼 掉 眼泪 知道 以后 让 我 别 难过 说 等 五一 放假 她 和 他 爸爸 会 找 他 好好 聊聊 唉 希望 事情 不会 越来越 麻烦你 想 分开 吗不想 啊"} 20 | {"response": "嗯 谢谢 亲", "knowledge": ["", ""], "history": "失恋 适合 听 什么 歌撸 主 打算 在 歌声 中 溺死 自己 么想林 阿姨 的 听说 爱情 回来 过 gigi 的 原来 爱情 这么 伤 tanya 的 陌生 人 选 一个 单曲 循环 吧亲 多谢 了你 不要 直播 是 为啥 分手 么 豆瓣 上 这么 多 阳光 青年 排队 等 着 来 安慰 你直播 最近 心烦 啊 没 心情 等 过 段 时间 心情 好 点 再 直播 尽 请 期待摸摸 头 哭 出来 就 好 了 昂 说 出来 就 没事 了"} 21 | {"response": "那 也 行 地址 豆油 我 把", "knowledge": ["", ""], "history": "北海道 归来 终于也有了自己的 ご 当地北海道 小 卡 就 缺 个 狐狸 哇 好 可惜 看 全景 对比 图 感觉 超 棒我 有 多 狐狸 喔求 小 卡 全套 我 也 拿 全套 跟 你 换 撒 如果 有 多余 的 话我 北海道 的 差 一 张 玉米 其他 三张 有 多余 话说 莉莉 我 给 你 汇款 了 收 到了 么 不能 备注 不知道 为什么 ⋯ ⋯ 我 就 汇款 完 给 你 豆油 了所有人 的 钱 都 收 到 啦 那 换 其他 三张 你 想要 哪里 的 我 有 gifu 多余 山梨 的 我 得 去 邮局 要 试试 看反正 我 都 沒 有 所以 都 可以 啦 我 回 國 給 你 寄在 这里 邮寄 多 快 啊 一 天 就 到了 又 安全 又 快"} 22 | {"response": "那 你 现在 是 要 努力 改变 那 你 要 加油 我 也是 在 改变 一同 努力 吧", "knowledge": ["", ""], "history": "我 的 梦 能 预测 未来我 跟 你 交换 我 能 看穿 人心你 还是 不要 和 我 换 了 刚 从 医院 回来 我 的 心脏 出 了 问题 太特 么 难过 了 我 一 开始 就 错了 就不该 来 韩国 不来 韩国 就不 会 苦逼 学习 不会 打工 不会 身体 不好 不会 现在 心脏 我 特 么 还没 而立 呢你 这 话说 的 何不 如 跟 我 一样 避开 所有 一切 你 知道 喜欢 一个 人 其他 对方 心里 从来 就 没 你 你 会 比 现在 更 难受 你 身体 不好 就 赶紧 回来 别 在 外面 漂 了我 过 了 恋爱 的 阶段 了 来 这 分手后 学习 工作 身体 的 压力 让 我 觉得 感情 太 奢侈 了 也 太 难 得了 人生 不是 游戏 啊 不是 耍 个 赖 就 可以 改变 自己 的 选择 的 回去 也 得 毕业 啊"} 23 | {"response": "最近 会 通知 你 的", "knowledge": ["", ""], "history": "文 三西 路 美 妆 app 招募 运营 实习生露珠 还 招 吗招 呀 欢迎 投 简历已 发送已 回复有 戏 么"} 24 | {"response": "是 妹子 啦", "knowledge": ["", ""], "history": "由 学院 风 长袖 一 件 搭 个 什么 好 呢下身 紧身 牛仔裤 颜色 不要 太 深 〜米黄色 休闲裤 可以 吗 那 鞋子 呢同 那 位 浅色 紧身 牛仔裤 铅笔裤 之类 黄色 裤子 为 嘛 感觉 是 学院 男生"} 25 | {"response": "今天 见 朋友 了 不要 太 兴奋 卤煮 也 要 睡 了 晚安", "knowledge": ["", ""], "history": "卤煮 停 更 了 谢谢 大家lz 看 你 的 了好 的 好 的 最近 初见成效 了 妈妈说 我 白 了 妈妈 也 想 跟 我 一起 喝 了 呢鸡冻 了 这 大半 夜 的表 激动 卤煮 最近 吃 的 很少 身体 没什么 可 吸收 的 所以 喝 下去 的 吸收 更好 吧 不过 真的 管用 皮肤 也 变 细 了好 吧 俺 要 学习 露珠 不过 熬夜 神马 的 也 伤 皮肤 啊 俺 先 去 洗脸 睡觉 了 晚安 露珠"} 26 | {"response": "是啊 这 不 科学", "knowledge": ["", ""], "history": "凑 单 凑 的 这么 整齐 请 膜拜 好吗83 20这个 不 科学 不是 先 算 五元 配送费 再 减 的 么 而且 你 怎么 减 这么 多"} 27 | {"response": "好 高端", "knowledge": ["", ""], "history": "劈里啪啦 仨 月 阳虚 变 平和 图 拍 痧 是 个 好习惯我 今早 拍 了 肘窝 我 去 紫黑色 啊 是 明天 才能 洗澡 吧最好 明天 再 洗 啦等 痧 下去 好 慢 啊 看到 拍 出来 的 痧 我 就 想 接着 拍 把 毒素 都 拍 出来我 也是 累 到 不行 也 要 把 它 拍 到 不 再 出我 都 想 拍 脸 了 把 脸上 毒素 都 拍 出来 还 省 护肤品 化妆品 的 钱 了"} 28 | {"response": "→ → 豆 你 妹", "knowledge": ["", ""], "history": "这 小组 不能 来 多 啊 来 多 了 会 越来越 傻逼 啊楼主 摸摸 头呜呜 呜不 哭 不 哭 站 起来 撸不 撸 不 撸那 给 你 糖 吃在哪 呀张嘴 啊这 类 内容 请 豆油 好吗"} 29 | {"response": "嘿 好像 是 喔 诶 呀 好久 没 坐 了 真 想念", "knowledge": ["", ""], "history": "关于 台湾 食物 的 回忆介绍 一下 自己 的 情况 我 2010 9 2011 1 有 在 新竹 交大 交换 四 个 月 当时 就 吃 得 一发不可收拾 了 所以 这 一次 也 算是 重温 味道 咯 印象 依旧 很好 是啊 我 本来 就 好 爱 吃 也 算是 有点 喜欢 研究 背后 的 文化 嘿嘿 嘿我 是 新竹 人 不 過 我 覺 得 新竹 吃 的 好像 比 較 少 因 為 新竹 主要 是 科 學 園 區 工程 師 居多 如果 要 去 台北 很快 火 車 搭 自 強 號 70 分 鐘 就 到了嘿 新竹 人 好 我 很 想念 新竹 的 我 当时 都是 坐 竹 客 因为 在 学校 门口 就 可以 坐 超 方便 的 我 很 喜欢 城隍庙 的 润饼我 也 坐 過 竹 客 不 過 竹 客 的 缺 點 就是 太 慢 到 北 車 總 是 在 台北 東 繞 西 繞"} 30 | {"response": "奥 不 理 你 了", "knowledge": ["", ""], "history": "我 总是 喜欢 搞 暧昧 然后 差不多 了 就不 理人 女生 了 · · ·白羊 啊 和 星座 貌似 无关 吧我 也 白羊嗯 现在 不是 套 近乎 的 时候 我 在 求解 oo"} 31 | {"response": "是 呀 欲擒故纵 太 实用 了 对于 摩羯", "knowledge": ["", ""], "history": "摩羯座 不 爱 聊 qq可 他 就不 是 阿 也是 在 就 在 不在 就 真的 不在 而且 喜欢 和 我 聊 反正 我 找 他 基本 都 陪 我 聊 除非 有 工作 要 忙那 是 他 真的 在乎 你不过 也 不 比 以前 了 但是 也 还 可以可能 是 相对 稳定 了 所以 比不上 以前 了"} 32 | {"response": "我 今天 来 检查 了 医生 一 看 就 说 没事 你 怎么 还要 查 啊", "knowledge": ["", ""], "history": "看 了 两次 皮肤科 都 说 是 假性湿疣 明天 打算 去 做 hpv我 妈咪 就是 医生 还 不 赶 给 她 看 但是 我 了解 一些 要 只好 了 才能 要 宝宝 真的 觉得 这个 世界 好 乱 好多 人 乱 搞 才 会 把 病 带 的 越来越 多 把 好多 无辜 的 人 也 传染 上 了 哎 出门 什么 的 一定 要 当心你 的 是什么 症状 痛 和 痒 吗 发现 多久 了 我 也 在 怀疑 我 自己一点 感觉 都 没有 但是 是 密密麻麻 的 一片 能 摸 出来 小 鱼子 一样"} 33 | {"response": "y 们", "knowledge": ["", ""], "history": "三里屯 饭局 结束 之后爷们 肯定 不会 请 你 吃饭 你 请 姑娘 吃饭 人 姑娘 还 会 考虑 一下 所以 我 替 你 挽尊 了我 擦 这么 鸡 逼 我 请 就 我 请 好 我 改加油 你 这 明显 是 女神 跟 高 帅 富 跑 了 只能 干 瞪眼 的 节奏 啊哪儿 呢 我 刚才 跟 我 朋友 聊天 还 球 球 上帝 赐 我 一个 high level 女神 呢 我 当 备胎 都 可以 啊 在哪 呢 在哪 呢那 你 这 签名 你 这 状态 干嘛 呀 这 是嘛还要 发现你 丫 神 烦 太 尖锐 了 扎 死 我 了啊 哈哈 哈 所以 我 不能 去 跟 你 吃饭 不然 你 得 暴躁没有 16 块 儿 腹肌 哪儿 敢 约 你 啊 男模 分分钟 劈叉 搞 死 我我 不要 腹肌 人鱼线 就 成 男模 都 特 么 是 工作 上 接触 了 一下 你 喜欢 上 哪个 了 我 去 帮 你 问问 好吗一 看 你 就不 爱 我 都 不 关注 我 动态 我 拉稀 都 拉 了 两天 了 好吗 这样 就 不要 约 男模 了 就 这样拉稀 更好 啊 拉 干净 了 才 好啊你 怎么 这样 啊 你 这 不是 助长 瞎眼 老爷 们 儿 约 我 嘛 我 不是 给 我 喜欢 女人 啊没事 啦 目前 我 看 你 帖子 里 都是 妞 你 别 瞎 比比 引起 老爷 们 注意 以为 我 不知道 你 的 逆反心理口 贩子 大 集合 我 谢谢 你们 起哄 架 样子 再 这么 下去 你们 要 目送 我 出柜 了"} 34 | {"response": "好 辛苦 耶 但是 好好 玩 下次 我 也 要 去 演", "knowledge": ["", ""], "history": "征人 或 转让 原告证人本人 女 可以 一起 看 哦 或者 lz 可以 转让 给 我 谢谢 哦 豆油 我 吧啊 维 尼 我 820 正好 请假 不 演 的 今天 问 了 导演 只有 零星 碎 票 可能 找 不 出 联 票 了坏蛋 坏蛋 我 是 维 尼 没事 没事 碎 票 也 可以 啊 只要 能 一 睹 坏蛋 维 尼 大侠 的 风采啊 哪 有啊 我 基本 隔 天演 今晚 彩排 时 再 去 问问"} 35 | {"response": "我 觉得 我 小 时候 很 强大 啊 越 活 越 回去 了 现在 超 幼稚", "knowledge": ["", ""], "history": "就算 喜欢 的 人 走 了 男女 朋友 也 只是 围观 有 没上 初中 时有 过 喜欢 一 男神 他 音乐 好 体育 好 长 得 帅 还是 数学课代表 我 就 每次 数学 拿 最高 分 啊 早上 五 点 起来 打 篮球 啊 然后 有 一 天 看见 他 和 另外 一个 女生 走 在一起 很 难过 但是 没 两天 就 又 没 感觉 了 一样 拿 数学 最高 分 一样 打 篮球 好像 已经 与 他 无关 了 四 年 以后 他 开始 追 我 说 关注 我 很久 了 付出 还是 有 收获 的好 幸福 我 也 想像 你 那样"} 36 | {"response": "对 那 是 我", "knowledge": ["", ""], "history": "今年 年 想 去 尼泊尔 有 相同 想法 的 同学 英语 还 行 的 吗这里来 啦所以 呢等 你 呗这个 qq 跟 你 说话 你 不在忘 了 我 也 不错 是 你 吗"} 37 | {"response": "商学院 这 帮 孩子 网吧 都是 爆满 的 凌晨 了 还有 好多 在 吃 夜宵 的 比 我 大学 那 会 玩 得 还 疯 算 了 明天 打 电话 问问 不 试试 我 是 不会 甘心 的 谢谢 胖 哥 我 睡 了 晚安", "knowledge": ["", ""], "history": "求 长沙 沙发 10月 4 5 6 号湘 府 中路 豪布斯卡 酒店 五星级求 给 那个 旅行 中的 龟 的 电话 啊自己 问 那 姑娘 不 就 行 了胖 哥 你 说 我 想 在 国庆 期间 找 个 大学城 的 男生宿舍 收留 我 可能 实现 吗我 觉得 可能性 还是 有的 前提 是 你 有 认识 的 人我 有 个 同学 在 湖大 读研 我 这 两天 都在 纠结 跟 不跟 他 提 这 事 如果 他 那边 没 问题 倒 没什么 如果 不行 肯定 有 他 为难 的 地方 我 不想 让 他 为难 我们 是 初中 3年 的 同学 认识 12 年 了 还 曾经 同桌 过 一年 胖 哥 你 觉得 我 该 不该 开口 呢你 要 住 大学城 干嘛 你 不是 在 河西 有 地方 住 么那 7 天 放假 我 中旬 有 个 考试 要 参加 我 想 在 校园 好好 的 看书 跟 学生 们 一起 自习 我 觉得 自己 可以 学 得 更 专心 些 而且 校园 环境 真心 不错 爬山 打球 都 可以 oo学习 还是 看 自己 而且 从 你 那边 到 商学院 也 不 远 啊"} 38 | {"response": "这个 没 看到", "knowledge": ["", ""], "history": "晒 show girl cj 和 他 的 美女 们我 没有 看到 戴夫 摔哈哈 我 也是 朋友 带 过去 的我 只 和 僵尸 合影 了有 cos 僵尸 的穿 了 僵尸 毛绒 衣服 的"} 39 | {"response": "好看 啊 0", "knowledge": ["", ""], "history": "求 推荐 大 直径 舒适 美 瞳 牌子kimino 算 正规 品牌 大 直径 的 了 水草 很 貌 美水草 系列 的 戴 出来 好看 吗"} 40 | {"response": "天 热 不想 下厨", "knowledge": ["", ""], "history": "看到 女 壮士 我 脑海 中 就 浮现 出 一个 虎背熊腰 的 姑娘 的 形象哈哈 哈 正解好 吧 同 在 浦东 工作 的 外来务工人员 表示 亲切 慰问辛苦 啦哎 这 是 我 的 名片 请 笑纳别闹好 吧 在外 出差 晚上 给 你 豆油 好 了出差 貌似 出差 的 叔 都会 yp你 想 多 了 俩 大老爷 们 住 标 间 如何 y好 吧住 的 很 偏 几乎 郊区 了 摔郊区 空气 好 呀是啊 吃饭 都 不 方便 啊 魂 淡没有 好吃 的不是 好吃 不 好吃 的 问题 是 有没有 吃 的 问题自己 做宾馆 怎么 做饭回家 以后你来做么  ̄ エ  ̄自己 做 懒得 你"} 41 | {"response": "ouch 掉 水 里 了 就不 能 上网 了 呵", "knowledge": ["", ""], "history": "我 的 classic160g 挂了ipod 拿 着 尸体 貌似 都 可以 九 折是 因为 抢救 不 回来 的 ipod 太多 了 吗"} 42 | {"response": "那 不 清楚", "knowledge": ["", ""], "history": "米聊 陌陌 有人 用 吗米聊 下 了 之后 又 删 了 陌陌 难得 用和 我 的 情况 蛮 像 的我 还有 遇见 ﹁ ﹁那个 怎么样以前 感觉 比 陌陌 好 能 知道 谁 看过 你 资料 能 送礼 物 撒 的 现在 那 上面 男 的 质量 也 不咋地 了遇见 不是 人人 出 的 吗 额我 不知道 阿好 吧 只 用 微信 的 路过 陌陌 可以 查看 好 朋友 间 的 具体 距离遇见 还能 看 地图 类额 这么 神奇 我 默默 的 去 下载 遇见 去那 是 想 找 撒 区 的 分分钟 能 找到 ˇ ˍ ˇ你 说 的 就 可以 定位 捉奸 了"} 43 | {"response": "我 告诉 你 一个 个案 医院 主任 事业心 重 高级 知识分子 其实 我 觉得 这种 条件 就 别 没 必要 那么 强迫 自己 结果 人家 还是 不 死心 的 在 37 岁 这 年 闪 婚嫁 了 对方 年龄 相当 其他 好 与 坏 不 做 评论 然后 开始 上下 求索 由于 钱 有的 是 试管 都 不知道 做 了 多少 回 了 我 觉得 像 这种 情况 就 该 在 25 30 岁 这个 阶段 好好 选择 不能 到了 30 末期 再 两边 够不着 她 老公 也是 自己 这个 年龄 如果 想 好 了 非 要 造人 不如 找 点 年轻 的 纯 动物 性 的 现在 这样 何苦 呢 简直 是 互相 伤害", "knowledge": ["", ""], "history": "听说 2013 年会 有 很多 生孩子 的 电视剧 播出 哦那 时候 电视台 热播 啊 刚好 是 公婆 来 家里 小住 的 时间 他们 喜欢 看 电视 我们 都是 看 美剧 但 不能 让 公婆 看 美剧 啊 我们 只好 随着 他们 但 一 看见 夫妻那些事 就 赶紧 换 台 生怕 他们 借题发挥 哎 不 知 什么时候 中国 父母 们 才 会 学 着 尊重 孩子 的 选择 认识 一些 有 成年 子女 的 美国人 都 能 把 孩子 当 真正 的 独立 个体 我 有 个 60 岁 的 米国 好友 早年 婚姻 不 幸福 他 女儿 最近 结婚 动 了 养 儿 育 女 的 念头 他 劝 其 想 清楚 不要 贸然 下 决定 还 认识 另 一 美国 退休 女子 有 两 名 子女 她 渴望 抱 孙 但 也 不 干涉 孩子 们 丁 客 的 决定 其 小女 不 小心 怀孕 了 决定 打掉 她 虽然 伤心 但 也 尊重 孩子 的 决定 真 向往 这种 境界嗯 拍 这些 电视剧 的 目的 呢 就是 糊弄 糊弄 上 了 年纪 的 人 让 他们 看过 电视剧 之后 赶紧 去 孩子 面前 催生问题 是 他们 为啥 要 热烈 的 催生 呢 不能 尊重 孩子 作为 一个 独立 成人 的 决定 吗 今天 和 友人 谈天 时 她 告诉 我 一个 个案 某 女 30 已婚 几 年 想 生 但 没 成功 其 母 按耐 不 住 下 最后 通牒 命令 其 去 做 试管 唉 这 位 长辈 是 一 位 妇产科医生 好歹 也是 一名 知识分子 怎 末 就 和 其他 封建 的 家长 一样 呢"} 44 | {"response": "站 上 撸 了不 知几 遍 了 连着 王二 的 你 不知道 的 事 和 云中 逐 迪 的 苦逼 样 觉得 好 虐 啊 尼玛 觉得 他们 是 真爱 被 拆散 啊 肿么 破", "knowledge": ["", ""], "history": "看看 教授 自己 是 怎么 看待 电 钢琴 的快来 拯救 我 我 要 被 给 王二 洗白 的 帖子 视频 檀木 给 攻陷 了 啊 突然 觉得 黄绿 红 也是 受害 者 怎么 破去 看 教授 的 跨年 吧"} 45 | {"response": "哈哈 哈哈 哈哈 我 好 喜欢 你 是不是 有点 天然呆 哈哈 哈哈 太 萌 了", "knowledge": ["", ""], "history": "过节 家里 来 的 小孩 个个 都是 咆哮兽 破坏 王lz 这 都是 你们 惯 出来 的 不要 怪 小 孩子我 可 没 惯 她 我 跟 他们 也 就是 一年 见 一次 还是 他们 来 我 家 挣 压岁钱 的那 就 请 你 当面 教育 她 为什么 你 不要 说 出来 要 来 豆瓣 发帖 忍 不了 就 教训 她 顺便 给 他 妈 看亲 我 爹娘 都在 给 她 撑腰 我 敢 么 我 我 再不 发泄 出来 要 憋死 了 这 不在 豆瓣 上 说 出来 有 很多 朋友 也 在 给 我 出 主意 嘛 直接 说 也 要 讲究 方法 的 8 过 还是 谢谢 你 意见 很 有 建设 性你 爸妈 也 就是 当 她 面儿 说说 你 反正 我 是 宁可 被 父母 说 也 要 抗争 到底 ps 我 小 时候 是 谁 逗 我 我 都 不 笑 的 面瘫 所以 有 一次 去 幼儿园 看见 一个 那样 的 小 朋友 柑橘 特别 亲切 有没有"} 46 | {"response": "不能 说 不 包容 吧 实在 是 义工 一 词 在 美化 这些 旅行 者 的 生存状态 这个 工作 方式 跟 义 半点 关系 都 没有 的 好不", "knowledge": ["", ""], "history": "2013 义工 报名 处楼主 能 说说 为啥 把 您 找 的 人 叫 义工 么 这个 词 来自 于 港台 对 volunteer 一 词 的 意译 大陆 叫 志愿 者 跟 楼主 以 食宿 换 服务 的 招聘 目标 根本 不是 一码事 啊 把 这些 愿意 廉价 出卖 劳动力 和 时间 的 旅行 者 称为 义工 这 不是 楼主 在 另 一个 贴里 极度 鄙视 的 那种 心态 么 明明 是 个 渣 还 非 要 装 逼在 大陆 的 青旅 都 把 这种 以 劳动 换 食宿 的 方式 称之为 义工 这 是 我们 这边 的 习惯 你 可 以来 这 两个 小组 看看 url 你 住 过 的 国际 青年 旅社 如果 有 不 明白 的 你 可以 在 小组 你 发发 请教 下 好吗 每个 地方 都 有 每个 地方 不 同 的 文化 和 习俗 不能 以 你 看到 的 来 衡量 世界 我 看 你 的 相册 也是 常 出去 旅行 的 人 怎么 这点 包容 和 理想 都 没有 呢"} 47 | {"response": "已 无语 勿 念", "knowledge": ["", ""], "history": "好 姑娘 请 举手举手 好 姑娘 就是 被 人 甩 的 份谁 敢 甩 你豆瓣 上 某个 渣 男人 跟 别的 女人 跑掉 了为什么 跟 别人 跑 了 就是 渣 男人 听 上去 你好 可怕 的 样子因为 他 骗 我 让 我 伤心 了 我 一点 都 不 可怕 好不好 我 是 好 姑娘理解 了 所以 看 我 签名嗯 是 混蛋你 看到 了 前 半 部分是 混蛋 不是 骗子 嘛"} 48 | {"response": "我 最 怕 考 依法治国", "knowledge": ["", ""], "history": "刚 看到 同学 转 的 状态 启航 压 的 政治 大 题 大家 看看吧一定 会考 的 大 部分 不 会考 相信 我 这个 老人求 老人 点拨点拨 就是 有 认真 复习 不管 现在 状态 怎么样 都 别 担心 也许 不 一定 有 高分 但 肯定 木 有 问题"} 49 | {"response": "问 个 蠢 问题 肿么 辨别 马丁 的 产地 啊", "knowledge": ["", ""], "history": "删我 想说 昨天 马丁 官网 有 优惠码 可以 多 25 off 相当 于 折 上 折 我 下手 了 三双 英 产 vintage 那 可是 长年 不 打折 的 款 但 那个 code 只 持续 一 天 就 过期 了 划算 到 死 〜可惜 我 看到 的 时候 已经 过期 了 你 买 的 内 几 双 是 纯色 内 种 吧 颜色 好 骚 我 也 喜欢嗯 vintage1460 和 mie1461 红黑 两 色 马丁 我 收 的 大多 都是 经典 款 〜 加上 这 三双 就 有 8 双 了 其中 一双 限定 一双 rafi 剩下 的 都是 经典 款 不 同 孔 数 和 颜色 的 哈哈"} 50 | {"response": "愿 太多 经常 不知道 违 的 是 哪个 哈哈", "knowledge": ["", ""], "history": "化 忌 入 命命宫 贪狼 化 忌 的 飘过你 是不是 经常 事与愿违 · · · · ·"} 51 | {"response": "白羊 太 小 孩儿 所以 他们 通常 喜欢 御姐", "knowledge": ["", ""], "history": "白羊 男 喜欢 萝莉 点 的 还是 御姐 点 的御姐以前 我 齐刘海 他 总是 把 我 弄 成 斜 的"} 52 | {"response": "给 神勇 的 大队 长跪 了", "knowledge": ["", ""], "history": "铁 根 骑 28 追截 我 屯 公厕 窥 阴 男 精彩 片段尿 了你"} 53 | {"response": "金融 泪 奔", "knowledge": ["", ""], "history": "说好 的 木 六 工作 运 好 呢如果 你 把 工作 看得 十分 重要 觉得 是 撑 脸面 或者 评价 人生 的 一 件 大事 的 话 就 去 看 10 宫 如果 觉得 工作 只是 为了生存 而 不 得 不 做 例行公事 的 话 那 就 看 6 宫我 觉得 我 把 工作 看得 挺 重 但 未来 不知道 会不会 不 那么 重要 我 十 宫 不 太 好当 你 对 一 件 事情 采用 不 同 的 心态 时 就要 看不 同 的 宫位 了 宫位 说到底 了 是 面对 某 类 境况 时 的 心态 同一 件 事 不 同 的 大脑 可以 划分 到 不 同 的 领域 去也 确实 可能 我 之前 都 把 工作 看得 比较 重 所以 真正 应该 看 的 是 十 宫 十 宫主 冥王 入 天蝎lz 我 觉得 你 的 盘 应该 还是 不错 的 我 比 你 小 二十 多 天 就 土木 冲 了 木 冲土 天 海 有 了 t square 好多 红线 跟 蓝 线 的 冥 10 不 一定 事业 不好 10 宫 不 也 代表 母亲 还是 父亲 来着t square 我 也 有 好多 我 木 天冲 12 3 4 5 宫 都 空 了我 也是 1 到 5 宫 空 的 我们 的 盘 乍看 应该 很 像 的 水 金 火 的 星座 不一样 我 的 水木 刑 冲 多 你 月 座 是什么 呀月亮 处女 金星 也是 处女我 是 日 处 月 狮 你 是 日 狮 月 处 哈哈真心 好 合 太 神奇 了 ≧ ▽ ≦ 你 现在 过 得 怎么样 日 处 月 狮 内心 应该 很 强大 吧握 个 爪 抱 一 抱 真是 好 有缘 份 最近 比较 情绪化 也是 关于 工作 呀 未来 呀 我 也 到 现在 没 谈 过 恋爱 跟 异性 接触 很少 我们 应该 怎样 改变 呢我 跟 你 一样 一样 工作 找 得 好 辛苦 木 有 谈 过 恋爱 握 爪我 很 不好意思 的说 我 没 找 过 工作 我 要 继续 读书 的 ⊙ ﹏ ⊙ b 汗所以 你 要 继续 读 博我 爸妈 觉得 我 比较 适合 读书 不 让 我 出去 工作 我 2012年 前 一直 认为 我 就 念 到 博士 然后 出来 教书 现在 觉得 应该 先 去 工作 知道 该 学 什么 再 去 读 我 现在 想 工作 但是 不 读 个 硕士 看来 是 不行 的 想到 这个 就 想 哭唉 我 就是 硕士 毕业 找工作 找到 想 死我 就 说 吗 跟 我 生日 差不多 现在 没 一个 工作 的 都在 读书 呢 八 月 到 九月 的 孩子 我 要 转 专业 读 工作 我 感觉 找到 合适 的 比较 难 也 得 看 机遇 你 在哪里 找工作 呀我 在 厦门 找 各种 被 鄙视 最近 累 感 不 爱自信 一点 亲 升 摩羯 都是 劳模 月 处 非常 细致 日 狮 气 场 强大 我 好 喜欢 厦门 呀 那里 竞争 激烈 么相比 于 上海 没 那么 激烈 但是 经管 院 牛人 很多 啊 我 觉得 我 除了 劳模 既 不够 细致 气 场 也 不 强大学 经济 的 都是 强人 你 也 会 变 强大 的 我 觉得 我 以后 出去 找工作 是 个 大 问题 太 弱我 是 在 找工作 的 时候 越来越 觉得 自己 弱 打击 受 多 了 自然 会 这样 想不会 的 学 经济 的 都是 强人 你 要 相信 这 一点 学 这个 的 赚 得 多 起薪 高 呀 去 投 行 什么 的 压力 会 很 大 吧我 进 不 去 投 行 的 本科 太 差 不是 复合 背景 直接 被 pass慢慢 积累 经验 一点 一点 提升 吧 我 觉得 学 经济 的 好 高端 崇拜 一下 我 本 科学 植物 的 对口 专业 的 工作 都 特 要命 这 专业 适合 搞 研究 实验室 里 师兄 师姐 好多 考 公务 员 了 公务 员 不适合 我 所以 果断 转行植物 啊 其实 我 很 羡慕 学 自己 喜欢 东西 的 人 那 你 准备 往 哪 转 呢转 到 传播学 跨度 很 大 很 不 容易 也 不知道 以后 怎么样 其实 实验室 里 的 工作 挺好的 就是 我 没 科学家 的 脑子哎 我 最近 也 觉得 我 脑子 没 那么 好 传播学 啊 如果 是 群 八 的 话 说不定 你 以后 也 会 走 金融 这 条 路 呢大学 可以 都 双学位 爸爸 让 我 选 金融 或者 会计 但是 我 选 了 传播学 所以 断送 了 这 条 路 目前 看 跟 金融 靠 不上 国内 经济研究 生 考 不上 出去 要 考gmat 听 你 这么 说 我 是不是 应该 去 买 股票哈哈 有 时候 考 传播学 也是 可以 进 金融 单位 的金融 单位 就 我 这 德行 的 饶 了 金融 单位 吧 oo 哈哈 哈唉 我 估计 也是 去 做柜 当 客户经理 的 节奏 的慢慢 来 嘛 你 具体 是 学 什么 的 会计 精算 财务管理 国贸 金融"} 54 | {"response": "嗯 哼", "knowledge": ["", ""], "history": "水瓶 女 从不 主动 联系 说明 啥看到 题目 和 你 名字 的 时候 我 吓 了一 跳 还 以为 你 弯 了不过 这 也 能 碰见 你 我 真是我 ex 水瓶 嘛 来 这 潜伏 很 正常哎 苦命 的 孩子 啊 好 吧 在 我 神智 正常 的 现在 我 挺 想 一 巴掌 拍 醒 你 的 哈哈嘛 只是 一直 没有 退 而已 啦 也 没什么 想法 了 留 着 算 个 纪念 说不定 下 一个 又 是 水瓶 呢切 还是 那句话 欺 人 者 自欺 啊 哈哈 哈哈 啊哈真心 没 想法 了 人家 都 有 新欢 了嘿 瞧 你 那 怨妇 样 儿 我 立马 替 广大 女 同胞 心里 平衡 不少噗 好 吧 之前 也 被 这么 说 过 如果 俺 的 苦逼 还有 这么 一点 剩余价值 的 话 也 不错我 觉得 天秤 不是所有 风向 星座 的 人 都是 两个 极端 要么 花心 得 不行 要么 过分 深情 偶 比较 情愿 做 那个 花心 的 偶 要 转 性 此 话 与 君 共勉 哈我 不想 还是 就 这样 就 好 我 伤 得 起 我 不 确定 别人 能 还是 做 个 好人 的 好孩子 你 究竟 是 九 几 年 的 老实 交代 吧 切 还 装 大叔 呢85 要 我 报 身份证 号 么 没有 伟岸 我 很 猥琐 的 我 只是 自负 而已哎 能 一直 介 样 也 挺好的 就 像 奈 奈 那样 这个 才是 真正 的 强大 吧你 也 看 奈 奈 的 啊迷 都 讨厌 奈 奈 你 是 例外 么 握手 一直 受 伤害 还能 一直 天真烂漫 的 人 才是 真正 的 强大 呢于是 我 才 去 看 的额 亲 你 真是 我 接 不 下去 了嘛 没关系 是 我 不好 你 继续 求 解答 吧大家 答案 还 不够 统一 么 我 早就 汇报 过 统计 结果 了 那 男 的 也 拎不清 也 没 多 喜欢 人家 就 这么 稀里糊涂 的说 回 你 中毒 很 深 啊 我 觉得 理智 点 来讲 相爱 才是 最好 的 状态 深情 这个 事情 有 时候 也 跟 自制力 差 有关 我 觉得 我 自己 是 这样 你 我 不知道嗯 中毒 很 深 然后 我 中 枪 了 我 自制力 比较 差 不过 遇到 之前 我 也 没 想到 自己 会 这样 无奈我 也 自制力 超差 我 只能 说 介 是 人类 本性 吧 我 堂弟 今天 明明 说好 写 完 作业 才 可以 去 看 电视 可是 他 就 胡乱 写 了 一点 就 去 玩 了 被 抓 回来 也 心不在焉 的 初三 的 孩子 老娘 真 替 他 捉急 啊 我 不 相信 有人 天生 自制力 强 哪 有人 生来 喜欢 苛刻 要求 自己 还 不是 被 逼 出来 的 逼 久 了 也 就 变成 习惯 啦 也 就不 痛苦 啦 有些 事情 别人 肯定 不会 逼 你 只有 自己 逼 自己 吧 可以 偶尔 偶尔 放纵 一下 但是 不能 变成 常态 啊 慢慢 的 变成 习惯 就 得道 升天 啦 不然 只能 一直 深受其害 这个 词 比较 严重 可 我 真的 这么 觉得 那天 晚上 我 跟 你 说 了 挺 多 的 第 二天 早上 我 真的 超 想 抽 自己 除非 你 真的 认定 这 辈子 非 这个 姑娘 不可 否则 我 真的 建议 你 尽快 脱离 这个 状态 另外 你 也是 闲 的 慌还好 啦 只是 偶 有 纠结 毕竟 时间 还 比较 短 其实 平时 生活 已经 没 啥 影响 了 该 干嘛 干嘛 今天 心情 不佳 是 因为 另外 的 事情合着 你 这 副 非 卿 不 娶 的 架势 是 假 的 么 好 吧 可能 只是 闲 的 慌 有什么 不 开心 不如 说 出来 让 大家 开心 一下没有 非 卿 不 娶 的 架势 啦 我 不是 死 缠 烂 打 的 人 但是 毕竟 真心 投入 过 所以 还有 眷念 是 正常 的 嘛 而且 她 现在 如果 回来 找 我 我 肯定 还是 愿意 的 只是 我 不能 一直 沉溺 其中 嘛 至于 不 高兴 的 事 因为 有关 他人 的 隐私 我 就不 说 啦"} 55 | {"response": "这 词 当年 很 那个 什么 啊", "knowledge": ["", ""], "history": "记得 妈妈 小 时候 跟 别的 男人 做爱 算是 同年 阴影 吗小学 毕业 亲眼 看到 妈妈 和 姑父 做爱 我 会 告诉 你呵呵我 想 知道 你 这么 些 年 怎么 过来 的 心理阴影 不会 很 大 么到 现在 没有 恋爱 过 恶心๑ ㅁ ๑ 我 也 不知道 怎么 安慰 你 了 想开 点世界 还是 很 美好 的美好 我 很 乐观 了 到 现在 没 去 死 说明 我 心理承受能力 很 大要是 我 我 就 会 吓 呆 没 这 事 你 的 承受 能力 也 不会 比 别人 强太多 了不 止 我 妈 这 件 还有 我 自己 的好 吧从没 跟 别人 说 过 这些 今天 会 说 是 因为 豆瓣 上 没 我 认识 的 人理解 这些 事 跟 熟人 说 不 出口 我 也是小心翼翼 维护 自己 自尊 吧 我 有 一个 比 我 大 3 个 月 的 堂哥 有 天 我们 一起 出去 玩 朋友 问 他 为什么 跟 对象 分手 他 就 说 了 句 破鞋 然后 悄悄 在 我 耳边 说 放心 我 不会 跟 他们 说 的 我 知道 他 怕 我 多 想 是 好心 当时 却 没 反应 过来 问 他 说什么 啊 他 又 在 我 耳边 说 你 妈妈 我 哇 的 一声 就 哭 了 出来 往 家里 跑 把 伙伴 们 吓坏 了 还 以为 他 欺负 我你 这 堂哥 要不 跟 别人 说 最好 也 别 告诉 你 他 知道 吧他 不是 那种 人恩 我 知道 都是 小 孩子 嘛 只是 觉得 这样 也不是 很好 而已他 说出 那 句 破鞋 之后 反应 过来 怕 我 多 想 才 会 那样 的"} 56 | {"response": "恩 呢", "knowledge": ["", ""], "history": "被 乔 巴雷 到了这 哪 集就 最新 的 一 集 动画533"} 57 | {"response": "欢迎", "knowledge": ["", ""], "history": "大 通州 帝国 的 人民真的 会 死人 的 天天 迟到 差点 被 开除 了 我 都 刚 搬走那 要是 再 住 远点 住 到 九棵树 那里 呢果园 有 八 通线 的 空车 区间 的那 会不会 很 堵 呢 我 九 点 半 上班 希望 一 小时 的 车程 能 到 就 满足 嘿我 说 的 是 区间 地铁呃 我 不知道 还有 区间 地铁 这 一 说我 在 果园 站 坐 过 一次 空车 果园 始发 的我 决定 去 梨园 住 了 房子 还 便宜"} 58 | {"response": "你 是 要 蒸 男友 还是 认识 朋友 呢", "knowledge": ["", ""], "history": "大 爱 长腿 妹子长腿 妹子 很多 啊在 成都 这里 真的 没 多少 身高 差 13cm 哈哈 哈你 说 你 比 我 高 13cm 么是 呀 所以 我 也是 找 对象 困难 户男 的 高 的 很 好好 吗 女 的 高 的 才 不好女 的 高 怎么 不好 了 我 就 喜欢 高个 妹子 终归 会 有 你 心仪 的 汉子 把 你 带走 的呃 我 第一次 上 豆瓣 所以 啥 都 不懂"} 59 | {"response": "狂 转发 让 更多 人 知道 互相 转告 利用 舆论 的 力量 不 让 他们 在 害人", "knowledge": ["", ""], "history": "求救 上海 黑店 俏佳人 卖 星期狗 不肯 退钱 怎么我们 找 了一 部分 受害 者 了 要 找到 更多 的 狗狗 们 都 太 可怜 了 而且 我 发现 了 我 那 只 泰迪 是 人家 退回 来 的 病 狗 5555555555555555555555555555快 发 微博 里面 有 上海 好 狗 好 猫 义工 告诉 他们 试试 看我 发 微博 了 也好 狗 好 猫 了 他们 没 鸟 我"} 60 | {"response": "嗷 卤煮 落后 了 咩 tot", "knowledge": ["", ""], "history": "睫毛增长液 有木有 用 过 的求 代购 下 睫毛 稀同 求用 过 一个 特别 好啊 下 睫毛 本来 没有 的 都 长 出来 了 之前 是 在 南航 飞机 上 买 的 啊 啊 啊 啊 忘 了 叫 什么 名字 了 后来 在 一家 代购 上面 也 看到 了飞机 上 还有 卖 这个 的 啊有的 啊 · · 好多 飞机 上 都 有 卖 的 额 是不是 南航 啊 让 我 再 想想"} 61 | {"response": "应该 是 男人 担心 讨 不到 老婆 才 对啊", "knowledge": ["", ""], "history": "学姐 又 回 理工 啦学姐 你 都 订婚 拉快 了学姐 我 失恋 了没关系 出 了 大学 你 才 会 找到 更多 的 更 高更 帅 更 富谢谢 学姐这 是 实话实说 不是 单纯 的 安慰我 怕 自己 嫁 不 出去 了"} 62 | {"response": "没有", "knowledge": ["", ""], "history": "现在 怎么办 求助再 讲 个 真 事 我 以前 盖 过 一个 高楼 纯水 贴 各种 唠嗑 胡说八道 里面 主要 是 天秤 女 有 个 天秤 女 not me 有 男友 但是 可能 跟 你 一样 到了 审美疲劳 的 时候 了 结果 遇见 了 一个 怦然心动 的 双 男 就是 那种 会 聊天 啊 觉得 很 聊 得 来 的 她 以为 人家 那 就是 爱 了 遇到 此 男 之前 还没 想 过 分手 遇到 此 男 之后 以 快刀斩乱麻 的 速度 结束 了 恋情 结果 双子 男 一定 也 没有 进一步 的 意思 哪怕 她 已经 暗示 自己 单身 了 结果 剩 她 一个 人 在 那 干 着急 后来 在 帖子 里 求助 压根 没人 愿意 理 她因为 我 从没 跟 男友 提 过 分手 每次 都是 对方 提出 来 就算 现在 这个 我 想说 分手 但 碍 于 一些 问题 我 没 办法 说 现在 这个 男友 哎 我 家里人 很 不 满意 希望 我 早点 分 但 对方 父母 却 希望 我 和 他 能 结婚 很多 现实 因素 吧 导致 我 这边 压力 很 大 我 没 指望 说和 男友 真 分手 之后 能 和 这个 双子 男 在一起 只是 现在 对 他 有 感觉 我 特别 容易 喜新厌旧 如果 他 没 女友 还好 办 等 他 慢慢 来 可 他 有 女友 还 这样 对 我 这 也 让 我 很 苦恼哈哈 喜新厌旧 我 认识 一个 天蝎 女 和 一个 双 男 分手后 各种 攻略 啊 想 让 对方 回头 结果 又 遇 上 了 一个 双子 男 立马 投入 到 新恋情 里 了 前男友 立马 抛 到 后脑 勺 了 只是 不 幸 的 是 后来 那个 双 男 在 不到 5 个 月 的 时间 又 让 她 成为 了 前 女友 以前 看过 一个 微博 说 十二 星座 分手后 伤心 的 时间 天蝎座 是 1 个 月看来 天蝎 和 双子 真心 不是 很 配 啊 我 是 只要 有 新的 让 我 心动 的 人 第 二天 就 可以 把 之前 的 忘掉 但 可能 随着 时间 的 推移 又 会 想起 以前 的 既 喜新厌旧 又 特 容易 怀旧 这个 双子 男 真的 总是 主动 找 我 他 也 知道 我 有 男友 的 哎喜 新 不 厌 旧 我 上面 说 的 那个 天蝎 姑娘 自己 说 的 在 微博 里 人和 人 相处 久 了 就 容易 厌倦 稍微 有点 新鲜 的 人 出现 就 动心 了 其实 再 换 个 男人 相处 久 了 还是 一样 的 厌倦 不过 如果 一个 男人 知道 你 有 男友 还 约 你 半夜 出去 这种 男人 不是 很 无耻 吗 有 首 歌 叫 女人何苦为难女人 这个 男人 何苦为难 男人 呢唉 你 就是 太 有 正义 感 了 怎么 跟 我 妈妈 一个 路数 我 妈妈 也是 天秤 倒 自己 的 原则 自己 坚持 就 好 人家 暧昧 暧昧 寻寻 开心 找找 刺激 你 情 我 愿 既 不 犯法 也 不 扰民 又不是 自家 亲戚 也 没 必要 摆 这么 清楚我 以后 生 小孩 一定 算 准 时间 绝不 生 双子座 的 小孩请教 这 位 童鞋 有什么 好 帖子什么意思 不 明白 而且 好像 我们 也 不熟 吧 帖子 很多 自己 看 就是 了看 了 你 的 言论 觉得 颇为 有意思 对 双子 似乎 了解 透彻 可能 我 意思 木 有 表达 清楚 有什么 精华 帖子 求 介绍"} 63 | {"response": "全 查 了 就 这 两 项 不合格 得病 的 是 lz 的 妈 还没 发展 到 甲 减 的 程度 目前 就是 身体 比较 弱能 吃 还 瘦", "knowledge": ["", ""], "history": "甲状腺 功能 减退 却 查 不 出 原因原发性 的 本来 就 没有 原因 的 内分泌 的 问题 有 时候 很 莫名其妙 的 生活 习惯 啊 情志 啊 都会 有 影响那 现在 应该 注意 什么 呢 有没有 可能 在 没 得 甲 减 之前 治愈4 么 这个 也是 必要 指标 的 不知道 lz 有没有 什么 临床表现 啊 甲 减 目前 看来 是 要 终身 服药 的"} 64 | {"response": "共勉 呵呵 多发 菩提心 多 发出 离心 加油", "knowledge": ["", ""], "history": "做人 必 读 增长 福 德 的 行为随喜 赞叹 易 发脾气 者 求 解救发脾气 对 健康 特别 不好 千万 别我 知道 很 不好 非常 极其 明确 这个 而且 很 讨厌 自己 发脾气 但是 大 部分 时候 就是 那种 完全 控制 不了 自己 我 爹 也是 这样 我 爷爷 年轻 的 时候 也是 这样 我 想说 这 脾气 能 遗传 么我 一直 是 这样 的 我 知道 控制 不了 的 感受 但是 我 现在 宁可 大 哭 我 都 不 生气 了 因为 我 一生 气 就 会 咳痰 咳 好久 呵呵 每次 一 想到 这个 就不 发火 了 人 发 一次 脾气 身体 会 产生 很多 病状 的所以 我 身体 才 这么 糟糕 大 哭 我 很爱 哭 啊 最近 差不多 每日 一 哭"} 65 | {"response": "那 他 是 怎么 跟 你 一个 宿舍 哦 我 真是 冲 满 了 好奇", "knowledge": ["", ""], "history": "室友 在 用电 吹风 吹 脖子lz 的 室友 是 一个 30 岁 的 大叔 是的 你们 没有 看 错 lz 绝对 没有 歧视 30 岁 lz 是 觉得 这个 年纪 还 来 念书 真是 有 够 奇葩 今年 9 月份 分 班 lz 和 大叔 就 分 在 一个 班 了 啊 开始 了 lz 最 痛苦 最 便秘 的 日子 并且 还 会 继续 下去 吧为什么 30 多 岁 还 可以 读书 lz 是 自考楼主 是 全日制 大叔 是 有 故事 的 等 会 慢慢 八 楼主 四级 也 不想 准备 了"} 66 | {"response": "小 s 是 鼻梁 歪 好像 是 小 时候 受过 伤 的 鼻头 歪 应该 是 整容 后遗症", "knowledge": ["", ""], "history": "穆熙妍 的 鼻子 怎么 了 鼻头 都 歪 了好像 前 段 时间 电视 上 也 刚 见 过 一个 鼻子 歪 的 突然 想 不 起 谁 了小 s 也 歪 的"} 67 | {"response": "那 我 就 毁 了 他 家人", "knowledge": ["", ""], "history": "我 是 水瓶 男 有什么 想 问 的无 下限 是 有 多 无 下限负 无穷一 天 多少 次最近 很少 上次 做 还是 天 兔 台风 那天 晚上 风雨交加和 谁陌陌 认识 的多少 次开 过 两次给 钱 了 的给 钱 还 叫 约 吗你好 意思 吃 霸王餐这 怎么 叫 霸王餐 都 有 欲望 我 感觉 我 是 被 上 女 的 不 停 的 要你们 怎么样 才 会 有 欲望你 小学生吧 这种 问题 应该 都 懂 啊我 试 过 没用这 是 病 得 治你 才 有病 呢 你 说 你 为什么 没有 感觉我 有 感觉 啊 每次 都 很 有 感觉 除非 是 特别 晚 没 睡 好 才 会 没 感觉 昨天 晚上 就是 跟 一个 大 三 的 姑娘 夜里 三点 多 才 出去 有点 力不从心他 结婚 了你 跟 他 做 着 没 感觉 吗我 开玩笑 的好 好笑哈哈 你好 好笑 呀 哈哈 哈哈 他 在 浪漫 的 气氛 里 就 很给力 像 灯 暗暗 的 有点 小 酒哇 噢 听 起来 就 很 有 感觉 女 的 一般 都是 对 环境 比较 敏感 浪漫 的 环境 下 更 容易 有 感觉 男 的 不一样 女 的 正点 就 会 有 感觉他 真的 结婚 了那 就 别 再 做 了 别 破坏 别人 家庭 哈 炮 友 多 的 是 何必 找 结婚 的是 我 破坏 的 吗 我 是 认真 的那 你 是 想 让 那个 男 的 离婚 然后 跟 你 结婚 么是 这 是 我 心底 最 深 的 期待 可是 不 可能 了 每次 想 他 的 时候 我 都 恨 想要 毁掉 他 毁 了 我 自己 而且 我 说到做到女人 好 可怕 他 是 不会 离婚 的 男人 玩 归 玩 不会 轻易 离婚 你 毁 了 他 也 得 不到 他 基本上 不 可能 在一起"} 68 | {"response": "少 了 很多 慢 了 很多", "knowledge": ["", ""], "history": "叫 tria 的 脱毛 神器 现在 是不是 神器 还 不知道 总之 买 了楼主 效果 怎么样可以 特别 是 小腿期待 楼主 成功 我 更 关心 唇 毛我 就是 拿 去 脱 唇 毛 的 还 在 坚持 当中 三 个 月 了 差不多效果 不错 唇 毛 没有 了 么"} 69 | {"response": "不 会不会 的", "knowledge": ["", ""], "history": "为什么 总 喜欢 把 喜欢 的 人 推 给 别人北京人 在西安 发帖忽略 坐标 好 吧小 的 时候 害羞 干 过 你 说 的 这种 蠢事 现在 是 抢 也 要 抢 到手好 吧 哈哈 我 也 觉得 要 勇敢 点我 是 间接 的说 了 你 所谓 的 那个 人 不够 成熟 吧 个人 看法 吧 啥时候 回来回 哪大 西安现在 就 在 大 西安 呢我 以为 你 在 北京 上学 了没有 没有 坐标 是 随便 写 的妈 蛋 西安 妹子 开始 说谎 了哎呀 这 哪 有 说谎好 吧 原谅 你 了 咱俩 可 别 有 内讧"} 70 | {"response": "为什么", "knowledge": ["", ""], "history": "你 会 嫁给 心里 还有 其他 妹纸 的 男人 吗都 走过 来 了 我 常常 跟 他 说 我 爱 你 是 因为 我 要 爱 你 而 他 爱 我 是 因为 我 对 他 好 才 爱 我 本质 的 不 同 有些 事情 我 真的 没 办法 走出 来 男友 比 我 大了 差不多 五 岁 所以 他 现在 非常 非常想 结婚 而 我 正是 花样 年华 最 灿烂 的 年纪 我 把 我 的 初恋 给 了 他 还要 心里 一次 一次 的 容忍 他 的 过去 那些 他 藏 着 的 私密日志 我 未 从 对 他 说 过 就让 他 藏 着 记录 着 吧 可是 对 我 来说 却 是 整整 一年 的 煎熬 夜深人静 想 发呆 想 落泪 时候 想 在 他 身边 的 那个 女人 的 名字 总是 在 自己 脑海 中 挥 之 不 去 我 不知道 我 要 多少 个 年份 才 能够 完完全全 的 走出 来 我 甚至 觉得 我 有 轻度抑郁症你 是 处女 男友 是 白羊嗯你 个 纠结 的 娃 你 居然 担心 白羊 的 ex 问题 我 只能 说 多虑 了 多虑 了 多虑 了"} 71 | {"response": "看 來 你 周 圍 都是 小 蘿 莉", "knowledge": ["", ""], "history": "三毛 荷西河西 是 老外哈哈 假 個 設你 爹妈 是 怎么 想 的我 爹 媽 不 干涉 我 自由 戀 愛 哈哈三毛 荷西 最后 是 结婚 了 的是啊所以 我 才 问 你 你 爹妈 怎么 想 的這 跟 我 爹 媽 有 啥 關 係 0 0孩子 你 还 小 啊 叔 默默 的 滚圆 了大叔 多大二十六這 也 叫 叔 啊被 叫 习惯 了"} 72 | {"response": "哈哈 哈哈 戳 中 笑点 你 太 坏 了 这 姑娘 好像 不 止 隆 了 鼻 还有 其他 什么 当时 看 了 就 忘 了不 过 她 整 了 以后 我 也 觉得 无 感 小龙 女神 马 的 我 还是爱 李若彤 啊", "knowledge": ["", ""], "history": "啊 啊 被 当年 刘亦菲 的 颜 秒 了 豆瓣 儿 不喜欢 她 的 颜 么颜 无敌 演技 无视额 我 想说 这 姑娘 是 整 过 的 飘 走邪恶 滴 表示 咱 要 不要 贴 张 倩女 幽魂 里 的 仰头 照 么么哒"} 73 | {"response": "噗 回去", "knowledge": ["", ""], "history": "傲娇 怎么 翻译tsundere 日语 ツンデレ 的 音譯 説 不定 他 知道这个 可能 还 真有 用 丫 是 日 英 混血 日语 无 障碍 啊蛋疼 啊 你这 叫 求知欲 好 么 一种 油然而生 的 责任感 好 么unlimited pride别 捣乱帮 你 顶 帖 呢 哼真 乖 么么为什么 没有 人哎 人心不古 啊几时 回国遥遥无期 啊 哎 不知道 呢妹子 太多 安排 不 过来你 高估 我 了 我 早就 遁入空门 了噗"} 74 | {"response": "完全 不 介意 oo 谢谢", "knowledge": ["", ""], "history": "一篇 探讨 intp 的 好 文章 以及 我 的 深思p 的 主要矛盾 吧ife 二者 可以 共赢 前提 是 你 得 把 nesi 都 发展 完 然 後 再 发展 fe 另外 功能 发展 与 年龄 无关 中年 发展 fe 完全 只是 平均数q 希望 如此 我 还 在 慢慢 探索 这个 更 得 听 生活 告诉 我 xdp 的 成长 的 url"} 75 | {"response": "啊 我 一 周 才 换 一次 但是 换 水 的 时候 要 把 它 的 根部 冲洗 一下 把 粘液 什么 的 要 洗 掉 的 你 两天 换 太 勤 了", "knowledge": ["", ""], "history": "看看 有 哪些 植物 可以 水培 更新 了为 毛 我 养 的 绿萝 根部 有 绿 毛估计 要 换 水 了 吧两天 换 一次 的 要不 天天 换"} 76 | {"response": "然后 我 就 剩下 爆豆 了 怎么 都 不见 回收 的 趋势", "knowledge": ["", ""], "history": "用 了 果酸 几天 后 我 的 脸 居然 搓 泥 了搓 泥 也 啊 是啥 大 问题 主要 是 你 用 的 护肤品 有的 成分 表面 是 负电 性 的 之后 你 又 用 了 含有 阳离子 的 护肤品 产生 了 反应 但是 并不 伤 皮肤 的 混搭 着 用 是 会 出现 搓 泥 的 情况我 怀疑 是 我 多久 没 去 死 皮 了 会 这样用 酸 记得 注意 防晒 抗氧化 晚上 用 即便 当天 没有 用 也 要 注意 防晒 你 感觉 护肤品 吸收 好 么 不 太 好 肤色 有 不 太 均匀 的 话 就 去 个 角质 吧 我 觉着 el 家 的 东西 有些 蛮好 用 但是 确实 容易 搓 泥还好 呀 多谢 啦 我 再 用 一会 再 去角质 我 现在 脸上 都是 硬结妹子 用 酸 期间 还是 别 去角质 了不 太 好 本来 算 就 有点 去角质 焕肤 的 功能 用 酸 期间 还是 休息 一些 比较 好"} 77 | {"response": "你 吓 什么 哦 说来 听听", "knowledge": ["", ""], "history": "当 别人 骂 你 没 家教 没 素质 或者 贱人 不要脸 绿茶婊你 说 撒辣 个 莫名其妙 回复 我 的 银 吓 到 我 了 我 三更半夜 胆子 小哪个 哦 怎么 吓 着 了那个 突然 问 我 为什么 爱 他 我 不认识 三更半夜 我 胆子 小我 还 以为 你 说 的 是 我不 啊 我 也 不知道 为 毛 突然 会 抛 出 一个 人 来 问 我 为什么 爱 他 看 完 某个 帖子 的 灵异 经历 好 恐慌我 日 什么 情况 不要 吓 我你 看 啊 你 往 上 看 啊 那 条 回复 被 我 删掉 了 吓死 爹 了"} 78 | {"response": "记得 我 哦", "knowledge": ["", ""], "history": "听 四川 妹子 唱 火我 看到 这个 视频 就 震惊 了 这个 女 的 和 我 长 得 好像 哦少女 打算 学 四川 话 来一发 吗我 就是 四川 妹子 的 嘛少女 莫非 你 就是 本人我 看 这个 视频 的 时候 也 在 思考 搞 不好 就是 我 唱 的 勒少女 来一发 求 连接等 哪 天 我 也 唱 一个 发 来 对比 哈"} 79 | {"response": "算 了 上图 还是 有 一定 友谊 基础 再说 嘛 再说 微信 聊 的 不爽 看着 不爽 就 可以 直接 拉黑 啦", "knowledge": ["", ""], "history": "lz186 有 高大 丰满 型 的 女孩 么 不喜欢 腿 细细 的晕 〜 西北 银川 吗西北 好 大 啊 我 老家 甘肃 的知道 吖 〜你 是 符合 我 要求 么 哈呵 也许 吧微信 交流 一下 真相什么 真相哈哈 外形 嘛呵 你 对 自己 也 太 自信 了 吧我 求 你 真相 我 咋 就 自信 了 呢 哈哈那 还 要求 lz 应该 上图"} 80 | {"response": "是啊 怎么 了 哈哈 哈", "knowledge": ["", ""], "history": "818 你 用 过 最 烂 永世 不会 回购 的 护肤品 与 彩妆dhc卸妆油 害 的 我 的 了 闭合 粉刺 4年 至今 未 愈 油 皮 mm 慎用哇 4年 dhc 油腻 油 皮 根本 不能不要 用 现在 我 基本 用 无 油 的 护肤 闭合 有 好转 了就是 啊 祝 你 皮肤 越来越 好谢谢 你 啦 也 祝 你 越来越 美 p我 男 的 哈哈男 的 男 的 男 的"} 81 | {"response": "我 觉得 这种 才 好看 没有 很 刻意 的 营造 某 种 氛围 下水 道 美人鱼 也 没意思", "knowledge": ["", ""], "history": "好 无聊 大家 给 推荐 个 重 口味 的 电影 吧哦 还有 人体 蜈蚣 12好 的我 觉得 人体 蜈蚣 不够 重 口味推荐 个 大 重 口味 的 吧我 上次 看 了 一个 记者 要 记录 消防队 的 真实 工作 情况 跟着 消防队 去 出警 然后 是 要 制服 一个 类似 疯狗 病 的 老婆婆 里面 镜头 全都 是 用 真实 摄像机 记录 的 场景 蛮 带感看过 挺 刺激 同 推荐我 还是 高中 上课 看 的 简直 是 引人入胜 啊 那 片子 叫 什么 名字 来着死亡 录像"} 82 | {"response": "这个 想法 挺 对 的 啊 多少 名校 的 研究生 想 给 人家 打工 人家 不要 啊", "knowledge": ["", ""], "history": "大 四 了 男朋友 保研 没 问题 却 想 自己 创业 了一个 读 完 研究生 的 人 告诉 你 创业 吧 认真 的研究生 的 生存 状况 这么 尴尬 了 啊是啊 时间 是 没 办法 重复 了 真的 要 慎重 如果 不是 对 科研 感 兴趣 的 话 真的 不要 去 浪费 时间 了还能 感 什么 兴趣 不 都是 为了 以后 挣钱 养家 他 觉得 去 读研 虽然 是 个 挺好的 学校 但是 毕 了 业 也 挣 不了 多少 也 不喜欢 以后 呆 在 大城市 还 不如 回家 自己 去 当 小 老板 了"} 83 | {"response": "排 一个", "knowledge": ["", ""], "history": "有人 知道 方婧 吗 微博 名 是 alu u 做 淘宝 的什么 叫 以前 是 les同性恋我 问 的 重点 是什么 叫 以前 是"} 84 | {"response": "我们 相信 你", "knowledge": ["", ""], "history": "意向 我 是 来 接 乐而雅 姨妈 巾 团 的 即将 血崩原 意向 贴 团长 坑 死 我 了 我 去 找 店家 旺旺 结果 店家 要 我 找 团长 问 负责 这 方面 工作 的 电话号码 我 晕 了找 个 靠谱 的好多 从 香港 进货 的 店主 说 做 不到 全 淘宝 最低价 噗 诶"} 85 | {"response": "嗯嗯", "knowledge": ["", ""], "history": "金牛 看 对方 第一 眼 会 看 哪里眼睛 然后 是 牙齿 · · 牙齿 不 整洁 者 我 就 会 一直 盯 着 他 以外 的 地方 说话 了噗 看 他 眼里 有没有 眼屎 么亲 乃 说 的 好 露骨 哦 哈哈 看看 眼睛 漂 不 漂亮 嘛"} 86 | {"response": "那 我 可以 把 你 電 話 按 掉 不 接 嗎", "knowledge": ["", ""], "history": "有 女生 要 我 每天 叫 你 起床 吗求 每天 五 点 半 叫醒 业务 不过 我 估计 楼主 不会 同意 的五 点 半 可以 你 是 女生 吗 叫 男生 起床 太 怪 了是 女 的 話 說 lz 不 睡 覺 的 嗎时差党"} 87 | {"response": "那 可不", "knowledge": ["", ""], "history": "ω 要 这个 猥琐猫 qq表情 的 到 这里 来 下载lz 放过 你 ex 吧 他 是 钙 啊 赶紧 投入 我们 的 怀抱 吧→ → 你 是 想说 赶紧 投入 你 的 怀抱 才 对 吧被 你 识破 了"} 88 | {"response": "y3mjg4 html", "knowledge": ["", ""], "history": "推荐 赏析 马来西亚 gay 微电影 同床异梦 excha我 也是 在 色 流 上 看 的 看过 这个 之后 把 我 看 哭 了 但是 色 流 哥 那个 视频 不知道 出处 想 分享 给 别人 也 不能 分享 没 想到 搜 到 这里5e3e1 flv"} 89 | {"response": "比赛 一直 打 着 hf 的 旗号 所以 我 还 以为 guess 是 高端 大气 的 牌子 咧 这样 看来 好像 和 雷阵雨 里面 的 美特斯邦威 差不多 噗 等 着 看 lz 更新", "knowledge": ["", ""], "history": "哇靠 来 来 来 我 来 给 你们 拔 洋货 的 草 更新 coach唉 我 以为 guess 不错 的说 新 一 季 的 全美 超模 里面 冠军 的 奖品 之一 是 guess 的 合约 唉这种 都是 植入 广告 啊 我 看 特效化妆师大对决 的 时候 奖品 是 max factor 也是 屌 丝 到 不行"} 90 | {"response": "不 不 不 我 只是 纯粹 觉得 俩 人都 很好 我 都 很 喜欢 他 俩 在一起 是 我 的 美好 幻想 而已", "knowledge": ["", ""], "history": "张悬 青峰 能 在一起 就 好啦 ੭ु ੭ुy 么1 而且 听说 张 老板 是 双 楼主 想 让 他们 形 婚"} 91 | {"response": "我 知道 呀 〜 可 我 没 吃 过 五仁 耶 〜", "knowledge": ["", ""], "history": "我 的 男神 总是 笑话 我 ︶ ︿ ︶彪 一个 给 他他 笑 你 就 说 笑 你 麻痹 啊 笑 艹 看 他 还 笑 得 出来哈哈 哈笑 p 啊 笑噗 〜 〜 〜真的 来 个 p 吗好闻 吗 〜处女座 五仁我 喜欢 椰蓉 味 的 〜啊 啊 啊 啊 你 没 在 国内 吗 你 不知道 五仁 要 被 赶 出 月饼 界 了 吗 姑娘 你 简直 就是 豆瓣 五仁 啊"} 92 | {"response": "啊 这样 啊 那 我 再 去 商场 试试 机子 x100 谢谢", "knowledge": ["", ""], "history": "微单 技术 还 不 成熟 求 建议卤煮 这样 的 文青 难道 会 不 喜 x100x100 就是 复古 款 光 样子 没用 阿 没 试 过 机子 不知道 它 性能 怎样 虽然 我 也 常用 定 焦 镜 但是 不能 换 镜头 还是 有点 不够 理想 啊 谢谢 意见以 卤煮 你 帖子 里 的 要求 俺 觉得 x100 足 矣 换 镜头 什么 的 你 就 5n 转接 个 饼干 吧 但是 我 个人 觉得 咱们 这种 单反 用户 没 了 evf 会 各种 不 习惯"} 93 | {"response": "先 谢谢 卤煮 一 周 最多 4 次 鞋子 是 普通 的 跑鞋 型号 记 不得了 跑 前 跑 后 都 有 拉伸 和 放松", "knowledge": ["", ""], "history": "欢迎 提问现在 右 膝 还是 不行 偶尔 情况 会 好转 不敢 再 跑 了你好 问题 1 跑步 频率 2 鞋子 是什么 的 3 跑 后 牵拉 么"} 94 | {"response": "豆 邮 你 微信 吧", "knowledge": ["", ""], "history": "今天 不 上班 的 我们 来 个 娱乐 局同 不上 刚 休假 回来 明天 第一 天oo擦 目测 版聊 党 能 不能 成 局 啊已经 建立 微信 组 了求"} 95 | {"response": "单身 又 有什么 关系", "knowledge": ["", ""], "history": "八一八 单身 的 好处 坚定 我 单身 的 信心此刻 我 正 需要 这样 的 帖子 来 安慰 自己 啊 唉 昨天 我们 部门 聚餐 才 知道 我 是 女性 中 唯一 一个 单身 的彼此彼此 哎 我 是 我们 公司 里面 唯一 一个 女生 单身 的这 缘分 好 悲剧"} 96 | {"response": "好 的 谢谢 你", "knowledge": ["", ""], "history": "双 碑 流浪狗 基地 大米 紧缺 告急 好心 人 进 谢谢求 详细 地址 我 想 去 看 它们坐 轻轨 到 双 碑 下 特钢 花园 公交 站 附近 有 一个 街道 进去 后 需要 问 人 的 我 周末 会 过去"} 97 | {"response": "果真 你 说 的 太 对 了 还是 蟹 子 最 了解 蟹 子 我 都在 尝试 着 改变 着", "knowledge": ["", ""], "history": "玩什么 故障 我 就是 蟹 子 男友 射手她 就 说 突然 不 在乎 了不 爱 了不 喜欢 了 受不了 我 对 她 的 亲昵 她 说 好久 没 一个 人 了 想 一个 人 过 过 就是 突然 之间 的 事情 刚好 是 暑假 了 离 得 远 了 抱歉 这 几天 感冒 了 所以 没 上线 才 回其实 想 一个 人 过 真是 个 借口 她 是 不 肯定 自己 对 你 的 感觉 了 只是 她 不想 说出 真实 想法 你 自己 说 你 自己 幼稚 恐怕 也是 原因 之一 也 说不定 不能 经常 见面 感情 又 不 深 的 情况 下 变 冷 太 正常 了 你 对 她 的 亲昵 如果 超出 了 她 的 底线 蟹 女 也 会心 生 不 悦 的"} 98 | {"response": "谢 啦 哈哈", "knowledge": ["", ""], "history": "9 15 天津 场 学生 一枚 卖点 周边 希望 可以 赚 到 票 钱是 回复 可见 周边 链接 么不是 我 打算 去 现场 卖 没有 链接比较 好 卖"} 99 | {"response": "也 熊抱", "knowledge": ["", ""], "history": "手 好看 的 男 明星 附 真相gd 的op 的 头像 说 的 是 gd 提名 黄立行op 我 也 喜欢 啊 但是 相比 gd 的 手 gd 的 更 好看 哈哈 我 是 理智 粉哈哈 vip 跟 你 握 个 爪"} 100 | {"response": "就是 整个 流程 的 跟进 上去 递 个 话筒 递 酒 跟妆 什么 的 ·", "knowledge": ["", ""], "history": "招 全职 婚礼策划师 兼职 督导 场 布想 问 如果 要 跟进 一个 婚礼 的 话 是 当天 还是 期间 要 很 长 一段 时间 跟 新人 啊 什么 的 沟通只 用 当天 哦 ·具体 要 做 些 什么 啊"} 101 | --------------------------------------------------------------------------------