<jupyter_start><jupyter_text>使用DQN进行检索---环境 - 评估算法Bleu、observations为所有Q机器 - DQN网络、actions为所有A<jupyter_code>import os
import re
import time
from tqdm import tqdm
import sys
from pprint import pprint

sys.path.insert(0, "/home/team55/notespace/zengbin")
from jddc.config import DQNConfig
from jddc.embedding import load_s2v_model
from jddc.tfidf import load_tfidf_ir_model
import jddc.utils as u
from jddc.dqn import *
from jddc.datasets import read_test_questions02
conf = DQNConfig()
from IPython.display import clear_output
import matplotlib.pyplot as plt
%matplotlib inline
trainer = u.read_from_pkl(conf.pkl_dqn_ir)
trainer.num_frames = 1000
trainer.epsilon = 0.1
trainer.run()
# u.save_to_pkl(file=conf.pkl_dqn_ir, data=trainer)
ir_model = trainer.ir_model
dqn_model = trainer.dqn_model
s2v_model = trainer.env.s2v_model
test_set = read_test_questions02(conf.file_test_q)
answers = []
for i, q in enumerate(test_set):
    print(i, "-"*68)
    print(q)
    q_tokens = n_grams(q, 3)
    state = s2v_model.infer_vector(q_tokens)
    candidates = ir_model.get_candidates(q, top=15)
    pprint(candidates)
    action = choose_action(dqn_model, state, 0, use_cuda=False)
    print("选择：", action, "最终结果：", candidates[action])
    answers.append(candidates[action])
u.write_file(file="/home/team55/notespace/zengbin/answers/dqn_tfidf_answers001.txt", content=answers, 
             mode='w', encoding='utf-8')<jupyter_output>0 --------------------------------------------------------------------
其他问题<q>我直接解绑了实名认证的那个账号，需要把手机号也解绑了是的金融客服说这个要找你们解决他们不管
['那不好意思打扰到您了',
 '亲亲。可以给您申请专员处理呢  辛苦留个联系方式呢，专员会联系您处理的呢',
 '您好，请问您是咨询之前的问题还是有其他的问题需要处理呢?#E-s[数字x] 亲爱的，一定是缘分让我们相遇，请问有什么问题我可以帮您呢?',
 '请问您是咨询之前的问题还是有其他的问题需要处理呢?',
 ' https://help.jd.com/user/issue/[数字x]-[链接x] 您可以看一看这个怎么注销呢',
 '您好#E-s[数字x]',
 '电脑端吗',
 '亲，是的恩',
 '是上门取件么 是的 要核实身份',
 '有什么问题我可以帮您处理的呢?',
 '#E-s[数字x]#E-s[数字x]  是的',
 '解绑实名需要联系金融的哦 如更改账号绑定手机或者邮箱 我们可以处理的哦',
 '好的 请您告知一下收货人姓名，收货地址以及收货手机号码',
 '请问还有其他还可以帮到您的吗? 取消订单之后没办法恢复哦 这边已经为您申请成功了哦',
 '#E-s[数字x]#E-s[数字x]']
选择： tensor(0) 最终结果： 那不好意思打扰到您了
1 --------------------------------------------------------------------
ok<q>新电话号码+[电话x]<jupyter_text>准备数据集---过程：step 1. 读入全部sessions,随机采样100个session；<jupyter_code>all_sessions = read_from_pkl(conf.pkl_sessions)
sessions = random.sample(all_sessions, 10000)
sessions = random.sample(all_sessions, 10000)<jupyter_output><empty_output><jupyter_text>组件加载----<jupyter_code># BM25检索模型
bm25_model, bm25_answers, bm25_average_idf = load_bm25_model()

# tfidf检索模型
tfidf_model = load_tfidf_ir_model()

# Sentence2vec模块
s2v_model = load_s2v_model()<jupyter_output><empty_output><jupyter_text>训练模型---<jupyter_code>def plot(frame_idx, rewards, losses):
    clear_output(True)
    plt.figure(figsize=(20,5))
    plt.subplot(131)
    plt.title('frame %s. reward(last100): %s' % (frame_idx, np.mean(rewards[-100:])))
    plt.plot(rewards)
    plt.subplot(132)
    plt.title('loss')
    plt.plot(losses[-100:])
    plt.show()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1750083977158213, 'fraction_numerical': 0.02586496472959355, 'mean_word_length': 4.618867924528302, 'pattern_counts': {'":': 0, '<': 18, '<?xml version=': 0, '>': 18, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '4', 'dir': 'jupyter-structured-clean-dedup', 'id': '421191', 'license': 'MIT', 'n_tokens_mistral': 1550, 'n_tokens_neox': 1600, 'n_words': 174, 'path': 'final/ipynb/test_dqn_ir.ipynb', 'repo_name': 'caoxu915683474/jddc_solution_4th', 'size': '2977'}