第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

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

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

飲歌長嘯 2023-03-30 16:52:12
我已經(jīng)將大約 40MB 的英文維基百科提取為純文本。我會(huì)用它來構(gòu)建帶有 gensim 的 word2vec 模型。為此,我需要先將其分成句子。我怎樣才能做到這一點(diǎn)?我試過: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!我怎樣才能做到這一點(diǎn)?
查看完整描述

2 回答

?
四季花海

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超5個(gè)贊

test_02問題是,一次處理的內(nèi)容,中間數(shù)據(jù)結(jié)構(gòu)不適合內(nèi)存。分塊處理應(yīng)該可以解決問題。例如,如果句子從不在行之間拆分,則漸進(jìn)處理將如下所示:


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'),但很可能即使這種天真的方法也能正常工作。


查看完整回答
反對(duì) 回復(fù) 2023-03-30
?
莫回?zé)o

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊

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

首先,整個(gè)test_02文件作為一個(gè)巨大的字符串被放入可尋址內(nèi)存中。(你必須有很多內(nèi)存,因?yàn)檫@一步對(duì)很多人來說都會(huì)失?。。?/p>

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

然后,要求 Spacy 解析大量文本——Spacy 的解析本身通常是一個(gè)復(fù)雜的步驟——觸發(fā)了 Spacy 代碼深處的錯(cuò)誤。(但是,如果運(yùn)氣好或擴(kuò)展系統(tǒng)內(nèi)存沒有觸發(fā)錯(cuò)誤,那么您的下一行可能會(huì)嘗試創(chuàng)建所有 . 的堆內(nèi)列表.sents。)

好消息是:您可能不需要執(zhí)行任何這些操作。盡管 gensim 的參數(shù)名稱為Word2Vecsentences,但它實(shí)際上并不需要合法的句子。它只需要文本,其中每個(gè)文本都是一個(gè)字符串標(biāo)記列表。(這些可以是許多段落的完整文章/文檔,或其他任何內(nèi)容。word2vec 的某些用法甚至?xí)粝聵?biāo)點(diǎn)符號(hào)作為偽詞。)

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

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

..然后corpus作為sentences參數(shù)提供給Word2Vec. 如果實(shí)際上您test_02需要更復(fù)雜的預(yù)處理/標(biāo)記化,請(qǐng)先執(zhí)行此操作,如果您需要那種復(fù)雜程度,則可以使用 Spacy,然后創(chuàng)建一個(gè)文件,每行一個(gè)文本和以空格分隔的標(biāo)記。

在任何時(shí)候都沒有必要將整個(gè)語料庫加載到單個(gè)堆內(nèi)字符串或列表中;它可以而且?guī)缀蹩偸菓?yīng)該根據(jù)需要從磁盤流式傳輸,以避免消耗太多主內(nèi)存。


查看完整回答
反對(duì) 回復(fù) 2023-03-30
  • 2 回答
  • 0 關(guān)注
  • 165 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)