亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python文本特征抽取與向量化算法學習

 更新時間:2017年12月22日 11:19:26   作者:lsldd  
這篇文章主要為大家詳細介紹了Python文本特征抽取與向量化算法,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文為大家分享了Python文本特征抽取與向量化的具體代碼,供大家參考,具體內容如下

假設我們剛看完諾蘭的大片《星際穿越》,設想如何讓機器來自動分析各位觀眾對電影的評價到底是“贊”(positive)還是“踩”(negative)呢?

這類問題就屬于情感分析問題。這類問題處理的第一步,就是將文本轉換為特征。

因此,這章我們只學習第一步,如何從文本中抽取特征,并將其向量化。

由于中文的處理涉及到分詞問題,本文用一個簡單的例子來說明如何使用Python的機器學習庫,對英文進行特征提取。

1、數(shù)據(jù)準備

Python的sklearn.datasets支持從目錄讀取所有分類好的文本。不過目錄必須按照一個文件夾一個標簽名的規(guī)則放好。比如本文使用的數(shù)據(jù)集共有2個標簽,一個為“net”,一個為“pos”,每個目錄下面有6個文本文件。目錄如下所示:

neg
    1.txt
    2.txt
    ......
pos
    1.txt
    2.txt
    ....

12個文件的內容匯總起來如下所示:

neg: 
  shit. 
  waste my money. 
  waste of money. 
  sb movie. 
  waste of time. 
  a shit movie. 
pos: 
  nb! nb movie! 
  nb! 
  worth my money. 
  I love this movie! 
  a nb movie. 
  worth it! 

2、文本特征

如何從這些英文中抽取情感態(tài)度而進行分類呢?

最直觀的做法就是抽取單詞。通常認為,很多關鍵詞能夠反映說話者的態(tài)度。比如上面這個簡單的數(shù)據(jù)集,很容易發(fā)現(xiàn),凡是說了“shit”的,就一定屬于neg類。

當然,上面數(shù)據(jù)集是為了方便描述而簡單設計的?,F(xiàn)實中一個詞經常會有穆棱兩可的態(tài)度。但是仍然有理由相信,某個單詞在neg類中出現(xiàn)的越多,那么他表示neg態(tài)度的概率越大。
同樣我們注意到有些單詞對情感分類是毫無意義的。比如上述數(shù)據(jù)中的“of”,“I”之類的單詞。這類詞有個名字,叫“Stop_Word”(停用詞)。這類詞是可以完全忽略掉不做統(tǒng)計的。顯然忽略掉這些詞,詞頻記錄的存儲空間能夠得到優(yōu)化,而且構建速度也更快。
把每個單詞的詞頻作為重要的特征也存在一個問題。比如上述數(shù)據(jù)中的”movie“,在12個樣本中出現(xiàn)了5次,但是出現(xiàn)正反兩邊次數(shù)差不多,沒有什么區(qū)分度。而”worth“出現(xiàn)了2次,但卻只出現(xiàn)在pos類中,顯然更具有強烈的剛晴色彩,即區(qū)分度很高。

因此,我們需要引入TF-IDF(Term Frequency-Inverse Document Frequency,詞頻和逆向文件頻率)對每個單詞做進一步考量。

TF(詞頻)的計算很簡單,就是針對一個文件t,某個單詞Nt 出現(xiàn)在該文檔中的頻率。比如文檔“I love this movie”,單詞“l(fā)ove”的TF為1/4。如果去掉停用詞“I"和”it“,則為1/2。

IDF(逆向文件頻率)的意義是,對于某個單詞t,凡是出現(xiàn)了該單詞的文檔數(shù)Dt,占了全部測試文檔D的比例,再求自然對數(shù)。
比如單詞“movie“一共出現(xiàn)了5次,而文檔總數(shù)為12,因此IDF為ln(5/12)。
很顯然,IDF是為了凸顯那種出現(xiàn)的少,但是占有強烈感情色彩的詞語。比如“movie”這樣的詞的IDF=ln(12/5)=0.88,遠小于“l(fā)ove”的IDF=ln(12/1)=2.48。

