这最简单的一种想法,就是对一句话用one-hot编码:比如对于这句话:
ohn likes to watch movies,Mary likes too.
John likes to watch movies,Mary likes too.
John also likes to watch football games.
John also likes to watch football games.
可以通过以上语料构建一个字典:dic
1:"John"
2:"likes"
3:"to"
4:"watch"
5:"movies"
6:"also"
7:"football"
8:"games"
9:"Mary"
10:"too"
用one-hot可以表示为:
第一句话:
John :[1,0,0,0,0,0,0,0,0,0]
likes :[0,1,0,0,0,0,0,0,0,0]
…
too :[0,0,0,0,0,0,0,0,0,1]
第二句话:
John :[1,0,0,0,0,0,0,0,0,0]
likes :[0,1,0,0,0,0,0,0,0,0]
…
too :[0,0,0,0,0,0,0,0,0,1]
另一种方法则是词袋模型,它相当于一个词袋,不考虑词/句之间的相关性,只要出现了该词,就会记为1,再次出现就会+1。比如前面的那句话:
John likes to watch movies,Mary likes too.
可以表示为
[1,2,1,1,1,0,0,0,1,1]
与其相似的是binary weighting,它就是看一下每个词是否出现,出现记为1,没出现记为0
[1,1,1,1,1,0,0,0,1,1]
(2)优点
(3)缺点:
1).只考虑了词的数量,没有考虑词的重要性(篇章的长度:tf,语料的关系:idf)
2).没有考虑词的顺序
因此,就有tf-idf解决这个问题,它的主要思路就是有两方面:
A—第一就是如果这个词在我们当前文档出现的频率非常高,说明它在当前文档应该是比较重要的。
B-但如果它在所有的文档中出现的频次都非常好,大家可能就会觉得这个词应该不是那么重要的。
比如中文的“的“,或者我们上面那两个句子中的to.
因此,tf-idf就是一个在当前文档和所有文档中权衡他们的重要性,然后计算出每个词的重要度的方法。