【小白做科研( 七 )】“工欲善其事, 必先利其器” ( 下 )

文章目录

    • 前言
    • 同步本地文件夹和服务器端文件夹
    • 模型表现
      • NPA([[23] Npa Neural news recommendation with personalized attention](https://dl.acm.org/doi/abs/10.1145/3292500.3330665))
      • FIM([[29] Fine-grained Interest Matching for Neural News Recommendation](https://www.aclweb.org/anthology/2020.acl-main.77.pdf))
    • 利器
      • vscode的插件gitlens
      • powertshell设置alias

前言

上一篇 介绍了之前复现的模型表现, tensorboardRemoteSSH, 还遗留了几个问题:

  • 同步本地文件夹和服务器端文件夹失败, 报错connection refused on port 22
  • 之前写的两个模型( NPA, FIM )表现很烂

这一篇解决上两个问题, 并且介绍另外几个很方便的功能/配置。

同步本地文件夹和服务器端文件夹

  • 首先我们参考官方文档中提供的操作 ( 前提是windows系统且安装了WSL, linux和mac也有对应的操作, 文档里都有 ), 在powershell中输入

    wsl rsync -rlptzv --progress --delete --exclude=.git "user@hostname:/remote/source/code/path" "`$(wslpath -a '$PWD')"
    
  • 如果能直接成功, 那肯定是最好, 但是很多服务器处于安全考虑不会用默认的端口, 所以我们需要在命令中指明端口, 即

    wsl rsync -rlptzv -e 'ssh -p port' --progress --delete --	exclude=file/you/want/to/exclude/ 	"user@hostname:/remote/source/code/path" "`$(wslpath -a '$PWD')"
    

    这样就可以连接成功并同步本地文件夹了! 关于rsync的用法大家可以参考这里~

  • 每次同步都要复制这么长的语句是很麻烦的, 我们又希望能在任何文件夹下同步, 所以可以考虑把语句写成powershell脚本, 然后把目录添加在环境变量里, 每次同步时直接运行脚本就行~

    • 这里介绍两个很好用的powershell命令Push-LocationPop-Location, 可以把当前地址入栈, 然后进入指定地址, 操作完之后再让原地址出栈;所以我的脚本如下:
      Push-Location \the\path\you\want\to\synchronize
      wsl rsync -rlptzv -e 'ssh -p port' --progress --delete --	exclude=file/you/want/to/exclude/ 	"user@hostname:/remote/source/code/path" "`$(wslpath -a '$PWD')"
      Pop-Location
      
      这样在运行完脚本后就不会跳到想要同步的目录下了。

模型表现

经历了长达两周的debug, 终于找到了问题所在哈哈哈:

NPA([23] Npa Neural news recommendation with personalized attention)

之前表现很差是因为对模型理解有误, 文章里说的是将用户的id映射为user embedding的dense vector, 这在我看来是训练这个全连接层实现更好的映射
【小白做科研( 七 )】“工欲善其事, 必先利其器” ( 下 )_第1张图片
但是但实际操作中是保存并训练每个用户id的embedding, 即上文的 e u e_u eu, 也就是构建一个lookup layer, 每次都去查表, 然后训练每个用户的user embedding. 但仔细想了想我感觉这样才是正确的逻辑, 之前是我自己想左了哈哈哈。

  • 目前在MINDsmall上( 7万3000条impression )测试结果如下:【小白做科研( 七 )】“工欲善其事, 必先利其器” ( 下 )_第2张图片
    这是原文给出的数据:
    【小白做科研( 七 )】“工欲善其事, 必先利其器” ( 下 )_第3张图片
    可以看到已经和原文差不多了hhhh, 但是我测评指标用错了才看到 ( 汗 )。

  • 再来欣赏下训练的loss曲线~
    【小白做科研( 七 )】“工欲善其事, 必先利其器” ( 下 )_第4张图片
    帅的一! 源码在这里!

FIM([29] Fine-grained Interest Matching for Neural News Recommendation)

这个是一个更蠢的错误。。。。是由于过拟合了( 大汗 )。
所以大家自己写东西的时候, 如果发现loss降得很快, 然后测试集效果极差, 那么一定要记得把测试集换成训练集数据跑, 看一下是不是过拟合了

  • 之前训练了10轮, auc只有49%… 后来训练5轮, 就正常了;这是我在MINDsmall上测试的结果:
    【小白做科研( 七 )】“工欲善其事, 必先利其器” ( 下 )_第5张图片
    对比原文:
    【小白做科研( 七 )】“工欲善其事, 必先利其器” ( 下 )_第6张图片
    还比人家好哈哈哈。
  • 也欣赏一下loss曲线:
    【小白做科研( 七 )】“工欲善其事, 必先利其器” ( 下 )_第7张图片

优美! 源码在这里!

利器

vscode的插件gitlens

  • 方便地查看每一次git条记录, 与工作树对比【小白做科研( 七 )】“工欲善其事, 必先利其器” ( 下 )_第8张图片
    而且我感觉大伙很多都不太会用vscode内置的git功能, 但这个真的太好用了哈哈哈, 强推!

powertshell设置alias

最近在做数据库大作业, 由于我是在anacondavirtual env中安装的django, 然后我又不想用vscode自动在终端激活python环境的功能( 我觉得开了那个很卡 ), 于是每次都得手打conda activate web, 命令很长就很难受; 然后我就想给这个命令设置一个别名, 搜了搜发现可以这么实现:

  1. powershell中输入$profile
  2. 打开对应的文件后在里面加上:
    function act {
           
    		param([string]$EnvName)
    		& conda activate $EnvName
    }
    	```
    
    

这样就可以辽~ 每次只要打act web就成hhhh

你可能感兴趣的:(Research)