自然语言处理 - 语言模型 以及 文本数值化 - 基于频次
文本是一类非常重要的非结构化数据,但在计算机中我们最希望处理结构化数据,那么如何表示文本就成了重要的一个环节。
文本表示的第一步则是构建 文本表示模型,意味着如何选取要素表示文本;
第二步则是 文本数值化,计算机在计算中面向的是数值,而文本则是计算机无法直接理解的字符串,如何将构建好的文本表示模型转化成数值也是非常重要的研究领域。
文本表示模型常见的有:词袋模型、N-gram 等;
数值化方法包含两个方面:基于频次、Word Embedding 等。
下面就对以上内容进行介绍。
-
文本表示模型
-
Bag of Words
词袋模型,这是最基础的文本表示模型,它将整个语料库以词为单位进行切分,最终生成一个不包含重复对象的 词集合。
例如有语料库:
“我们一起去玩,明天我们也要去”
利用 Bag of Words 建模则得到集合:
(我们,一起,去,玩,明天,也要)
那么一个新的文本
“我们明天玩”
则会被建模成(我们,明天,玩)
Bag of Words 方法简单,但是它忽略了句子中词出现的顺序,也没有考虑不同词之间的相关性,而且对于一个语料库来讲,其中的词量非常庞大,而一个句子的词非常小,这样一个句子的模型表示起来非常稀疏。
由此出现了 N-gram 模型。
-
N-gram
N-gram 是在 Bag of Words 的基础上考虑了 N 个词的共现,将 N 个词之间的组合看做一个“词”,最终生成一个不包含重复对象的 词组合的集合。
例如有语料库:
“我们一起去玩,明天我们也要去”
Bag of Words得到集合:
(我们,一起,去,玩,明天,也要)
在此基础上建模 N-gram,
- 当 N=2 时,称为 2-gram,意味着两两组合:(我们一起,我们去,我们玩,我们明天,我们也要,…)
- 当 N=3 时,称为 3-gram,意味着三个词进行组合:(我们一起去,我们一起玩,我们一起明天,…)
当 N=1 时,1-gram 与 Bag of Words 等价。
N-gram 同样是非常稀疏的,且随着 N 的增加,N-gram 模型的维数迅速膨胀。
-
-
文本数值化
文本数值化是在文本表示模型的基础上,将模型中的每个元素(词,词组合)以数值代替。最简单的是 One-Hot 表示,在这种稀疏的情况下通常与 PCA 联合使用。
下面看一下基于频次的文本数值化方法。
Index 我 爱 祖国 非常 你 ① 1 1 1 0 0 ② 1 2 0 1 1 -
TF-IDF Vector
TF-IDF,Term Frequency - Inverse Document Frequency,词频-逆文档频率。
每一个词不用 Count 计数来表示其值,而是用 TF-IDF 值来表示,并以此构成 文档向量 来表示各个句子。
具体的 : t f _ i d f ( t , d ) = t f ( t , d ) ∗ i d f ( t ) tf\_idf(t,d)=tf(t,d) * idf(t) tf_idf(t,d)=tf(t,d)∗idf(t)
其中,
t f ( t , d ) = c o u n t ( t , d ) s i z e ( d ) tf(t,d)=\frac{count(t,d)}{size(d)} tf(t,d)=size(d)count(t,d),
是指在文档 d 中,单词 t 的数量 c o u n t ( t , d ) count(t,d) count(t,d),占文档 d 总单词数量的比例(单词 t 在文档 d 中出现的频率)。
用来衡量单词 t 对与文档主旨的重要性。i d f ( t ) = l o g ( N D N t ) idf(t)=log(\frac{N_D}{N_t}) idf(t)=log(NtND)
是指文档的总个数 ND ,除以包含单词 t 的文档数 Nt。
越多的文档出现单词 t ,即分母越大,值越小,则说明单词 t 越通用,对主旨贡献小。对于刚才的例子:“
①我爱祖国。②我爱你,非常爱。
”D = { ① , ② } D=\{①,②\} D={①,②}
对 ① 文档:
t f ( 我 , ① ) = 1 3 , i d f ( 我 ) = l o g ( 2 2 ) , t f _ i d f ( 我 ) = 0 tf(我,①)=\frac{1}{3},idf(我)=log(\frac{2}{2}),tf\_idf(我)=0 tf(我,①)=31,idf(我)=log(22),tf_idf(我)=0
t f ( 爱 , ① ) = 1 3 , i d f ( 爱 ) = l o g ( 2 2 ) , t f _ i d f ( 爱 ) = 0 tf(爱,①)=\frac{1}{3},idf(爱)=log(\frac{2}{2}),tf\_idf(爱)=0 tf(爱,①)=31,idf(爱)=log(22),tf_idf(爱)=0
t f ( 祖 国 , ① ) = 1 3 , i d f ( 祖 国 ) = l o g ( 2 1 ) , t f _ i d f ( 祖 国 ) = 0.099 tf(祖国,①)=\frac{1}{3},idf(祖国)=log(\frac{2}{1}),tf\_idf(祖国)=0.099 tf(祖国,①)=31,idf(祖国)=log(12),tf_idf(祖国)=0.099
t d _ i d f ( 你 , ① ) = 0 , t d _ i d f ( 非 常 , ① ) = 0 td\_idf(你,①)=0,td\_idf(非常,①)=0 td_idf(你,①)=0,td_idf(非常,①)=0
对 ② 文档:
t f ( 我 , ① ) = 1 5 , i d f ( 我 ) = l o g ( 2 2 ) , t f _ i d f ( 我 ) = 0 tf(我,①)=\frac{1}{5},idf(我)=log(\frac{2}{2}),tf\_idf(我)=0 tf(我,①)=51,idf(我)=log(22),tf_idf(我)=0
t f ( 爱 , ① ) = 2 5 , i d f ( 爱 ) = l o g ( 2 2 ) , t f _ i d f ( 爱 ) = 0 tf(爱,①)=\frac{2}{5},idf(爱)=log(\frac{2}{2}),tf\_idf(爱)=0 tf(爱,①)=52,idf(爱)=log(22),tf_idf(爱)=0
t f ( 你 , ① ) = 1 5 , i d f ( 你 ) = l o g ( 2 1 ) , t f _ i d f ( 你 ) = 0.3 tf(你,①)=\frac{1}{5},idf(你)=log(\frac{2}{1}),tf\_idf(你)=0.3 tf(你,①)=51,idf(你)=log(12),tf_idf(你)=0.3
t f ( 非 常 , ① ) = 1 5 , i d f ( 非 常 ) = l o g ( 2 1 ) , t f _ i d f ( 非 常 ) = 0.3 tf(非常,①)=\frac{1}{5},idf(非常)=log(\frac{2}{1}),tf\_idf(非常)=0.3 tf(非常,①)=51,idf(非常)=log(12),tf_idf(非常)=0.3
t f _ i d f ( 祖 国 ) = 0 tf\_idf(祖国)=0 tf_idf(祖国)=0
Index 我 爱 祖国 非常 你 ① 0 0 0.099 0 0 ② 0 0 0 0.3 0.3 -
index | 我 | 爱 | 祖国 | 你 | 非常 |
我 | 0 | 1 | 0 | 0 | 0 |
爱 | 1 | 0 | 1 | 0 | 0 |
祖国 | 0 | 1 | 0 | 0 | 0 |
你 | 0 | 0 | 0 | 0 | 0 |
非常 | 0 | 0 | 0 | 0 | 0 |