├── README.md ├── bidaf.py ├── config.py ├── data_processor.py ├── dataset └── origin │ ├── scheme.xlsx │ ├── synonyms.txt │ ├── test1.xlsx │ ├── train.xlsx │ └── triples.txt ├── generate_kg.py ├── generate_qa_pair.py ├── generate_vocab.py ├── main.py ├── path_env.py ├── postprocessor.py ├── requirements.txt ├── run.sh └── run_model.py /README.md: -------------------------------------------------------------------------------- 1 | # Operator_QA_Based_KB 2 | 阿里天池赛:CCKS2021 运营商知识图谱推理问答 3 | ### 赛题链接:https://tianchi.aliyun.com/competition/entrance/531904/introduction 4 | ### 算法思路:https://zhuanlan.zhihu.com/p/446180276 5 | ### 运行环境:python 3.8 + pip -r requirements.txt 6 | ### 使用方法:bash run.sh 7 | ### 队名:烤年糕配黄豆粉 8 | ### 结果:f1=87% 9 | ### 排名:23/49/431 10 | -------------------------------------------------------------------------------- /bidaf.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Bidaf魔改 4 | @author: 5 | """ 6 | import torch 7 | import torch.nn as nn 8 | import torch.nn.functional as F 9 | 10 | # 保证每次运行生成的随机数相同 11 | torch.manual_seed(123) 12 | torch.cuda.manual_seed(123) 13 | 14 | class WordEmbedLayer(nn.Module): 15 | def __init__(self, vocab_size, embed_size, pretrained=None): 16 | super(WordEmbedLayer, self).__init__() 17 | if pretrained is not None: 18 | self.word_embed = nn.Embedding.from_pretrained(pretrained, freeze=True) 19 | else: 20 | self.word_embed = nn.Embedding(vocab_size, embed_size) 21 | 22 | def forward(self, x): 23 | # x: [batch_size, seq_len] 24 | out = self.word_embed(x) # [batch_size, seq_len, embed_size] 25 | return out 26 | 27 | 28 | class ContextualEmbedLayer(nn.Module): 29 | def __init__(self, embed_size, hidden_size, dropout=0.2): 30 | super(ContextualEmbedLayer, self).__init__() 31 | self.bilstm = nn.LSTM(input_size=embed_size, 32 | hidden_size=hidden_size, 33 | bidirectional=True, 34 | batch_first=True, 35 | dropout=dropout 36 | ) 37 | 38 | def forward(self, x, lengths): 39 | # x: [batch_size, seq_len, embed_size] 40 | sorted_len, sorted_idx = torch.sort(lengths, descending=True) 41 | sorted_x = x[sorted_idx.long()] 42 | _, ori_idx = torch.sort(sorted_idx) 43 | 44 | packed_x = nn.utils.rnn.pack_padded_sequence(sorted_x, sorted_len.long().cpu().data.numpy(), batch_first=True) 45 | packed_out, (h_n, c_n) = self.bilstm(packed_x) 46 | out, _ = nn.utils.rnn.pad_packed_sequence(packed_out, batch_first=True) 47 | out = out[ori_idx.long()] 48 | return out # [batch_size, seq_len, hidden_size*2] 49 | 50 | 51 | class AttentionFlowLayer(nn.Module): 52 | def __init__(self, hidden_size): 53 | super(AttentionFlowLayer, self).__init__() 54 | self.alpha = nn.Linear(6*hidden_size, 1) 55 | self.beta = nn.Linear(hidden_size*8, hidden_size*8) 56 | 57 | def forward(self, context, query): 58 | # context: [batch_size, c_seq_len, hidden_size*2] 59 | # query: [batch_size, q_seq_len, hidden_size*2] 60 | batch_size = context.size(0) 61 | c_seq_len = context.size(1) 62 | q_seq_len = query.size(1) 63 | 64 | context = context.unsqueeze(2) 65 | query = query.unsqueeze(1) 66 | _context = context.expand(-1, -1, q_seq_len, -1) # [batch_size, c_seq_len, q_seq_len, hidden_size*2] 67 | _query = query.expand(-1, c_seq_len, -1, -1) # [batch_size, c_seq_len, q_seq_len, hidden_size*2] 68 | 69 | c_q = torch.mul(_context, _query) # [batch_size, c_seq_len, q_seq_len, hidden_size*2],逐元素相乘 70 | cat1 = torch.cat((_context, _query, c_q), dim=-1) 71 | S = self.alpha(cat1) 72 | S = S.squeeze() # [batch_size, c_seq_len, q_seq_len] 73 | 74 | query = query.squeeze() 75 | c_q_atten_w = F.softmax(S, dim=-1) 76 | query_hat = torch.bmm(c_q_atten_w, query) # [batch_size, c_seq_len, hidden_size*2] 77 | 78 | context = context.squeeze() 79 | q_c_atten_w = F.softmax(torch.max(S, dim=2)[0], dim=1).unsqueeze(1) # [batch_size, 1, c_seq_len] 80 | context_hat = torch.bmm(q_c_atten_w, context) # [batch_size, 1, hidden_size*2] 81 | context_hat = context_hat.expand(-1, c_seq_len, -1) # [batch_size, c_seq_len, hidden_size*2] 82 | 83 | context_query_hat = torch.mul(context, query_hat) # [batch_size, c_seq_len, hidden_size*2] 84 | context_context_hat = torch.mul(context, context_hat) # [batch_size, c_seq_len, hidden_size*2] 85 | cat2 = torch.cat((context_hat, query_hat, context_query_hat, context_context_hat), dim=-1) 86 | out = self.beta(cat2) # [batch_size, c_seq_len, hidden_size*8] 87 | 88 | return out 89 | 90 | 91 | class OutputLayer(nn.Module): 92 | def __init__(self, hidden_size, num_classes, dropout=0.2): 93 | super(OutputLayer, self).__init__() 94 | self.bilstm = nn.LSTM(input_size=hidden_size*8, 95 | hidden_size=hidden_size, 96 | bidirectional=True, 97 | batch_first=True, 98 | dropout=dropout 99 | ) 100 | self.liner = nn.Linear(hidden_size*2, num_classes) 101 | self.act_func = nn.Softmax(dim=1) 102 | 103 | def forward(self, x, lengths): 104 | # x: [batch_size, c_seq_len, hidden_size*8] 105 | sorted_len, sorted_idx = torch.sort(lengths, descending=True) 106 | sorted_x = x[sorted_idx.long()] 107 | _, ori_idx = torch.sort(sorted_idx) 108 | 109 | packed_x = nn.utils.rnn.pack_padded_sequence(sorted_x, sorted_len.long().cpu().data.numpy(), batch_first=True) 110 | packed_out, (h_n, c_n) = self.bilstm(packed_x) 111 | out, _ = nn.utils.rnn.pad_packed_sequence(packed_out, batch_first=True) 112 | out = out[ori_idx.long()] 113 | 114 | out = F.avg_pool2d(out, kernel_size=(out.size(1), 1)) 115 | out = out.squeeze(dim=1) #[batch, hidden_size] 116 | out = self.liner(out) 117 | out = self.act_func(out) # [batch_size, num_classes] 118 | 119 | return out 120 | 121 | 122 | 123 | class BidafModel(nn.Module): 124 | def __init__(self, config): 125 | super(BidafModel, self).__init__() 126 | 127 | self.word_embed = WordEmbedLayer(config.vocab_size, config.embed_size) 128 | self.contextual_embed = ContextualEmbedLayer(config.embed_size, config.hidden_size) 129 | 130 | self.att_flow = AttentionFlowLayer(config.hidden_size) 131 | 132 | self.output_layer = OutputLayer(config.hidden_size, config.num_classes) 133 | 134 | def forward(self, context, query): 135 | """ 136 | context = (c_word, c_seq_len) 137 | query = (q_word, q_seq_len) 138 | c_word: [batch_size, c_seq_len] 139 | q_word: [batch_size, q_seq_len] 140 | c_seq_len, q_seq_len: [batch_size] 141 | """ 142 | c_word, c_seq_len = context 143 | q_word, q_seq_len = query 144 | 145 | c_embed = self.word_embed(c_word) # [batch_size, c_seq_len, embed_size] 146 | c_contextual_embed = self.contextual_embed(c_embed, c_seq_len) # [batch_size, c_seq_len, hidden_size*2] 147 | 148 | q_embed = self.word_embed(q_word) # [batch_size, q_seq_len, embed_size] 149 | q_contextual_embed = self.contextual_embed(q_embed, q_seq_len) # [batch_size, q_seq_len, hidden_size*2] 150 | 151 | G = self.att_flow(c_contextual_embed, q_contextual_embed) # [batch_size, c_seq_len, hidden_size*8] 152 | out = self.output_layer(G, c_seq_len) # [batch_size, c_seq_len, hidden_size*2] 153 | 154 | return out 155 | 156 | if __name__ == "__main__": 157 | from config import Config 158 | config = Config() 159 | model = BidafModel(config) -------------------------------------------------------------------------------- /config.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | import torch 3 | 4 | class Config: 5 | def __init__(self): 6 | self.vocab_size = 3000 7 | self.embed_size = 32 8 | self.hidden_size = 32 9 | self.num_classes = 2 10 | 11 | self.device = torch.device("cuda" if torch.cuda.is_available() else "cpu") 12 | self.lr = 1e-3 13 | self.epochs = 20 14 | self.batch_size = 256 15 | self.dev_scale=0. # 切分训练集与验证集(因为数据量很少,所以设置了一个全为训练集的比例) 16 | -------------------------------------------------------------------------------- /data_processor.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | import os 3 | import pandas as pd 4 | import json 5 | import numpy as np 6 | import random 7 | 8 | class DataProcessor: 9 | def load_train(self, path): 10 | with open(path) as fp: 11 | data_list = json.load(fp) 12 | return data_list 13 | 14 | def load_vocab(self, path): 15 | word2index = dict() 16 | with open(path, "r") as fp: 17 | for idx, line in enumerate(fp.readlines()): 18 | word = line.strip() 19 | word2index[word] = idx 20 | return word2index, idx+1 21 | 22 | def load_train_data(self, train_path, vocab_path, max_len=200): 23 | word2index, vocab_size = self.load_vocab(vocab_path) 24 | data_list = self.load_train(train_path) 25 | contexts = [] 26 | queries = [] 27 | labels = [] 28 | for data in data_list: 29 | label_idx = data["label"] 30 | label = [0, 0] 31 | label[label_idx] = 1 32 | labels.append(label) 33 | 34 | context = data["query"] 35 | context_feature = [] 36 | words = list(context) # 文本太短,直接分字 37 | for word in words: 38 | if word in word2index: 39 | context_feature.append(word2index[word]) 40 | else: 41 | context_feature.append(word2index[""]) 42 | if len(context_feature) == max_len: 43 | break 44 | context_feature = context_feature + [word2index[""]] * (max_len - len(context_feature)) 45 | contexts.append(context_feature) 46 | 47 | query = data["ans"] 48 | query_feature = [] 49 | words = list(query) 50 | for word in words: 51 | if word in word2index: 52 | query_feature.append(word2index[word]) 53 | else: 54 | query_feature.append(word2index[""]) 55 | if len(query_feature) == max_len: 56 | break 57 | query_feature = query_feature + [word2index[""]] * (max_len - len(query_feature)) 58 | queries.append(query_feature) 59 | 60 | return contexts, queries, labels, vocab_size 61 | 62 | 63 | def create_train_set(self, train_path, vocab_path, batch_size=64, dev_scale=0.): 64 | def get_batchs(num, batch_size): 65 | idxs = [i for i in range(num)] 66 | batch_first_idx = np.arange(start=0, stop=num, step=batch_size) 67 | np.random.shuffle(idxs) 68 | batches = [] 69 | for first_idx in batch_first_idx: 70 | batch = [idxs[i] for i in range(first_idx, min(first_idx+batch_size, num))] 71 | batches.append(batch) 72 | return batches 73 | if not os.path.exists(vocab_path): 74 | self.create_vocab(train_path, vocab_path) 75 | contexts, queries, labels, vocab_size = self.load_train_data(train_path, vocab_path) 76 | 77 | batches = get_batchs(len(contexts), batch_size) 78 | train_set = [] 79 | dev_set = [] 80 | for batch in batches: 81 | batch_context = [] 82 | batch_query = [] 83 | batch_label = [] 84 | for idx in batch: 85 | batch_context.append(contexts[idx]) 86 | batch_query.append(queries[idx]) 87 | batch_label.append(labels[idx]) 88 | if (random.random() > dev_scale): 89 | train_set.append((batch_context, batch_query, batch_label)) 90 | else: 91 | dev_set.append((batch_context, batch_query, batch_label)) 92 | return train_set, dev_set, vocab_size 93 | 94 | def load_infer_data(self, infer_path, kg_path, vocab_path, max_len=200): 95 | word2index, vocab_size = self.load_vocab(vocab_path) 96 | df = pd.read_excel(infer_path, keep_default_na=False) 97 | contexts = [] 98 | queries = [] 99 | ids = [] 100 | c_ids = [] 101 | with open(kg_path) as fp: 102 | candidates = json.load(fp)["candidates"] 103 | 104 | for idx, row in df.iterrows(): 105 | q_id = row["id"] 106 | context = row["query"] 107 | for c_idx, query in enumerate(candidates): 108 | c_ids.append(c_idx) 109 | ids.append(q_id) 110 | context_feature = [] 111 | words = list(context) 112 | for word in words: 113 | if word in word2index: 114 | context_feature.append(word2index[word]) 115 | else: 116 | context_feature.append(word2index[""]) 117 | if len(context_feature) == max_len: 118 | break 119 | context_feature = context_feature + [word2index[""]] * (max_len - len(context_feature)) 120 | contexts.append(context_feature) 121 | 122 | query_feature = [] 123 | words = list(query) 124 | for word in words: 125 | if word in word2index: 126 | query_feature.append(word2index[word]) 127 | else: 128 | query_feature.append(word2index[""]) 129 | if len(query_feature) == max_len: 130 | break 131 | query_feature = query_feature + [word2index[""]] * (max_len - len(query_feature)) 132 | queries.append(query_feature) 133 | return contexts, queries, ids, c_ids, vocab_size 134 | 135 | 136 | def create_infer_set(self, infer_path, kg_path, vocab_path, batch_size=64): 137 | def get_batchs(num, batch_size): 138 | idxs = [i for i in range(num)] 139 | batch_first_idx = np.arange(start=0, stop=num, step=batch_size) 140 | batches = [] 141 | for first_idx in batch_first_idx: 142 | batch = [idxs[i] for i in range(first_idx, min(first_idx+batch_size, num))] 143 | batches.append(batch) 144 | return batches 145 | 146 | contexts, queries, ids, q_ids, vocab_size = self.load_infer_data(infer_path, kg_path, vocab_path) 147 | 148 | batches = get_batchs(len(contexts), batch_size) 149 | infer_set = [] 150 | for batch in batches: 151 | batch_context = [] 152 | batch_query = [] 153 | batch_ids = [] 154 | batch_q_ids = [] 155 | for idx in batch: 156 | batch_context.append(contexts[idx]) 157 | batch_query.append(queries[idx]) 158 | batch_ids.append(ids[idx]) 159 | batch_q_ids.append(q_ids[idx]) 160 | infer_set.append((batch_context, batch_query, batch_ids, batch_q_ids)) 161 | 162 | return infer_set, vocab_size 163 | -------------------------------------------------------------------------------- /dataset/origin/scheme.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaobaicxy/Operator_QA_Based_KB/46ab06836c4d04d86f1b3c8a6f45bb0937fdde74/dataset/origin/scheme.xlsx -------------------------------------------------------------------------------- /dataset/origin/synonyms.txt: -------------------------------------------------------------------------------- 1 | 车主服务 无 2 | 语音信箱 语言留言服务|普通电话信箱|电话信箱|留言信箱|语音留言|留言服务 3 | 139邮箱 邮箱|手机邮箱|移动139邮箱|20元邮箱| 4 | 北京移动plus会员 移动plus|会员plus|普拉斯|plus|北京移动会员|plus会员 5 | 彩铃 手机彩铃|彩铃功能|采玲|给对方听的铃音|视频彩铃|彩铃服务|彩铃业务|彩铃diy|彩铃|来电铃声 6 | 和彩印 个性化屏显业务 7 | 和彩云 云存储|移动云|移动网盘|个人网盘 8 | 和留言 语音留言|3元留言包|和留言年包 9 | 来电提醒 关机提醒|关机不在服务区|关机没信号的短信|关机没网络提醒|漏话提醒|漏话通知|未接来电提醒|关机没网络信号时|主叫发短信的业务 10 | 天气预报 天气提醒|查询天气|包月天气|气象服务|气象年包服务|10元包年天气|天气预报年包|年套餐天气|包年气象服务|天气服务 11 | 和爱车黄金会员 和爱车业务|车友助理 12 | 短信回执 短信发送报告|短信发送提醒 13 | 亲友团 代扣话费|代付费用|手机号代付费用 14 | 全国亲情网 全国亲情号|亲情号|亲情号码|亲情网业务|外省亲情号|亲情号码增加|加入亲情网|亲情网|请亲号|全国亲情卡|互打免费电话|亲情套餐|亲情通话|家庭网亲情版|家庭亲情通话|亲情通|亲情通业务|亲情省 15 | 通话圈 家庭计划|好友计划|家庭计划套餐|家庭计划年包|家庭亲情号|家庭计划副卡|家庭计划成员|家庭成员互打免费 16 | 和家庭分享 和家庭成员|家庭成员|家庭号码|家庭成员怎么添加|家庭成员怎么加|和家庭|家庭亲情号|家庭流量共享|亲情号共享流量|家庭亲情网 17 | 车主小秘书24元年套餐 无 18 | 互联网智能语音遥控器 智能遥控器|语音遥控器|宽带遥控器 19 | 固话业务 固话 20 | 互联网电视 移动电视盒子|移动机顶盒|忘了电视|机顶盒|魔百和|魔百盒热剧vip连续包月|魔百盒 21 | 花季守护业务 花季守护 22 | 权益超市 无 23 | 纯权益产品 无 24 | 移动特色权益产品 无 25 | 超市会员产品 无 26 | 花一惠一营销活动 花一惠一|花一惠 27 | 畅享套餐升档信用购活动 升档信用购 28 | 新惠享流量券活动 惠享流量|20元20gb惠享流量|惠享券活动|惠享券|惠享卷|27个月的流量|新30元惠享40G流量券|20元20gb惠享流量卷|慧想流量|流量享惠包|20元20g惠享|新惠享流量券|惠享流量券 29 | 全网优惠享特权活动 全网优惠享特权|全网优享活动|享特权活动|全国优惠享 30 | 全网普惠得流量活动 全网普惠送流量|全网普惠的流量|普惠的流量|普惠流量|普惠|全网享优惠活动|全网普惠业务 31 | 签到翻牌子 翻牌子|签到翻牌子活动 32 | 1元10gb特惠体验券活动 无 33 | 幸运好礼星期三活动 周三抽流量活动 34 | 加量不加价活动 流量升档|50升70|30升50|流量月包升档|月包升档活动 35 | 5g套餐升档折扣活动 无 36 | 签到奖励活动 每天签到 37 | 畅享套餐首充活动 无 38 | 和家庭优惠活动 无 39 | 和家庭免费赠送号卡活动 无 40 | 全球通焕新优享活动 领国际流量|免费领三天国际流量|免费领国际流量|换新活动 41 | 全球通套餐赠送国际长途语音包活动 赠送国际长途分钟数活动 42 | 移动王卡福利二选一活动 王卡二选一|二选一活动|王卡福利|网卡二选一|福利二选一|移动王卡福利二选一 43 | 移动王卡首充赠费活动 首充50元送话费|首充50送50|大王卡送话费|王卡优惠返话费|充50送50|移动王卡畅享版首充50送50方案 44 | 校园卡活动 200打一年|2018年校园迎新|2019年校园活动|2018版校园活动|300打两年|两百打一年|300打2年|打两年300|校园300打一年|校园300打两年|2020年的校园套餐|2020校园套餐|2020北京校园卡|200打一年续约|五百打两年|开学季活动 45 | 天天做任务活动 流量树|做任务|种树的游戏 46 | 承诺畅享套餐抵减套餐费活动 减免套餐费活动 47 | 云邮包活动 无 48 | 流量拼go活动 流量拼单|流量拼团|拼团流量包|流量拼购 49 | 1元5gb流量券 贴心流量券|1元5g流量|1元5gb流量包 50 | 北京移动plus会员权益卡 无 51 | 承诺低消优惠话费活动 消费送礼|承诺低消活动|普惠套餐|承诺低消优惠活动|12个月得流量|38元全网普惠|18元全网普惠|承诺消费补差 52 | 全国亲情网功能费优惠活动 亲情网免费 53 | 畅享套餐促销优惠活动 78元无限流量套餐|畅享套餐促销优惠 54 | 2019充值短信优惠活动 充值短信优惠套餐|短信充值优惠|2019短信充值优惠|充值短信优惠活动|充值赠送500条短信 55 | 加社区通信管家得礼包活动 666 56 | 新畅享套餐升档优惠活动 套餐升档活动|畅享套餐升档优惠|畅享套餐升档 57 | 移动王卡惠享合约 无 58 | 砍价得好礼活动 无 59 | 天天赢2GB活动 赢2GB活动|流量助力|助力赢2GB活动|天天赢2G|做任务赢好礼 60 | 移动乐享惠活动 无 61 | 流量福袋活动 福袋|福袋流量|10元10GB|10元10G 62 | 入网首充赠礼营销活动 无 63 | 精灵卡首充优惠活动 无 64 | 年货节活动介绍 年货|年货福利|年货福袋奖励 65 | 1元黄金会员活动 无 66 | 新春营销活动 无 67 | 全球通礼遇活动 无 68 | 随心看会员合约版 腾讯视频|随心看合约版 69 | 新春五福活动 支付宝2021新春五福活动|支付宝五福活动|五福|新春五福|集福字|福卡|新春版花卡 70 | 移动花卡新春升级版 无 71 | 语音模组 模组套餐 72 | 流量模组 模组 73 | 畅享套餐 畅想包|移动畅想套餐|畅享包|移动畅享套餐|畅想套餐|畅想|组合套餐|59元套餐|108元畅销套餐|KTZXTC|KTCXZX|39元套餐|59元档|9元套餐|9元语音包 74 | 神州行5元卡 神州行5元月卡|5元卡|5元卡半年包|5元卡年包|半年30元|五元卡|60包一年|5元包月卡 75 | 4G飞享套餐升级版 飞享套餐|新飞58套餐|飞翔58元套餐|分享18套餐|飞享五八套餐|飞享|2019飞享套餐|新飞享|新飞翔|4g飞享套餐|4g飞享|最低|最便宜|4g8元卡|最底套餐|便宜|月租费少|保号套餐|18元套餐|38元套餐 76 | 88商旅套餐 商旅套餐|58元商旅套餐|128商旅套餐|商旅88元 77 | 家园卡欢乐套餐 郊区卡|家园卡|门头沟卡|大兴卡|通州卡|密云卡|房山卡|大众卡|北京郊区卡|欢乐套餐|家园套餐v2.0|欢乐优惠券 78 | 任我用套餐 无 79 | 神州行升级版标准卡 神b|神标 80 | 神州行畅听卡 长途套餐|长途流量100m|畅聊套餐|畅听年卡|畅听卡年包 81 | 万能副卡 副卡|副号|家庭副卡 82 | 畅享放心用套餐 任意用|任我享|畅想放心用|放心畅享包|无限量|流量畅销包|60元畅享流量包|80元畅享流量包|放心用|畅享放心用|无线流量套餐|无限流量|不限量 83 | 移动花卡 花呗卡|支付宝卡|淘宝卡|移动花卡宝藏版|花卡|花卡宝藏版|宝藏卡|宝藏卡套餐 84 | 移动王卡 王卡套餐|1元1g|类似腾讯大王卡|18元的王卡|王卡|移动大网卡|大王卡|视频王卡|48元大流量套餐|移动网卡|超级流量王|18元网卡|1元1gb|一元一个g|专门上网的卡|1元1gb|纯流量卡|流量王 85 | 和4g校园套餐 校园套餐|动感校园卡|校园38|校园卡|校园卡68|68新人礼包|4g校园卡|2018年和4G校园卡|动感地带校园行套餐|学生卡|校园套餐2020版|2020年校园卡|2020校园卡|2020学生套餐|500打两年|和校园 86 | 北京通手机卡 老年卡|老年优待卡|老年的物美价廉套餐|老人的套餐卡|老年卡18元|老人的套餐 87 | 5g智享套餐 5g智享套餐个人版 88 | 5g智享套餐家庭版 169元5g智享套餐家庭版|5g智想套餐家庭版|5g智享套餐家庭版 89 | 5g智享套餐合约版 无 90 | 5g家庭套餐 无 91 | 5g畅享套餐 无 92 | 5g畅享套餐合约版 畅享套餐合约版 93 | 新全球通畅享套餐 无 94 | 锦鲤卡 无 95 | 芝麻卡 无 96 | 精灵卡 无 97 | 牛卡 无 98 | 尊享计划2020版 无 99 | 流量加油包 10元100M|叠加包|加油包|加开流量 100 | 移动wlan套餐 北京移动wlan|任我用wlan|移动wlan|校园wlan|wlan任我用|wlan流量套餐|wlan|wlan套餐|cmcc|100元wlan套餐|0元wlan任我用套餐 101 | 流量安心包 流量保险|儿童锁|流量兜底|安心包|套外流量保护 102 | 和家庭流量包 和家庭琉璃套餐|家庭共享流量套餐|和家庭共享流量包|100元5g 103 | 嗨包 海包 104 | 机场流量包 机场流量套餐|首都机场流量包|首都机场流量业务 105 | 流量小时包 五元3G 106 | 流量日包 日包|流量日报|流量日套餐|日包套餐|日充流量|日套餐|3元1g|5元2g|10元5g|短促包 107 | 安心上网流量包 无 108 | 流量暖心包 暖心包|暖心流量包 109 | 5G流量升级包 5g流量升级包|流量升级包 110 | 随心看会员 会员随新看|会员随心看|随心看流量包|随心看|随心看会员|20元随心流量包 111 | 王者荣耀会员流量包 王者荣耀会员游戏包|王者会员包|王者荣耀|王者|王者订单|王者荣耀会员6GB定向流量 112 | 流量无忧包 无忧包 113 | 校园专属定向流量包 流量学生专用|高校流量包|校园流量包|校园定向流量|专属流量包校园|校园定向|移动校园优惠包|移动校园专属优惠|大学生专属流量套餐 114 | 视频会员通用流量月包 70爱奇艺|70元优酷|65乐视|手机视频流量包|爱奇艺流量包 115 | 喜马拉雅流量包 喜马拉雅|西玛拉亚|西玛拉雅 116 | 专属定向流量包 懂车帝|火山小视频流量|抖音流量包|西瓜视频流量包|抖音流量|今日头条包|微博包|咪咕专属包|15元百度|9元百度包|网易流量包|网易包|头条系定向流量|视频定向流量|今日头条抖音包|抖音套餐|定向流量|bilibili|哔哩哔哩|专属流量|哔哩哔哩流量包|特殊业务专属流量|bilibili流量包|咪咕视频定向流量 117 | 快手定向流量包 快手流量包|快手流量|快手app流量包 118 | 视频会员5gb通用流量加油包 5g加油包|视频加油5g|视频5g加油流量包|芒果TV会员5GB通用流量加油包 119 | 任我看视频流量包 任我看快手|任我看优酷视频|任我看西瓜视频|咪咕直播|任我看咪咕流量|任我看腾讯视频流量包|任我看聚力视频(pptv)流量包|任我看芒果tv|芒果vt|手机视频流量包|腾讯上网套餐|任我看|优酷|视频流量包|上网追剧包|腾讯视频24元流量|腾讯视频流量 120 | 流量月包 流量10G|畅游包|流量可选包|流量包月|包月的流量|流量30G|50元6g|50元6gb|可选包|10元套餐|10元流量套餐|30元3g|流量包|30元流量 121 | 视频会员5gb通用流量7天包 天5g流量包|7天5g视频会员流量包|腾讯7天5g流量包|爱奇艺7天5g流量包|优酷7天5g流量包|芒果7天5g流量包|一周流量|7天的流量包 122 | 视频会员2gb通用流量7天包 7天2g通用流量|优酷7天会员流量|优酷视频会员2gb通用流量7天包|腾讯视频会员2gb通用流量7天包 123 | 提速包 恢复限速|流量提速包|限速恢复|高速包|加速包|加速流量包|高速流量套餐|提速日租包|流量加速包|15元3g|流量加速|提速|解除限速 124 | 任我用流量包 任我用流量套餐|100元20g|人我用流量包|任我用100|任我用套餐C 125 | 倍享包 倍享活动|倍享业务|倍享套餐|流量倍享|倍享包 126 | 5G直通包 咪咕畅玩 127 | 5G特惠流量包 30元特惠流量包 128 | 抖音视频彩铃15GB定向流量月包 抖音视频彩铃|15GB定向流量月包|抖音视频彩铃|抖音定向流量包|抖音15g流量包 129 | 30元5GB包 30元5G 130 | 嗨购产品 嗨购|嗨够 131 | 30元5GB半价体验版 30元5GB半价体验版|30元5GB半价|半价|30元5GB半价版 -------------------------------------------------------------------------------- /dataset/origin/test1.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaobaicxy/Operator_QA_Based_KB/46ab06836c4d04d86f1b3c8a6f45bb0937fdde74/dataset/origin/test1.xlsx -------------------------------------------------------------------------------- /dataset/origin/train.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaobaicxy/Operator_QA_Based_KB/46ab06836c4d04d86f1b3c8a6f45bb0937fdde74/dataset/origin/train.xlsx -------------------------------------------------------------------------------- /dataset/origin/triples.txt: -------------------------------------------------------------------------------- 1 | <139邮箱> <档位介绍表> 2 | <139邮箱> <档位介绍表> 3 | <139邮箱> <档位介绍表> 4 | <139邮箱> <生效规则> <生效规则_69> 5 | <1元10GB特惠体验券活动> <封顶规则> <封顶规则_120> 6 | <1元10GB特惠体验券活动> <档位介绍表> 7 | <1元10GB特惠体验券活动> <结转规则> <结转规则_119> 8 | <1元5GB流量券> <档位介绍表> 9 | <1元5GB流量券> <生效规则> <生效规则_112> 10 | <1元5GB流量券> <结转规则> <结转规则_113> 11 | <1元黄金会员活动> <使用范围> <使用范围_141> 12 | <1元黄金会员活动> <档位介绍表> 13 | <2019充值短信优惠活动> <档位介绍表> 14 | <2019充值短信优惠活动> <生效规则> <生效规则_132> 15 | <30元5GB包> <使用范围> <使用范围_65> 16 | <30元5GB包> <封顶规则> <封顶规则_63> 17 | <30元5GB包> <档位介绍表> 18 | <30元5GB包> <结转规则> <结转规则_64> 19 | <30元5GB半价体验版> <使用范围> <使用范围_68> 20 | <30元5GB半价体验版> <封顶规则> <封顶规则_66> 21 | <30元5GB半价体验版> <档位介绍表> 22 | <30元5GB半价体验版> <结转规则> <结转规则_67> 23 | <4G飞享套餐升级版> <档位介绍表> 24 | <4G飞享套餐升级版> <结转规则> <结转规则_148> 25 | <5G套餐升档折扣活动> <档位介绍表> 26 | <5G套餐升档折扣活动> <档位介绍表> 27 | <5G套餐升档折扣活动> <生效规则> <生效规则_123> 28 | <5G家庭套餐> <使用范围> <使用范围_183> 29 | <5G家庭套餐> <档位介绍表> 30 | <5G家庭套餐> <档位介绍表> 31 | <5G家庭套餐> <档位介绍表> 32 | <5G家庭套餐> <档位介绍表> 33 | <5G家庭套餐> <档位介绍表> 34 | <5G智享套餐> <封顶规则> <封顶规则_177> 35 | <5G智享套餐> <档位介绍表> 36 | <5G智享套餐> <结转规则> <结转规则_178> 37 | <5G智享套餐合约版> <封顶规则> <封顶规则_181> 38 | <5G智享套餐合约版> <档位介绍表> 39 | <5G智享套餐合约版> <档位介绍表> 40 | <5G智享套餐合约版> <档位介绍表> 41 | <5G智享套餐合约版> <档位介绍表> 42 | <5G智享套餐合约版> <档位介绍表> 43 | <5G智享套餐合约版> <档位介绍表> 44 | <5G智享套餐合约版> <结转规则> <结转规则_182> 45 | <5G智享套餐家庭版> <封顶规则> <封顶规则_179> 46 | <5G智享套餐家庭版> <档位介绍表> 47 | <5G智享套餐家庭版> <结转规则> <结转规则_180> 48 | <5G流量升级包> <使用范围> <使用范围_59> 49 | <5G流量升级包> <档位介绍表> 50 | <5G流量升级包> <档位介绍表> 51 | <5G流量升级包> <档位介绍表> 52 | <5G流量升级包> <生效规则> <生效规则_60> 53 | <5G特惠流量包> <使用范围> <使用范围_49> 54 | <5G特惠流量包> <封顶规则> <封顶规则_47> 55 | <5G特惠流量包> <档位介绍表> 56 | <5G特惠流量包> <结转规则> <结转规则_48> 57 | <5G畅享套餐> <封顶规则> <封顶规则_187> 58 | <5G畅享套餐> <档位介绍表> 59 | <5G畅享套餐> <档位介绍表> 60 | <5G畅享套餐> <结转规则> <结转规则_188> 61 | <5G畅享套餐合约版> <封顶规则> <封顶规则_189> 62 | <5G畅享套餐合约版> <档位介绍表> 63 | <5G畅享套餐合约版> <档位介绍表> 64 | <5G畅享套餐合约版> <档位介绍表> 65 | <5G畅享套餐合约版> <档位介绍表> 66 | <5G畅享套餐合约版> <档位介绍表> 67 | <5G畅享套餐合约版> <档位介绍表> 68 | <5G畅享套餐合约版> <结转规则> <结转规则_190> 69 | <5G直通包> <档位介绍表> 70 | <5G直通包> <档位介绍表> 71 | <5G直通包> <档位介绍表> 72 | <5G直通包> <生效规则> <生效规则_45> 73 | <5G直通包> <结转规则> <结转规则_46> 74 | <88商旅套餐> <档位介绍表> 75 | <88商旅套餐> <生效规则> <生效规则_149> 76 | <88商旅套餐> <结转规则> <结转规则_150> 77 | <上线时间> <20070816> 78 | <下线时间> <20991231> 79 | <业务简介> <业务简介_135> 80 | <产品名称> <免费版139邮箱> 81 | <使用方法> <使用方法_11> 82 | <取消方式> <取消方式_95> 83 | <城市> <北京> 84 | <子业务> <免费版> 85 | <开通方式> <开通方式_116> 86 | <上线时间> <20070816> 87 | <下线时间> <20991231> 88 | <业务简介> <业务简介_136> 89 | <产品名称> <5元版139邮箱> 90 | <价格> <5> 91 | <使用方法> <使用方法_11> 92 | <取消方式> <取消方式_96> 93 | <城市> <北京> 94 | <开通方式> <开通方式_117> 95 | <上线时间> <20070816> 96 | <下线时间> <20991231> 97 | <业务简介> <业务简介_137> 98 | <产品名称> <20元版139邮箱> 99 | <价格> <20> 100 | <使用方法> <使用方法_11> 101 | <取消方式> <取消方式_97> 102 | <城市> <北京> 103 | <开通方式> <开通方式_118> 104 | <上线时间> <20191023> 105 | <下线时间> <20991231> 106 | <业务简介> <业务简介_186> 107 | <产品名称> <1元10GB特惠体验券活动> 108 | <价格> <1> 109 | <取消方式> <取消方式_137> 110 | <城市> <北京> 111 | <开通方式> <开通方式_160> 112 | <开通条件> <开通条件_68> 113 | <有效期> <8640> 114 | <有效期规则> <有效期规则_55> 115 | <流量> <10240> 116 | <上线时间> <20191211> 117 | <下线时间> <20991231> 118 | <业务简介> <业务简介_209> 119 | <产品名称> <1元5GB流量券> 120 | <价格> <1> 121 | <取消方式> <取消方式_155> 122 | <取消条件> <取消条件_38> 123 | <城市> <北京> 124 | <开通方式> <开通方式_178> 125 | <开通条件> <开通条件_78> 126 | <有效期> <8640> 127 | <有效期规则> <有效期规则_61> 128 | <流量> <5120> 129 | <上线时间> <20210113> 130 | <下线时间> <20200228> 131 | <业务简介> <业务简介_227> 132 | <产品名称> <1元黄金会员活动> 133 | <取消条件> <取消条件_39> 134 | <城市> <北京> 135 | <开通方式> <业务简介_227> 136 | <上线时间> <20190919> 137 | <下线时间> <20991213> 138 | <业务简介> <业务简介_215> 139 | <产品名称> <2019充值短信优惠活动> 140 | <取消方式> <取消方式_160> 141 | <城市> <北京> 142 | <开通方式> <开通方式_183> 143 | <业务简介> <业务简介_130> 144 | <产品名称> <30元5GB包> 145 | <城市> <北京> 146 | <开通方式> <业务简介_130> 147 | <业务简介> <业务简介_131> 148 | <产品名称> <30元5GB半价体验版> 149 | <城市> <北京> 150 | <开通方式> <开通方式_114> 151 | <上线时间> <20140601> 152 | <下线时间> <20991231> 153 | <业务简介> <业务简介_6> 154 | <产品名称> <4G飞享套餐升级版> 155 | <内含其它服务> <全国接听免费|来电显示> 156 | <取消方式> <取消方式_6> 157 | <取消条件> <取消条件_1> 158 | <城市> <北京> 159 | <开通方式> <开通方式_5> 160 | <开通条件> <开通条件_3> 161 | <有效期规则> <有效期规则_3> 162 | <上线时间> <20200303> 163 | <下线时间> <20991231> 164 | <业务简介> <业务简介_189> 165 | <产品名称> <5G套餐升档折扣活动(12月方案)> 166 | <取消方式> <取消方式_139> 167 | <城市> <北京> 168 | <子业务> <12月方案> 169 | <开通方式> <开通方式_162> 170 | <有效期> <8640> 171 | <上线时间> <20191126> 172 | <下线时间> <20991231> 173 | <业务简介> <业务简介_190> 174 | <产品名称> <5G套餐升档折扣活动(24月方案)> 175 | <取消方式> <取消方式_140> 176 | <城市> <北京> 177 | <子业务> <24月方案> 178 | <开通方式> <开通方式_163> 179 | <有效期> <17280> 180 | <上线时间> <20191031> 181 | <下线时间> <20991231> 182 | <业务简介> <业务简介_38> 183 | <产品名称> <80元5G家庭套餐> 184 | <价格> <80> 185 | <取消方式> <取消方式_31> 186 | <取消条件> <取消条件_9> 187 | <城市> <北京> 188 | <带宽> <100> 189 | <开通方式> <开通方式_32> 190 | <开通条件> <开通条件_24> 191 | <上线时间> <20191031> 192 | <下线时间> <20991231> 193 | <业务简介> <业务简介_39> 194 | <产品名称> <160元5G家庭套餐> 195 | <价格> <160> 196 | <取消方式> <取消方式_31> 197 | <取消条件> <取消条件_9> 198 | <城市> <北京> 199 | <带宽> <200> 200 | <开通方式> <开通方式_32> 201 | <开通条件> <开通条件_24> 202 | <上线时间> <20191031> 203 | <下线时间> <20991231> 204 | <业务简介> <业务简介_40> 205 | <产品名称> <200元5G家庭套餐> 206 | <价格> <200> 207 | <取消方式> <取消方式_31> 208 | <取消条件> <取消条件_9> 209 | <城市> <北京> 210 | <带宽> <300> 211 | <开通方式> <开通方式_32> 212 | <开通条件> <开通条件_24> 213 | <上线时间> <20191031> 214 | <下线时间> <20991231> 215 | <业务简介> <业务简介_41> 216 | <产品名称> <380元5G家庭套餐> 217 | <价格> <380> 218 | <取消方式> <取消方式_31> 219 | <取消条件> <取消条件_9> 220 | <城市> <北京> 221 | <带宽> <500> 222 | <开通方式> <开通方式_32> 223 | <开通条件> <开通条件_24> 224 | <上线时间> <20191031> 225 | <下线时间> <20991231> 226 | <业务简介> <业务简介_42> 227 | <产品名称> <680元5G家庭套餐> 228 | <价格> <680> 229 | <取消方式> <取消方式_31> 230 | <取消条件> <取消条件_9> 231 | <城市> <北京> 232 | <带宽> <1000> 233 | <开通方式> <开通方式_32> 234 | <开通条件> <开通条件_24> 235 | <上线时间> <20191031> 236 | <下线时间> <20991231> 237 | <业务简介> <业务简介_30> 238 | <产品名称> <5G智享套餐> 239 | <内含其它服务> <全国被叫免费|来电显示免费> 240 | <取消方式> <取消方式_27> 241 | <取消条件> <取消条件_6> 242 | <城市> <北京> 243 | <开通方式> <开通方式_24> 244 | <开通条件> <开通条件_21> 245 | <上线时间> <20191031> 246 | <下线时间> <20991231> 247 | <业务简介> <业务简介_32> 248 | <产品名称> <128元5G智享套餐合约版> 249 | <价格> <128> 250 | <内含其它服务> <全国被叫免费|来电显示免费> 251 | <取消方式> <取消方式_29> 252 | <取消条件> <取消条件_8> 253 | <城市> <北京> 254 | <子业务> <合约版> 255 | <开通方式> <开通方式_26> 256 | <开通条件> <开通条件_23> 257 | <有效期> <17280> 258 | <流量> <30720> 259 | <语音时长> <500> 260 | <上线时间> <20191031> 261 | <下线时间> <20991231> 262 | <业务简介> <业务简介_33> 263 | <产品名称> <158元5G智享套餐合约版> 264 | <价格> <158> 265 | <内含其它服务> <全国被叫免费|来电显示免费> 266 | <取消方式> <取消方式_30> 267 | <取消条件> <取消条件_8> 268 | <城市> <北京> 269 | <子业务> <合约版> 270 | <开通方式> <开通方式_27> 271 | <开通条件> <开通条件_23> 272 | <有效期> <17280> 273 | <流量> <40960> 274 | <语音时长> <600> 275 | <上线时间> <20191031> 276 | <下线时间> <20991231> 277 | <业务简介> <业务简介_34> 278 | <产品名称> <198元5G智享套餐合约版> 279 | <价格> <198> 280 | <内含其它服务> <全国被叫免费|来电显示免费> 281 | <取消方式> <取消方式_30> 282 | <取消条件> <取消条件_8> 283 | <城市> <北京> 284 | <子业务> <合约版> 285 | <开通方式> <开通方式_28> 286 | <开通条件> <开通条件_23> 287 | <有效期> <17280> 288 | <流量> <61440> 289 | <语音时长> <1000> 290 | <上线时间> <20191031> 291 | <下线时间> <20991231> 292 | <业务简介> <业务简介_35> 293 | <产品名称> <238元5G智享套餐合约版> 294 | <价格> <238> 295 | <内含其它服务> <全国被叫免费|来电显示免费> 296 | <取消方式> <取消方式_30> 297 | <取消条件> <取消条件_8> 298 | <城市> <北京> 299 | <子业务> <合约版> 300 | <开通方式> <开通方式_29> 301 | <开通条件> <开通条件_23> 302 | <有效期> <17280> 303 | <流量> <81920> 304 | <语音时长> <1000> 305 | <上线时间> <20191031> 306 | <下线时间> <20991231> 307 | <业务简介> <业务简介_36> 308 | <产品名称> <298元5G智享套餐合约版> 309 | <价格> <298> 310 | <内含其它服务> <全国被叫免费|来电显示免费> 311 | <取消方式> <取消方式_30> 312 | <取消条件> <取消条件_8> 313 | <城市> <北京> 314 | <子业务> <合约版> 315 | <开通方式> <开通方式_30> 316 | <开通条件> <开通条件_23> 317 | <有效期> <17280> 318 | <流量> <102400> 319 | <语音时长> <1500> 320 | <上线时间> <20191031> 321 | <下线时间> <20991231> 322 | <业务简介> <业务简介_37> 323 | <产品名称> <398元5G智享套餐合约版> 324 | <价格> <398> 325 | <内含其它服务> <全国被叫免费|来电显示免费> 326 | <取消方式> <取消方式_30> 327 | <取消条件> <取消条件_8> 328 | <城市> <北京> 329 | <子业务> <合约版> 330 | <开通方式> <开通方式_31> 331 | <开通条件> <开通条件_23> 332 | <有效期> <17280> 333 | <流量> <153600> 334 | <语音时长> <2000> 335 | <上线时间> <20191031> 336 | <下线时间> <20991231> 337 | <业务简介> <业务简介_31> 338 | <产品名称> <5G智享套餐家庭版> 339 | <价格> <169> 340 | <内含其它服务> <全国被叫免费|来电显示免费> 341 | <取消方式> <取消方式_28> 342 | <取消条件> <取消条件_7> 343 | <城市> <北京> 344 | <子业务> <家庭版> 345 | <带宽> <100> 346 | <开通方式> <开通方式_25> 347 | <开通条件> <开通条件_22> 348 | <流量> <30720> 349 | <语音时长> <500> 350 | <上线时间> <20200324> 351 | <下线时间> <20991231> 352 | <业务简介> <业务简介_84> 353 | <产品名称> <99元5G流量升级包> 354 | <价格> <99> 355 | <取消方式> <取消方式_59> 356 | <城市> <北京> 357 | <开通方式> <开通方式_73> 358 | <流量> <30720> 359 | <上线时间> <20200324> 360 | <下线时间> <20991231> 361 | <业务简介> <业务简介_85> 362 | <产品名称> <49元5G流量升级包> 363 | <价格> <49> 364 | <取消方式> <取消方式_59> 365 | <城市> <北京> 366 | <开通方式> <开通方式_74> 367 | <流量> <20480> 368 | <上线时间> <20200324> 369 | <下线时间> <20991231> 370 | <业务简介> <业务简介_86> 371 | <产品名称> <29元5G流量升级包> 372 | <价格> <29> 373 | <取消方式> <取消方式_59> 374 | <城市> <北京> 375 | <开通方式> <开通方式_75> 376 | <流量> <10240> 377 | <上线时间> <20200120> 378 | <下线时间> <20991231> 379 | <业务简介> <业务简介_126> 380 | <产品名称> <5G特惠流量包> 381 | <取消方式> <取消方式_88> 382 | <城市> <北京> 383 | <开通方式> <开通方式_110> 384 | <上线时间> <20200108> 385 | <下线时间> <20991231> 386 | <业务简介> <业务简介_43> 387 | <产品名称> <5G畅享套餐个人版> 388 | <取消方式> <取消方式_32> 389 | <城市> <北京> 390 | <子业务> <个人版> 391 | <开通方式> <开通方式_33> 392 | <上线时间> <20191212> 393 | <下线时间> <20991231> 394 | <业务简介> <业务简介_44> 395 | <产品名称> <5G畅享套餐家庭版> 396 | <取消方式> <取消方式_33> 397 | <城市> <北京> 398 | <子业务> <家庭版> 399 | <开通方式> <开通方式_34> 400 | <有效期> <8640> 401 | <上线时间> <20200108> 402 | <下线时间> <20991231> 403 | <业务简介> <业务简介_45> 404 | <产品名称> <128元5G畅享套餐合约版> 405 | <价格> <128> 406 | <取消方式> <取消方式_34> 407 | <城市> <北京> 408 | <开通方式> <开通方式_35> 409 | <有效期> <17280> 410 | <流量> <30720> 411 | <语音时长> <500> 412 | <上线时间> <20200108> 413 | <下线时间> <20991231> 414 | <业务简介> <业务简介_46> 415 | <产品名称> <158元5G畅享套餐合约版> 416 | <价格> <158> 417 | <取消方式> <取消方式_34> 418 | <城市> <北京> 419 | <开通方式> <开通方式_36> 420 | <有效期> <17280> 421 | <流量> <40960> 422 | <语音时长> <600> 423 | <上线时间> <20200108> 424 | <下线时间> <20991231> 425 | <业务简介> <业务简介_47> 426 | <产品名称> <198元5G畅享套餐合约版> 427 | <价格> <198> 428 | <取消方式> <取消方式_34> 429 | <城市> <北京> 430 | <开通方式> <开通方式_37> 431 | <有效期> <17280> 432 | <流量> <61440> 433 | <语音时长> <1000> 434 | <上线时间> <20200108> 435 | <下线时间> <20991231> 436 | <业务简介> <业务简介_48> 437 | <产品名称> <238元5G畅享套餐合约版> 438 | <价格> <238> 439 | <取消方式> <取消方式_34> 440 | <城市> <北京> 441 | <开通方式> <开通方式_38> 442 | <有效期> <17280> 443 | <流量> <81920> 444 | <语音时长> <1000> 445 | <上线时间> <20200108> 446 | <下线时间> <20991231> 447 | <业务简介> <业务简介_49> 448 | <产品名称> <298元5G畅享套餐合约版> 449 | <价格> <298> 450 | <取消方式> <取消方式_34> 451 | <城市> <北京> 452 | <开通方式> <开通方式_39> 453 | <有效期> <17280> 454 | <流量> <102400> 455 | <语音时长> <1500> 456 | <上线时间> <20200108> 457 | <下线时间> <20991231> 458 | <业务简介> <业务简介_50> 459 | <产品名称> <398元5G畅享套餐合约版> 460 | <价格> <398> 461 | <取消方式> <取消方式_34> 462 | <城市> <北京> 463 | <开通方式> <开通方式_40> 464 | <有效期> <17280> 465 | <流量> <153600> 466 | <语音时长> <2000> 467 | <上线时间> <20191209> 468 | <下线时间> <20991231> 469 | <业务简介> <业务简介_123> 470 | <产品名称> <5G直通包> 471 | <取消方式> <取消方式_87> 472 | <城市> <北京> 473 | <开通方式> <开通方式_109> 474 | <开通条件> <开通条件_57> 475 | <上线时间> <20191209> 476 | <下线时间> <20991231> 477 | <业务简介> <业务简介_124> 478 | <产品名称> <5G直通包-30元> 479 | <取消方式> <取消方式_87> 480 | <城市> <北京> 481 | <开通方式> <开通方式_109> 482 | <上线时间> <20191209> 483 | <下线时间> <20991231> 484 | <业务简介> <业务简介_125> 485 | <产品名称> <5G直通包-60元> 486 | <取消方式> <取消方式_87> 487 | <城市> <北京> 488 | <开通方式> <开通方式_109> 489 | <上线时间> <20110601> 490 | <下线时间> <20201130> 491 | <业务简介> <业务简介_7> 492 | <产品名称> <88商旅套餐> 493 | <内含其它服务> <来电显示|全国接听免费> 494 | <取消方式> <取消方式_7> 495 | <城市> <北京> 496 | <开通方式> <业务简介_7> 497 | <有效期规则> <有效期规则_4> 498 | <上线时间> <20170715> 499 | <下线时间> <20991231> 500 | <业务简介> <业务简介_16> 501 | <产品名称> <万能副卡> 502 | <价格> <10> 503 | <使用方法> <使用方法_0> 504 | <内含其它服务> <全国接听免费|来电显示> 505 | <办理数量> <办理数量_0> 506 | <取消方式> <取消方式_16> 507 | <城市> <北京> 508 | <开通方式> <开通方式_13> 509 | <开通条件> <开通条件_10> 510 | <上线时间> <20180816> 511 | <下线时间> <20991231> 512 | <业务简介> <业务简介_95> 513 | <产品名称> <9元网易态度包> 514 | <价格> <9> 515 | <取消方式> <取消方式_68> 516 | <城市> <北京> 517 | <子业务> <网易> 518 | <开通方式> <开通方式_83> 519 | <开通条件> <开通条件_42> 520 | <有效期规则> <有效期规则_34> 521 | <流量> <15360> 522 | <上线时间> <20180916> 523 | <下线时间> <20991231> 524 | <业务简介> <业务简介_96> 525 | <产品名称> <9元百度包> 526 | <价格> <9> 527 | <取消方式> <取消方式_68> 528 | <城市> <北京> 529 | <子业务> <百度> 530 | <开通方式> <开通方式_84> 531 | <开通条件> <开通条件_42> 532 | <有效期规则> <有效期规则_34> 533 | <流量> <15360> 534 | <上线时间> <20180518> 535 | <下线时间> <20991231> 536 | <业务简介> <业务简介_97> 537 | <产品名称> <咪咕专属包> 538 | <价格> <18> 539 | <取消方式> <取消方式_68> 540 | <城市> <北京> 541 | <子业务> <咪咕> 542 | <开通方式> <开通方式_85> 543 | <开通条件> <开通条件_42> 544 | <有效期规则> <有效期规则_34> 545 | <流量> <30720> 546 | <上线时间> <20180518> 547 | <下线时间> <20991231> 548 | <业务简介> <业务简介_98> 549 | <产品名称> <18元网易态度包> 550 | <价格> <18> 551 | <取消方式> <取消方式_68> 552 | <城市> <北京> 553 | <子业务> <网易> 554 | <开通方式> <开通方式_86> 555 | <开通条件> <开通条件_42> 556 | <有效期规则> <有效期规则_34> 557 | <流量> <30720> 558 | <上线时间> <20191021> 559 | <下线时间> <20211231> 560 | <业务简介> <业务简介_99> 561 | <产品名称> <15元百度包> 562 | <价格> <9> 563 | <取消方式> <取消方式_68> 564 | <城市> <北京> 565 | <子业务> <百度包> 566 | <开通方式> <开通方式_87> 567 | <开通条件> <开通条件_42> 568 | <有效期规则> <有效期规则_34> 569 | <流量> <15360> 570 | <上线时间> <20190603> 571 | <下线时间> <20991231> 572 | <业务简介> <业务简介_207> 573 | <产品名称> <云邮包活动> 574 | <价格> <1> 575 | <取消方式> <取消方式_153> 576 | <城市> <北京> 577 | <开通方式> <业务简介_207> 578 | <上线时间> <20190129> 579 | <下线时间> <20991231> 580 | <业务简介> <业务简介_163> 581 | <产品名称> <互联网智能语音遥控器> 582 | <价格> <59> 583 | <使用方法> <使用方法_20> 584 | <城市> <北京> 585 | <开通方式> <开通方式_143> 586 | <上线时间> <20140312> 587 | <下线时间> <20991231> 588 | <业务简介> <业务简介_165> 589 | <产品名称> <互联网电视> 590 | <价格> <15> 591 | <使用方法> <使用方法_21> 592 | <取消方式> <取消方式_122> 593 | <城市> <北京> 594 | <开通方式> <开通方式_144> 595 | <开通条件> <开通条件_63> 596 | <业务简介> <业务简介_166> 597 | <产品名称> <魔百和电影vip连续月包> 598 | <价格> <19> 599 | <使用方法> <使用方法_21> 600 | <取消方式> <取消方式_123> 601 | <城市> <北京> 602 | <子业务> <电影vip> 603 | <开通方式> <开通方式_145> 604 | <业务简介> <业务简介_167> 605 | <产品名称> <魔百和热剧vip连续月包> 606 | <价格> <19> 607 | <使用方法> <使用方法_21> 608 | <取消方式> <取消方式_124> 609 | <城市> <北京> 610 | <子业务> <热剧vip> 611 | <开通方式> <开通方式_146> 612 | <上线时间> <20190424> 613 | <下线时间> <20201231> 614 | <业务简介> <业务简介_168> 615 | <产品名称> <互联网电视影视会员特惠季包> 616 | <价格> <100> 617 | <使用方法> <使用方法_21> 618 | <取消方式> <取消方式_125> 619 | <城市> <北京> 620 | <开通方式> <开通方式_147> 621 | <有效期> <2160> 622 | <上线时间> <20200426> 623 | <下线时间> <20991231> 624 | <业务简介> <业务简介_169> 625 | <产品名称> <魔百和优惠组合包> 626 | <使用方法> <使用方法_21> 627 | <取消方式> <取消方式_126> 628 | <城市> <北京> 629 | <开通方式> <开通方式_148> 630 | <上线时间> <20190927> 631 | <下线时间> <20991231> 632 | <业务简介> <业务简介_170> 633 | <产品名称> <互联网电视机顶盒特惠包> 634 | <价格> <220> 635 | <使用方法> <使用方法_21> 636 | <取消方式> <取消方式_127> 637 | <取消条件> <取消条件_36> 638 | <城市> <北京> 639 | <开通方式> <开通方式_149> 640 | <有效期> <17280> 641 | <上线时间> <20201029> 642 | <下线时间> <20991231> 643 | <业务简介> <业务简介_171> 644 | <产品名称> <互联网电视爱家影视会员连续月包、年包> 645 | <使用方法> <使用方法_21> 646 | <取消方式> <取消方式_128> 647 | <城市> <北京> 648 | <开通方式> <业务简介_171> 649 | <业务简介> <业务简介_172> 650 | <产品名称> <互联网电视儿童会员包首月礼活动> 651 | <使用方法> <使用方法_21> 652 | <取消方式> <取消方式_129> 653 | <开通方式> <业务简介_172> 654 | <上线时间> <20190128> 655 | <下线时间> <20991231> 656 | <业务简介> <业务简介_155> 657 | <产品名称> <亲友团> 658 | <取消方式> <取消方式_113> 659 | <城市> <北京> 660 | <开通方式> <开通方式_136> 661 | <上线时间> <20180402> 662 | <下线时间> <20991231> 663 | <业务简介> <业务简介_11> 664 | <产品名称> <188元任我用套餐> 665 | <价格> <188> 666 | <内含其它服务> <全国接听免费|来电显示> 667 | <取消方式> <取消方式_11> 668 | <取消条件> <取消条件_2> 669 | <城市> <北京> 670 | <开通方式> <开通方式_9> 671 | <开通条件> <开通条件_7> 672 | <流量> <20480> 673 | <语音时长> <500> 674 | <上线时间> <20190401> 675 | <下线时间> <20190827> 676 | <业务简介> <业务简介_121> 677 | <产品名称> <任我用流量包> 678 | <办理数量> <办理数量_24> 679 | <取消方式> <取消方式_85> 680 | <取消条件> <取消条件_32> 681 | <城市> <北京> 682 | <开通方式> <开通方式_107> 683 | <开通条件> <开通条件_55> 684 | <有效期规则> <有效期规则_43> 685 | <流量> <999999999> 686 | <限速规则> <限速规则_1> 687 | <上线时间> <20170517> 688 | <下线时间> <20991231> 689 | <业务简介> <业务简介_104> 690 | <产品名称> <6元任我看咪咕流量包> 691 | <价格> <6> 692 | <使用方法> <使用方法_3> 693 | <办理数量> <办理数量_11> 694 | <取消方式> <取消方式_72> 695 | <取消条件> <取消条件_24> 696 | <城市> <北京> 697 | <子业务> <咪咕流量包> 698 | <开通方式> <开通方式_92> 699 | <开通条件> <开通条件_44> 700 | <有效期规则> <有效期规则_38> 701 | <流量> <3072> 702 | <上线时间> <20170517> 703 | <下线时间> <20991231> 704 | <业务简介> <业务简介_105> 705 | <产品名称> <15元任我看流量包> 706 | <价格> <15> 707 | <使用方法> <使用方法_3> 708 | <办理数量> <办理数量_11> 709 | <取消方式> <取消方式_73> 710 | <取消条件> <取消条件_24> 711 | <城市> <北京> 712 | <子业务> <咪咕直播流量包> 713 | <开通方式> <开通方式_93> 714 | <开通条件> <开通条件_44> 715 | <有效期规则> <有效期规则_38> 716 | <流量> <30720> 717 | <上线时间> <20170517> 718 | <下线时间> <20991231> 719 | <业务简介> <业务简介_106> 720 | <产品名称> <任我看视频流量包> 721 | <使用方法> <使用方法_4> 722 | <办理数量> <办理数量_11> 723 | <取消方式> <取消方式_74> 724 | <取消条件> <取消条件_24> 725 | <城市> <北京> 726 | <开通方式> <开通方式_94> 727 | <开通条件> <开通条件_44> 728 | <有效期规则> <有效期规则_38> 729 | <上线时间> <20170517> 730 | <下线时间> <20991231> 731 | <业务简介> <业务简介_107> 732 | <产品名称> <24元任我看视频流量包> 733 | <价格> <24> 734 | <使用方法> <使用方法_4> 735 | <办理数量> <办理数量_11> 736 | <取消方式> <取消方式_75> 737 | <取消条件> <取消条件_24> 738 | <城市> <北京> 739 | <子业务> <腾讯视频> 740 | <开通方式> <开通方式_95> 741 | <开通条件> <开通条件_44> 742 | <有效期规则> <有效期规则_38> 743 | <流量> <40960> 744 | <上线时间> <20190401> 745 | <下线时间> <20991231> 746 | <业务简介> <业务简介_122> 747 | <产品名称> <倍享包> 748 | <办理数量> <办理数量_25> 749 | <取消方式> <取消方式_86> 750 | <取消条件> <取消条件_33> 751 | <城市> <北京> 752 | <开通方式> <开通方式_108> 753 | <开通条件> <开通条件_56> 754 | <有效期规则> <有效期规则_44> 755 | <上线时间> <20201105> 756 | <下线时间> <20991231> 757 | <业务简介> <业务简介_224> 758 | <产品名称> <入网首充赠礼营销活动> 759 | <取消方式> <取消方式_164> 760 | <城市> <北京> 761 | <开通方式> <开通方式_188> 762 | <上线时间> <20180919> 763 | <下线时间> <20991231> 764 | <业务简介> <业务简介_156> 765 | <产品名称> <全国亲情网> 766 | <价格> <10> 767 | <取消方式> <取消方式_114> 768 | <城市> <北京> 769 | <开通方式> <开通方式_137> 770 | <上线时间> <20180919> 771 | <下线时间> <20991231> 772 | <业务简介> <业务简介_157> 773 | <产品名称> <增加全国亲情网成员> 774 | <取消方式> <取消方式_115> 775 | <城市> <北京> 776 | <子业务> <成员> 777 | <开通方式> <业务简介_157> 778 | <开通条件> <开通条件_62> 779 | <上线时间> <20190828> 780 | <下线时间> <20211231> 781 | <业务简介> <业务简介_213> 782 | <产品名称> <全国亲情网功能优惠活动> 783 | <取消方式> <取消方式_158> 784 | <城市> <北京> 785 | <开通方式> <开通方式_182> 786 | <上线时间> <20190101> 787 | <下线时间> <20991231> 788 | <业务简介> <业务简介_196> 789 | <产品名称> <全球通套餐赠送国际长途语音包活动> 790 | <内含其它服务> <送语音> 791 | <取消方式> <取消方式_143> 792 | <城市> <北京> 793 | <开通方式> <开通方式_169> 794 | <有效期规则> <有效期规则_58> 795 | <上线时间> <20181221> 796 | <下线时间> <20991231> 797 | <业务简介> <业务简介_195> 798 | <产品名称> <全球通焕新优享活动> 799 | <内含其它服务> <送语音|送终端|送话费> 800 | <城市> <北京> 801 | <开通方式> <开通方式_168> 802 | <上线时间> <20201202> 803 | <下线时间> <20211130> 804 | <业务简介> <业务简介_229> 805 | <产品名称> <全球通礼遇活动> 806 | <城市> <北京> 807 | <开通方式> <业务简介_229> 808 | <上线时间> <20200401> 809 | <下线时间> <20991231> 810 | <业务简介> <业务简介_183> 811 | <产品名称> <全网优惠享特权活动> 812 | <取消方式> <取消方式_135> 813 | <城市> <北京> 814 | <开通方式> <开通方式_158> 815 | <有效期规则> <有效期规则_54> 816 | <上线时间> <20200229> 817 | <下线时间> <20991231> 818 | <业务简介> <业务简介_184> 819 | <产品名称> <全网普惠得流量活动> 820 | <取消方式> <取消方式_136> 821 | <城市> <北京> 822 | <开通方式> <开通方式_159> 823 | <上线时间> <20210203> 824 | <下线时间> <20210331> 825 | <业务简介> <业务简介_216> 826 | <产品名称> <加社区通信管家得礼包活动> 827 | <城市> <北京> 828 | <开通方式> <业务简介_216> 829 | <上线时间> <20150801> 830 | <下线时间> <20991231> 831 | <业务简介> <业务简介_188> 832 | <产品名称> <加量不加价活动> 833 | <内含其它服务> <送流量> 834 | <取消方式> <取消方式_138> 835 | <城市> <北京> 836 | <开通方式> <开通方式_161> 837 | <上线时间> <20190529> 838 | <下线时间> <20991231> 839 | <业务简介> <业务简介_138> 840 | <产品名称> <北京移动Plus会员普通版> 841 | <价格> <18> 842 | <使用方法> <使用方法_12> 843 | <取消方式> <取消条件_34> 844 | <取消条件> <取消条件_34> 845 | <城市> <北京> 846 | <子业务> <普通版> 847 | <开通方式> <开通方式_119> 848 | <开通条件> <开通条件_58> 849 | <上线时间> <20190529> 850 | <下线时间> <20991231> 851 | <业务简介> <业务简介_139> 852 | <产品名称> <北京移动Plus会员全球通版> 853 | <价格> <18> 854 | <使用方法> <使用方法_12> 855 | <取消方式> <取消条件_35> 856 | <取消条件> <取消条件_35> 857 | <城市> <北京> 858 | <子业务> <全球通版> 859 | <开通方式> <开通方式_120> 860 | <开通条件> <开通条件_59> 861 | <上线时间> <20191220> 862 | <下线时间> <20991231> 863 | <业务简介> <业务简介_210> 864 | <产品名称> <北京移动plus会员权益卡> 865 | <价格> <38> 866 | <内含其它服务> <来电显示|接听免费> 867 | <城市> <北京> 868 | <开通方式> <开通方式_179> 869 | <流量> <18432> 870 | <上线时间> <20170918> 871 | <下线时间> <20991231> 872 | <业务简介> <业务简介_28> 873 | <产品名称> <北京通手机卡> 874 | <价格> <18> 875 | <内含其它服务> <全国被叫免费|来电显示免费> 876 | <取消方式> <取消方式_25> 877 | <城市> <北京> 878 | <开通方式> <开通条件_19> 879 | <开通条件> <开通条件_19> 880 | <流量> <300> 881 | <语音时长> <50> 882 | <上线时间> <20200901> 883 | <下线时间> <20991231> 884 | <业务简介> <业务简介_29> 885 | <产品名称> <北京通平安基础卡> 886 | <价格> <23> 887 | <内含其它服务> <全国被叫免费|来电显示免费> 888 | <取消方式> <取消方式_26> 889 | <城市> <北京> 890 | <开通方式> <开通条件_20> 891 | <开通条件> <开通条件_20> 892 | <流量> <300> 893 | <语音时长> <50> 894 | <上线时间> <20190713> 895 | <下线时间> <20191031> 896 | <业务简介> <业务简介_26> 897 | <产品名称> <2019年和4G校园套餐> 898 | <价格> <68> 899 | <内含其它服务> <全国接听免费|来电提示> 900 | <取消方式> <取消方式_23> 901 | <城市> <北京> 902 | <子业务> <2019版> 903 | <开通方式> <开通方式_23> 904 | <开通条件> <开通条件_17> 905 | <流量> <30730> 906 | <语音时长> <200> 907 | <上线时间> <20200717> 908 | <下线时间> <20991231> 909 | <业务简介> <业务简介_27> 910 | <产品名称> <2020年和4G校园套餐> 911 | <价格> <49> 912 | <内含其它服务> <全国接听免费|来电提示> 913 | <取消方式> <取消方式_24> 914 | <城市> <北京> 915 | <子业务> <2020版> 916 | <开通方式> <开通条件_18> 917 | <开通条件> <开通条件_18> 918 | <流量> <10240> 919 | <语音时长> <200> 920 | <上线时间> <20150327> 921 | <下线时间> <20191126> 922 | <业务简介> <业务简介_193> 923 | <产品名称> <和家庭优惠活动> 924 | <取消方式> <取消方式_142> 925 | <城市> <北京> 926 | <开通方式> <开通方式_166> 927 | <开通条件> <开通条件_70> 928 | <上线时间> <20150310> 929 | <下线时间> <20991231> 930 | <业务简介> <业务简介_194> 931 | <产品名称> <和家庭免费赠送号卡活动> 932 | <城市> <北京> 933 | <开通方式> <开通方式_167> 934 | <开通条件> <开通条件_71> 935 | <上线时间> <20140906> 936 | <下线时间> <20991231> 937 | <业务简介> <业务简介_160> 938 | <产品名称> <和家庭分享> 939 | <价格> <10> 940 | <取消方式> <取消方式_118> 941 | <城市> <北京> 942 | <开通方式> <开通方式_140> 943 | <上线时间> <20140906> 944 | <下线时间> <20991231> 945 | <业务简介> <业务简介_161> 946 | <产品名称> <和家庭分享-成员> 947 | <取消方式> <取消方式_119> 948 | <城市> <北京> 949 | <子业务> <成员> 950 | <开通方式> <开通方式_141> 951 | <上线时间> <20151123> 952 | <下线时间> <20991231> 953 | <业务简介> <业务简介_73> 954 | <产品名称> <和家庭流量包> 955 | <价格> <100> 956 | <取消方式> <取消方式_48> 957 | <取消条件> <取消条件_16> 958 | <城市> <北京> 959 | <开通方式> <开通方式_62> 960 | <开通条件> <开通条件_33> 961 | <有效期规则> <有效期规则_21> 962 | <流量> <5120> 963 | <上线时间> <20130917> 964 | <下线时间> <20991231> 965 | <业务简介> <业务简介_145> 966 | <产品名称> <和彩云> 967 | <取消方式> <取消方式_103> 968 | <城市> <北京> 969 | <开通方式> <开通方式_126> 970 | <上线时间> <20130917> 971 | <下线时间> <20991231> 972 | <业务简介> <业务简介_143> 973 | <产品名称> <和彩印月套餐> 974 | <价格> <2> 975 | <取消方式> <取消方式_101> 976 | <城市> <北京> 977 | <子业务> <月包> 978 | <开通方式> <开通方式_124> 979 | <上线时间> <20130917> 980 | <下线时间> <20991231> 981 | <业务简介> <业务简介_144> 982 | <产品名称> <和彩印年套餐> 983 | <价格> <22> 984 | <取消方式> <取消方式_102> 985 | <城市> <北京> 986 | <子业务> <年包> 987 | <开通方式> <开通方式_125> 988 | <开通条件> <开通条件_60> 989 | <有效期> <8640> 990 | <有效期规则> <有效期规则_47> 991 | <上线时间> <20150901> 992 | <下线时间> <20991231> 993 | <业务简介> <业务简介_152> 994 | <产品名称> <和爱车黄金会员> 995 | <价格> <10> 996 | <使用方法> <使用方法_17> 997 | <取消方式> <取消方式_110> 998 | <城市> <北京> 999 | <开通方式> <开通方式_133> 1000 | <上线时间> <20150615> 1001 | <下线时间> <20991231> 1002 | <业务简介> <业务简介_146> 1003 | <产品名称> <和留言月包> 1004 | <价格> <3> 1005 | <取消方式> <取消方式_104> 1006 | <城市> <北京> 1007 | <子业务> <月包> 1008 | <开通方式> <开通方式_127> 1009 | <上线时间> <20150615> 1010 | <下线时间> <20991231> 1011 | <业务简介> <业务简介_147> 1012 | <产品名称> <和留言年包> 1013 | <价格> <30> 1014 | <取消方式> <取消方式_105> 1015 | <城市> <北京> 1016 | <子业务> <年包> 1017 | <开通方式> <开通方式_128> 1018 | <有效期> <8640> 1019 | <上线时间> <20190301> 1020 | <下线时间> <20211231> 1021 | <业务简介> <业务简介_94> 1022 | <产品名称> <喜马拉雅流量包> 1023 | <价格> <6> 1024 | <取消方式> <取消方式_67> 1025 | <取消条件> <取消条件_22> 1026 | <城市> <北京> 1027 | <子业务> <喜马拉雅> 1028 | <开通方式> <开通方式_82> 1029 | <开通条件> <开通条件_41> 1030 | <有效期规则> <有效期规则_33> 1031 | <流量> <5120> 1032 | <上线时间> <20180906> 1033 | <下线时间> <20991231> 1034 | <业务简介> <业务简介_74> 1035 | <产品名称> <嗨包> 1036 | <价格> <18> 1037 | <取消方式> <取消方式_49> 1038 | <取消条件> <取消条件_17> 1039 | <城市> <北京> 1040 | <开通方式> <开通方式_63> 1041 | <开通条件> <开通条件_34> 1042 | <有效期规则> <有效期规则_22> 1043 | <流量> <30720> 1044 | <上线时间> <20200319> 1045 | <下线时间> <20991231> 1046 | <业务简介> <业务简介_128> 1047 | <产品名称> <嗨购3元包> 1048 | <价格> <3> 1049 | <使用方法> <使用方法_9> 1050 | <取消方式> <取消方式_90> 1051 | <城市> <北京> 1052 | <子业务> <月包> 1053 | <开通方式> <开通方式_112> 1054 | <上线时间> <20200319> 1055 | <下线时间> <20991231> 1056 | <业务简介> <业务简介_129> 1057 | <产品名称> <嗨购体验版-12个月> 1058 | <使用方法> <使用方法_9> 1059 | <取消方式> <取消方式_91> 1060 | <城市> <北京> 1061 | <子业务> <体验版-12个月> 1062 | <开通方式> <开通方式_113> 1063 | <上线时间> <20180925> 1064 | <下线时间> <20991231> 1065 | <业务简介> <业务简介_173> 1066 | <产品名称> <固话业务> 1067 | <城市> <北京> 1068 | <开通方式> <业务简介_173> 1069 | <开通条件> <开通条件_64> 1070 | <上线时间> <20190916> 1071 | <下线时间> <2099121> 1072 | <业务简介> <业务简介_205> 1073 | <产品名称> <天天做任务活动> 1074 | <城市> <北京> 1075 | <开通方式> <开通方式_176> 1076 | <开通条件> <开通条件_76> 1077 | <有效期规则> <有效期规则_60> 1078 | <上线时间> <20200121> 1079 | <下线时间> <20201231> 1080 | <业务简介> <业务简介_220> 1081 | <产品名称> <天天赢2GB活动> 1082 | <城市> <北京> 1083 | <开通方式> <业务简介_220> 1084 | <业务简介> <业务简介_150> 1085 | <产品名称> <天气预报包月版> 1086 | <价格> <1> 1087 | <取消方式> <取消方式_108> 1088 | <城市> <北京> 1089 | <子业务> <月包> 1090 | <开通方式> <开通方式_131> 1091 | <业务简介> <业务简介_151> 1092 | <产品名称> <天气预报年套餐> 1093 | <价格> <10> 1094 | <取消方式> <取消方式_109> 1095 | <城市> <北京> 1096 | <子业务> <年包> 1097 | <开通方式> <开通方式_132> 1098 | <有效期> <8640> 1099 | <有效期规则> <有效期规则_49> 1100 | <上线时间> <20200210> 1101 | <业务简介> <业务简介_82> 1102 | <产品名称> <安心上网流量包> 1103 | <价格> <15> 1104 | <办理数量> <办理数量_6> 1105 | <取消方式> <取消方式_57> 1106 | <城市> <北京> 1107 | <开通方式> <开通方式_71> 1108 | <有效期> <168> 1109 | <有效期规则> <有效期规则_27> 1110 | <流量> <10240> 1111 | <上线时间> <20100801> 1112 | <下线时间> <20190812> 1113 | <业务简介> <业务简介_8> 1114 | <产品名称> <家园卡欢乐套餐> 1115 | <价格> <5> 1116 | <内含其它服务> <全国接听免费|来电显示> 1117 | <取消方式> <取消方式_8> 1118 | <城市> <北京> 1119 | <开通方式> <开通方式_6> 1120 | <开通条件> <开通条件_4> 1121 | <有效期规则> <有效期规则_5> 1122 | <上线时间> <20100801> 1123 | <下线时间> <20190812> 1124 | <业务简介> <业务简介_9> 1125 | <产品名称> <家园卡欢乐套餐半年包> 1126 | <价格> <30> 1127 | <内含其它服务> <全国接听免费|来电显示> 1128 | <取消方式> <取消方式_9> 1129 | <城市> <北京> 1130 | <子业务> <半年包> 1131 | <开通方式> <开通方式_7> 1132 | <开通条件> <开通条件_5> 1133 | <有效期> <4320> 1134 | <有效期规则> <有效期规则_6> 1135 | <上线时间> <20100801> 1136 | <下线时间> <20190812> 1137 | <业务简介> <业务简介_10> 1138 | <产品名称> <家园卡欢乐套餐年包> 1139 | <价格> <60> 1140 | <内含其它服务> <全国接听免费|来电显示> 1141 | <取消方式> <取消方式_10> 1142 | <城市> <北京> 1143 | <子业务> <年包> 1144 | <开通方式> <开通方式_8> 1145 | <开通条件> <开通条件_6> 1146 | <有效期> <8640> 1147 | <有效期规则> <有效期规则_7> 1148 | <上线时间> <20191201> 1149 | <下线时间> <20991231> 1150 | <业务简介> <业务简介_57> 1151 | <产品名称> <尊享计划2020版> 1152 | <内含其它服务> <全国免费接听|来电显示|国内(不含港澳台)短信3000条> 1153 | <取消方式> <取消方式_38> 1154 | <取消条件> <取消条件_11> 1155 | <城市> <北京> 1156 | <开通方式> <开通方式_46> 1157 | <开通条件> <业务简介_57> 1158 | <上线时间> <20210113> 1159 | <下线时间> <20200228> 1160 | <业务简介> <业务简介_226> 1161 | <产品名称> <年货节活动介绍> 1162 | <城市> <北京> 1163 | <开通方式> <业务简介_226> 1164 | <下线时间> <20991231> 1165 | <业务简介> <业务简介_187> 1166 | <产品名称> <幸运好礼星期三活动> 1167 | <城市> <北京> 1168 | <开通方式> <业务简介_187> 1169 | <上线时间> <20030915> 1170 | <下线时间> <20991231> 1171 | <业务简介> <业务简介_140> 1172 | <产品名称> <彩铃业务> 1173 | <价格> <5> 1174 | <使用方法> <使用方法_13> 1175 | <取消方式> <取消方式_98> 1176 | <城市> <北京> 1177 | <开通方式> <开通方式_121> 1178 | <有效期规则> <有效期规则_45> 1179 | <上线时间> <20030915> 1180 | <下线时间> <20991231> 1181 | <业务简介> <业务简介_141> 1182 | <产品名称> <个性化彩铃> 1183 | <价格> <3> 1184 | <使用方法> <使用方法_14> 1185 | <取消方式> <取消方式_99> 1186 | <城市> <北京> 1187 | <开通方式> <开通方式_122> 1188 | <上线时间> <20030915> 1189 | <下线时间> <20991231> 1190 | <业务简介> <业务简介_142> 1191 | <产品名称> <视频彩铃> 1192 | <价格> <6> 1193 | <使用方法> <使用方法_15> 1194 | <取消方式> <取消方式_100> 1195 | <城市> <北京> 1196 | <开通方式> <开通方式_123> 1197 | <有效期规则> <有效期规则_46> 1198 | <上线时间> <20190119> 1199 | <下线时间> <20211231> 1200 | <业务简介> <业务简介_100> 1201 | <产品名称> <快手流量包> 1202 | <价格> <9> 1203 | <取消方式> <取消方式_69> 1204 | <取消条件> <取消条件_23> 1205 | <城市> <北京> 1206 | <子业务> <流量包> 1207 | <开通方式> <开通方式_88> 1208 | <开通条件> <开通条件_43> 1209 | <有效期规则> <有效期规则_35> 1210 | <流量> <15360> 1211 | <上线时间> <20190119> 1212 | <下线时间> <20211231> 1213 | <业务简介> <业务简介_101> 1214 | <产品名称> <快手畅享包> 1215 | <价格> <15> 1216 | <取消方式> <取消方式_70> 1217 | <取消条件> <取消条件_23> 1218 | <城市> <北京> 1219 | <子业务> <畅享包> 1220 | <开通方式> <开通方式_89> 1221 | <有效期规则> <有效期规则_36> 1222 | <流量> <999999999> 1223 | <上线时间> <20190929> 1224 | <下线时间> <20991231> 1225 | <业务简介> <业务简介_211> 1226 | <产品名称> <18元档承诺低消优惠活动> 1227 | <取消方式> <取消方式_156> 1228 | <城市> <北京> 1229 | <开通方式> <开通方式_180> 1230 | <上线时间> <20190929> 1231 | <下线时间> <20991231> 1232 | <业务简介> <业务简介_212> 1233 | <产品名称> <38元档承诺低消优惠活动> 1234 | <取消方式> <取消方式_157> 1235 | <城市> <北京> 1236 | <开通方式> <开通方式_181> 1237 | <上线时间> <20180228> 1238 | <下线时间> <20991231> 1239 | <业务简介> <业务简介_206> 1240 | <产品名称> <承诺畅享套餐抵减套餐费活动> 1241 | <取消方式> <取消方式_152> 1242 | <城市> <北京> 1243 | <开通方式> <开通方式_177> 1244 | <开通条件> <开通条件_77> 1245 | <有效期> <8640> 1246 | <上线时间> <20200420> 1247 | <下线时间> <20991231> 1248 | <业务简介> <业务简介_127> 1249 | <产品名称> <抖音视频彩铃15GB定向流量月包 > 1250 | <价格> <6> 1251 | <使用方法> <使用方法_8> 1252 | <取消方式> <取消方式_89> 1253 | <城市> <北京> 1254 | <开通方式> <开通方式_111> 1255 | <上线时间> <20180517> 1256 | <下线时间> <20991231> 1257 | <业务简介> <业务简介_115> 1258 | <产品名称> <15元提速包> 1259 | <价格> <15> 1260 | <使用方法> <使用方法_5> 1261 | <办理数量> <办理数量_18> 1262 | <取消方式> <取消方式_80> 1263 | <取消条件> <取消条件_26> 1264 | <城市> <北京> 1265 | <开通方式> <开通方式_101> 1266 | <开通条件> <开通条件_49> 1267 | <流量> <3072> 1268 | <上线时间> <20180517> 1269 | <下线时间> <20991231> 1270 | <业务简介> <业务简介_116> 1271 | <产品名称> <30元提速包> 1272 | <价格> <30> 1273 | <使用方法> <使用方法_5> 1274 | <办理数量> <办理数量_19> 1275 | <取消方式> <取消方式_80> 1276 | <取消条件> <取消条件_27> 1277 | <城市> <北京> 1278 | <开通方式> <开通方式_102> 1279 | <开通条件> <开通条件_50> 1280 | <流量> <6144> 1281 | <上线时间> <20180718> 1282 | <下线时间> <20991231> 1283 | <业务简介> <业务简介_117> 1284 | <产品名称> <小额提速包> 1285 | <价格> <1> 1286 | <使用方法> <使用方法_5> 1287 | <办理数量> <办理数量_20> 1288 | <取消方式> <取消方式_81> 1289 | <取消条件> <取消条件_28> 1290 | <城市> <北京> 1291 | <子业务> <小额版> 1292 | <开通方式> <开通方式_103> 1293 | <开通条件> <开通条件_51> 1294 | <流量> <100> 1295 | <上线时间> <20190418> 1296 | <下线时间> <20191231> 1297 | <业务简介> <业务简介_118> 1298 | <产品名称> <阶梯提速包> 1299 | <使用方法> <使用方法_6> 1300 | <办理数量> <办理数量_21> 1301 | <取消方式> <取消方式_82> 1302 | <取消条件> <取消条件_29> 1303 | <城市> <北京> 1304 | <子业务> <阶梯版> 1305 | <开通方式> <开通方式_104> 1306 | <开通条件> <开通条件_52> 1307 | <上线时间> <20190101> 1308 | <下线时间> <20991231> 1309 | <业务简介> <业务简介_119> 1310 | <产品名称> <大陆及港澳台提速包> 1311 | <价格> <15> 1312 | <使用方法> <使用方法_7> 1313 | <办理数量> <办理数量_22> 1314 | <取消方式> <取消方式_83> 1315 | <取消条件> <取消条件_30> 1316 | <城市> <北京> 1317 | <子业务> <大陆及港澳台版> 1318 | <开通方式> <开通方式_105> 1319 | <开通条件> <开通条件_53> 1320 | <流量> <3072> 1321 | <上线时间> <20190901> 1322 | <下线时间> <20991231> 1323 | <业务简介> <业务简介_120> 1324 | <产品名称> <长期有效提速包> 1325 | <使用方法> <使用方法_5> 1326 | <办理数量> <办理数量_23> 1327 | <取消方式> <取消方式_84> 1328 | <取消条件> <取消条件_31> 1329 | <城市> <北京> 1330 | <子业务> <长期版> 1331 | <开通方式> <开通方式_106> 1332 | <开通条件> <开通条件_54> 1333 | <上线时间> <20190901> 1334 | <下线时间> <20200501> 1335 | <业务简介> <业务简介_51> 1336 | <产品名称> <新全球通畅享套餐> 1337 | <内含其它服务> <全国接听免费|来电显示> 1338 | <取消方式> <取消方式_35> 1339 | <取消条件> <取消条件_10> 1340 | <城市> <北京> 1341 | <开通方式> <开通方式_41> 1342 | <开通条件> <开通条件_25> 1343 | <有效期规则> <有效期规则_17> 1344 | <上线时间> <20191023> 1345 | <下线时间> <20991231> 1346 | <业务简介> <业务简介_181> 1347 | <产品名称> <20元新惠享流量券活动> 1348 | <价格> <20> 1349 | <取消方式> <取消方式_133> 1350 | <城市> <北京> 1351 | <开通方式> <开通方式_157> 1352 | <开通条件> <开通条件_66> 1353 | <有效期> <19440> 1354 | <有效期规则> <有效期规则_53> 1355 | <流量> <20480> 1356 | <上线时间> <20191023> 1357 | <下线时间> <20991231> 1358 | <业务简介> <业务简介_182> 1359 | <产品名称> <30元新惠享流量券活动> 1360 | <价格> <30> 1361 | <取消方式> <取消方式_134> 1362 | <城市> <北京> 1363 | <开通方式> <开通方式_157> 1364 | <开通条件> <开通条件_66> 1365 | <有效期> <19440> 1366 | <有效期规则> <有效期规则_53> 1367 | <流量> <40960> 1368 | <上线时间> <20210201> 1369 | <下线时间> <20210331> 1370 | <业务简介> <业务简介_231> 1371 | <产品名称> <新春五福活动> 1372 | <城市> <北京> 1373 | <开通方式> <业务简介_231> 1374 | <上线时间> <20210113> 1375 | <下线时间> <20200228> 1376 | <业务简介> <业务简介_228> 1377 | <产品名称> <新春营销活动> 1378 | <城市> <北京> 1379 | <开通方式> <业务简介_228> 1380 | <上线时间> <20190901> 1381 | <下线时间> <20991231> 1382 | <业务简介> <业务简介_217> 1383 | <产品名称> <新畅享套餐升档优惠活动> 1384 | <内含其它服务> <送流量> 1385 | <取消方式> <取消方式_161> 1386 | <城市> <北京> 1387 | <开通方式> <开通方式_184> 1388 | <有效期规则> <有效期规则_62> 1389 | <上线时间> <20170821> 1390 | <下线时间> <20991231> 1391 | <业务简介> <业务简介_75> 1392 | <产品名称> <3元机场流量包> 1393 | <价格> <3> 1394 | <办理数量> <办理数量_3> 1395 | <取消方式> <取消方式_50> 1396 | <取消条件> <取消条件_18> 1397 | <城市> <北京> 1398 | <开通方式> <开通方式_64> 1399 | <开通条件> <开通条件_35> 1400 | <有效期规则> <有效期规则_23> 1401 | <流量> <500> 1402 | <上线时间> <20170821> 1403 | <下线时间> <20991231> 1404 | <业务简介> <业务简介_76> 1405 | <产品名称> <5元机场流量包> 1406 | <价格> <5> 1407 | <办理数量> <办理数量_3> 1408 | <取消方式> <取消方式_51> 1409 | <取消条件> <取消条件_18> 1410 | <城市> <北京> 1411 | <开通方式> <开通方式_65> 1412 | <开通条件> <开通条件_35> 1413 | <有效期规则> <有效期规则_23> 1414 | <流量> <1024> 1415 | <上线时间> <20200430> 1416 | <下线时间> <20991231> 1417 | <业务简介> <业务简介_174> 1418 | <产品名称> <权益超市> 1419 | <城市> <北京> 1420 | <开通方式> <开通方式_150> 1421 | <上线时间> <20070109> 1422 | <下线时间> <20991231> 1423 | <业务简介> <业务简介_148> 1424 | <产品名称> <来电提醒> 1425 | <价格> <3> 1426 | <使用方法> <使用方法_16> 1427 | <取消方式> <取消方式_106> 1428 | <城市> <北京> 1429 | <开通方式> <开通方式_129> 1430 | <上线时间> <20100802> 1431 | <下线时间> <20991231> 1432 | <业务简介> <业务简介_149> 1433 | <产品名称> <来电提醒半年包> 1434 | <价格> <12> 1435 | <使用方法> <使用方法_16> 1436 | <取消方式> <取消方式_107> 1437 | <城市> <北京> 1438 | <子业务> <半年包> 1439 | <开通方式> <开通方式_130> 1440 | <有效期> <4320> 1441 | <有效期规则> <有效期规则_48> 1442 | <上线时间> <20180728> 1443 | <下线时间> <20231031> 1444 | <业务简介> <业务简介_90> 1445 | <产品名称> <校园专属定向流量包> 1446 | <价格> <18> 1447 | <办理数量> <办理数量_8> 1448 | <取消方式> <取消方式_63> 1449 | <取消条件> <取消条件_20> 1450 | <城市> <北京> 1451 | <子业务> <2018版> 1452 | <开通方式> <开通方式_78> 1453 | <开通条件> <开通条件_38> 1454 | <有效期规则> <有效期规则_31> 1455 | <流量> <30720> 1456 | <上线时间> <20190530> 1457 | <下线时间> <20190930> 1458 | <业务简介> <业务简介_200> 1459 | <产品名称> <2018年校园卡200元打一年活动> 1460 | <价格> <200> 1461 | <内含其它服务> <送话费> 1462 | <取消方式> <取消方式_147> 1463 | <城市> <北京> 1464 | <子业务> <2018版> 1465 | <开通方式> <开通方式_173> 1466 | <开通条件> <开通条件_73> 1467 | <有效期> <8640> 1468 | <上线时间> <20190713> 1469 | <下线时间> <20190926> 1470 | <业务简介> <业务简介_201> 1471 | <产品名称> <2019年校园卡200元打一年活动> 1472 | <价格> <200> 1473 | <内含其它服务> <送话费> 1474 | <取消方式> <取消方式_148> 1475 | <城市> <北京> 1476 | <子业务> <2019版> 1477 | <开通方式> <开通条件_74> 1478 | <开通条件> <开通条件_74> 1479 | <有效期> <8640> 1480 | <上线时间> <20190713> 1481 | <下线时间> <20190926> 1482 | <业务简介> <业务简介_202> 1483 | <产品名称> <2019年校园卡300元打两年活动> 1484 | <价格> <300> 1485 | <内含其它服务> <送话费> 1486 | <取消方式> <取消方式_149> 1487 | <城市> <北京> 1488 | <子业务> <2019版> 1489 | <开通方式> <开通条件_75> 1490 | <开通条件> <开通条件_75> 1491 | <有效期> <17280> 1492 | <上线时间> <20200609> 1493 | <下线时间> <20991231> 1494 | <业务简介> <业务简介_203> 1495 | <产品名称> <2020年校园卡300元打一年活动> 1496 | <价格> <300> 1497 | <内含其它服务> <送话费> 1498 | <取消方式> <取消方式_150> 1499 | <城市> <北京> 1500 | <子业务> <2020版> 1501 | <开通方式> <开通方式_174> 1502 | <上线时间> <20200824> 1503 | <下线时间> <20991231> 1504 | <业务简介> <业务简介_204> 1505 | <产品名称> <2020年校园卡500打两年活动> 1506 | <价格> <500> 1507 | <内含其它服务> <送话费> 1508 | <取消方式> <取消方式_151> 1509 | <城市> <北京> 1510 | <子业务> <2020版> 1511 | <开通方式> <开通方式_175> 1512 | <上线时间> <20111101> 1513 | <下线时间> <20991231> 1514 | <业务简介> <业务简介_58> 1515 | <产品名称> <5元流量加油包> 1516 | <价格> <5> 1517 | <办理数量> <办理数量_1> 1518 | <取消方式> <取消方式_39> 1519 | <取消条件> <取消条件_12> 1520 | <城市> <北京> 1521 | <开通方式> <开通方式_47> 1522 | <开通条件> <开通条件_26> 1523 | <有效期规则> <有效期规则_18> 1524 | <流量> <30> 1525 | <上线时间> <20111101> 1526 | <下线时间> <20991231> 1527 | <业务简介> <业务简介_59> 1528 | <产品名称> <8元流量加油包> 1529 | <价格> <8> 1530 | <办理数量> <办理数量_1> 1531 | <取消方式> <取消方式_39> 1532 | <取消条件> <取消条件_12> 1533 | <城市> <北京> 1534 | <开通方式> <开通方式_48> 1535 | <开通条件> <开通条件_26> 1536 | <有效期规则> <有效期规则_18> 1537 | <流量> <40> 1538 | <上线时间> <20111101> 1539 | <下线时间> <20991231> 1540 | <业务简介> <业务简介_60> 1541 | <产品名称> <10元流量加油包> 1542 | <价格> <10> 1543 | <办理数量> <办理数量_1> 1544 | <取消方式> <取消方式_39> 1545 | <取消条件> <取消条件_12> 1546 | <城市> <北京> 1547 | <开通方式> <开通方式_49> 1548 | <开通条件> <开通条件_26> 1549 | <有效期规则> <有效期规则_18> 1550 | <流量> <100> 1551 | <上线时间> <20111101> 1552 | <下线时间> <20991231> 1553 | <业务简介> <业务简介_61> 1554 | <产品名称> <15元流量加油包> 1555 | <价格> <15> 1556 | <办理数量> <办理数量_1> 1557 | <取消方式> <取消方式_39> 1558 | <取消条件> <取消条件_12> 1559 | <城市> <北京> 1560 | <开通方式> <开通方式_50> 1561 | <开通条件> <开通条件_26> 1562 | <有效期规则> <有效期规则_18> 1563 | <流量> <110> 1564 | <上线时间> <20111101> 1565 | <下线时间> <20991231> 1566 | <业务简介> <业务简介_62> 1567 | <产品名称> <30元流量加油包> 1568 | <价格> <30> 1569 | <办理数量> <办理数量_1> 1570 | <取消方式> <取消方式_39> 1571 | <取消条件> <取消条件_12> 1572 | <城市> <北京> 1573 | <开通方式> <开通方式_51> 1574 | <开通条件> <开通条件_26> 1575 | <有效期规则> <有效期规则_18> 1576 | <流量> <500> 1577 | <上线时间> <20111101> 1578 | <下线时间> <20991231> 1579 | <业务简介> <业务简介_63> 1580 | <产品名称> <40元流量加油包> 1581 | <价格> <40> 1582 | <办理数量> <办理数量_1> 1583 | <取消方式> <取消方式_39> 1584 | <取消条件> <取消条件_12> 1585 | <城市> <北京> 1586 | <开通方式> <开通方式_52> 1587 | <开通条件> <开通条件_26> 1588 | <有效期规则> <有效期规则_18> 1589 | <流量> <700> 1590 | <上线时间> <20111101> 1591 | <下线时间> <20991231> 1592 | <业务简介> <业务简介_64> 1593 | <产品名称> <500元流量加油包> 1594 | <价格> <500> 1595 | <办理数量> <办理数量_2> 1596 | <取消方式> <取消方式_39> 1597 | <取消条件> <取消条件_13> 1598 | <城市> <北京> 1599 | <开通方式> <开通方式_53> 1600 | <开通条件> <开通条件_26> 1601 | <有效期规则> <有效期规则_18> 1602 | <流量> <15360> 1603 | <上线时间> <20150211> 1604 | <下线时间> <20991231> 1605 | <业务简介> <业务简介_72> 1606 | <产品名称> <流量安心包> 1607 | <取消方式> <取消方式_47> 1608 | <取消条件> <取消条件_15> 1609 | <城市> <北京> 1610 | <开通方式> <开通方式_61> 1611 | <开通条件> <开通条件_32> 1612 | <有效期规则> <有效期规则_20> 1613 | <上线时间> <20200205> 1614 | <业务简介> <业务简介_77> 1615 | <产品名称> <流量小时包1GB版> 1616 | <价格> <2> 1617 | <办理数量> <办理数量_4> 1618 | <取消方式> <取消方式_52> 1619 | <城市> <北京> 1620 | <开通方式> <开通方式_66> 1621 | <有效期> <4> 1622 | <有效期规则> <有效期规则_24> 1623 | <流量> <1024> 1624 | <上线时间> <20200205> 1625 | <业务简介> <业务简介_78> 1626 | <产品名称> <流量小时包3GB版> 1627 | <价格> <5> 1628 | <办理数量> <办理数量_4> 1629 | <取消方式> <取消方式_53> 1630 | <城市> <北京> 1631 | <开通方式> <开通方式_67> 1632 | <有效期> <4> 1633 | <有效期规则> <有效期规则_25> 1634 | <流量> <3072> 1635 | <上线时间> <20181025> 1636 | <下线时间> <20991231> 1637 | <业务简介> <业务简介_208> 1638 | <产品名称> <流量拼Go活动> 1639 | <取消方式> <取消方式_154> 1640 | <城市> <北京> 1641 | <开通方式> <业务简介_208> 1642 | <上线时间> <20190401> 1643 | <下线时间> <20991231> 1644 | <业务简介> <业务简介_89> 1645 | <产品名称> <流量无忧包> 1646 | <取消方式> <取消方式_62> 1647 | <城市> <北京> 1648 | <开通方式> <开通方式_77> 1649 | <开通条件> <开通条件_37> 1650 | <有效期规则> <有效期规则_30> 1651 | <限速规则> <限速规则_0> 1652 | <上线时间> <20200205> 1653 | <业务简介> <业务简介_79> 1654 | <产品名称> <流量日包1GB版> 1655 | <价格> <3> 1656 | <办理数量> <办理数量_5> 1657 | <取消方式> <取消方式_54> 1658 | <城市> <北京> 1659 | <开通方式> <开通方式_68> 1660 | <有效期> <24> 1661 | <有效期规则> <有效期规则_26> 1662 | <流量> <1024> 1663 | <上线时间> <20200205> 1664 | <业务简介> <业务简介_80> 1665 | <产品名称> <流量日包2GB版> 1666 | <价格> <5> 1667 | <办理数量> <办理数量_5> 1668 | <取消方式> <取消方式_55> 1669 | <城市> <北京> 1670 | <开通方式> <开通方式_69> 1671 | <有效期> <24> 1672 | <有效期规则> <有效期规则_26> 1673 | <流量> <2048> 1674 | <上线时间> <20200205> 1675 | <业务简介> <业务简介_81> 1676 | <产品名称> <流量日包5GB版> 1677 | <价格> <10> 1678 | <办理数量> <办理数量_5> 1679 | <取消方式> <取消方式_56> 1680 | <城市> <北京> 1681 | <开通方式> <开通方式_70> 1682 | <有效期> <24> 1683 | <有效期规则> <有效期规则_26> 1684 | <流量> <10240> 1685 | <上线时间> <20200220> 1686 | <业务简介> <业务简介_83> 1687 | <产品名称> <流量暖心包> 1688 | <价格> <10> 1689 | <办理数量> <办理数量_7> 1690 | <取消方式> <取消方式_58> 1691 | <城市> <北京> 1692 | <开通方式> <开通方式_72> 1693 | <有效期> <1680> 1694 | <有效期规则> <有效期规则_28> 1695 | <流量> <5120> 1696 | <上线时间> <20190701> 1697 | <下线时间> <20991231> 1698 | <业务简介> <业务简介_108> 1699 | <产品名称> <流量月包> 1700 | <办理数量> <办理数量_12> 1701 | <取消方式> <取消方式_76> 1702 | <取消条件> <取消条件_25> 1703 | <城市> <北京> 1704 | <开通方式> <开通方式_96> 1705 | <开通条件> <开通条件_45> 1706 | <有效期规则> <有效期规则_39> 1707 | <上线时间> <20140107> 1708 | <下线时间> <20991231> 1709 | <业务简介> <业务简介_1> 1710 | <产品名称> <流量模组> 1711 | <内含其它服务> <全国接听免费|来电显示> 1712 | <取消方式> <取消方式_1> 1713 | <城市> <北京> 1714 | <开通方式> <开通方式_1> 1715 | <上线时间> <20200928> 1716 | <下线时间> <20991231> 1717 | <业务简介> <业务简介_222> 1718 | <产品名称> <流量福袋活动> 1719 | <办理数量> <办理数量_28> 1720 | <取消方式> <取消方式_163> 1721 | <城市> <北京> 1722 | <开通方式> <开通方式_187> 1723 | <上线时间> <20210113> 1724 | <下线时间> <20211231> 1725 | <业务简介> <业务简介_55> 1726 | <产品名称> <牛卡套餐> 1727 | <价格> <59> 1728 | <城市> <北京> 1729 | <开通方式> <开通方式_45> 1730 | <流量> <3072> 1731 | <语音时长> <160> 1732 | <上线时间> <20210113> 1733 | <下线时间> <20211231> 1734 | <业务简介> <业务简介_56> 1735 | <产品名称> <牛卡礼包> 1736 | <城市> <北京> 1737 | <开通方式> <业务简介_56> 1738 | <上线时间> <20180801> 1739 | <下线时间> <20200630> 1740 | <业务简介> <业务简介_88> 1741 | <产品名称> <王者荣耀会员6GB定向流量月包> 1742 | <价格> <9> 1743 | <取消方式> <取消方式_61> 1744 | <取消条件> <取消条件_19> 1745 | <城市> <北京> 1746 | <子业务> <王者荣耀> 1747 | <开通方式> <开通方式_76> 1748 | <开通条件> <开通条件_36> 1749 | <有效期规则> <有效期规则_29> 1750 | <流量> <6144> 1751 | <上线时间> <20140127> 1752 | <下线时间> <20991231> 1753 | <业务简介> <业务简介_2> 1754 | <产品名称> <畅享套餐> 1755 | <内含其它服务> <全国接听免费|来电显示> 1756 | <取消方式> <取消方式_2> 1757 | <城市> <北京> 1758 | <开通方式> <开通方式_2> 1759 | <上线时间> <20191227> 1760 | <下线时间> <20200430> 1761 | <业务简介> <业务简介_214> 1762 | <产品名称> <畅享套餐促销优惠活动> 1763 | <取消方式> <取消方式_159> 1764 | <城市> <北京> 1765 | <开通方式> <业务简介_214> 1766 | <上线时间> <20200201> 1767 | <下线时间> <20991231> 1768 | <业务简介> <业务简介_180> 1769 | <产品名称> <畅享套餐升档信用购活动> 1770 | <取消方式> <取消方式_132> 1771 | <城市> <北京> 1772 | <开通方式> <开通方式_156> 1773 | <有效期> <8640> 1774 | <有效期规则> <有效期规则_52> 1775 | <语音时长> <90> 1776 | <上线时间> <20191227> 1777 | <下线时间> <20991231> 1778 | <业务简介> <业务简介_192> 1779 | <产品名称> <畅享套餐首充活动> 1780 | <内含其它服务> <送话费|送语音> 1781 | <办理数量> <办理数量_26> 1782 | <取消方式> <取消方式_141> 1783 | <取消条件> <取消条件_37> 1784 | <城市> <北京> 1785 | <开通方式> <开通方式_165> 1786 | <有效期规则> <有效期规则_57> 1787 | <上线时间> <20180420> 1788 | <下线时间> <20991231> 1789 | <业务简介> <业务简介_17> 1790 | <产品名称> <畅享放心用套餐> 1791 | <内含其它服务> <全国免费接听|来电显示> 1792 | <取消方式> <取消方式_17> 1793 | <取消条件> <取消条件_4> 1794 | <城市> <北京> 1795 | <开通方式> <开通方式_14> 1796 | <开通条件> <开通条件_11> 1797 | <有效期规则> <有效期规则_11> 1798 | <上线时间> <20180420> 1799 | <下线时间> <20991231> 1800 | <业务简介> <业务简介_18> 1801 | <产品名称> <158元畅享放心用套餐> 1802 | <价格> <158> 1803 | <内含其它服务> <全国免费接听|来电显示> 1804 | <取消方式> <取消方式_17> 1805 | <取消条件> <取消条件_5> 1806 | <城市> <北京> 1807 | <带宽> <200> 1808 | <开通方式> <开通方式_15> 1809 | <开通条件> <开通条件_11> 1810 | <有效期规则> <有效期规则_11> 1811 | <流量> <30720> 1812 | <语音时长> <300> 1813 | <上线时间> <20180420> 1814 | <下线时间> <20991231> 1815 | <业务简介> <业务简介_19> 1816 | <产品名称> <188元畅享放心用套餐> 1817 | <价格> <188> 1818 | <内含其它服务> <全国免费接听|来电显示> 1819 | <取消方式> <取消方式_17> 1820 | <取消条件> <取消条件_5> 1821 | <城市> <北京> 1822 | <带宽> <200> 1823 | <开通方式> <开通方式_16> 1824 | <开通条件> <开通条件_11> 1825 | <有效期规则> <有效期规则_11> 1826 | <流量> <30720> 1827 | <语音时长> <700> 1828 | <上线时间> <20180420> 1829 | <下线时间> <20991231> 1830 | <业务简介> <业务简介_20> 1831 | <产品名称> <288元畅享放心用套餐> 1832 | <价格> <288> 1833 | <内含其它服务> <全国免费接听|来电显示> 1834 | <取消方式> <取消方式_17> 1835 | <取消条件> <取消条件_5> 1836 | <城市> <北京> 1837 | <带宽> <200> 1838 | <开通方式> <开通方式_17> 1839 | <开通条件> <开通条件_11> 1840 | <有效期规则> <有效期规则_11> 1841 | <流量> <51200> 1842 | <语音时长> <1200> 1843 | <业务简介> <业务简介_223> 1844 | <产品名称> <盖楼> 1845 | <城市> <北京> 1846 | <开通方式> <业务简介_223> 1847 | <上线时间> <20070608> 1848 | <下线时间> <20200331> 1849 | <业务简介> <业务简介_153> 1850 | <产品名称> <短信回执月包> 1851 | <价格> <3> 1852 | <使用方法> <使用方法_18> 1853 | <取消方式> <取消方式_111> 1854 | <城市> <北京> 1855 | <子业务> <月包> 1856 | <开通方式> <开通方式_134> 1857 | <上线时间> <20070608> 1858 | <下线时间> <20200331> 1859 | <业务简介> <业务简介_154> 1860 | <产品名称> <短信回执半年包> 1861 | <价格> <12> 1862 | <使用方法> <使用方法_18> 1863 | <取消方式> <取消方式_112> 1864 | <城市> <北京> 1865 | <子业务> <半年包> 1866 | <开通方式> <开通方式_135> 1867 | <开通条件> <开通条件_61> 1868 | <有效期> <4320> 1869 | <有效期规则> <有效期规则_50> 1870 | <上线时间> <20200320> 1871 | <下线时间> <20201231> 1872 | <业务简介> <业务简介_219> 1873 | <产品名称> <砍价得好礼活动> 1874 | <城市> <北京> 1875 | <开通方式> <业务简介_219> 1876 | <有效期规则> <有效期规则_63> 1877 | <上线时间> <20110301> 1878 | <下线时间> <20130411> 1879 | <业务简介> <业务简介_3> 1880 | <产品名称> <神州行5元卡> 1881 | <价格> <5> 1882 | <内含其它服务> <全国接听免费|来电显示> 1883 | <取消方式> <取消方式_3> 1884 | <取消条件> <取消条件_0> 1885 | <城市> <北京> 1886 | <开通方式> <业务简介_3> 1887 | <开通条件> <开通条件_0> 1888 | <有效期规则> <有效期规则_0> 1889 | <上线时间> <20111201> 1890 | <下线时间> <20991231> 1891 | <业务简介> <业务简介_4> 1892 | <产品名称> <神州行5元卡半年包> 1893 | <价格> <30> 1894 | <内含其它服务> <全国接听免费|来电显示> 1895 | <取消方式> <取消方式_4> 1896 | <取消条件> <取消条件_0> 1897 | <城市> <北京> 1898 | <子业务> <半年包> 1899 | <开通方式> <开通方式_3> 1900 | <开通条件> <开通条件_1> 1901 | <有效期> <4392> 1902 | <有效期规则> <有效期规则_1> 1903 | <上线时间> <20111201> 1904 | <下线时间> <20991231> 1905 | <业务简介> <业务简介_5> 1906 | <产品名称> <神州行5元卡年包> 1907 | <价格> <60> 1908 | <内含其它服务> <全国接听免费|来电显示> 1909 | <取消方式> <取消方式_5> 1910 | <取消条件> <取消条件_0> 1911 | <城市> <北京> 1912 | <子业务> <年包> 1913 | <开通方式> <开通方式_4> 1914 | <开通条件> <开通条件_2> 1915 | <有效期> <8760> 1916 | <有效期规则> <有效期规则_2> 1917 | <上线时间> <20100630> 1918 | <下线时间> <20111231> 1919 | <业务简介> <业务简介_12> 1920 | <产品名称> <神州行升级版标准卡> 1921 | <内含其它服务> <全国被叫免费|来电显示免费> 1922 | <取消方式> <取消方式_12> 1923 | <城市> <北京> 1924 | <开通方式> <业务简介_12> 1925 | <上线时间> <20060929> 1926 | <下线时间> <20160811> 1927 | <业务简介> <业务简介_13> 1928 | <产品名称> <神州行畅听卡> 1929 | <价格> <10> 1930 | <内含其它服务> <全国接听免费|来电显示|闲时流量20MB> 1931 | <取消方式> <取消方式_13> 1932 | <取消条件> <取消条件_3> 1933 | <城市> <北京> 1934 | <开通方式> <开通方式_10> 1935 | <开通条件> <业务简介_13> 1936 | <有效期规则> <有效期规则_8> 1937 | <语音时长> <60> 1938 | <上线时间> <20100801> 1939 | <下线时间> <20991231> 1940 | <业务简介> <业务简介_14> 1941 | <产品名称> <神州行畅听卡年包> 1942 | <价格> <60> 1943 | <内含其它服务> <全国接听免费|来电显示|闲时流量20MB> 1944 | <取消方式> <取消方式_14> 1945 | <取消条件> <取消条件_3> 1946 | <城市> <北京> 1947 | <子业务> <年包> 1948 | <开通方式> <开通方式_11> 1949 | <开通条件> <开通条件_8> 1950 | <有效期> <8640> 1951 | <有效期规则> <有效期规则_9> 1952 | <语音时长> <60> 1953 | <上线时间> <20100801> 1954 | <下线时间> <20991231> 1955 | <业务简介> <业务简介_15> 1956 | <产品名称> <神州行畅听卡半年包> 1957 | <价格> <120> 1958 | <内含其它服务> <全国接听免费|来电显示|闲时流量20MB> 1959 | <取消方式> <取消方式_15> 1960 | <取消条件> <取消条件_3> 1961 | <城市> <北京> 1962 | <子业务> <半年包> 1963 | <开通方式> <开通方式_12> 1964 | <开通条件> <开通条件_9> 1965 | <有效期> <4320> 1966 | <有效期规则> <有效期规则_10> 1967 | <语音时长> <60> 1968 | <上线时间> <20180801> 1969 | <下线时间> <20991231> 1970 | <业务简介> <业务简介_65> 1971 | <产品名称> <0元wlan任我用套餐> 1972 | <使用方法> <使用方法_1> 1973 | <取消方式> <取消方式_40> 1974 | <取消条件> <取消条件_14> 1975 | <城市> <北京> 1976 | <开通方式> <开通方式_54> 1977 | <开通条件> <开通条件_27> 1978 | <有效期规则> <有效期规则_19> 1979 | <流量> <102400> 1980 | <上线时间> <20180801> 1981 | <下线时间> <20991231> 1982 | <业务简介> <业务简介_66> 1983 | <产品名称> <5元wlan任我用套餐> 1984 | <价格> <5> 1985 | <使用方法> <使用方法_1> 1986 | <取消方式> <取消方式_41> 1987 | <取消条件> <取消条件_14> 1988 | <城市> <北京> 1989 | <开通方式> <开通方式_55> 1990 | <开通条件> <开通条件_28> 1991 | <有效期规则> <有效期规则_19> 1992 | <流量> <102400> 1993 | <上线时间> <20180801> 1994 | <下线时间> <20991231> 1995 | <业务简介> <业务简介_67> 1996 | <产品名称> <10元wlan任我用套餐> 1997 | <价格> <10> 1998 | <使用方法> <使用方法_1> 1999 | <取消方式> <取消方式_42> 2000 | <取消条件> <取消条件_14> 2001 | <城市> <北京> 2002 | <开通方式> <开通方式_56> 2003 | <开通条件> <开通条件_29> 2004 | <有效期规则> <有效期规则_19> 2005 | <流量> <102400> 2006 | <上线时间> <20180801> 2007 | <下线时间> <20991231> 2008 | <业务简介> <业务简介_68> 2009 | <产品名称> 2010 | <价格> <1> 2011 | <使用方法> <使用方法_1> 2012 | <取消方式> <取消方式_43> 2013 | <取消条件> <取消条件_14> 2014 | <城市> <北京> 2015 | <开通方式> <开通方式_57> 2016 | <开通条件> <开通条件_30> 2017 | <有效期规则> <有效期规则_19> 2018 | <流量> <102400> 2019 | <上线时间> <20030220> 2020 | <下线时间> <20991231> 2021 | <业务简介> <业务简介_69> 2022 | <产品名称> <10元校园WLAN套餐> 2023 | <价格> <10> 2024 | <使用方法> <使用方法_2> 2025 | <取消方式> <取消方式_44> 2026 | <取消条件> <取消条件_14> 2027 | <城市> <北京> 2028 | <开通方式> <开通方式_58> 2029 | <开通条件> <开通条件_31> 2030 | <有效期> <40> 2031 | <有效期规则> <有效期规则_19> 2032 | <上线时间> <20030220> 2033 | <下线时间> <20991231> 2034 | <业务简介> <业务简介_70> 2035 | <产品名称> <20元校园WLAN套餐> 2036 | <价格> <20> 2037 | <使用方法> <使用方法_2> 2038 | <取消方式> <取消方式_45> 2039 | <取消条件> <取消条件_14> 2040 | <城市> <北京> 2041 | <开通方式> <开通方式_59> 2042 | <开通条件> <开通条件_31> 2043 | <有效期> <100> 2044 | <有效期规则> <有效期规则_19> 2045 | <上线时间> <20030220> 2046 | <下线时间> <20991231> 2047 | <业务简介> <业务简介_71> 2048 | <产品名称> <40元校园WLAN套餐> 2049 | <价格> <40> 2050 | <使用方法> <使用方法_2> 2051 | <取消方式> <取消方式_46> 2052 | <取消条件> <取消条件_14> 2053 | <城市> <北京> 2054 | <开通方式> <开通方式_60> 2055 | <开通条件> <开通条件_31> 2056 | <有效期> <250> 2057 | <有效期规则> <有效期规则_19> 2058 | <上线时间> <20200910> 2059 | <下线时间> <20201231> 2060 | <业务简介> <业务简介_221> 2061 | <产品名称> <移动乐享惠活动> 2062 | <城市> <北京> 2063 | <开通方式> <开通方式_186> 2064 | <上线时间> <20200430> 2065 | <下线时间> <20991231> 2066 | <业务简介> <业务简介_176> 2067 | <产品名称> <移动特色权益产品> 2068 | <城市> <北京> 2069 | <开通方式> <开通方式_152> 2070 | <上线时间> <20180405> 2071 | <下线时间> <20991231> 2072 | <业务简介> <业务简介_22> 2073 | <产品名称> <移动王卡上网版> 2074 | <价格> <18> 2075 | <内含其它服务> <来电显示|全国接听免费> 2076 | <取消方式> <取消方式_19> 2077 | <城市> <北京> 2078 | <子业务> <上网版> 2079 | <开通方式> <开通方式_19> 2080 | <开通条件> <开通条件_13> 2081 | <有效期规则> <有效期规则_13> 2082 | <流量> <30720> 2083 | <上线时间> <20191101> 2084 | <下线时间> <20991231> 2085 | <业务简介> <业务简介_23> 2086 | <产品名称> <移动王卡plus版> 2087 | <价格> <18> 2088 | <内含其它服务> <来电显示|全国接听免费> 2089 | <取消方式> <取消方式_20> 2090 | <城市> <北京> 2091 | <子业务> 2092 | <开通方式> <开通方式_20> 2093 | <开通条件> <开通条件_14> 2094 | <有效期规则> <有效期规则_14> 2095 | <上线时间> <20200208> 2096 | <下线时间> <20201231> 2097 | <业务简介> <业务简介_24> 2098 | <产品名称> <移动王卡乐享版> 2099 | <价格> <18> 2100 | <内含其它服务> <来电显示|全国接听免费> 2101 | <取消方式> <取消方式_21> 2102 | <城市> <北京> 2103 | <子业务> <乐享版> 2104 | <开通方式> <开通方式_21> 2105 | <开通条件> <开通条件_15> 2106 | <有效期规则> <有效期规则_15> 2107 | <上线时间> <20180405> 2108 | <下线时间> <20991231> 2109 | <业务简介> <业务简介_25> 2110 | <产品名称> <移动王卡> 2111 | <价格> <18> 2112 | <内含其它服务> <来电显示|全国接听免费> 2113 | <取消方式> <取消方式_22> 2114 | <城市> <北京> 2115 | <子业务> <基础版> 2116 | <开通方式> <开通方式_22> 2117 | <开通条件> <开通条件_16> 2118 | <有效期规则> <有效期规则_16> 2119 | <流量> <30720> 2120 | <上线时间> <20200508> 2121 | <下线时间> <20991231> 2122 | <业务简介> <业务简介_218> 2123 | <产品名称> <移动王卡惠享合约> 2124 | <取消方式> <取消方式_162> 2125 | <城市> <北京> 2126 | <开通方式> <开通方式_185> 2127 | <上线时间> <20190404> 2128 | <下线时间> <20991231> 2129 | <业务简介> <业务简介_197> 2130 | <产品名称> <移动王卡福利二选一活动> 2131 | <内含其它服务> <送流量|送语音> 2132 | <取消方式> <取消方式_144> 2133 | <城市> <北京> 2134 | <开通方式> <开通方式_170> 2135 | <开通条件> <开通条件_72> 2136 | <有效期规则> <有效期规则_59> 2137 | <上线时间> <20190424> 2138 | <下线时间> <20991231> 2139 | <业务简介> <业务简介_198> 2140 | <产品名称> <移动王卡畅享版首充赠费方案> 2141 | <取消方式> <取消方式_145> 2142 | <城市> <北京> 2143 | <开通方式> <开通方式_171> 2144 | <上线时间> <20190112> 2145 | <下线时间> <20991231> 2146 | <业务简介> <业务简介_199> 2147 | <产品名称> <移动王卡畅享版首充50送50方案> 2148 | <内含其它服务> <送话费> 2149 | <办理数量> <办理数量_27> 2150 | <取消方式> <取消方式_146> 2151 | <城市> <北京> 2152 | <开通方式> <开通方式_172> 2153 | <有效期> <7200> 2154 | <上线时间> <20190627> 2155 | <下线时间> <20991231> 2156 | <业务简介> <业务简介_21> 2157 | <产品名称> <移动花卡宝藏版> 2158 | <价格> <19> 2159 | <内含其它服务> <全国接听免费|来电显示> 2160 | <取消方式> <取消方式_18> 2161 | <城市> <北京> 2162 | <子业务> <宝藏版> 2163 | <开通方式> <开通方式_18> 2164 | <开通条件> <开通条件_12> 2165 | <有效期规则> <有效期规则_12> 2166 | <上线时间> <20210201> 2167 | <下线时间> <20210331> 2168 | <业务简介> <业务简介_232> 2169 | <产品名称> <移动花卡新春升级版> 2170 | <城市> <北京> 2171 | <开通方式> <业务简介_232> 2172 | <上线时间> <20161001> 2173 | <下线时间> <20991231> 2174 | <业务简介> <业务简介_191> 2175 | <产品名称> <签到奖励活动> 2176 | <内含其它服务> <送流量> 2177 | <城市> <北京> 2178 | <开通方式> <开通方式_164> 2179 | <开通条件> <开通条件_69> 2180 | <有效期规则> <有效期规则_56> 2181 | <上线时间> <20190930> 2182 | <下线时间> <20991231> 2183 | <业务简介> <业务简介_185> 2184 | <产品名称> <签到翻牌子> 2185 | <城市> <北京> 2186 | <开通方式> <开通条件_67> 2187 | <开通条件> <开通条件_67> 2188 | <上线时间> <20210101> 2189 | <下线时间> <20991231> 2190 | <业务简介> <业务简介_54> 2191 | <产品名称> <精灵卡> 2192 | <取消方式> <取消方式_37> 2193 | <城市> <北京> 2194 | <开通方式> <开通方式_44> 2195 | <上线时间> <20210101> 2196 | <下线时间> <20991231> 2197 | <业务简介> <业务简介_225> 2198 | <产品名称> <精灵卡首充优惠活动> 2199 | <取消方式> <取消方式_165> 2200 | <城市> <北京> 2201 | <开通方式> <开通方式_189> 2202 | <上线时间> <20200430> 2203 | <下线时间> <20991231> 2204 | <业务简介> <业务简介_175> 2205 | <产品名称> <纯权益产品> 2206 | <城市> <北京> 2207 | <开通方式> <开通方式_151> 2208 | <上线时间> <20200605> 2209 | <下线时间> <20201231> 2210 | <业务简介> <业务简介_53> 2211 | <产品名称> <芝麻卡> 2212 | <取消方式> <取消方式_36> 2213 | <城市> <北京> 2214 | <开通方式> <开通方式_43> 2215 | <上线时间> <20190927> 2216 | <下线时间> <20991231> 2217 | <业务简介> <业务简介_179> 2218 | <产品名称> <花一惠一营销活动> 2219 | <取消方式> <取消方式_131> 2220 | <城市> <北京> 2221 | <开通方式> <开通方式_155> 2222 | <开通条件> <开通条件_65> 2223 | <有效期> <8640> 2224 | <有效期规则> <有效期规则_51> 2225 | <上线时间> <20181010> 2226 | <下线时间> <20991231> 2227 | <业务简介> <业务简介_164> 2228 | <产品名称> <花季守护业务> 2229 | <取消方式> <取消方式_121> 2230 | <城市> <北京> 2231 | <开通方式> <业务简介_164> 2232 | <上线时间> <20180515> 2233 | <下线时间> <20991231> 2234 | <业务简介> <业务简介_113> 2235 | <产品名称> <芒果TV视频会员2GB通用流量7天包> 2236 | <价格> <9> 2237 | <内含其它服务> <芒果TV视频网站10天VIP会员资格> 2238 | <办理数量> <办理数量_17> 2239 | <取消方式> <取消方式_79> 2240 | <城市> <北京> 2241 | <子业务> <芒果tv> 2242 | <开通方式> <开通方式_99> 2243 | <开通条件> <开通条件_48> 2244 | <有效期> <168> 2245 | <有效期规则> <有效期规则_42> 2246 | <流量> <2048> 2247 | <上线时间> <20180515> 2248 | <下线时间> <20991231> 2249 | <业务简介> <业务简介_114> 2250 | <产品名称> 2251 | <价格> <9> 2252 | <内含其它服务> 2253 | <办理数量> <办理数量_17> 2254 | <取消方式> <取消方式_79> 2255 | <城市> <北京> 2256 | <子业务> 2257 | <开通方式> <开通方式_100> 2258 | <开通条件> <开通条件_48> 2259 | <有效期> <168> 2260 | <有效期规则> <有效期规则_42> 2261 | <流量> <2048> 2262 | <上线时间> <20190514> 2263 | <下线时间> <20991231> 2264 | <业务简介> <业务简介_109> 2265 | <产品名称> <7天爱奇艺会员5GB通用流量> 2266 | <价格> <11> 2267 | <内含其它服务> <7天VIP会员资格> 2268 | <办理数量> <办理数量_13> 2269 | <取消方式> <取消方式_77> 2270 | <城市> <北京> 2271 | <子业务> <爱奇艺> 2272 | <开通方式> <业务简介_109> 2273 | <开通条件> <开通条件_46> 2274 | <有效期> <168> 2275 | <有效期规则> <有效期规则_40> 2276 | <流量> <5120> 2277 | <上线时间> <20190514> 2278 | <下线时间> <20991231> 2279 | <业务简介> <业务简介_110> 2280 | <产品名称> <7天芒果TV会员5GB通用流量> 2281 | <价格> <9> 2282 | <内含其它服务> <10天VIP会员资格> 2283 | <办理数量> <办理数量_14> 2284 | <取消方式> <取消方式_78> 2285 | <城市> <北京> 2286 | <子业务> <芒果tv> 2287 | <开通方式> <开通方式_97> 2288 | <开通条件> <开通条件_47> 2289 | <有效期> <168> 2290 | <有效期规则> <有效期规则_41> 2291 | <流量> <5120> 2292 | <上线时间> <20190514> 2293 | <下线时间> <20991231> 2294 | <业务简介> <业务简介_111> 2295 | <产品名称> <7天腾讯会员5GB通用流量> 2296 | <价格> <11> 2297 | <内含其它服务> <7天VIP会员资格> 2298 | <办理数量> <办理数量_15> 2299 | <取消方式> <取消方式_78> 2300 | <城市> <北京> 2301 | <子业务> <腾讯> 2302 | <开通方式> <业务简介_111> 2303 | <开通条件> <开通条件_47> 2304 | <有效期> <168> 2305 | <有效期规则> <有效期规则_40> 2306 | <流量> <5120> 2307 | <上线时间> <20190514> 2308 | <下线时间> <20991231> 2309 | <业务简介> <业务简介_112> 2310 | <产品名称> <7天优酷会员5GB通用流量> 2311 | <价格> <11> 2312 | <内含其它服务> <7天VIP会员资格> 2313 | <办理数量> <办理数量_16> 2314 | <取消方式> <取消方式_78> 2315 | <城市> <北京> 2316 | <子业务> <优酷> 2317 | <开通方式> <开通方式_98> 2318 | <开通条件> <开通条件_47> 2319 | <有效期> <168> 2320 | <有效期规则> <有效期规则_40> 2321 | <流量> <5120> 2322 | <上线时间> <20180827> 2323 | <下线时间> <20991231> 2324 | <业务简介> <业务简介_102> 2325 | <产品名称> <腾讯会员5GB通用流量加油包> 2326 | <价格> <10> 2327 | <内含其它服务> <7天VIP会员资格> 2328 | <办理数量> <办理数量_9> 2329 | <取消方式> <取消方式_71> 2330 | <城市> <北京> 2331 | <子业务> <腾讯> 2332 | <开通方式> <开通方式_90> 2333 | <开通条件> <开通条件_40> 2334 | <有效期> <168> 2335 | <有效期规则> <有效期规则_37> 2336 | <流量> <5120> 2337 | <上线时间> <20180827> 2338 | <下线时间> <20991231> 2339 | <业务简介> <业务简介_103> 2340 | <产品名称> <芒果会员5GB通用流量加油包> 2341 | <价格> <10> 2342 | <内含其它服务> <10天VIP会员资格> 2343 | <办理数量> <办理数量_10> 2344 | <取消方式> <取消方式_71> 2345 | <城市> <北京> 2346 | <子业务> <芒果> 2347 | <开通方式> <开通方式_91> 2348 | <开通条件> <开通条件_40> 2349 | <有效期> <240> 2350 | <有效期规则> <有效期规则_37> 2351 | <流量> <5120> 2352 | <上线时间> <20171106> 2353 | <下线时间> <20191231> 2354 | <业务简介> <业务简介_91> 2355 | <产品名称> <乐视会员通用流量月包> 2356 | <价格> <65> 2357 | <内含其它服务> <31天乐视VIP会员资格> 2358 | <取消方式> <取消方式_64> 2359 | <取消条件> <取消条件_21> 2360 | <城市> <北京> 2361 | <子业务> <乐视会员> 2362 | <开通方式> <开通方式_79> 2363 | <开通条件> <开通条件_39> 2364 | <流量> <2048> 2365 | <上线时间> <20171106> 2366 | <下线时间> <20991231> 2367 | <业务简介> <业务简介_92> 2368 | <产品名称> <优酷会员通用流量月包> 2369 | <价格> <70> 2370 | <内含其它服务> <31天优酷VIP会员资格> 2371 | <取消方式> <取消方式_65> 2372 | <取消条件> <取消条件_21> 2373 | <城市> <北京> 2374 | <子业务> <优酷会员> 2375 | <开通方式> <开通方式_80> 2376 | <开通条件> <开通条件_40> 2377 | <有效期规则> <有效期规则_32> 2378 | <流量> <2048> 2379 | <上线时间> <20171106> 2380 | <下线时间> <20991231> 2381 | <业务简介> <业务简介_93> 2382 | <产品名称> <爱奇艺会员通用流量月包> 2383 | <价格> <70> 2384 | <内含其它服务> <爱奇艺黄金会员服务> 2385 | <取消方式> <取消方式_66> 2386 | <取消条件> <取消条件_21> 2387 | <城市> <北京> 2388 | <子业务> <爱奇艺会员> 2389 | <开通方式> <开通方式_81> 2390 | <开通条件> <开通条件_40> 2391 | <有效期规则> <有效期规则_32> 2392 | <流量> <2048> 2393 | <业务简介> <业务简介_133> 2394 | <产品名称> <标准语音信箱> 2395 | <价格> <10> 2396 | <取消方式> <取消方式_93> 2397 | <城市> <北京> 2398 | <开通方式> <业务简介_133> 2399 | <业务简介> <业务简介_134> 2400 | <产品名称> <超级语音信箱> 2401 | <价格> <15> 2402 | <取消方式> <取消方式_94> 2403 | <城市> <北京> 2404 | <开通方式> <业务简介_134> 2405 | <上线时间> <20140127> 2406 | <下线时间> <20991231> 2407 | <业务简介> <业务简介_0> 2408 | <产品名称> <语音模组> 2409 | <内含其它服务> <全国接听免费|来电显示> 2410 | <取消方式> <取消方式_0> 2411 | <城市> <北京> 2412 | <开通方式> <开通方式_0> 2413 | <上线时间> <20200430> 2414 | <下线时间> <20991231> 2415 | <业务简介> <业务简介_177> 2416 | <产品名称> <新星会员> 2417 | <城市> <北京> 2418 | <开通方式> <开通方式_153> 2419 | <上线时间> <20200430> 2420 | <下线时间> <20991231> 2421 | <业务简介> <业务简介_178> 2422 | <产品名称> <黄金会员> 2423 | <价格> <5> 2424 | <取消方式> <取消方式_130> 2425 | <城市> <北京> 2426 | <开通方式> <开通方式_154> 2427 | <上线时间> <20190901> 2428 | <下线时间> <20991231> 2429 | <业务简介> <业务简介_162> 2430 | <产品名称> <24元车主小秘书年套餐> 2431 | <价格> <24> 2432 | <使用方法> <使用方法_19> 2433 | <取消方式> <取消方式_120> 2434 | <城市> <北京> 2435 | <开通方式> <开通方式_142> 2436 | <有效期> <8640> 2437 | <上线时间> <20090501> 2438 | <下线时间> <20991231> 2439 | <业务简介> <业务简介_132> 2440 | <产品名称> <12580车主服务> 2441 | <价格> <2> 2442 | <使用方法> <使用方法_10> 2443 | <取消方式> <取消方式_92> 2444 | <城市> <北京> 2445 | <开通方式> <开通方式_115> 2446 | <上线时间> <20080618> 2447 | <下线时间> <20991231> 2448 | <业务简介> <业务简介_158> 2449 | <产品名称> <通话圈> 2450 | <价格> <10> 2451 | <取消方式> <取消方式_116> 2452 | <城市> <北京> 2453 | <开通方式> <开通方式_138> 2454 | <上线时间> <20080618> 2455 | <下线时间> <20991231> 2456 | <业务简介> <业务简介_159> 2457 | <产品名称> <通话圈-成员> 2458 | <取消方式> <取消方式_117> 2459 | <城市> <北京> 2460 | <子业务> <成员> 2461 | <开通方式> <开通方式_139> 2462 | <上线时间> <20200501> 2463 | <下线时间> <20201231> 2464 | <业务简介> <业务简介_52> 2465 | <产品名称> <锦鲤卡> 2466 | <城市> <北京> 2467 | <开通方式> <开通方式_42> 2468 | <上线时间> <20200101> 2469 | <下线时间> <20991231> 2470 | <业务简介> <业务简介_87> 2471 | <产品名称> <随心看会员> 2472 | <价格> <19> 2473 | <取消方式> <取消方式_60> 2474 | <城市> <北京> 2475 | <开通方式> <业务简介_87> 2476 | <流量> <15360> 2477 | <上线时间> <20200720> 2478 | <下线时间> <20211231> 2479 | <业务简介> <业务简介_230> 2480 | <产品名称> <随心看会员合约版> 2481 | <城市> <北京> 2482 | <开通方式> <开通方式_190> 2483 | <万能副卡> <使用范围> <使用范围_169> 2484 | <万能副卡> <档位介绍表> 2485 | <万能副卡> <生效规则> <生效规则_170> 2486 | <专属定向流量包> <封顶规则> <封顶规则_39> 2487 | <专属定向流量包> <档位介绍表> 2488 | <专属定向流量包> <档位介绍表> 2489 | <专属定向流量包> <档位介绍表> 2490 | <专属定向流量包> <档位介绍表> 2491 | <专属定向流量包> <档位介绍表> 2492 | <专属定向流量包> <结转规则> <结转规则_40> 2493 | <云邮包活动> <档位介绍表> 2494 | <云邮包活动> <生效规则> <生效规则_110> 2495 | <互联网智能语音遥控器> <使用范围> <使用范围_87> 2496 | <互联网智能语音遥控器> <档位介绍表> 2497 | <互联网电视> <使用范围> <使用范围_86> 2498 | <互联网电视> <档位介绍表> 2499 | <互联网电视> <档位介绍表> 2500 | <互联网电视> <档位介绍表> 2501 | <互联网电视> <档位介绍表> 2502 | <互联网电视> <档位介绍表> 2503 | <互联网电视> <档位介绍表> 2504 | <互联网电视> <档位介绍表> 2505 | <互联网电视> <档位介绍表> 2506 | <互联网电视> <生效规则> <生效规则_85> 2507 | <亲友团> <使用范围> <使用范围_76> 2508 | <亲友团> <档位介绍表> 2509 | <任我用套餐> <封顶规则> <封顶规则_163> 2510 | <任我用套餐> <档位介绍表> 2511 | <任我用套餐> <生效规则> <生效规则_162> 2512 | <任我用套餐> <结转规则> <结转规则_164> 2513 | <任我用流量包> <使用范围> <使用范围_44> 2514 | <任我用流量包> <档位介绍表> 2515 | <任我看视频流量包> <档位介绍表> 2516 | <任我看视频流量包> <档位介绍表> 2517 | <任我看视频流量包> <档位介绍表> 2518 | <任我看视频流量包> <档位介绍表> 2519 | <任我看视频流量包> <生效规则> <生效规则_18> 2520 | <任我看视频流量包> <结转规则> <结转规则_17> 2521 | <任我看视频流量包> <适用app> <适用app_199> 2522 | <任我看视频流量包> <适用app> <适用app_200> 2523 | <任我看视频流量包> <适用app> <适用app_201> 2524 | <任我看视频流量包> <适用app> <适用app_202> 2525 | <任我看视频流量包> <适用app> <适用app_203> 2526 | <任我看视频流量包> <适用app> <适用app_204> 2527 | <任我看视频流量包> <适用app> <适用app_205> 2528 | <任我看视频流量包> <适用app> <适用app_206> 2529 | <任我看视频流量包> <适用app> <适用app_207> 2530 | <倍享包> <封顶规则> <封顶规则_1> 2531 | <倍享包> <档位介绍表> 2532 | <倍享包> <生效规则> <生效规则_0> 2533 | <倍享包> <结转规则> <结转规则_2> 2534 | <入网首充赠礼营销活动> <档位介绍表> 2535 | <入网首充赠礼营销活动> <生效规则> <生效规则_138> 2536 | <全国亲情网> <档位介绍表> 2537 | <全国亲情网> <档位介绍表> 2538 | <全国亲情网> <生效规则> <生效规则_78> 2539 | <全国亲情网功能费优惠活动> <档位介绍表> 2540 | <全国亲情网功能费优惠活动> <生效规则> <生效规则_116> 2541 | <全球通套餐赠送国际长途语音包活动> <档位介绍表> 2542 | <全球通套餐赠送国际长途语音包活动> <生效规则> <生效规则_96> 2543 | <全球通焕新优享活动> <档位介绍表> 2544 | <全球通焕新优享活动> <结转规则> <结转规则_95> 2545 | <全球通礼遇活动> <档位介绍表> 2546 | <全球通礼遇活动> <生效规则> <生效规则_143> 2547 | <全网优惠享特权活动> <档位介绍表> 2548 | <全网优惠享特权活动> <生效规则> <生效规则_128> 2549 | <全网普惠得流量活动> <档位介绍表> 2550 | <全网普惠得流量活动> <生效规则> <生效规则_126> 2551 | <全网普惠得流量活动> <结转规则> <结转规则_127> 2552 | <加社区通信管家得礼包活动> <档位介绍表> 2553 | <加社区通信管家得礼包活动> <结转规则> <结转规则_129> 2554 | <加量不加价活动> <使用范围> <使用范围_92> 2555 | <加量不加价活动> <叠加规则> <叠加规则_93> 2556 | <加量不加价活动> <档位介绍表> 2557 | <加量不加价活动> <生效规则> <生效规则_94> 2558 | <北京移动plus会员> <档位介绍表> 2559 | <北京移动plus会员> <档位介绍表> 2560 | <北京移动plus会员> <生效规则> <生效规则_70> 2561 | <北京移动plus会员权益卡> <档位介绍表> 2562 | <北京移动plus会员权益卡> <生效规则> <生效规则_114> 2563 | <北京通手机卡> <使用范围> <使用范围_174> 2564 | <北京通手机卡> <档位介绍表> 2565 | <北京通手机卡> <档位介绍表> 2566 | <北京通手机卡> <结转规则> <结转规则_175> 2567 | <和4G校园套餐> <使用范围> <使用范围_161> 2568 | <和4G校园套餐> <封顶规则> <封顶规则_160> 2569 | <和4G校园套餐> <档位介绍表> 2570 | <和4G校园套餐> <档位介绍表> 2571 | <和4G校园套餐> <生效规则> <生效规则_159> 2572 | <和家庭优惠活动> <档位介绍表> 2573 | <和家庭优惠活动> <生效规则> <生效规则_98> 2574 | <和家庭免费赠送号卡活动> <使用范围> <使用范围_97> 2575 | <和家庭免费赠送号卡活动> <档位介绍表> 2576 | <和家庭分享> <使用范围> <使用范围_76> 2577 | <和家庭分享> <档位介绍表> 2578 | <和家庭分享> <档位介绍表> 2579 | <和家庭流量包> <叠加规则> <叠加规则_5> 2580 | <和家庭流量包> <档位介绍表> 2581 | <和家庭流量包> <生效规则> <生效规则_3> 2582 | <和家庭流量包> <结转规则> <结转规则_4> 2583 | <和彩云> <叠加规则> <叠加规则_75> 2584 | <和彩云> <档位介绍表> 2585 | <和彩印> <档位介绍表> 2586 | <和彩印> <档位介绍表> 2587 | <和彩印> <生效规则> <生效规则_74> 2588 | <和爱车黄金会员> <使用范围> <使用范围_88> 2589 | <和爱车黄金会员> <档位介绍表> 2590 | <和爱车黄金会员> <生效规则> <生效规则_89> 2591 | <和留言> <档位介绍表> 2592 | <和留言> <档位介绍表> 2593 | <和留言> <生效规则> <生效规则_82> 2594 | <喜马拉雅流量包> <封顶规则> <封顶规则_31> 2595 | <喜马拉雅流量包> <档位介绍表> 2596 | <喜马拉雅流量包> <结转规则> <结转规则_32> 2597 | <喜马拉雅流量包> <适用app> <适用app_213> 2598 | <嗨包> <使用范围> <使用范围_6> 2599 | <嗨包> <档位介绍表> 2600 | <嗨包> <生效规则> <生效规则_7> 2601 | <嗨包> <结转规则> <结转规则_8> 2602 | <嗨购产品> <使用范围> <使用范围_62> 2603 | <嗨购月包> <档位介绍表> 2604 | <嗨购月包> <档位介绍表> 2605 | <固话业务> <使用范围> <使用范围_90> 2606 | <固话业务> <档位介绍表> 2607 | <天天做任务活动> <使用范围> <使用范围_121> 2608 | <天天做任务活动> <档位介绍表> 2609 | <天天做任务活动> <结转规则> <结转规则_122> 2610 | <天天赢2GB活动> <档位介绍表> 2611 | <天天赢2GB活动> <结转规则> <结转规则_134> 2612 | <天气预报> <档位介绍表> 2613 | <天气预报> <档位介绍表> 2614 | <天气预报> <生效规则> <生效规则_79> 2615 | <安心上网流量包> <档位介绍表> 2616 | <安心上网流量包> <生效规则> <生效规则_55> 2617 | <安心上网流量包> <结转规则> <结转规则_54> 2618 | <家园卡欢乐套餐> <档位介绍表> 2619 | <家园卡欢乐套餐> <档位介绍表> 2620 | <家园卡欢乐套餐> <档位介绍表> 2621 | <家园卡欢乐套餐> <生效规则> <生效规则_198> 2622 | <尊享计划2020版> <封顶规则> <封顶规则_184> 2623 | <尊享计划2020版> <档位介绍表> 2624 | <尊享计划2020版> <结转规则> <结转规则_185> 2625 | <年货节活动介绍> <使用范围> <使用范围_140> 2626 | <年货节活动介绍> <档位介绍表> 2627 | <幸运好礼星期三活动> <档位介绍表> 2628 | <幸运好礼星期三活动> <生效规则> <生效规则_130> 2629 | <彩铃> <封顶规则> <封顶规则_72> 2630 | <彩铃> <档位介绍表> 2631 | <彩铃> <档位介绍表> 2632 | <彩铃> <档位介绍表> 2633 | <彩铃> <生效规则> <生效规则_71> 2634 | <快手定向流量包> <使用范围> <使用范围_10> 2635 | <快手定向流量包> <档位介绍表> 2636 | <快手定向流量包> <档位介绍表> 2637 | <快手定向流量包> <结转规则> <结转规则_11> 2638 | <快手定向流量包> <适用app> <适用app_199> 2639 | <承诺低消优惠话费活动> <档位介绍表> 2640 | <承诺低消优惠话费活动> <档位介绍表> 2641 | <承诺低消优惠话费活动> <生效规则> <生效规则_115> 2642 | <承诺畅享套餐抵减套餐费活动> <档位介绍表> 2643 | <承诺畅享套餐抵减套餐费活动> <生效规则> <生效规则_109> 2644 | <抖音视频彩铃15GB定向流量月包 > <档位介绍表> 2645 | <抖音视频彩铃15GB定向流量月包 > <结转规则> <结转规则_61> 2646 | <提速包> <封顶规则> <封顶规则_28> 2647 | <提速包> <档位介绍表> 2648 | <提速包> <档位介绍表> 2649 | <提速包> <档位介绍表> 2650 | <提速包> <档位介绍表> 2651 | <提速包> <档位介绍表> 2652 | <提速包> <档位介绍表> 2653 | <提速包> <生效规则> <生效规则_27> 2654 | <提速包> <结转规则> <结转规则_26> 2655 | <新全球通畅享套餐> <档位介绍表> 2656 | <新全球通畅享套餐> <结转规则> <结转规则_186> 2657 | <新惠享流量券活动> <封顶规则> <封顶规则_118> 2658 | <新惠享流量券活动> <档位介绍表> 2659 | <新惠享流量券活动> <档位介绍表> 2660 | <新惠享流量券活动> <结转规则> <结转规则_117> 2661 | <新春五福活动> <使用范围> <使用范围_145> 2662 | <新春五福活动> <档位介绍表> 2663 | <新春营销活动> <使用范围> <使用范围_142> 2664 | <新春营销活动> <档位介绍表> 2665 | <新畅享套餐升档优惠活动> <档位介绍表> 2666 | <新畅享套餐升档优惠活动> <生效规则> <生效规则_147> 2667 | <机场流量包> <使用范围> <使用范围_9> 2668 | <机场流量包> <档位介绍表> 2669 | <机场流量包> <档位介绍表> 2670 | <权益超市> <使用范围> <使用范围_84> 2671 | <权益超市> <档位介绍表> 2672 | <来电提醒> <档位介绍表> 2673 | <来电提醒> <档位介绍表> 2674 | <来电提醒> <生效规则> <生效规则_77> 2675 | <校园专属定向流量包> <使用范围> <使用范围_33> 2676 | <校园专属定向流量包> <叠加规则> <叠加规则_35> 2677 | <校园专属定向流量包> <档位介绍表> 2678 | <校园专属定向流量包> <结转规则> <结转规则_34> 2679 | <校园专属定向流量包> <适用app> <适用app_200> 2680 | <校园专属定向流量包> <适用app> <适用app_202> 2681 | <校园专属定向流量包> <适用app> <适用app_204> 2682 | <校园专属定向流量包> <适用app> <适用app_205> 2683 | <校园专属定向流量包> <适用app> <适用app_206> 2684 | <校园专属定向流量包> <适用app> <适用app_207> 2685 | <校园专属定向流量包> <适用app> <适用app_208> 2686 | <校园专属定向流量包> <适用app> <适用app_209> 2687 | <校园专属定向流量包> <适用app> <适用app_210> 2688 | <校园专属定向流量包> <适用app> <适用app_211> 2689 | <校园专属定向流量包> <适用app> <适用app_212> 2690 | <校园卡活动> <使用范围> <使用范围_101> 2691 | <校园卡活动> <叠加规则> <叠加规则_102> 2692 | <校园卡活动> <档位介绍表> 2693 | <校园卡活动> <档位介绍表> 2694 | <校园卡活动> <档位介绍表> 2695 | <校园卡活动> <档位介绍表> 2696 | <校园卡活动> <档位介绍表> 2697 | <校园卡活动> <结转规则> <结转规则_100> 2698 | <流量加油包> <档位介绍表> 2699 | <流量加油包> <档位介绍表> 2700 | <流量加油包> <档位介绍表> 2701 | <流量加油包> <档位介绍表> 2702 | <流量加油包> <档位介绍表> 2703 | <流量加油包> <档位介绍表> 2704 | <流量加油包> <档位介绍表> 2705 | <流量加油包> <生效规则> <生效规则_12> 2706 | <流量加油包> <结转规则> <结转规则_13> 2707 | <流量安心包> <叠加规则> <叠加规则_43> 2708 | <流量安心包> <档位介绍表> 2709 | <流量安心包> <生效规则> <生效规则_42> 2710 | <流量小时包> <档位介绍表> 2711 | <流量小时包> <档位介绍表> 2712 | <流量小时包> <生效规则> <生效规则_53> 2713 | <流量小时包> <结转规则> <结转规则_52> 2714 | <流量拼Go活动> <档位介绍表> 2715 | <流量拼go活动> <生效规则> <生效规则_111> 2716 | <流量无忧包> <使用范围> <使用范围_41> 2717 | <流量无忧包> <档位介绍表> 2718 | <流量日包> <档位介绍表> 2719 | <流量日包> <档位介绍表> 2720 | <流量日包> <档位介绍表> 2721 | <流量日包> <生效规则> <生效规则_51> 2722 | <流量日包> <结转规则> <结转规则_50> 2723 | <流量暖心包> <档位介绍表> 2724 | <流量暖心包> <生效规则> <生效规则_57> 2725 | <流量暖心包> <结转规则> <结转规则_56> 2726 | <流量月包> <叠加规则> <叠加规则_16> 2727 | <流量月包> <档位介绍表> 2728 | <流量月包> <生效规则> <生效规则_15> 2729 | <流量月包> <结转规则> <结转规则_14> 2730 | <流量模组> <使用范围> <使用范围_158> 2731 | <流量模组> <档位介绍表> 2732 | <流量福袋活动> <档位介绍表> 2733 | <流量福袋活动> <结转规则> <结转规则_136> 2734 | <牛卡> <使用范围> <使用范围_197> 2735 | <牛卡> <档位介绍表> 2736 | <牛卡> <档位介绍表> 2737 | <王者荣耀会员流量包> <使用范围> <使用范围_29> 2738 | <王者荣耀会员流量包> <档位介绍表> 2739 | <王者荣耀会员流量包> <结转规则> <结转规则_30> 2740 | <畅享套餐> <使用范围> <使用范围_156> 2741 | <畅享套餐> <封顶规则> <封顶规则_154> 2742 | <畅享套餐> <档位介绍表> 2743 | <畅享套餐> <结转规则> <结转规则_155> 2744 | <畅享套餐促销优惠> <封顶规则> <封顶规则_108> 2745 | <畅享套餐促销优惠> <生效规则> <生效规则_106> 2746 | <畅享套餐促销优惠> <结转规则> <结转规则_107> 2747 | <畅享套餐促销优惠活动> <档位介绍表> 2748 | <畅享套餐升档信用购活动> <档位介绍表> 2749 | <畅享套餐升档信用购活动> <生效规则> <生效规则_125> 2750 | <畅享套餐首充活动> <档位介绍表> 2751 | <畅享套餐首充活动> <生效规则> <生效规则_99> 2752 | <畅享放心用套餐> <封顶规则> <封顶规则_152> 2753 | <畅享放心用套餐> <档位介绍表> 2754 | <畅享放心用套餐> <档位介绍表> 2755 | <畅享放心用套餐> <档位介绍表> 2756 | <畅享放心用套餐> <档位介绍表> 2757 | <畅享放心用套餐> <生效规则> <生效规则_151> 2758 | <畅享放心用套餐> <结转规则> <结转规则_153> 2759 | <盖楼> <档位介绍表> 2760 | <盖楼> <生效规则> <生效规则_137> 2761 | <短信回执> <档位介绍表> 2762 | <短信回执> <档位介绍表> 2763 | <短信回执> <生效规则> <生效规则_73> 2764 | <砍价得好礼活动> <档位介绍表> 2765 | <砍价得好礼活动> <结转规则> <结转规则_133> 2766 | <神州行5元卡> <使用范围> <使用范围_165> 2767 | <神州行5元卡> <档位介绍表> 2768 | <神州行5元卡> <档位介绍表> 2769 | <神州行5元卡> <档位介绍表> 2770 | <神州行5元卡> <生效规则> <生效规则_166> 2771 | <神州行升级版标准卡> <使用范围> <使用范围_176> 2772 | <神州行升级版标准卡> <档位介绍表> 2773 | <神州行畅听卡> <使用范围> <使用范围_167> 2774 | <神州行畅听卡> <档位介绍表> 2775 | <神州行畅听卡> <档位介绍表> 2776 | <神州行畅听卡> <档位介绍表> 2777 | <神州行畅听卡> <生效规则> <生效规则_168> 2778 | <移动wlan套餐> <使用范围> <使用范围_37> 2779 | <移动wlan套餐> <封顶规则> <封顶规则_36> 2780 | <移动wlan套餐> <档位介绍表> 2781 | <移动wlan套餐> <档位介绍表> 2782 | <移动wlan套餐> <档位介绍表> 2783 | <移动wlan套餐> <档位介绍表> 2784 | <移动wlan套餐> <档位介绍表> 2785 | <移动wlan套餐> <档位介绍表> 2786 | <移动wlan套餐> <档位介绍表> 2787 | <移动wlan套餐> <结转规则> <结转规则_38> 2788 | <移动乐享惠活动> <档位介绍表> 2789 | <移动乐享惠活动> <结转规则> <结转规则_135> 2790 | <移动特色权益产品> <使用范围> <使用范围_84> 2791 | <移动特色权益产品> <档位介绍表> 2792 | <移动王卡> <使用范围> <使用范围_173> 2793 | <移动王卡> <档位介绍表> 2794 | <移动王卡> <档位介绍表> 2795 | <移动王卡> <档位介绍表> 2796 | <移动王卡> <档位介绍表> 2797 | <移动王卡> <结转规则> <结转规则_172> 2798 | <移动王卡惠享合约> <档位介绍表> 2799 | <移动王卡惠享合约> <结转规则> <结转规则_131> 2800 | <移动王卡福利二选一活动> <档位介绍表> 2801 | <移动王卡福利二选一活动> <生效规则> <生效规则_103> 2802 | <移动王卡福利二选一活动> <结转规则> <结转规则_104> 2803 | <移动王卡首充赠费活动> <档位介绍表> 2804 | <移动王卡首充赠费活动> <档位介绍表> 2805 | <移动王卡首充赠费活动> <生效规则> <生效规则_105> 2806 | <移动花卡> <使用范围> <使用范围_171> 2807 | <移动花卡> <档位介绍表> 2808 | <移动花卡> <结转规则> <结转规则_172> 2809 | <移动花卡新春升级版> <档位介绍表> 2810 | <签到奖励活动> <档位介绍表> 2811 | <签到奖励活动> <结转规则> <结转规则_91> 2812 | <签到翻牌子> <使用范围> <使用范围_146> 2813 | <签到翻牌子> <档位介绍表> 2814 | <精灵卡> <档位介绍表> 2815 | <精灵卡> <结转规则> <结转规则_196> 2816 | <精灵卡首充优惠活动> <档位介绍表> 2817 | <精灵卡首充优惠活动> <生效规则> <生效规则_139> 2818 | <纯权益产品> <使用范围> <使用范围_84> 2819 | <纯权益产品> <档位介绍表> 2820 | <芝麻卡> <使用范围> <使用范围_195> 2821 | <芝麻卡> <档位介绍表> 2822 | <芝麻卡> <结转规则> <结转规则_194> 2823 | <花一惠一营销活动> <档位介绍表> 2824 | <花一惠一营销活动> <生效规则> <生效规则_124> 2825 | <花季守护业务> <使用范围> <使用范围_84> 2826 | <花季守护业务> <档位介绍表> 2827 | <视频会员2GB通用流量7天包> <档位介绍表> 2828 | <视频会员2GB通用流量7天包> <档位介绍表> 2829 | <视频会员2Gb通用流量7天包> <生效规则> <生效规则_19> 2830 | <视频会员2Gb通用流量7天包> <结转规则> <结转规则_20> 2831 | <视频会员5GB通用流量7天包> <档位介绍表> 2832 | <视频会员5GB通用流量7天包> <档位介绍表> 2833 | <视频会员5GB通用流量7天包> <档位介绍表> 2834 | <视频会员5GB通用流量7天包> <档位介绍表> 2835 | <视频会员5GB通用流量加油包> <档位介绍表> 2836 | <视频会员5GB通用流量加油包> <档位介绍表> 2837 | <视频会员5Gb通用流量7天包> <生效规则> <生效规则_22> 2838 | <视频会员5Gb通用流量7天包> <结转规则> <结转规则_21> 2839 | <视频会员5Gb通用流量加油包> <生效规则> <生效规则_24> 2840 | <视频会员5Gb通用流量加油包> <结转规则> <结转规则_23> 2841 | <视频会员通用流量月包> <档位介绍表> 2842 | <视频会员通用流量月包> <档位介绍表> 2843 | <视频会员通用流量月包> <档位介绍表> 2844 | <视频会员通用流量月包> <结转规则> <结转规则_25> 2845 | <语音信箱> <档位介绍表> 2846 | <语音信箱> <档位介绍表> 2847 | <语音信箱> <生效规则> <生效规则_81> 2848 | <语音模组> <使用范围> <使用范围_157> 2849 | <语音模组> <档位介绍表> 2850 | <超市会员产品> <使用范围> <使用范围_84> 2851 | <超市会员产品> <档位介绍表> 2852 | <超市会员产品> <档位介绍表> 2853 | <车主小秘书24元年套餐> <使用范围> <使用范围_83> 2854 | <车主小秘书24元年套餐> <档位介绍表> 2855 | <车主服务> <使用范围> <使用范围_80> 2856 | <车主服务> <档位介绍表> 2857 | <通话圈> <使用范围> <使用范围_76> 2858 | <通话圈> <档位介绍表> 2859 | <通话圈> <档位介绍表> 2860 | <锦鲤卡> <使用范围> <使用范围_193> 2861 | <锦鲤卡> <封顶规则> <封顶规则_191> 2862 | <锦鲤卡> <档位介绍表> 2863 | <锦鲤卡> <结转规则> <结转规则_192> 2864 | <随心看会员> <使用范围> <使用范围_58> 2865 | <随心看会员> <档位介绍表> 2866 | <随心看会员合约版> <使用范围> <使用范围_144> 2867 | <随心看会员合约版> <档位介绍表> 2868 | -------------------------------------------------------------------------------- /generate_kg.py: -------------------------------------------------------------------------------- 1 | import json 2 | import pandas as pd 3 | from path_env import FilePathConfig 4 | 5 | def generate_ans_type_candidates(data_path, ans_type_kg_path): 6 | # 根据训练集生成答案类型的候选集 7 | df = pd.read_excel(data_path, keep_default_na=False) 8 | ans_types = set() 9 | for idx, row in df.iterrows(): 10 | ans_types.add(row["答案类型"]) 11 | candidates = sorted(list(ans_types)) # 排序,防止每次运行的结果不一样 12 | dic = {"candidates": candidates} 13 | json_str = json.dumps(dic, indent=4, ensure_ascii=False) 14 | with open(ans_type_kg_path, "w") as fp: 15 | fp.write(json_str) 16 | 17 | def generate_attr_candidates(data_path, attr_kg_path): 18 | # 根据训练集生成属性的候选集 19 | df = pd.read_excel(data_path, keep_default_na=False) 20 | attrs = set() 21 | for idx, row in df.iterrows(): 22 | attr_names = list(row["属性名"].replace("|", "|").replace("||", "|").split("|")) # replace,处理错误数据 23 | for name in attr_names: 24 | sub_name = name.split("-")[-1] 25 | attrs.add(sub_name) 26 | candidates = sorted(list(attrs)) 27 | dic = {"candidates": candidates} 28 | json_str = json.dumps(dic, indent=4, ensure_ascii=False) 29 | with open(attr_kg_path, "w") as fp: 30 | fp.write(json_str) 31 | 32 | def generate_ans_tree_from_train_set(data_path, ans_tree_path): 33 | # 根据训练集生成用于推理用户问题答案的知识树,后续会根据用户问题的属性+实体+约束属性值来推理出问题的答案 34 | df = pd.read_excel(data_path, keep_default_na=False) 35 | results = [] 36 | for idx, row in df.iterrows(): 37 | ans_type = row["答案类型"] 38 | if ans_type == "并列句": 39 | continue 40 | 41 | attr_name = row["属性名"] 42 | f_attr_name = attr_name.split("-")[-1] 43 | 44 | entity = row["实体"] 45 | 46 | c_attr_val = str(row["约束属性值"]).replace("|", "|").replace("||", "|") 47 | c_attr_vals = [] 48 | if c_attr_val != "": 49 | c_attr_vals = c_attr_val.split("|") 50 | c_attr_vals.sort() # 排序,为了后续做相同判断 51 | 52 | answers = list(str(row["答案"]).replace("|", "|").replace("||", "|").split("|")) 53 | ans = set(answers) 54 | 55 | not_find = True 56 | for result in results: 57 | if result["attr"] == f_attr_name and result["entity"] == entity and result["constraint"] == c_attr_vals: 58 | result["ans"].union(ans) 59 | not_find = False 60 | break 61 | 62 | if not_find: 63 | results.append( 64 | { 65 | "attr": f_attr_name, 66 | "entity": entity, 67 | "constraint": c_attr_vals, 68 | "ans": ans 69 | } 70 | ) 71 | 72 | for result in results: 73 | result["ans"] = list(result["ans"]) 74 | 75 | json_str = json.dumps(results, indent=4, ensure_ascii=False) 76 | with open(ans_tree_path, "w") as fp: 77 | fp.write(json_str) 78 | 79 | def generate_ans_tree_from_triples(triples_path, ans_tree_path, attr_kg_path): 80 | # 根据给定的triples生成拥有推理用户问题答案的知识树 81 | with open(attr_kg_path) as fp: 82 | attr_candidates = json.load(fp)["candidates"] 83 | results = [] 84 | for loop in range(2): 85 | with open(triples_path, "r") as fp: 86 | for line in fp.readlines(): 87 | line = line.strip().replace(" _", "_").replace("|", "|").replace("||", "|").replace(" <", "<").replace(" >", ">").replace("><", "> <") 88 | 89 | entity, attr, ans = line.split() 90 | 91 | entity = entity[1:-1] # 去掉“<” 和 “>” 92 | attr = attr[1:-1] 93 | ans = ans[1:-1] 94 | if attr == "档位介绍表": 95 | continue 96 | entity_split = list(entity.split("_")) 97 | group_id = "" 98 | if len(entity_split) == 1: 99 | entity = entity_split[0] 100 | else: 101 | entity = entity_split[-2] 102 | group_id = entity_split[-1] 103 | 104 | if attr in attr_candidates and loop == 0: 105 | not_find = True 106 | for result in results: 107 | if result["entity"] == entity and result["attr"] == attr and result["group_id"] == group_id: 108 | if attr in attr_candidates: 109 | result["ans"].union(set(list(ans.split("|")))) 110 | not_find = False 111 | break 112 | if not_find: 113 | results.append({ 114 | "entity": entity, 115 | "attr": attr, 116 | "group_id": group_id, 117 | "ans": set(list(ans.split("|"))) 118 | }) 119 | if attr not in attr_candidates and loop == 1: # 属性没在属性备选值中出现过,则将其作为约束属性值 120 | for result in results: 121 | if result["entity"] == entity and result["group_id"] == group_id: 122 | result["constraint"] = set(list(ans.split("|"))) 123 | 124 | for result in results: 125 | if "constraint" in result: 126 | result["constraint"] = list(result["constraint"]) 127 | else: 128 | result["constraint"] = [] 129 | result["ans"] = list(result["ans"]) 130 | 131 | json_str = json.dumps(results, indent=4, ensure_ascii=False) 132 | with open(ans_tree_path, "w") as fp: 133 | fp.write(json_str) 134 | 135 | def generate_ans_tree_for_compare(data_path, ans_tree_path): 136 | # 为比较句生成单独的kg 137 | df = pd.read_excel(data_path, keep_default_na=False) 138 | results = [] 139 | for idx, row in df.iterrows(): 140 | if row["答案类型"] != "比较句": 141 | continue 142 | 143 | attr_name = row["属性名"] 144 | f_attr_name = attr_name.split("-")[-1] 145 | 146 | entity = row["实体"] 147 | 148 | c_attr_val = str(row["约束属性值"]).replace("|", "|").replace("||", "|") 149 | c_attr_vals = [] 150 | if c_attr_val != "": 151 | c_attr_vals = c_attr_val.split("|") 152 | c_attr_vals.sort() 153 | 154 | answers = list(str(row["答案"]).replace("|", "|").replace("||", "|").split("|")) 155 | ans = set(answers) 156 | 157 | not_find = True 158 | for result in results: 159 | if result["attr"] == f_attr_name and result["entity"] == entity and result["constraint"] == c_attr_vals: 160 | result["ans"].union(ans) 161 | not_find = False 162 | break 163 | 164 | if not_find: 165 | results.append( 166 | { 167 | "attr": f_attr_name, 168 | "entity": entity, 169 | "constraint": c_attr_vals, 170 | "ans": ans 171 | } 172 | ) 173 | for result in results: 174 | result["ans"] = list(result["ans"]) 175 | 176 | json_str = json.dumps(results, indent=4, ensure_ascii=False) 177 | with open(ans_tree_path, "w") as fp: 178 | fp.write(json_str) 179 | 180 | def generate_kg(path_env): 181 | train_set_path = path_env.train_set_path 182 | triples_path = path_env.triples_path 183 | ans_type_kg_path = path_env.ans_type_kg_path 184 | attr_kg_path = path_env.attr_kg_path 185 | ans_tree_from_train_set = path_env.ans_tree_from_train_set 186 | ans_tree_from_triples = path_env.ans_tree_from_triples 187 | ans_tree_for_compare = path_env.ans_tree_for_compare 188 | 189 | generate_ans_type_candidates(train_set_path, ans_type_kg_path) 190 | generate_attr_candidates(train_set_path, attr_kg_path) 191 | 192 | generate_ans_tree_from_train_set(train_set_path, ans_tree_from_train_set) 193 | generate_ans_tree_from_triples(triples_path, ans_tree_from_triples, attr_kg_path) 194 | generate_ans_tree_for_compare(train_set_path, ans_tree_for_compare) 195 | 196 | if __name__ == "__main__": 197 | path_env = FilePathConfig() 198 | generate_kg(path_env) 199 | 200 | -------------------------------------------------------------------------------- /generate_qa_pair.py: -------------------------------------------------------------------------------- 1 | import json 2 | import pandas as pd 3 | from path_env import FilePathConfig 4 | 5 | def generate_ans_type_qa_pair(origin_data_path, qa_pair_path, kg_path): 6 | # 生成答案类型的qa对 7 | with open(kg_path) as fp: 8 | candidates = json.load(fp)["candidates"] 9 | 10 | results = [] 11 | df = pd.read_excel(origin_data_path, keep_default_na=False) 12 | for idx, row in df.iterrows(): 13 | ans_type = row["答案类型"] 14 | query = row["用户问题"] 15 | for at in candidates: 16 | dump = dict() 17 | dump["id"] = idx 18 | dump["query"] = query 19 | dump["ans"] = at 20 | if at == ans_type: 21 | dump["label"] = 0 22 | else: 23 | dump["label"] = 1 24 | results.append(dump) 25 | 26 | json_str = json.dumps(results, indent=4, ensure_ascii=False) 27 | with open(qa_pair_path, "w") as fp: 28 | fp.write(json_str) 29 | 30 | def generate_attr_qa_pair(origin_data_path, qa_pair_path, kg_path): 31 | # 生成属性的qa对 32 | with open(kg_path) as fp: 33 | candidates = json.load(fp)["candidates"] 34 | 35 | results = [] 36 | df = pd.read_excel(origin_data_path, keep_default_na=False) 37 | for idx, row in df.iterrows(): 38 | attr_names = list(row["属性名"].split("|")) 39 | attr_sub_names = set() 40 | query = row["用户问题"] 41 | for name in attr_names: 42 | sub_name = name.split("-")[-1] 43 | attr_sub_names.add(sub_name) 44 | 45 | for attr in candidates: 46 | dump = dict() 47 | dump["id"] = idx 48 | dump["query"] = query 49 | dump["ans"] = attr 50 | if attr in attr_sub_names: 51 | dump["label"] = 0 52 | else: 53 | dump["label"] = 1 54 | results.append(dump) 55 | 56 | json_str = json.dumps(results, indent=4, ensure_ascii=False) 57 | with open(qa_pair_path, "w") as fp: 58 | fp.write(json_str) 59 | 60 | def generate_qa_pair(path_env): 61 | origin_data_path = path_env.train_set_path 62 | ans_type_kg_path = path_env.ans_type_kg_path 63 | attr_kg_path = path_env.attr_kg_path 64 | ans_type_qa_pair_path = path_env.ans_type_qa_pair_path 65 | attr_qa_pair_path = path_env.attr_qa_pair_path 66 | 67 | generate_ans_type_qa_pair(origin_data_path, ans_type_qa_pair_path, ans_type_kg_path) 68 | generate_attr_qa_pair(origin_data_path, attr_qa_pair_path, attr_kg_path) 69 | 70 | if __name__ == "__main__": 71 | path_env = FilePathConfig() 72 | generate_qa_pair(path_env) -------------------------------------------------------------------------------- /generate_vocab.py: -------------------------------------------------------------------------------- 1 | import pandas as pd 2 | from path_env import FilePathConfig 3 | 4 | def word_count(data_list): 5 | # 统计单词出现的频次,并将其降序排列,得出出现频次最多的单词 6 | dic = {} 7 | for data_str in data_list: 8 | words = list(data_str) 9 | for word in words: 10 | if(word in dic): 11 | dic[word] += 1 12 | else: 13 | dic[word] = 1 14 | word_count_sorted = sorted(dic.items(), key=lambda item:item[1], reverse=True) 15 | return word_count_sorted 16 | 17 | def generate_vocab(path_env, vocab_size=5000): 18 | train_path = path_env.train_set_path 19 | vocab_path = path_env.vocab_path 20 | df = pd.read_excel(train_path) 21 | data_list = [] 22 | for idx, row in df.iterrows(): 23 | data_list.append(row["用户问题"]) 24 | data_list.append(row["答案类型"]) 25 | data_list.append(row["属性名"]) 26 | word_count_sorted = word_count(data_list) 27 | vocab_size = min(len(word_count_sorted), vocab_size) 28 | with open(vocab_path, "w") as fp: 29 | fp.write("" + "\n") 30 | fp.write("" + "\n") 31 | for i in range(vocab_size): 32 | fp.write(word_count_sorted[i][0] + "\n") 33 | 34 | 35 | if __name__ == "__main__": 36 | path_env = FilePathConfig() 37 | generate_vocab(path_env) 38 | -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | from config import Config 2 | from path_env import FilePathConfig 3 | from generate_kg import generate_kg 4 | from generate_qa_pair import generate_qa_pair 5 | from generate_vocab import generate_vocab 6 | from run_model import run_model 7 | from postprocessor import postprocess 8 | 9 | def main(path_env, config): 10 | print("###### generate kg begin ######") 11 | generate_kg(path_env) 12 | print("###### generate kg end ######") 13 | 14 | print("###### generate qa pair begin ######") 15 | generate_qa_pair(path_env) 16 | print("###### generate qa pair end ######") 17 | 18 | print("###### generate vocab begin ######") 19 | generate_vocab(path_env) 20 | print("###### generate vocab end ######") 21 | 22 | run_params = [("train", "ans_type"), ("train", "attr"), ("infer", "ans_type"), ("infer", "attr")] 23 | for run_type, data_type in run_params: 24 | print(f"###### {run_type} {data_type} begin ######") 25 | run_model(path_env, config, run_type, data_type) 26 | print(f"###### {run_type} {data_type} end ######") 27 | 28 | print("###### postprocess begin ######") 29 | postprocess(path_env) 30 | print("###### postprocess end ######") 31 | 32 | if __name__ == "__main__": 33 | path_env = FilePathConfig() 34 | config = Config() 35 | main(path_env, config) 36 | -------------------------------------------------------------------------------- /path_env.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | class FilePathConfig: 4 | def __init__(self): 5 | # 原始文件 6 | self.train_set_path = "./dataset/origin/train.xlsx" 7 | self.infer_set_path = "./dataset/origin/test1.xlsx" 8 | self.entity_synonyms_path = "./dataset/origin/synonyms.txt" 9 | self.triples_path = "./dataset/origin/triples.txt" 10 | 11 | # 训练集qa对 12 | self.ans_type_qa_pair_path = "./dataset/post/ans_type_qa_pair_path.json" 13 | self.attr_qa_pair_path = "./dataset/post/attr_qa_pair_path.json" 14 | if not os.path.exists("./dataset/post/"): 15 | os.makedirs("./dataset/post/") 16 | 17 | # 模型路径 18 | self.ans_type_model = "./models/ans_type_model_parameter.pkl" 19 | self.attr_model = "./models/attr_model_parameter.pkl" 20 | if not os.path.exists("./models"): 21 | os.makedirs("./models") 22 | 23 | # 字典 24 | self.vocab_path = "./dataset/vocab/vocab.txt" 25 | if not os.path.exists("./dataset/vocab"): 26 | os.makedirs("./dataset/vocab") 27 | 28 | # 知识树 29 | self.ans_type_kg_path = "./dataset/knowledges/ans_type_candidates.json" 30 | self.attr_kg_path = "./dataset/knowledges/attr_candidates.json" 31 | self.ans_tree_from_train_set = "./dataset/knowledges/ans_tree_from_train_set.json" 32 | self.ans_tree_from_triples = "./dataset/knowledges/ans_tree_from_triples.json" 33 | self.ans_tree_for_compare = "./dataset/knowledges/ans_tree_for_compare.json" 34 | if not os.path.exists("./dataset/knowledges/"): 35 | os.makedirs("./dataset/knowledges/") 36 | 37 | # infer结果 38 | self.ans_type_infer_result = "./results/infer_results/ans_type_result.json" 39 | self.attr_infer_result = "./results/infer_results/attr_result.json" 40 | if not os.path.exists("./results/infer_results/"): 41 | os.makedirs("./results/infer_results/") 42 | 43 | # 结果后处理 44 | self.ans_type_result = "./results/post_results/ans_type_result.json" 45 | self.attr_result = "./results/post_results/attr_result.json" 46 | self.entity_result = "./results/post_results/entity_result.json" 47 | self.ans_from_train_tree = "./results/post_results/ans_from_train_tree.json" 48 | self.ans_from_train_triples_tree = "./results/post_results/ans_from_train_triples_tree.json" 49 | self.ans_processed_comp = "./results/post_results/ans_processed_comp.json" 50 | if not os.path.exists("./results/post_results/"): 51 | os.makedirs("./results/post_results/") 52 | 53 | # 提交文件 54 | self.final_result = "./results/final_results/result.csv" 55 | self.result_for_upload = "./results/final_results/kbqa_results.json" 56 | if not os.path.exists("./results/final_results"): 57 | os.makedirs("./results/final_results") 58 | -------------------------------------------------------------------------------- /postprocessor.py: -------------------------------------------------------------------------------- 1 | import json 2 | import pandas as pd 3 | import operator 4 | import jieba 5 | 6 | from path_env import FilePathConfig 7 | 8 | def load_synonyms(data_path): 9 | # 实体的同义词 10 | results = [] 11 | with open(data_path, "r") as fp: 12 | for line in fp.readlines(): 13 | line = line.strip() 14 | base, others = line.split() 15 | if others == "无": 16 | results.append([base]) 17 | else: 18 | result = [base] + list(others.replace("|", "|").replace("||", "|").split("|")) 19 | results.append(list(set(result))) 20 | return results 21 | 22 | def is_en_word(s): 23 | for c in s.lower(): 24 | if not ord(c) in range(97, 123): 25 | return False 26 | return True 27 | 28 | def match(p, s): 29 | count = 0 30 | words = list(jieba.cut(p, cut_all=False)) 31 | total_words = list(jieba.cut(s, cut_all=False)) 32 | for word in words: 33 | if word in total_words: 34 | count += 1 35 | elif is_en_word(word): # 字母单独匹配 36 | for w in total_words: 37 | if is_en_word(w): 38 | temp_count = 0 39 | for char in list(word.lower()): 40 | if char in w.lower(): 41 | temp_count += 1 42 | if len(list(word)) <= 3: 43 | if temp_count == len(word): 44 | count += 1 45 | break 46 | elif len(list(word)) <= 5: 47 | if temp_count >= len(word) - 1: 48 | count += 1 49 | break 50 | else: 51 | if temp_count >= len(word) - 2: 52 | count += 1 53 | break 54 | if len(words) < 3: 55 | if count == len(words): 56 | return True 57 | elif len(words) < 5: 58 | if count >= len(words) - 1: 59 | return True 60 | else: 61 | if count >= len(words) - 2: 62 | return True 63 | return False 64 | 65 | def postprocess_ans_type_result(pre_result_path, post_result_path, kg_path): 66 | with open(pre_result_path) as fp: 67 | data = json.load(fp) 68 | with open(kg_path) as fp: 69 | candidates = json.load(fp)["candidates"] 70 | 71 | results = dict() 72 | for data_id in data.keys(): 73 | ans_list = data[data_id] 74 | ans_list = sorted(ans_list, key=operator.itemgetter("confidence"), reverse=True) 75 | ans_id = ans_list[0]["ans_id"] 76 | if data_id not in results: 77 | results[data_id] = {"ans_type": candidates[ans_id]} 78 | 79 | json_str = json.dumps(results, indent=4, ensure_ascii=False) 80 | with open(post_result_path, "w") as fp: 81 | fp.write(json_str) 82 | 83 | 84 | def postprocess_attr_result(pre_result_path, post_result_path, infer_set_path, post_ans_type_path, kg_path): 85 | with open(pre_result_path) as fp: 86 | data = json.load(fp) 87 | with open(kg_path) as fp: 88 | candidates = json.load(fp)["candidates"] 89 | df = pd.read_excel(infer_set_path, keep_default_na=False) 90 | with open(post_ans_type_path) as fp: 91 | ans_type_results = json.load(fp) 92 | 93 | query_dict = dict() 94 | for idx, row in df.iterrows(): 95 | data_id = row["id"] 96 | query = row["query"] 97 | query_dict[data_id] = query 98 | 99 | results = dict() 100 | for data_id in query_dict.keys(): 101 | ans_list = data[str(data_id)] 102 | ans_list = sorted(ans_list, key=operator.itemgetter("confidence"), reverse=True) 103 | ans_type = ans_type_results[str(data_id)]["ans_type"] 104 | if ans_type == "并列句": 105 | ans_list = ans_list[:2] 106 | else: 107 | ans_list = ans_list[:1] 108 | 109 | attrs = [] 110 | for ans in ans_list: 111 | ans_id = ans["ans_id"] 112 | attrs.append(candidates[ans_id]) 113 | attr = "|".join(attrs) 114 | 115 | results[data_id] = { 116 | "query": query_dict[data_id], 117 | "ans_type": ans_type, 118 | "attr": attr 119 | } 120 | 121 | json_str = json.dumps(results, indent=4, ensure_ascii=False) 122 | with open(post_result_path, "w") as fp: 123 | fp.write(json_str) 124 | 125 | def extract_entity(pre_result_path, post_result_path, entity_synonyms_path): 126 | entity_sysnoyms = load_synonyms(entity_synonyms_path) 127 | with open(pre_result_path) as fp: 128 | attr_results = json.load(fp) 129 | for loop in range(2): 130 | for data_id in attr_results.keys(): 131 | query = attr_results[data_id]["query"] 132 | for entities in entity_sysnoyms: 133 | for entity in entities: 134 | if entity == "": 135 | continue 136 | if loop == 0 and entity.lower() in query.lower(): # 防止大小写不统一,如:GB和gb 137 | if "entity" not in attr_results[data_id]: 138 | attr_results[data_id]["entity"] = entity 139 | else: 140 | if len(entity) > len(attr_results[data_id]["entity"]): # 最长匹配 141 | attr_results[data_id]["entity"] = entity 142 | elif loop == 1: # 测试集中用拼写错误,如plus被拼写成了puls(id=14)、pluas(id=61)等, 使用新的匹配规则 143 | if match(entity, query): 144 | if "entity" not in attr_results[data_id]: 145 | attr_results[data_id]["entity"] = entity 146 | else: 147 | if len(entity) > len(attr_results[data_id]["entity"]): 148 | attr_results[data_id]["entity"] = entity 149 | 150 | for data_id in attr_results.keys(): 151 | if "entity" not in attr_results[data_id]: # 无实体,补空值 152 | attr_results[data_id]["entity"] = "" 153 | 154 | json_str = json.dumps(attr_results, indent=4, ensure_ascii=False) 155 | with open(post_result_path, "w") as fp: 156 | fp.write(json_str) 157 | 158 | def generate_ans_from_train_kg(pre_result_path, post_result_path, entity_synonyms_path, kg_path): 159 | # 用训练数据构造的kg推理query的答案 160 | entity_sysnoyms = load_synonyms(entity_synonyms_path) 161 | with open(pre_result_path) as fp: 162 | entity_results = json.load(fp) 163 | with open(kg_path) as fp: 164 | kg_trees = json.load(fp) 165 | 166 | results = [] 167 | for data_id in entity_results.keys(): 168 | query = entity_results[data_id]["query"] 169 | ans_type = entity_results[data_id]["ans_type"] 170 | attrs = list(entity_results[data_id]["attr"].split("|")) 171 | entity = entity_results[data_id]["entity"] 172 | answer = [] 173 | for attr in attrs: 174 | f_ans = [] 175 | temp_ans = [] 176 | for kg in kg_trees: 177 | if attr != kg["attr"]: # 属性必须相同 178 | continue 179 | constraint = kg["constraint"] 180 | for entities in entity_sysnoyms: 181 | if entity in entities and kg["entity"] in entities: # 必须为同义实体 182 | temp_ans = kg["ans"] # 属性值+实体匹配时,得到临时答案 183 | is_f_ans = True if len(constraint) > 0 else False 184 | for c in constraint: 185 | if c not in query: 186 | is_f_ans = False 187 | break 188 | if is_f_ans: 189 | f_ans = kg["ans"] # 属性值+实体+约束属性值都匹配时,得到最终答案 190 | break 191 | if f_ans != []: 192 | break 193 | if f_ans == []: # 没找到最终答案,用临时答案 194 | f_ans = temp_ans 195 | answer += f_ans 196 | answer = list(set(answer)) # set 去重 197 | if entity == "": # 没有实体,无答案 198 | answer = [] 199 | results.append({ 200 | "id": data_id, 201 | "query": query, 202 | "ans_type": ans_type, 203 | "attr": "|".join(attrs), 204 | "entity": entity, 205 | "ans": "|".join(answer) 206 | }) 207 | 208 | json_str = json.dumps(results, indent=4, ensure_ascii=False) 209 | with open(post_result_path, "w") as fp: 210 | fp.write(json_str) 211 | 212 | def add_ans_from_triples_kg(pre_result_path, post_result_path, entity_synonyms_path, kg_path): 213 | # 当用训练集构造的kg没找到答案时,用triples中构造的kg填充没有找到答案的query 214 | entity_sysnoyms = load_synonyms(entity_synonyms_path) 215 | with open(pre_result_path) as fp: 216 | results = json.load(fp) 217 | with open(kg_path) as fp: 218 | kg_trees = json.load(fp) 219 | 220 | for result in results: 221 | if result["ans"] != "": # 已经找到答案 222 | continue 223 | attrs = list(result["attr"].split("|")) 224 | entity = result["entity"] 225 | if entity == "": 226 | continue 227 | query = result["query"] 228 | answer = [] 229 | for attr in attrs: 230 | f_ans = [] 231 | temp_ans =[] 232 | for kg in kg_trees: 233 | if attr != kg["attr"]: 234 | continue 235 | constraint = kg["constraint"] 236 | for entities in entity_sysnoyms: 237 | if entity in entities and kg["entity"] in entities: 238 | temp_ans = kg["ans"] 239 | is_f_ans = True if len(constraint) > 0 else False 240 | for c in constraint: 241 | if c not in query: 242 | is_f_ans = False 243 | break 244 | if is_f_ans: 245 | f_ans = kg["ans"] 246 | break 247 | if f_ans != []: 248 | break 249 | if f_ans == []: 250 | f_ans = temp_ans 251 | answer += f_ans 252 | answer = list(set(answer)) 253 | result["ans"] = "|".join(answer) 254 | 255 | json_str = json.dumps(results, indent=4, ensure_ascii=False) 256 | with open(post_result_path, "w") as fp: 257 | fp.write(json_str) 258 | 259 | def update_ans_for_comp(pre_result_path, post_result_path, entity_synonyms_path, kg_path): 260 | entity_sysnoyms = load_synonyms(entity_synonyms_path) 261 | with open(pre_result_path) as fp: 262 | results = json.load(fp) 263 | with open(kg_path) as fp: 264 | kg_trees = json.load(fp) 265 | 266 | for result in results: 267 | if result["ans_type"] != "比较句": 268 | continue 269 | entity = result["entity"] 270 | if entity == "": # 没有实体,无答案 271 | continue 272 | attr = result["attr"] 273 | query = result["query"] 274 | f_ans = [] 275 | temp_ans = [] 276 | for kg in kg_trees: 277 | constraint = kg["constraint"] 278 | if kg["attr"] != attr: 279 | continue 280 | for entities in entity_sysnoyms: 281 | if kg["entity"] in entities and entity in entities: 282 | temp_ans = kg["ans"] 283 | is_f_ans = True if len(constraint) > 0 else False 284 | for c in constraint: 285 | if c not in query: 286 | is_f_ans = True 287 | break 288 | if not is_f_ans: 289 | f_ans = kg["ans"] 290 | break 291 | if f_ans != []: 292 | break 293 | if f_ans == []: 294 | f_ans = temp_ans 295 | if f_ans == []: 296 | f_ans = ["no"] # 没有答案,用"no"作为默认值 297 | f_ans = list(set(f_ans)) 298 | result["ans"] = "|".join(f_ans) 299 | 300 | json_str = json.dumps(results, indent=4, ensure_ascii=False) 301 | with open(post_result_path, "w") as fp: 302 | fp.write(json_str) 303 | 304 | def convert_json2csv(pre_result_path, post_result_path): 305 | with open(pre_result_path) as fp: 306 | json_obj = json.load(fp) 307 | df = pd.DataFrame(json_obj) 308 | df.to_csv(post_result_path) 309 | 310 | def convert_for_upload(pre_result_path, post_result_path): 311 | with open(pre_result_path) as fp: 312 | results = json.load(fp) 313 | 314 | ret = dict() 315 | ret["result"] = dict() 316 | count1 = 0 317 | count2 = 0 318 | for result in results: 319 | data_id = result["id"] 320 | ans = result["ans"] 321 | ret["result"][data_id] = ans 322 | entity = result["entity"] 323 | if ans == "": 324 | count1 += 1 325 | if entity == "": 326 | count2 += 1 327 | 328 | print(f"{count1} samples's ans is none") 329 | print(f"{count2} samples's entity is none") 330 | 331 | json_str = json.dumps(ret, indent=4, ensure_ascii=False) 332 | with open(post_result_path, "w") as fp: 333 | fp.write(json_str) 334 | 335 | def postprocess(path_env): 336 | postprocess_ans_type_result(path_env.ans_type_infer_result, 337 | path_env.ans_type_result, 338 | path_env.ans_type_kg_path) 339 | postprocess_attr_result(path_env.attr_infer_result, 340 | path_env.attr_result, 341 | path_env.infer_set_path, 342 | path_env.ans_type_result, 343 | path_env.attr_kg_path) 344 | 345 | extract_entity(path_env.attr_result, 346 | path_env.entity_result, 347 | path_env.entity_synonyms_path) 348 | 349 | generate_ans_from_train_kg(path_env.entity_result, 350 | path_env.ans_from_train_tree, 351 | path_env.entity_synonyms_path, 352 | path_env.ans_tree_from_train_set) 353 | add_ans_from_triples_kg(path_env.ans_from_train_tree, 354 | path_env.ans_from_train_triples_tree, 355 | path_env.entity_synonyms_path, 356 | path_env.ans_tree_from_triples) 357 | update_ans_for_comp(path_env.ans_from_train_triples_tree, 358 | path_env.ans_processed_comp, 359 | path_env.entity_synonyms_path, 360 | path_env.ans_tree_for_compare) 361 | 362 | convert_json2csv(path_env.ans_processed_comp, path_env.final_result) 363 | convert_for_upload(path_env.ans_processed_comp, path_env.result_for_upload) 364 | 365 | if __name__ == "__main__": 366 | path_env = FilePathConfig() 367 | postprocess(path_env) -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | jieba==0.42.1 2 | torch==1.8.1 3 | numpy==1.19.2 4 | pandas==1.2.5 5 | -------------------------------------------------------------------------------- /run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | python main.py -------------------------------------------------------------------------------- /run_model.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | import torch 3 | import copy 4 | import torch.nn as nn 5 | import json 6 | import argparse 7 | 8 | from config import Config 9 | from data_processor import DataProcessor 10 | from bidaf import BidafModel 11 | from path_env import FilePathConfig 12 | 13 | def test(model, dev_set, loss_func, device): 14 | model.eval() 15 | loss_val = 0. 16 | corrects = 0. 17 | data_size = 0 18 | tp = 0 19 | tn = 0 20 | fp = 0 21 | fn = 0 22 | for batch_data in train_set: 23 | context, query, label = batch_data 24 | 25 | context = torch.LongTensor(context).to(device) 26 | query = torch.LongTensor(query).to(device) 27 | label = torch.FloatTensor(label).to(device) 28 | 29 | c_len = (context != 0).sum(dim=-1).long() 30 | q_len = (query != 0).sum(dim=-1).long() 31 | 32 | preds = model((context, c_len), (query, q_len)) 33 | loss = loss_func(preds, label) 34 | 35 | data_size += context.size(0) 36 | loss_val += loss.item() * context.size(0) 37 | 38 | label = torch.argmax(label, dim=1) 39 | preds = torch.argmax(preds, dim=1) 40 | corrects += torch.sum(preds == label).item() 41 | # 因为正类标签为0,负类为1,所以tp,tn等计算方法需要调整 42 | tn += (label * preds).sum().item() 43 | tp += ((1 - label) * (1 - preds)).sum().item() 44 | fn += ((1 - label) * preds).sum().item() 45 | fp += (label * (1 - preds)).sum().item() 46 | 47 | epsilon = 1e-10 48 | precision = tp / (tp + fp + epsilon) 49 | recall = tp / (tp + fn + epsilon) 50 | f1 = 2* (precision*recall) / (precision + recall + epsilon) 51 | loss_val = loss_val / data_size 52 | acc = corrects / data_size 53 | print("Dev Loss: {}, Dev Acc: {}, Dev P: {}, Dev R: {}, Dev F1: {}".format(loss_val, acc, precision, recall, f1)) 54 | return f1 55 | 56 | 57 | def train(model, train_set, dev_set, optimizer, loss_func, epochs, device): 58 | best_dev_f1 = 0. 59 | best_train_f1 = 0. 60 | best_model_params = copy.deepcopy(model.state_dict()) 61 | for ep in range(epochs): 62 | loss_val = 0. 63 | corrects = 0. 64 | data_size = 0 65 | 66 | tp = 0 67 | tn = 0 68 | fp = 0 69 | fn = 0 70 | model.train() 71 | for batch_data in train_set: 72 | context, query, label = batch_data 73 | 74 | context = torch.LongTensor(context).to(device) 75 | query = torch.LongTensor(query).to(device) 76 | label = torch.FloatTensor(label).to(device) 77 | 78 | c_len = (context != 0).sum(dim=-1).long() 79 | q_len = (query != 0).sum(dim=-1).long() 80 | 81 | preds = model((context, c_len), (query, q_len)) 82 | loss = loss_func(preds, label) 83 | 84 | optimizer.zero_grad() 85 | loss.backward() 86 | optimizer.step() 87 | 88 | data_size += context.size(0) 89 | loss_val += loss.item() * context.size(0) 90 | 91 | #获取预测的最大概率出现的位置 92 | preds = torch.argmax(preds, dim=1) 93 | label = torch.argmax(label, dim=1) 94 | corrects += torch.sum(preds == label).item() 95 | 96 | # 因为正类标签为0,负类为1,所以tp,tn等计算方法需要调整 97 | tn += (label * preds).sum().item() 98 | tp += ((1 - label) * (1 - preds)).sum().item() 99 | fn += ((1 - label) * preds).sum().item() 100 | fp += (label * (1 - preds)).sum().item() 101 | 102 | epsilon = 1e-10 103 | precision = tp / (tp + fp + epsilon) 104 | recall = tp / (tp + fn + epsilon) 105 | f1 = 2* (precision*recall) / (precision + recall + epsilon) 106 | 107 | loss_val = loss_val / data_size 108 | acc = corrects / data_size 109 | 110 | print("################# Train ###################") 111 | print("Loss: {}, Acc: {}, P: {}, R: {}, F1: {}".format(loss_val, acc, precision, recall, f1)) 112 | 113 | if len(dev_set) > 0: 114 | eval_f1 = test(model, dev_set, loss_func, device) 115 | if eval_f1 > best_dev_f1: 116 | best_dev_f1 = eval_f1 117 | best_model_params = copy.deepcopy(model.state_dict()) 118 | else: 119 | if f1 > best_train_f1 and best_train_f1 < 0.999: # 防止过拟合,best_train_f1>=99.9%时不再继续更新 120 | best_train_f1 = f1 121 | best_model_params = copy.deepcopy(model.state_dict()) 122 | model.load_state_dict(best_model_params) 123 | return model 124 | 125 | 126 | def infer(model, infer_set, result_path, device): 127 | model.eval() 128 | results = dict() 129 | for batch_data in infer_set: 130 | context, query, ids, q_ids = batch_data 131 | 132 | context = torch.LongTensor(context).to(device) 133 | query = torch.LongTensor(query).to(device) 134 | 135 | c_len = (context != 0).sum(dim=-1).long() 136 | q_len = (query != 0).sum(dim=-1).long() 137 | 138 | probs = model((context, c_len), (query, q_len)) 139 | confidences = probs[:,0].tolist() 140 | for i in range(len(ids)): 141 | if ids[i] not in results: 142 | results[ids[i]] = [] 143 | results[ids[i]].append({"ans_id": q_ids[i], "confidence": confidences[i]}) 144 | 145 | json_str = json.dumps(results, indent=4, ensure_ascii=False) 146 | with open(result_path, "w") as fp: 147 | fp.write(json_str) 148 | 149 | def run_model(path_env, config, run_type, data_type): 150 | processor = DataProcessor() 151 | 152 | if data_type == "ans_type": 153 | train_path = path_env.ans_type_qa_pair_path 154 | model_path = path_env.ans_type_model 155 | kg_path = path_env.ans_type_kg_path 156 | result_path = path_env.ans_type_infer_result 157 | else: 158 | train_path = path_env.attr_qa_pair_path 159 | model_path = path_env.attr_model 160 | kg_path = path_env.attr_kg_path 161 | result_path = path_env.attr_infer_result 162 | 163 | if run_type == "train": 164 | train_set, dev_set, vocab_size = processor.create_train_set(train_path, 165 | path_env.vocab_path, 166 | batch_size=config.batch_size, 167 | dev_scale=config.dev_scale) 168 | config.vocab_size = vocab_size 169 | 170 | model = BidafModel(config).to(config.device) 171 | optimizer = torch.optim.Adam(model.parameters(), lr=config.lr) 172 | loss_func = nn.BCELoss() 173 | 174 | model = train(model, train_set, dev_set, optimizer, loss_func, config.epochs, config.device) 175 | torch.save(model.state_dict(), model_path) 176 | 177 | else: 178 | infer_set, vocab_size = processor.create_infer_set(path_env.infer_set_path, 179 | kg_path, 180 | path_env.vocab_path, 181 | batch_size=config.batch_size) 182 | config.vocab_size = vocab_size 183 | model = BidafModel(config).to(config.device) 184 | model.load_state_dict(torch.load(model_path)) 185 | infer(model, infer_set, result_path, config.device) 186 | 187 | if __name__ == "__main__": 188 | parser = argparse.ArgumentParser() 189 | parser.add_argument("-rt", "--run_type", type=str, choices=["train", "infer"], default="train", help="run type: train or infer, default: train") 190 | parser.add_argument("-dt", "--data_type", type=str, choices=["ans_type", "attr"], default="ans_type", help="data type: ans_type or attr, default: ans_type") 191 | args = parser.parse_args() 192 | run_type = args.run_type 193 | data_type = args.data_type 194 | path_env = FilePathConfig() 195 | config = Config() 196 | run_model(path_env, config, run_type, data_type) 197 | --------------------------------------------------------------------------------