咱们在作模型训练的时候,不是直接把文本或者词语传给计算机让其进行计算,而是须要将单词、句子、文本转换成向量或者矩阵进行计算,而如何将文本转换成向量就是本文须要介绍的内容。算法
介绍内容以前,你们须要先熟悉一些概念。机器学习
出现为1,不出现为0学习
每一个单词是一个词库数量维度的向量,可是其中只有一个1,其余都是0。spa
好比:code
词典:【咱们,又,去,登山,今天,大家,昨天,跑步】blog
”咱们“对应的向量是:[1, 0, 0, 0, 0, 0, 0, 0]图片
缺点ci
好比:按照one-hot表示方式,船和舟是没有关系的。rem
向量为词库的大小,每一个句子对应词库中单词出现与否的状况,出现为1,不出现为0,好比下面的例子:文档
词典:【咱们,又,去,登山,今天,大家,昨天,跑步】
【“咱们”出现了为1,“又“没出现为0,”去“出现了为1,”登山“出现类为1,”今天“出现了为1,”大家“没出现为0,”昨天“没出现为0,”跑步“出现了为1】
例子:咱们今天去登山,明天去跑步 (1,0,1,1,1,0,0,1)
向量为词库的大小,每一个句子对应词库中单词出现的次数,好比下面的例子:
词典:【咱们,又,去,登山,今天,大家,昨天,跑步】
【“咱们”出现的次数1,“又“出现的次数0,”去“出现的次数1,”登山“出现的次数1,”今天“出现的次数1,”大家“出现的次数0,”昨天“出现的次数0,”跑步“出现的次数0】
计算每一个词出现的次数
例子:咱们今天去登山,明天去跑步 (2,0,2,1,1,0,0,1)
tfidf的思想是一个单词在其所在文本中出现的次数越多,在其余文本中出现的次数越少,那么这个单词就能很好的表征单词所在的文本。
TF-IDF = TF * IDF
TF = term frequency 词频 IDF = inverse document frequency 逆向文件频率,表示单词的重要性
IDF = log(\frac{N}{N(w)})
其中:
N: 文档总数 N(w): 词语w出如今多少个文档中, 出现的次数越多,越不重要
TF-IDF = 词频 * 重要性
例子:计算三个句子的TF-IDF向量表示:
好比第一个句子的“今天”:TF = 1(句子中“今天”出现的次数)
IDF = log(N/N(w))
N 文档总数为 3;N(w) 文档中“今天”出现的次数为2(第一句出现一次,第二句出现一次)。
因此IDF = log(3/2)。其余的一样的计算原理。
TF-IDF 算法是建立在这样一个假设之上的:对区别文档最有意义的词语应该是那些在文档中出现频率高,而在整个文档集合的其余文档中出现频率少的词语,因此若是特征空间坐标系取tf词频做为测度,就能够体现同类文本的特色。
可是在本质上idf是一种试图抑制噪声的加权,而且单纯地认为文本频率小的单词就越重要,文本频率大的单词就越无用,显然这并非彻底正确的。idf的简单结构并不能有效地反映单词的重要程度和特征词的分布状况,使其没法很好地完成对权值调整的功能,因此tf-idf法的精度并非很高。
补充概念:
混淆矩阵:相似于计算准确率和召回率的矩阵。
True positive: 正例而且预测也是正例 False positive: 负例可是预测是正例 False negative:正例可是预测是负例 True negative:负例而且预测是负例
用检索举例子
准确率 precision: 检索出来的结果中正确的结果占返回结果总数(返回的结果有的是正例,有的是反例)的比例。
召回率 recall: 检索出来的结果正确的结果占全部正例(包括返回回来的正例和没有返回来的正例)的比例
precision = True-positive / (True-positive + False-positive) recall = True-positive / (True-positive + False-negative)
吴恩达-《机器学习》:https://www.coursera.org/lear...