TF-IDF就是把二者簡單的乘在一起即可。這樣,求出每個文檔中,每個單詞的TF-IDF,就是我們提取得到的文本特征值。

3、向量化

有了上述基礎,就能夠將文檔向量化了。我們先看代碼,再來分析向量化的意義:

# -*- coding: utf-8 -*- 
import scipy as sp 
import numpy as np 
from sklearn.datasets import load_files 
from sklearn.cross_validation import train_test_split 
from sklearn.feature_extraction.text import TfidfVectorizer 
 
'''''加載數(shù)據(jù)集,切分數(shù)據(jù)集80%訓練,20%測試''' 
movie_reviews = load_files('endata')  
doc_terms_train, doc_terms_test, y_train, y_test\ 
  = train_test_split(movie_reviews.data, movie_reviews.target, test_size = 0.3) 
   
'''''BOOL型特征下的向量空間模型,注意,測試樣本調用的是transform接口''' 
count_vec = TfidfVectorizer(binary = False, decode_error = 'ignore',\ 
              stop_words = 'english') 
x_train = count_vec.fit_transform(doc_terms_train) 
x_test = count_vec.transform(doc_terms_test) 
x    = count_vec.transform(movie_reviews.data) 
y    = movie_reviews.target 
print(doc_terms_train) 
print(count_vec.get_feature_names()) 
print(x_train.toarray()) 
print(movie_reviews.target) 

運行結果如下:
[b'waste of time.', b'a shit movie.', b'a nb movie.', b'I love this movie!', b'shit.', b'worth my money.', b'sb movie.', b'worth it!']
['love', 'money', 'movie', 'nb', 'sb', 'shit', 'time', 'waste', 'worth']
[[ 0.          0.          0.          0.          0.          0.   0.70710678  0.70710678  0.        ]
 [ 0.          0.          0.60335753  0.          0.          0.79747081   0.          0.          0.        ]
 [ 0.          0.          0.53550237  0.84453372  0.          0.          0.   0.          0.        ]
 [ 0.84453372  0.          0.53550237  0.          0.          0.          0.   0.          0.        ]
 [ 0.          0.          0.          0.          0.          1.          0.   0.          0.        ]
 [ 0.          0.76642984  0.          0.          0.          0.          0.   0.          0.64232803]
 [ 0.          0.          0.53550237  0.          0.84453372  0.          0.   0.          0.        ]
 [ 0.          0.          0.          0.          0.          0.          0.   0.          1.        ]]
[1 1 0 1 0 1 0 1 1 0 0 0]

python輸出的比較混亂。我這里做了一個表格如下:

從上表可以發(fā)現(xiàn)如下幾點:

1、停用詞的過濾。

初始化count_vec的時候,我們在count_vec構造時傳遞了stop_words = 'english',表示使用默認的英文停用詞。可以使用count_vec.get_stop_words()查看TfidfVectorizer內置的所有停用詞。當然,在這里可以傳遞你自己的停用詞list(比如這里的“movie”)

2、TF-IDF的計算。

這里詞頻的計算使用的是sklearn的TfidfVectorizer。這個類繼承于CountVectorizer,在后者基本的詞頻統(tǒng)計基礎上增加了如TF-IDF之類的功能。
我們會發(fā)現(xiàn)這里計算的結果跟我們之前計算不太一樣。因為這里count_vec構造時默認傳遞了max_df=1,因此TF-IDF都做了規(guī)格化處理,以便將所有值約束在[0,1]之間。

