[英]Adding new words to text vectorizer in scikit-learn
Scikit-learn CountVectorizer for bag-of-words方法目前提供兩個子選項:(a)使用自定義詞匯表(b)如果自定義詞匯不可用,則它根據語料庫中存在的所有單詞創建詞匯表。
我的問題:我們可以指定一個自定義詞匯表,但確保在處理語料庫時看到新詞時更新。 我假設這是可行的,因為矩陣是通過稀疏表示存儲的。
實用性:當需要在訓練數據中添加其他文檔時,它將有所幫助,而且不必從頭開始。
不,目前這是不可能的。 它也不是“可行的”,這就是原因。
CountVectorizer
和TfidfVectorizer
旨在將文本文檔轉換為向量。 這些向量需要具有相同數量的元素,而這些元素又等於詞匯表的大小,因為這些約定在所有scikit-learn代碼中根深蒂固。 如果允許詞匯量增長,那么在不同時間產生的向量具有不同的長度。 這影響例如在這樣的矢量上訓練的線性(或其他參數)分類器中的參數的數量,其然后也需要能夠增長。 它影響k均值和降維類。 它甚至會影響像矩陣乘法那樣簡單的事情,只需要簡單地調用NumPy的dot
例程就可以處理它,而不需要自定義代碼。 換句話說,除非你調整所有的scikit-learn來處理結果,否則在矢量化器中允許這種靈活性是沒有意義的。
雖然這是可能的,但我(作為核心scikit-learn開發人員)會堅決反對這種變化,因為它會使代碼變得非常復雜,可能更慢,即使它會起作用,也會無法區分“增長”。詞匯“以及用戶以錯誤的方式傳遞數據的更常見的情況,因此維度的數量出錯了。
如果要批量提供數據,則使用HashingVectorizer
(無詞匯表)或對數據進行兩次傳遞以HashingVectorizer
收集詞匯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.