内容推荐,协同过滤

这套东西我没有直接做过,但我估计应该不难吧。我曾读过Trevor Hastie和Robert Tibshirani的Introduction to Statistical Learning的一些部分,也做过其中的一些习题,因为好久没碰,内容记得也不太清楚了。反而现在发现好多相关的中文名词我不知道,比如统计显著性就是Статистическая значимость,以及好多线性代数里的中文名词,比如奇异值分解就是Сингулярное разложение。还有什么共轭矩阵самосопряженная матрица),这些得慢慢积累,如果要在中国工作。从这个就更能认识为什么美国学位在中国有他的问题了。

现在在中国上英文有他的限制,自然会先看中文的内容。查到了如

https://www.cnblogs.com/NeilZhang/p/9900537.html

https://blog.csdn.net/nicajonh/article/details/79657317

https://blog.csdn.net/hlang8160/article/details/81433356

https://www.cnblogs.com/guoyaohua/p/9240336.html

这里面的内容大概看了,我在这里就把它们的一些要点记录一下吧。因为这些内容好多我学了不用也就忘了,比如那个什么td-idf。

这个的构建看一下不难理解,比如

tf(t,d) = \frac{n_t}{\sum_k n_k}.

n_t是词t的出现次数,分母的和显然是文档里的词数。

然后idf为

2019-12-25 下午7.33.01

这个的设计逻辑也很简单,就是那些经常出现的词,如the,a出现多了也是正常,所以这种在一个文档里的重要程度必须与它的总频率相比而衡量。

有一次我被问过一个问题,那就是推荐系统怎么实现“相关内容”的推荐。这是好几年以前,我当时傻还回答了简单用个条件概率。可是这个很明显是不可成立的。因为在很多分类中(比如人的分类),少数会得到极大的关注,有些可能大部分用户都查过,比如“范冰冰”。如果用那种方法就会无论如何都推荐那些名人。所以在这种情况我们也可以用一个类似于tf idf里的分母。

tf idf可以用于做分类。

然后我看了看word2vec的内容,这个训练模型的思路很简单。他根本目的是用一个词的上下文里出现的词(限于一个文集(corpus))给词定一个向量,则两个相同的词,比如“国王”和“黄帝”之间的余弦距离(cos距离)就会比较高。

训练时,词向量的维度和上下文的长度是可以调的。训练用的都是one-hot vector,训练的参数是那些权重(该权重矩阵将词的one-hot vector转到它的词向量),然后还有个softmax层(这个就是个多逻辑回归),然后每一个训练样本的也是输入为一个词的one-hot vector,然后其词上下文里出现一个词的one-hot vector。

关于word2vec,还可以参考

https://neurohive.io/ru/osnovy-data-science/word2vec-vektornye-predstavlenija-slov-dlja-mashinnogo-obuchenija/

来自其的图片

Финальная модель embedding

就是一个很简单的两层的神经网络。

Advertisements