0%

uber plato v0.2使用注意点(踩坑)

  1. /plato/controller/basic_controller.py,line 415 中,将三个 '/' 改成 os.sep,所有的 controller 都要改。否则会出现 ValueError: Configuration file CamRest_text.yaml not found! 的错误,这是因为 windows 电脑的分隔符是 \\ 而不是 '/'
    • 类似的错误有很多,比如数据解析器,gui_controller 中,都需要改正
    • 建议遇到错误的时候再改,要不然改起来太麻烦了
  2. 如果使用 pycharm 运行 plato 而不是命令行,有几点需要注意(在命令行中运行时,加载文件都是从项目根目录找的)。本质上,Plato 在加载模型时,使用了相对路径。即默认程序会从项目根目录查找文件,但是在 pycharm 中,会从当前正在运行的模块中查找文件。以下是两种情况,分别为两种解决办法:
    • 在运行 LudwigNLU(或自定义的预训练 NLU) 而不是 SlotFillingNLU 的情况下。在包 applications/cambridge_restaurants 中有一个模块为 cambridge_restaurants_agent.py,它可以供人直接运行(只需稍作更改)。但是这会报错 Plato error! Ludwig nlu: Model directory models/camrest_nlu/sys/experiment_run/model not found,这是因为在 applications/cambridge_restaurants 路径下运行程序,那么项目的根路径就变了 plato/applications/cambridge_restaurants 而不是 plato。所以在加载模型时,模型的路径错了。所以可以在 plato 项目的根路径下新建一个 py 文件,然后把 cambridge_restaurants_agent.py 的代码拷过去。
    • 使用 multi-agent 时,也会产生类似的错误。在 plato/agent/component/dialogue_policy/reinforcement_learning/wolf_phc_policy.py 文件的 load() 方法中,加载 pkl 文件时,文件路径有问题,应该是当前文件并非处于根目录造成的,只要改为绝对路径即可。将 if isinstance(path, str): 内的代码更改为:
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      import plato
      plato_path = "/".join(plato.__file__.split(os.sep)[:-2]) + '/'
      new_path = plato_path + path
      if os.path.isfile(new_path):
      with open(new_path, 'rb') as file:
      obj = pickle.load(file)

      if 'Q' in obj:
      self.Q = obj['Q']
      if 'pi' in obj:
      self.pi = obj['pi']
      if 'mean_pi' in obj:
      self.mean_pi = obj['mean_pi']
      if 'state_counter' in obj:
      self.state_counter = obj['state_counter']
      if 'a' in obj:
      self.alpha = obj['a']
      if 'e' in obj:
      self.epsilon = obj['e']
      if 'g' in obj:
      self.gamma = obj['g']

      print('WoLF-PHC dialogue_policy loaded from {0}.'
      .format(new_path))

      else:
      print('Warning! WoLF-PHC dialogue_policy file %s not found'
      % new_path)
  3. 使用 ludwig 训练 NLU/DST/NLG 时,会出现找不到日志文件夹的错误,因为它没有自动创建 log 文件夹的上一级文件夹。个人认为是框架的 bug,所以在训练的时候应该要加上 --skip_save_log 跳过日志记录。