文本分類學習(二)文本表示

接着上一篇。在正式的嘗試使用文本分類算法分類文本的時候,我們得先準備兩件事情: 一,準備適量的訓練文本;二,選擇合適的方法將這些訓練文本進行表示(也就是將文本換一種方式表示)

大家都知道文本其實就是很多詞組成的文章啊。所以很自然的就想到用一系列詞來表示文本。比如我這篇文章,將其分詞之後的結果就是:

(“接着”,“上”,“一篇”,“在”,“正式”…)

這裏有很多分詞工具可以辦到,如果不知道使用何種分詞算法,可以參照這篇博文(以前寫的搜索引擎的分詞部分,果然可以拿來用用。其實搜索和文本分類也有很多想通的地方呢):

http://www.cnblogs.com/dacc123/p/8431369.html

那麼分好詞就可以了嗎?顯然不是的可以看到上面的詞中有"上",“在” 這些介詞,很明顯這些詞是不能代表一篇文章特徵,所以我們需要去停用詞,去完之後,首先文章的詞彙量可以減少很多的,然後呢特徵也比以前要明顯一點(對計算機來說)

去完停用詞之後就可以了嗎?顯然更不是的。每一篇文章都會有個側重點,比如我寫了一篇搜索引擎的文章,那麼文章中"搜索",“索引”,“算法”。這類的詞出現的概率是不是很高,而"程序",“計算機”,“時間效率"這些詞也可能出現在文章中,但是這些詞機會完全比不上"搜索”,"索引"這些詞厲害了啊,計算機更注重的是這些詞呀。所以分詞之後,我們需要給詞加上權重,告訴計算機,哪些詞很重要,你要給我留意點,哪些詞不重要不用太在意他們。那麼怎麼加權重呢?

很容易想到的方法是,詞彙在文章中出現的次數 稱作詞頻。出現次數越多,那不是明擺着文章越側重這個詞嘛。

於是分詞可以這麼表示:

(“搜索”,9,“索引”,20,“計算機”,2…) 表示"搜索"出現過9次,"索引"出現過20次,"計算機"出現過2次。

但是實際上呢單單使用詞頻來表示權重是很少的,效果也是很差的。人們更多的使用TF/IDF值表示權重,然後我現在還不會(丟人)。下一篇會詳解這個東西。

(“搜索”,9,“索引”,20,“計算機”,2…) 這樣的形式計算機仍然不會識別,於是我們想到了另一種方式,構造一個詞袋

D =(“搜索”,“索引”,“計算機”…)

於是文檔可以轉換成這樣的形式

W = (9,20,2…)表示在詞袋中相應的詞的權重,這樣文檔就被表示成一個由數字組成向量,有多少個數字就叫做多少維向量,計算機就能夠很好的處理了。而SVM算法使用的就是詞袋模型。

接下來就有另一個問題了,我們知道中文漢字都有6萬多個漢字,那我們構造的詞袋中的詞有6萬多個,那豈不是每個文檔都是6萬維度的向量,而且向量中絕大多數都是0,這樣豈不是會很浪費計算機的資源?就算經過上面的去停用詞之後,還是有很多詞!

實際上呢,我們完全不必要把6萬多個漢字都納入到我們的詞袋中對不對?給我們一個訓練集之後,我們的第一個問題是把訓練集中能代表文本的特徵的詞納入到詞袋中比傻瓜式的構造所有出現的詞的詞袋要小的多,(這是屬於我的個人理解)那到底會多小?如何選擇最具代表性的特徵詞呢?效果會不會受到影響呢? 這些問題只能到下篇再去討論了。

再插一個話題。這篇文章主要想講的就是給訓練集構建一個詞袋模型用於SVM算法。好了,縱觀詞袋模型,我們可以發現一個特點,詞袋模型是基於一個特點?什麼特點?那就是詞袋中的詞相互獨立,互相不影響,對不對?百度一下就知道了,大家都這麼說。事實上,一個篇文章中詞,具有上下文聯繫,也就是一個詞應該是可以影響到另一個詞的。於是我又瞭解到了一個詞向量模型。詞向量模型實際上是用一個向量表示一個詞(上面的詞袋模型是用一個向量表示一個文章),常用的方法是:one-hot representation與distributed representation。百度一下就知道one-hot是比較低級的,而較高級的是distributed representation,他可以通過數學公式比如正弦餘弦,加減,得到詞和詞之間的關係,牛逼不?

於是在找資料的過程中,我還發現了基於上下文圖模型的文本表示,以及神經概率語言模型NPLM

哇,再往下搜不得了哎,基於這種上下文關係的詞向量表示模型還有好多呢,好像都比詞袋要厲害很多呢。

https://blog.csdn.net/u013265285/article/details/69062795

算了,我暫時也管不了這些詞向量模型,第一步是使用詞袋模型+SVM分類算法,看看效果如何。

最後說一句,原來文本分類最重要的不止選擇何種分類算法,還有文本用何種算法表示哦!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章