文本表示模型:词袋模型,N-gram模型,主题模型,词嵌入

词袋模型

最常见的文本表示模型莫过于词袋模型了.它将每篇文章表示成一个长向量,向量中每一个维度代表一个单词,而该纬度对应的权重则反映了这个词在原文中的重要程度.常用TF-IDF来计算权重,公式为:

\text{TF-IDF}(t,d) = \text{TF}(t,d)\times \text{IDF}(t)

其中 \text{TF}(t,d) 为单词t在文档d中出现的频率, \text{IDF}(t) 是逆文档频率,用来衡量单词t对表达语义所起到的重要性,表示为:

\text{IDF}(t) = \log \frac{文章总数}{包含单词t的文章总数+1}

直观的解释是,如果一个单词在非常多的文章里面都出现,那么它可能是一个比较通用的词汇,对于区分某篇文章特殊语义的贡献较小,因此对权重做一定惩罚.

向量的长度可以直接根据词典里的词决定,当然是用所有的词会导致向量太长,可以考虑使用常用词词典.如果是处理某一专业领域的文本,可以考虑遍历要处理的所有文本,将出现的词编成一个词典,这样即排出了不需要的词,也不会遗漏某些词.

N-gram模型

词袋模型仅以单词级别统计文章的特征,忽略了单词的顺序,这种做法很高效,但是在某些情况并不理想.因为有些单词的顺序不同,所表达的语义是完全不同的.比如说:

我喜欢你
你喜欢我

N-gram模型将连续出现的 n 个词 (n \leq N) 也作为一个单独的特征放入到向量表中去.

也就是说会把"我喜欢你"和"你喜欢我"也当做一个词放入向量表中,这样的话就可以解决单词顺序不同所带来的语义不同的问题.

主题模型

基于词袋模型或N-gram模型的文本表示模型有一个明显的缺点,就是无法识别出量个不同的词或词组具有相同的主题.因此需要一种技术能够将具有相同主题的词或词组映射到同一纬度上去,于是产生了主题模型.

主题模型是一种特殊的概率图模型.想象一下我们如何判断两个不同的词具有同样的主题呢?这两个词可能有更高的概率同时出现在同一篇文章中;换句话说,给定某一主题,这两个词的产生概率都是比较高的,而另一些不太相关的词汇产生的概率则是较低的.假设有K个主题,我们就把任意文章表示成一个K维的主题向量,其中向量的每一纬度代表一个主题,权重代表这篇主题属于这个特定主题的概率.主题模型所解决的事情,就是从文本框中发现有代表性的主题(得到每个主题上面词的分布),并且计算出每篇文章对应着哪些主题.

词嵌入

单词嵌入是一类将词向量化的模型的统称,核心思想是将每个词都映射到低维空间(通常K=50~300维)上的一个稠密向量.K维空间的每一维也可以看做一个隐含主题,只不过不像主题模型那样直观.

由于词嵌入将每个词映射成一个K维的向量,如果一篇文档有N个词,就可以用一个 N \times K 维的矩阵来表示这篇文章.


参考:
<百面机器学习>

posted @ 2018-12-23 14:40:43
评论加载中...
发表评论