簡體   English   中英

在scikit-learn中向文本矢量化器添加新單詞

[英]Adding new words to text vectorizer in scikit-learn

Scikit-learn CountVectorizer for bag-of-words方法目前提供兩個子選項:(a)使用自定義詞匯表(b)如果自定義詞匯不可用,則它根據語料庫中存在的所有單詞創建詞匯表。

我的問題:我們可以指定一個自定義詞匯表,但確保在處理語料庫時看到新詞時更新。 我假設這是可行的,因為矩陣是通過稀疏表示存儲的。

實用性:當需要在訓練數據中添加其他文檔時,它將有所幫助,而且不必從頭開始。

不,目前這是不可能的。 它也不是“可行的”,這就是原因。

CountVectorizerTfidfVectorizer旨在將文本文檔轉換為向量。 這些向量需要具有相同數量的元素,而這些元素又等於詞匯表的大小,因為這些約定在所有scikit-learn代碼中根深蒂固。 如果允許詞匯量增長,那么在不同時間產生的向量具有不同的長度。 這影響例如在這樣的矢量上訓練的線性(或其他參數)分類器中的參數的數量,其然后也需要能夠增長。 它影響k均值和降維類。 它甚至會影響像矩陣乘法那樣簡單的事情,只需要簡單地調用NumPy的dot例程就可以處理它,而不需要自定義代碼。 換句話說,除非你調整所有的scikit-learn來處理結果,否則在矢量化器中允許這種靈活性是沒有意義的。

雖然這是可能的,但我(作為核心scikit-learn開發人員)會堅決反對這種變化,因為它會使代碼變得非常復雜,可能更慢,即使它會起作用,也會無法區分“增長”。詞匯“以及用戶以錯誤的方式傳遞數據的更常見的情況,因此維度的數量出錯了。

如果要批量提供數據,則使用HashingVectorizer (無詞匯表)或對數據進行兩次傳遞以HashingVectorizer收集詞匯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM