diff --git "a/zoom/img/\345\276\256\344\277\241\345\233\276\347\211\207_20210527125015.jpg" "b/zoom/img/\345\276\256\344\277\241\345\233\276\347\211\207_20210527125015.jpg" new file mode 100644 index 0000000..1807111 Binary files /dev/null and "b/zoom/img/\345\276\256\344\277\241\345\233\276\347\211\207_20210527125015.jpg" differ diff --git "a/zoom/img/\345\276\256\344\277\241\345\233\276\347\211\207_20210527125725.jpg" "b/zoom/img/\345\276\256\344\277\241\345\233\276\347\211\207_20210527125725.jpg" new file mode 100644 index 0000000..d990990 Binary files /dev/null and "b/zoom/img/\345\276\256\344\277\241\345\233\276\347\211\207_20210527125725.jpg" differ diff --git "a/zoom/img/\345\276\256\344\277\241\345\233\276\347\211\207_20210527125908.png" "b/zoom/img/\345\276\256\344\277\241\345\233\276\347\211\207_20210527125908.png" new file mode 100644 index 0000000..e518820 Binary files /dev/null and "b/zoom/img/\345\276\256\344\277\241\345\233\276\347\211\207_20210527125908.png" differ diff --git "a/zoom/img/\345\276\256\344\277\241\345\233\276\347\211\207_20210527125932.png" "b/zoom/img/\345\276\256\344\277\241\345\233\276\347\211\207_20210527125932.png" new file mode 100644 index 0000000..7255a17 Binary files /dev/null and "b/zoom/img/\345\276\256\344\277\241\345\233\276\347\211\207_20210527125932.png" differ diff --git a/zoom/readme.md b/zoom/readme.md new file mode 100644 index 0000000..9754192 --- /dev/null +++ b/zoom/readme.md @@ -0,0 +1,309 @@ +# 群精华 + +## lfm的问题 + +走吧five: +各位大佬,问个lfm的问题 + +走吧five: +![](img/微信图片_20210527125015.jpg) + +走吧five: +LFM这里不太明白为啥要负采样 + +就是最后分解成两个矩阵,相乘得回原先的评分矩阵(不为0的评分相近,为0的预测),那对负样本降采样有什么用啊,还是用原先负样本远大于正样本的评分矩阵做分解啊 + +走吧five: +就是项亮的那本推荐系统实战 + +走吧five: +![](img/微信图片_20210527125725.jpg) + +走吧five: +如果时评分,怎么说是正负样本 + +.: +仅从截图这段话,这是在讲怎么构造复样本吧,原始数据只有正正样本(喜欢),没有负样本,不是必然要去构造负样本么? + +走吧five: +还有如果是要降采样的话,是把要降采样的样本的分数或者喜欢直接置0? + +.: +这个地方核心不是降采样,核心是我们只有用户喜欢那些东西,这些是正样本,没有用户不喜欢那些的负样本,所以要从全局的item抽一些来做负样本,怎么采呢,采那些热门的,同时采的时候保证每个用户数量跟正样本相当 + +走吧five: +@.?我是奇怪加入只有点击行为的是喜欢,为1,没点击是0,那点击肯定远小于不点击,就算有负样本,负样本一样是0,和没点击一个数值,我们把整个评分矩阵分解成两个矩阵,这时不管怎么降采样制造负样本,分解的还是原先的评分矩阵啊 + +.: +这不就是说的方法一么,用所有没行为的作为负样本,不是文字里说了缺陷么 + +走吧five: +我没说降采样的方法啊,我说不管用什么方法去制造负样本,分解的矩阵不还是原先的评分矩阵么? + +.: +搜了下LFM,LFM是把用户和item表示成向量去迭次吧,向量乘起来跟真实label做loss,然后一批批的样本送进去做学习。 并不是把原矩阵写出来,有的位置是1,有的位置是0,去直接做分解吧。 + +.: +不是做推荐的,不过看起来感觉就是很直观的做法呢。 + +colitas: +可以想象成有一个user数*item数的评分矩阵 矩阵里正样本是1 负样本是0 还有大部分空项待遇测 负样本采样就是确定哪些空项填成0 + +麻木的程序猿: +填负数呗 + +走吧five: +差不多理解了,就是原矩阵是不写出来的,未点击的地方不是负样本的不优化,不填数值,只和有值的地方求loss,进行优化。 + +走吧five: +user向量和item向量随机初始化成隐因子的长度就行,和原先的行为数据无关。 + +colitas: +"走吧five: 差不多理解了,就是原矩阵是不写出来的,未点击的地方不是负样本的不优化,不填数值,只和有值的地方求loss,进行优化。" +- - - - - - - - - - - - - - - +没错 + + +## OOV 的问题 + +hirah: +我有个关于oov的问题 + +hirah: +fasttext可以做基于字母的embedding + +hirah: +可以部分解决oov + +hirah: +但是中文最小只能分割到单元字 + +hirah: +中文里面oov怎么处理呀 + +hirah: +不过训练集里面没有的字算是很生僻的字了吧 + +Stefan: +这种处理了能有多大收益呢 + +hirah: +fasttext相当于分解词根词缀的方式应对了oov + +走吧five: +Bert不是基于单个字的么 + +hirah: +比如两个在word2vec那里不同的token + +蠢蠢: +oov不用处理吧,预训练模型这么强的表征能力 + +hirah: +上面不是说的embedding吗 + +just do it!: +词表不用全,而在于精吧 + +枫胤雪: +应该就是用基于概率的wordpiece或者基于频率的bpe生成词表吧 + +just do it!: +比如你能够把一些常用的词覆盖到了就好了,bert基于字也是只覆盖高频词 + +文笔超好的男同学: +问题是 + +just do it!: +一般比较好的方式应该是定期重新预训练吧 + +文笔超好的男同学: +覆盖了,这些字能学好吗 + +just do it!: +这个词要看看是不是热词了 + +文笔超好的男同学: +是的,的确要看 + +文笔超好的男同学: +如果新热,那最好还是覆盖,不过一般覆盖都是用词典规则处理更快哈哈哈哈哈 + +just do it!: +比如如果是做新媒,你们重新预训练是在所难免的,比如一些网红词 + +hirah: +噢噢 应该也还是只能这样子 + +just do it!: +词典加规则确实是工业界标配吧,至少你可以控制 + +文笔超好的男同学: +是的,预训练这个在上游,老是改的话会被下游的同事追着打的 + +文笔超好的男同学: +科研的话,要思考的问题就是这种低频词,模型学不学的到 + +just do it!: +word2vec和bert其实用一个频率阈值,所以如果对于一些只出现两三次的低频词,重新预训练也是浪费时间 + +文笔超好的男同学: +是的会有一个频次约束 + +文笔超好的男同学: +gensim包里可以看看 + +枫胤雪: +查了一下,像英文里用的wordpiece或bpe并不适用于中文 + +just do it!: +bert前:jieba,ngram +bert后:字,知识 + +Cassia: +可以试试sentence price + +文笔超好的男同学: +我们现在连textcnn这种都用字了 + +.: +Price + +文笔超好的男同学: +未登录词基本不用处理,汉子就那么多 + +文笔超好的男同学: +汉字 + +鲤鱼(小白): +@just do it!?知识是指知识图谱? + +just do it!: +是的 + +Cassia: +如果不纠结那几个点的提升,字是省事又好用 + +just do it!: +词典、知识图谱 + +吴玺煜: +好久好久之前做过实验,确实字会更好 + +文笔超好的男同学: +还试过一种是主体用字,配一些实体词然后在原来的基础上再训 + +文笔超好的男同学: +效果也有提升 + +走吧five: +我上一个实习就是词典+规则 + +吴玺煜: +数据量大的话,字会更好吧 + +文笔超好的男同学: +有些实体词能学到的话的确有利于下游任务的 + +## 标签数量太多问题 + +走吧five: +标签200多个 + +文笔超好的男同学: +200多个标签,优先考虑以搜代替分类 + +hirah: +tag classification啊 + +hirah: +比如给tweet上tag + +hirah: +就有几百上千个class + +文笔超好的男同学: +智能问答faq之类的,其实就是一个n分类,每个分类空间都很小 + +文笔超好的男同学: +query进入,找有没有和他相近的,如果有,那就认为query就属于和他相近的句子的那个类 + +枫胤雪: +我很好奇,实习让标注,那面试的时候都面的啥内容 + +文笔超好的男同学: +这种检索答案,本质上就是一种分类,而且这种方案还有个优势,就是分类的个数可以随意调整 + +吴玺煜: +以前做过智能客服,某公司用的就是分类,400多分类 + +just do it!: +![](img/微信图片_20210527125908.png) + +走吧five: +以搜代替分类? + +吴玺煜: +但是rank效果会比分类好吗? + +just do it!: +![](img/微信图片_20210527125932.png) + +just do it!: +多标签:一些场景下的标签设置可能达到几百个,可以设置多层级的标签体系进行处理。例如,先构建标签大类、再构建标签小类;也可以设置多个二分类,适用于标签分类相对独立,并且经常需要新增修改的场景,能做到相互独立、便于维护。 + +文笔超好的男同学: +你是指hard case吗,这个对分类,搜索方案都一样是难题啊 + +文笔超好的男同学: +总体效果来说,我感觉比直接多分类更容易拿到好的效果 + +走吧five: +多层级就是训练多个模型然后做类似模型融合么 + +just do it!: +hard case 直接规则吧,让模型搞,你都不知道他能不能解决问题,即使解决了你还不知道他是不是偶然的或者有没有引入新问题 + +走吧five: +就是第一个模型分大类,第二个模型分小类,把多个标签的识别分给多个模型粉红负责 + +文笔超好的男同学: +能发现就赶紧黑白名单搞,但是还是要弄点泛化的 + +文笔超好的男同学: +如果是这种优化,那其实就是语义相似度的优化了 + +文笔超好的男同学: +这周我会写这个以搜代分类的适用场景,完整思路,优缺点,可以期待下 + +文笔超好的男同学: +这个trick其实挺喜欢的。说白了检索top1其实就是可以理解为n分类,这个n可以很大,几十万几百万 + +## word2vec to 推荐 + +行者无疆: +只有个word2vec,一定会遇到oov问题,这个时候oov问题怎么处理?我问他如何处理,他说把这些词收集起来,然后重新训练 + +Stefan: +用来召回吧 + +Stefan: +side_info也训练emb。方便冷启动召回 + +文笔超好的男同学: +w2v能解高频用户,倒是也行 + +行者无疆: +embedding当然需要,但问题在于他只有word2vec,别的什么都没有,然后就是计算相似度,这个就是推荐的结果 + +文笔超好的男同学: +低频新用户肯定是新热这种来处理的 + +走吧five: +就是得要多路召回么 + +政委: +w2v作为一路召回 + +文笔超好的男同学: +多路召回是必然的