介绍
N-Gram是一种基于统计语言模型的算法,思想是将文本里的内容按照字节进行大小为N的滑动窗口操作,形成了长度为N的字节片段序列。
每一个字节片段称为gram,对所有gram进行频度统计,过阈值,形成gram列表
假设:第n次的出现只与前N-1个词相关,与其他词不相关。
举例:
Bi-gram:{(I,love),(love,you)}
Tri-gram:{(I,love,you)}
举例
词和词频见下表:
I | want | to | eat | Chinese | food | lunch |
---|---|---|---|---|---|---|
3437 | 1215 | 3256 | 938 | 213 | 1506 | 459 |
语料库中一些单词的词频,统计出各个单词与其他单词的前后联系的频次,组成一个7*7的二维矩阵,如下图:
I | want | to | eat | Chinese | food | lunch | |
---|---|---|---|---|---|---|---|
I | 8 | 1087 | 0 | 13 | 0 | 0 | 0 |
want | 3 | 0 | 786 | 0 | 6 | 8 | 6 |
to | 3 | 0 | 10 | 860 | 3 | 0 | 12 |
eat | 0 | 0 | 2 | 0 | 19 | 2 | 52 |
Chinese | 2 | 0 | 0 | 0 | 0 | 120 | 1 |
food | 19 | 0 | 17 | 0 | 0 | 0 | 0 |
lunch | 4 | 0 | 0 | 0 | 1 | 0 | 0 |
\begin{align*} &P(I \text{ want to eat Chinese food}) \\ &=P(I) \times P(want|I) \times P(to|want) \times P(eat|to) \times P(Chinese|eat) \times P(food|Chinese) \\ &= 0.25 \times \frac{1087}{3437} \times \frac{786}{1215} \times \frac{860}{3256} \times \frac{19}{938} \times \frac{120}{213} \\ &= 0.000154171 \end{align*}