亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將文本文件拆分為 word2vec/gensim 的句子

如何將文本文件拆分為 word2vec/gensim 的句子

飲歌長嘯 2023-03-30 16:52:12
我已經將大約 40MB 的英文維基百科提取為純文本。我會用它來構建帶有 gensim 的 word2vec 模型。為此,我需要先將其分成句子。我怎樣才能做到這一點?我試過:from __future__ import unicode_literals, print_functionimport spacyfrom spacy.lang.en import English nlp = spacy.load('en_core_web_sm')nlp.max_length = 47084146ftest = open("test_02", "r")raw_test = ftest.read().replace("\n", " ")sentences = [i for i in nlp(raw_test).sents] f = open("sentences.txt", "w")for sent in sentences:    f.write(str(sent)+"\n")f.write("\n")f.close()但這失敗了:MemoryError: Unable to allocate 34.8 GiB for an array with shape (9112793, 8, 64, 2) and data type float32我不知道它為什么要使用這么多 RAM!我怎樣才能做到這一點?
查看完整描述

2 回答

?
四季花海

TA貢獻1811條經驗 獲得超5個贊

test_02問題是,一次處理的內容,中間數據結構不適合內存。分塊處理應該可以解決問題。例如,如果句子從不在行之間拆分,則漸進處理將如下所示:


with  open("test_02", "r") as ftest, open("sentences.txt", "w") as f:

    for line in ftest:

        for sent in nlp(line).sents:

            f.write(str(sent)+"\n")

由于句子可以跨越多行,您可能希望使用不同的拆分策略test_02,例如通過雙換行符來拆分for line in ftest.read().split('\n\n'),但很可能即使這種天真的方法也能正常工作。


查看完整回答
反對 回復 2023-03-30
?
莫回無

TA貢獻1865條經驗 獲得超7個贊

你的直接原因MemoryError是將很多不需要的東西加載到內存中。

首先,整個test_02文件作為一個巨大的字符串被放入可尋址內存中。(你必須有很多內存,因為這一步對很多人來說都會失?。。?/p>

用空格替換所有換行符——為什么,確切地說?– 可能會暫時加倍內存需求,因為.replace()返回一個副本。(不過,令人驚訝的是,你還沒有耗盡記憶力。)

然后,要求 Spacy 解析大量文本——Spacy 的解析本身通常是一個復雜的步驟——觸發了 Spacy 代碼深處的錯誤。(但是,如果運氣好或擴展系統內存沒有觸發錯誤,那么您的下一行可能會嘗試創建所有 . 的堆內列表.sents。)

好消息是:您可能不需要執行任何這些操作。盡管 gensim 的參數名稱為Word2Vecsentences,但它實際上并不需要合法的句子。它只需要文本,其中每個文本都是一個字符串標記列表。(這些可以是許多段落的完整文章/文檔,或其他任何內容。word2vec 的某些用法甚至會留下標點符號作為偽詞。)

您的test_02文件,如果它已經被標記為您想要的“單詞”,其中每一行都是合理大小的文本并且單詞由單個空格分隔,則可能已經準備好傳遞給Word2Vec. 嘗試...

from gensim.models.word2vec import LineSentence
corpus = LineSentence('test_02')

..然后corpus作為sentences參數提供給Word2Vec. 如果實際上您test_02需要更復雜的預處理/標記化,請先執行此操作,如果您需要那種復雜程度,則可以使用 Spacy,然后創建一個文件,每行一個文本和以空格分隔的標記。

在任何時候都沒有必要將整個語料庫加載到單個堆內字符串或列表中;它可以而且幾乎總是應該根據需要從磁盤流式傳輸,以避免消耗太多主內存。


查看完整回答
反對 回復 2023-03-30
  • 2 回答
  • 0 關注
  • 159 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號