3、count_vec.fit_transform的結果是一個巨大的矩陣。我們可以看到上表中有大量的0,因此sklearn在內部實現(xiàn)上使用了稀疏矩陣。本例子數(shù)據(jù)較小。如果讀者有興趣,可以試試機器學習科研工作者使用的真實數(shù)據(jù),來自康奈爾大學:http://www.cs.cornell.edu/people/pabo/movie-review-data/。這個網(wǎng)站提供了很多數(shù)據(jù)集,其中有幾個2M左右的數(shù)據(jù)庫,正反例700個左右。這樣的數(shù)據(jù)規(guī)模也不算大,1分鐘內還是可以跑完的,建議大家試一試。不過要注意這些數(shù)據(jù)集可能存在非法字符問題。所以在構造count_vec時,傳入了decode_error = 'ignore',以忽略這些非法字符。

上表的結果,就是訓練8個樣本的8個特征的一個結果。這個結果就可以使用各種分類算法進行分類了。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • python如何提取xml指定內容

    python如何提取xml指定內容

    這篇文章主要介紹了python如何提取xml指定內容,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Python 離線工作環(huán)境搭建的方法步驟

    Python 離線工作環(huán)境搭建的方法步驟

    這篇文章主要介紹了Python 離線工作環(huán)境搭建的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • Python實現(xiàn)ATM系統(tǒng)

    Python實現(xiàn)ATM系統(tǒng)

    這篇文章主要為大家詳細介紹了Python實現(xiàn)ATM系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • 手把手教你YOLOv5如何進行區(qū)域目標檢測

    手把手教你YOLOv5如何進行區(qū)域目標檢測

    YOLOV5和YOLOV4有很多相同的地方,最大的改變還是基礎架構的變化,下面這篇文章主要給大家介紹了關于YOLOv5如何進行區(qū)域目標檢測的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-12-12
  • 使用Jupyter notebooks上傳文件夾或大量數(shù)據(jù)到服務器

    使用Jupyter notebooks上傳文件夾或大量數(shù)據(jù)到服務器

    這篇文章主要介紹了使用Jupyter notebooks上傳文件夾或大量數(shù)據(jù)到服務器,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • python爬蟲實戰(zhàn)之制作屬于自己的一個IP代理模塊

    python爬蟲實戰(zhàn)之制作屬于自己的一個IP代理模塊

    Python爬蟲常常會面臨自己ip地址被封的情況,也許不懂的讀者就只能等ip解封之后再進行接下來的操作了,為什么自己不做一個Python模塊專門用于處理這種情況呢?文中對于讀者開發(fā)Python爬蟲肯定有一定的幫助,希望讀者耐心看下去,需要的朋友可以參考下
    2021-06-06
  • PyTorch 解決Dataset和Dataloader遇到的問題

    PyTorch 解決Dataset和Dataloader遇到的問題

    今天小編就為大家分享一篇PyTorch 解決Dataset和Dataloader遇到的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • python 爬取百度文庫并下載(免費文章限定)

    python 爬取百度文庫并下載(免費文章限定)

    這篇文章主要介紹了python 爬取百度文庫并下載的示例,幫助大家更好的理解和學習python 爬蟲的相關知識,感興趣的朋友可以了解下
    2020-12-12
  • 穩(wěn)扎穩(wěn)打學Python之容器 可迭代對象 迭代器 生成器專題講解

    穩(wěn)扎穩(wěn)打學Python之容器 可迭代對象 迭代器 生成器專題講解

    在剛開始學Python的時候,是不是經常會聽到大佬們在講容器、可迭代對象、迭代器、生成器、列表/集合/字典推導式等等眾多概念,其實這不是大佬們沒事就擱那扯專業(yè)術語來裝B,而是這些東西都得要明白的,光知道字符串、列表等基礎還是不夠的,尤其是在Python的數(shù)據(jù)結構方面
    2021-10-10
  • Python爬取梨視頻的示例

    Python爬取梨視頻的示例

    這篇文章主要介紹了Python爬取梨視頻的示例,幫助大家更好的利用python進行爬蟲的學習與使用,感興趣的朋友可以了解下
    2021-01-01

最新評論