0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何利用spaCy和Cython以約100倍于Python的速度實(shí)現(xiàn)NLP

馬哥Linux運(yùn)維 ? 來源:未知 ? 作者:李倩 ? 2018-07-24 16:52 ? 次閱讀

Cython 是一個(gè)工具包,可以使你在 Python 中編譯 C語(yǔ)言,這就是為什么 numpy 和 pandas 很快的原因,Cython 就是 Python 的超集。在本文中,作者將為我們介紹他的 GitHub 項(xiàng)目NeuralCoref v3.0,詳解如何利用 spaCy 和 Cython 以約 100 倍于 Python 的速度實(shí)現(xiàn) NLP 項(xiàng)目。

相關(guān) Jupyter Notebook 地址:https://github.com/huggingface/100-times-faster-nlp

去年我們發(fā)布 Python 包 coreference resolution package 后,我們收到了來自社區(qū)的精彩反饋,并且人們開始在很多應(yīng)用中使用它,其中一些與我們?cè)瓉淼膶?duì)話用例迥異。

我們發(fā)現(xiàn),盡管對(duì)話信息的處理速度非常好,但對(duì)于長(zhǎng)的新聞文章來說,處理速度可能會(huì)非常慢。

我決定詳細(xì)研究這一問題,最終成果即 NeuralCoref v3.0,它在相同準(zhǔn)確率的情況下比老版本快 100 倍左右(每秒幾千字),同時(shí)兼顧 Python 庫(kù)的易用性和兼容性。

NeuralCoref v3.0 :https://github.com/huggingface/neuralcoref/

我想在這篇文章中分享一些關(guān)于這個(gè)項(xiàng)目的經(jīng)驗(yàn),特別是:

如何用 Python 設(shè)計(jì)一個(gè)高速模塊;

如何利用 spaCy 的內(nèi)部數(shù)據(jù)結(jié)構(gòu)來有效地設(shè)計(jì)超高速 NLP 函數(shù)。

所以我在這里有點(diǎn)作弊,因?yàn)槲覀儠?huì)談?wù)?Python,但也談?wù)撘恍?Cython 的神奇作用。但是,你知道嗎?Cython 是 Python 的超集,所以不要讓它嚇跑你!

你現(xiàn)在的 Python 程序已經(jīng)是 Cython 程序。

有幾種情況下你可能需要加速,例如:

你正在使用 Python 開發(fā)一個(gè) NLP 的生產(chǎn)模塊;

你正在使用 Python 計(jì)算分析大型 NLP 數(shù)據(jù)集;

你正在為深度學(xué)習(xí)框架,如 PyTorch / TensorFlow,預(yù)處理大型訓(xùn)練集,或者你的深度學(xué)習(xí)批處理加載器中的處理邏輯過于繁重,這會(huì)降低訓(xùn)練速度。

再?gòu)?qiáng)調(diào)一遍:我同步發(fā)布了一個(gè) Jupyter Notebook,其中包含我在本文中討論的例子。試試看!

Jupyter Notebook:https://github.com/huggingface/100-times-faster-nlp

加速第一步:剖析

首先要知道的是,你的大多數(shù)代碼在純 Python 環(huán)境中可能運(yùn)行的不錯(cuò),但是如果你多用點(diǎn)心,其中一些瓶頸函數(shù)可能讓你的代碼快上幾個(gè)數(shù)量級(jí)。

因此,你首先應(yīng)該分析你的 Python 代碼并找出瓶頸部分的位置。使用如下的 cProfile 是一種選擇:

importcProfileimportpstatsimportmyslowmodulecProfile.run('myslowmodule.run()','restats')p=pstats.Stats('restats')p.sortstats('cumulative').printstats(30)

如果你使用神經(jīng)網(wǎng)絡(luò),你可能會(huì)發(fā)現(xiàn)瓶頸部分是幾個(gè)循環(huán),并且涉及 Numpy 數(shù)組操作。

那么,我們?nèi)绾渭铀龠@些循環(huán)代碼?

在 Python 中使用一些 Cython 加速循環(huán)

讓我們用一個(gè)簡(jiǎn)單的例子來分析這個(gè)問題。假設(shè)我們有一大堆矩形,并將它們存儲(chǔ)進(jìn)一個(gè) Python 對(duì)象列表,例如 Rectangle 類的實(shí)例。我們的模塊的主要工作是迭代這個(gè)列表,以便計(jì)算有多少矩形的面積大于特定的閾值。

我們的 Python 模塊非常簡(jiǎn)單,如下所示:

fromrandomimportrandomclassRectangle:def__init__(self,w,h):self.w=wself.h=hdefarea(self):returnself.w*self.hdefcheck_rectangles(rectangles,threshold):n_out=0forrectangleinrectangles:ifrectangle.area()>threshold:n_out+=1returnn_outdefmain():n_rectangles=10000000rectangles=list(Rectangle(random(),random())foriinrange(n_rectangles))n_out=check_rectangles(rectangles,threshold=0.25)print(n_out)

check_rectangles 函數(shù)是瓶頸部分!它對(duì)大量的 Python 對(duì)象進(jìn)行循環(huán),這可能會(huì)很慢,因?yàn)?Python 解釋器在每次迭代時(shí)都會(huì)做大量工作(尋找類中的求面積方法、打包和解包參數(shù)、調(diào)用 Python API ...)。

Cython 將幫助我們加速循環(huán)。

Cython 語(yǔ)言是 Python 的超集,它包含兩種對(duì)象:

Python 對(duì)象是我們?cè)诔R?guī) Python 中操作的對(duì)象,如數(shù)字、字符串、列表、類實(shí)例...

Cython C 對(duì)象是 C 或 C ++ 對(duì)象,比如 double、int、float、struct、vectors。這些可以由 Cython 在超快速的底層代碼中編譯。

快速循環(huán)只是 Cython 程序(只能訪問 Cython C 對(duì)象)中的一個(gè)循環(huán)。

設(shè)計(jì)這樣一個(gè)循環(huán)的直接方法是定義 C 結(jié)構(gòu),它將包含我們?cè)谟?jì)算過程中需要的所有要素:在我們的例子中,就是矩形的長(zhǎng)度和寬度。

然后,我們可以將矩形列表存儲(chǔ)在這種結(jié)構(gòu)的 C 數(shù)組中,并將這個(gè)數(shù)組傳遞給我們的 check_rectangle 函數(shù)。此函數(shù)現(xiàn)在接受一個(gè) C 數(shù)組作為輸入,因此通過 cdef 關(guān)鍵字而不是 def 將其定義為 Cython 函數(shù)(請(qǐng)注意,cdef 也用于定義 Cython C 對(duì)象)。

下面是我們的 Python 模塊的快速 Cython 版:

fromcymem.cymemcimportPoolfromrandomimportrandomcdefstructRectangle:floatwfloathcdefintcheck_rectangles(Rectangle*rectangles,intn_rectangles,floatthreshold):cdefintn_out=0#Carrayscontainnosizeinformation=>weneedtogiveitexplicitlyforrectangleinrectangles[:n_rectangles]:ifrectangles[i].w*rectangles[i].h>threshold:n_out+=1returnn_outdefmain():cdef:intn_rectangles=10000000floatthreshold=0.25Poolmem=Pool()Rectangle*rectangles=mem.alloc(n_rectangles,sizeof(Rectangle))foriinrange(n_rectangles):rectangles[i].w=random()rectangles[i].h=random()n_out=check_rectangles(rectangles,n_rectangles,threshold)print(n_out)

我們?cè)谶@里使用了原生 C 指針數(shù)組,但你也可以選擇其他選項(xiàng),特別是 C ++ 結(jié)構(gòu),如向量、對(duì)、隊(duì)列等。在這個(gè)片段中,我還使用了 cymem 的便利的 Pool()內(nèi)存管理對(duì)象,以避免必須手動(dòng)釋放分配的 C 數(shù)組。當(dāng) Pool 由 Python 當(dāng)做垃圾回收時(shí),它會(huì)自動(dòng)釋放我們使用它分配的內(nèi)存。

spaCy API 的 Cython Conventions 是 Cython 在 NLP 中的實(shí)際運(yùn)用的一個(gè)很好的參考。

spaCy:https://spacy.io

Cython Conventions:https://spacy.io/api/cython#conventions

讓我們?cè)囋囘@個(gè)代碼吧!

有很多方法可以測(cè)試、編譯和發(fā)布 Cython 代碼!Cython 甚至可以直接用在 Python 這樣的 Jupyter Notebook 中。

Jupyter Notebook:http://cython.readthedocs.io/en/latest/src/reference/compilation.html#compiling-notebook

首先使用 pip install cython 安裝 Cython

在 Jupyter 的第一次測(cè)試

使用 %load_ext Cython 將 Cython 插件加載到 Jupyter notebook 中。

現(xiàn)在,你可以使用黑魔術(shù)命令 %% cython 編寫像 Python 代碼一樣的 Cython 代碼。

如果在執(zhí)行 Cython 單元時(shí)遇到編譯錯(cuò)誤,請(qǐng)務(wù)必檢查 Jupyter 終端輸出以查看完整的信息。

大多數(shù)情況下,在 %% cython 編譯為 C ++(例如,如果你使用 spaCy Cython API)或者 import numpy(如果編譯器不支持 NumPy)之后,你會(huì)丟失 - + 標(biāo)記。

正如我在開始時(shí)提到的,查看這篇文章的同步 Jupyter Notebook,該 Notebook 包含本文討論的所有示例。

編寫、使用和發(fā)布 Cython 代碼

Cython 代碼寫在 .pyx 文件中。這些文件由 Cython 編譯器編譯為 C 或 C ++ 文件,然后通過系統(tǒng)的 C 編譯器編譯為字節(jié)碼文件。Python 解釋器可以使用字節(jié)碼文件。

你可以使用 pyximport 直接在 Python 中加載 .pyx 文件:

>>>importpyximport;pyximport.install()>>>importmy_cython_module

你還可以將你的 Cython 代碼構(gòu)建為 Python 包,并將其作為常規(guī) Python 包導(dǎo)入/發(fā)布,詳見下方地址。這可能需要一些時(shí)間才能開始工作,尤其在全平臺(tái)上。如果你需要一個(gè)有效示例,spaCy』s install script 是一個(gè)相當(dāng)全面的例子。

導(dǎo)入教程:http://cython.readthedocs.io/en/latest/src/tutorial/cython_tutorial.html#

Before we move to some NLP, let』s quickly talk about the def, cdef and cpdef keywords, because they are the main things you need to grab to start using Cython.

在我們轉(zhuǎn)向 NLP 之前,讓我們先快速討論一下 def、cdef 和 cpdef 關(guān)鍵字,因?yàn)樗鼈兪悄汩_始使用 Cython 需要掌握的主要內(nèi)容。

你可以在 Cython 程序中使用三種類型的函數(shù):

Python 函數(shù),用常用的關(guān)鍵字 def 定義。它們可作為輸入和輸出的 Python 對(duì)象。也可以在內(nèi)部同時(shí)使用 Python 和 C / C ++ 對(duì)象,并可以調(diào)用 Cython 和 Python 函數(shù)。

用 cdef 關(guān)鍵字定義的 Cython 函數(shù)。它們可以作為輸入,在內(nèi)部使用并輸出 Python 和 C / C ++對(duì)象。這些函數(shù)不能從 Python 空間訪問(即 Python 解釋器和其他可導(dǎo)入 Cython 模塊的純 Python 模塊),但可以由其他 Cython 模塊導(dǎo)入。

用 cpdef 關(guān)鍵字定義的 Cython 函數(shù)就像 cdef 定義的 Cython 函數(shù)一樣,但它們也提供了一個(gè) Python 封裝器,因此可以從 Python 空間(以 Python 對(duì)象作為輸入和輸出)以及其他 Cython 模塊(以 C / C ++ 或 Python 對(duì)象作為輸入)中調(diào)用它們。

cdef 關(guān)鍵字有另一種用途,即在代碼中定義 Cython C / C ++ 對(duì)象。除非用這個(gè)關(guān)鍵字定義對(duì)象,否則它們將被視為 Python 對(duì)象(因此訪問速度很慢)。

使用 Cython 與 spaCy 來加速 NLP

這些東西又好又快,但是...... 我們現(xiàn)在還沒有融入 NLP!沒有字符串操作、沒有 unicode 編碼,也沒有我們?cè)谧匀徽Z(yǔ)言處理中幸運(yùn)擁有的微妙聯(lián)系。

官方的 Cython 文檔甚至建議不要使用 C 字符串:

一般來說:除非你知道自己在做什么,否則應(yīng)盡可能避免使用 C 字符串,而應(yīng)使用 Python 字符串對(duì)象。

那么我們?nèi)绾卧谑褂米址畷r(shí)在 Cython 中設(shè)計(jì)快速循環(huán)?

spaCy 會(huì)幫我們的。

spaCy 解決這個(gè)問題的方式非常聰明。

將所有字符串轉(zhuǎn)換為 64 位哈希碼

spaCy 中的所有 unicode 字符串(token 的文本、其小寫文本、引理形式、POS 鍵標(biāo)簽、解析樹依賴關(guān)系標(biāo)簽、命名實(shí)體標(biāo)簽...)都存儲(chǔ)在叫 StringStore 的單數(shù)據(jù)結(jié)構(gòu)中,它們?cè)诶锩嬗?64 位散列索引,即 C uint64_t。

StringStore 對(duì)象實(shí)現(xiàn)了 Python unicode 字符串和 64 位哈希碼之間的查找表。

它可以通過 spaCy 任意處及任意對(duì)象訪問(請(qǐng)參閱上圖),例如 nlp.vocab.strings、doc.vocab.strings 或 span.doc.vocab.string。

當(dāng)某個(gè)模塊需要對(duì)某些 token 執(zhí)行快速處理時(shí),僅使用 C 級(jí)別的 64 位哈希碼而不是字符串。調(diào)用 StringStore 查找表將返回與哈希碼相關(guān)聯(lián)的 Python unicode 字符串。

但是,spaCy 做的遠(yuǎn)不止這些,它使我們能夠訪問文檔和詞匯表的完全覆蓋的 C 結(jié)構(gòu),我們可以在 Cython 循環(huán)中使用這些結(jié)構(gòu),而不必自定義結(jié)構(gòu)。

spaCy 的內(nèi)部數(shù)據(jù)結(jié)構(gòu)

與 spaCy Doc 對(duì)象關(guān)聯(lián)的主要數(shù)據(jù)結(jié)構(gòu)是 Doc 對(duì)象,該對(duì)象擁有已處理字符串的 token 序列(「單詞」)以及 C 對(duì)象中的所有稱為 doc.c 的標(biāo)注,它是一個(gè) TokenC 結(jié)構(gòu)數(shù)組。

TokenC 結(jié)構(gòu)包含我們需要的關(guān)于每個(gè) token 的所有信息。這些信息以 64 位哈希碼的形式存儲(chǔ),可以重新關(guān)聯(lián)到 unicode 字符串,就像我們剛剛看到的那樣。

要深入了解這些 C 結(jié)構(gòu)中的內(nèi)容,只需查看剛創(chuàng)建的 SpaCy 的 Cython API doc。

我們來看看一個(gè)簡(jiǎn)單的 NLP 處理示例。

使用 spaCy 和 Cython 進(jìn)行快速 NLP 處理

假設(shè)我們有一個(gè)需要分析的文本數(shù)據(jù)集

importurllib.requestimportspacywithurllib.request.urlopen('https://raw.githubusercontent.com/pytorch/examples/master/word_language_model/data/wikitext-2/valid.txt')asresponse:text=response.read()nlp=spacy.load('en')doc_list=list(nlp(text[:800000].decode('utf8'))foriinrange(10))

我在左邊寫了一個(gè)腳本,它生成用于 spaCy 解析的 10 份文檔的列表,每個(gè)文檔大約 170k 字。我們也可以生成每個(gè)文檔 10 個(gè)單詞的 170k 份文檔(比如對(duì)話數(shù)據(jù)集),但創(chuàng)建速度較慢,因此我們堅(jiān)持使用 10 份文檔。

我們想要在這個(gè)數(shù)據(jù)集上執(zhí)行一些 NLP 任務(wù)。例如,我們想要統(tǒng)計(jì)數(shù)據(jù)集中單詞「run」作為名詞的次數(shù)(即用 spaCy 標(biāo)記為「NN」詞性)。

一個(gè)簡(jiǎn)單明了的 Python 循環(huán)就可以做到:

defslow_loop(doc_list,word,tag):n_out=0fordocindoc_list:fortokindoc:iftok.lower_==wordandtok.tag_==tag:n_out+=1returnn_outdefmain_nlp_slow(doc_list):n_out=slow_loop(doc_list,'run','NN')print(n_out)

但它也很慢!在我的筆記本電腦上,這段代碼需要大約 1.4 秒才能得到結(jié)果。如果我們有一百萬(wàn)份文件,則需要一天以上才能給出結(jié)果。

我們可以使用多線程,但在 Python 中通常不是很好的解決方案,因?yàn)槟惚仨毺幚?GIL。另外,請(qǐng)注意,Cython 也可以使用多線程!而且這實(shí)際上可能是 Cython 最棒的部分,因?yàn)?GIL 被釋放,我們可以全速運(yùn)行。Cython 基本上直接調(diào)用 OpenMP。

現(xiàn)在我們嘗試使用 spaCy 和部分 Cython 加速我們的 Python 代碼。

首先,我們必須考慮數(shù)據(jù)結(jié)構(gòu)。我們將需要一個(gè) C 數(shù)組用于數(shù)據(jù)集,指針指向每個(gè)文檔的 TokenC 數(shù)組。我們還需要將我們使用的測(cè)試字符串(「run」和「NN」)轉(zhuǎn)換為 64 位哈希碼。

當(dāng)我們所需的數(shù)據(jù)都在 C 對(duì)象中時(shí),我們可以在數(shù)據(jù)集上以 C 的速度進(jìn)行迭代。

下面是如何使用 spaCy 在 Cython 中編寫的示例:

%%cython-+importnumpy#Sometimewehaveafailtoimportnumpycompilationerrorifwedon'timportnumpyfromcymem.cymemcimportPoolfromspacy.tokens.doccimportDocfromspacy.typedefscimporthash_tfromspacy.structscimportTokenCcdefstructDocElement:TokenC*cintlengthcdefintfast_loop(DocElement*docs,intn_docs,hash_tword,hash_ttag):cdefintn_out=0fordocindocs[:n_docs]:forcindoc.c[:doc.length]:ifc.lex.lower==wordandc.tag==tag:n_out+=1returnn_outdefmain_nlp_fast(doc_list):cdefinti,n_out,n_docs=len(doc_list)cdefPoolmem=Pool()cdefDocElement*docs=mem.alloc(n_docs,sizeof(DocElement))cdefDocdocfori,docinenumerate(doc_list):#Populateourdatabasestructuredocs[i].c=doc.cdocs[i].length=(doc).lengthword_hash=doc.vocab.strings.add('run')tag_hash=doc.vocab.strings.add('NN')n_out=fast_loop(docs,n_docs,word_hash,tag_hash)print(n_out)

代碼有點(diǎn)長(zhǎng),因?yàn)槲覀儽仨氃谡{(diào)用 Cython 函數(shù)之前在 main_nlp_fast 中聲明并填充 C 結(jié)構(gòu)。(如果你在代碼中多次使用低級(jí)結(jié)構(gòu),使用 C 結(jié)構(gòu)包裝的 Cython 擴(kuò)展類型來設(shè)計(jì)我們的 Python 代碼是比每次填充 C 結(jié)構(gòu)更優(yōu)雅的選擇。這就是大多數(shù) spaCy 的結(jié)構(gòu),它是一種結(jié)合了快速,低內(nèi)存以及與外部 Python 庫(kù)和函數(shù)接口的簡(jiǎn)便性的非常優(yōu)雅的方法。)

但它也快很多!在我的 Jupyter Notebook 中,這個(gè) Cython 代碼的運(yùn)行時(shí)間大約為 20 毫秒,比我們的純 Python 循環(huán)快大約 80 倍。

Jupyter Notebook cell 中編寫的模塊的絕對(duì)速度同樣令人印象深刻,并且可以為其他 Python 模塊和函數(shù)提供本地接口:在 30ms 內(nèi)掃描約 1,700 萬(wàn)字意味著我們每秒處理高達(dá) 8000 萬(wàn)字。

我們這就結(jié)束了使用 Cython 進(jìn)行 NLP 的快速介紹。我希望你喜歡它。

Cython 還有很多其他的東西可講,但這會(huì)讓我們遠(yuǎn)離主題。從現(xiàn)在開始,最好的地方可能就是 Cython tutorials 的概述和適用于 NLP 的 spaCy’s Cython page。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7614

    瀏覽量

    137383
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4805

    瀏覽量

    84930
  • nlp
    nlp
    +關(guān)注

    關(guān)注

    1

    文章

    489

    瀏覽量

    22066

原文標(biāo)題:教程 | 比Python快100倍,利用spaCy和Cython實(shí)現(xiàn)高速NLP項(xiàng)目

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    2018年為數(shù)據(jù)科學(xué)領(lǐng)域中豐富的Python庫(kù)集合

    SpaCy 是一個(gè)具有優(yōu)秀示例、API 文檔和演示應(yīng)用程序的自然語(yǔ)言處理庫(kù)。這個(gè)庫(kù)是用 Cython 語(yǔ)言編寫的,CythonPython 的 C 擴(kuò)展。它支持近 30 種語(yǔ)言,
    的頭像 發(fā)表于 06-24 09:54 ?3687次閱讀

    目前常用的自然語(yǔ)言處理開源項(xiàng)目/開發(fā)包大匯總

    等性能:功能強(qiáng)大,支持二十多種語(yǔ)言(然而目前還不支持中文,可以閱讀官方文檔了解更多信息https://spacy.io/usage/),號(hào)稱是工業(yè)級(jí)強(qiáng)度的Python NLP工具包,區(qū)別
    發(fā)表于 11-26 10:31

    Py之cythonpython庫(kù)之cython的簡(jiǎn)介、安裝、使用方法之詳細(xì)攻略

    Py之cythonpython庫(kù)之cython的簡(jiǎn)介、安裝、使用方法之詳細(xì)攻略
    發(fā)表于 12-19 17:05

    三種提高Python代碼性能的簡(jiǎn)便方法

    ,基準(zhǔn),基準(zhǔn)、二是盡可能避免循環(huán)和三使用Cython編譯Python模塊三點(diǎn)內(nèi)容。通過這三種方法,如果您想在Jupyter筆記本電腦中利用Cython,可以使用%%
    發(fā)表于 08-03 18:37

    Cython 是什么?為什么會(huì)有 Cython

    ,而這些循環(huán)如果用 C 語(yǔ)言來實(shí)現(xiàn)會(huì)快上百,但是不熟悉 C 或者不知道 Python 如何與 C 進(jìn)行交互;因?yàn)?Python 解釋器的性能原因,如果將 CPython 解釋器換成
    發(fā)表于 06-16 16:11

    python 循環(huán)語(yǔ)句具有C語(yǔ)言級(jí)別的性能

    我們可以通過一些優(yōu)化,確保 Cython 能夠?qū)?Python 循環(huán)轉(zhuǎn)換為高效的 C 循環(huán)。n = 100for i in range(n): ...上面是一個(gè)標(biāo)準(zhǔn)的 Python f
    發(fā)表于 06-24 16:02

    FPGA公司2倍于半導(dǎo)體行業(yè)的速度發(fā)展

    FPGA公司2倍于半導(dǎo)體行業(yè)的速度發(fā)展 據(jù)Raymond James Equity市場(chǎng)研究機(jī)構(gòu)的分析師Hans Mosesmann周二發(fā)表的報(bào)告,Xilinx公司和Altera公司,這兩家共同占據(jù)著FPGA市場(chǎng)85%的份額
    發(fā)表于 12-11 08:59 ?349次閱讀

    瑞士推出能量三倍于鋰電池的可充電鋅氧電池

    瑞士推出能量三倍于鋰電池的可充電鋅氧電池     瑞士ReVolt
    發(fā)表于 12-19 08:29 ?1056次閱讀

    全球首款A(yù)ndroid 4G手機(jī)今夏上市 速度10倍于3G

    全球首款A(yù)ndroid 4G手機(jī)今夏上市 速度10倍于3G 宏達(dá)電推
    發(fā)表于 03-27 08:48 ?693次閱讀

    LED電源壓電路

    圖(a),利用電容C1、C2儲(chǔ)存電荷,利用閃爍發(fā)光二極管自身的振蕩,驅(qū)動(dòng)繼電器開關(guān)轉(zhuǎn)換,不斷把C1和電源電壓疊加,在C2上取得二倍于電源電壓值,該電路輸出電流10mA左右。繼電器采
    發(fā)表于 09-28 10:06 ?2939次閱讀
    LED電源<b class='flag-5'>倍</b>壓電路

    cython編寫程序能夠得到更高的性能

    根據(jù)一些我收到的反饋,大家似乎有點(diǎn)混淆——Cython是用來生成 C 擴(kuò)展到而不是獨(dú)立的程序的。所有的加速都是針對(duì)一個(gè)已經(jīng)存在的 Python 應(yīng)用的一個(gè)函數(shù)進(jìn)行的。沒有使用C 或 Lisp 重寫
    的頭像 發(fā)表于 01-16 16:35 ?5183次閱讀
    用<b class='flag-5'>cython</b>編寫程序能夠得到更高的性能

    NLP的介紹和如何利用機(jī)器學(xué)習(xí)進(jìn)行NLP以及三種NLP技術(shù)的詳細(xì)介紹

    本文用簡(jiǎn)潔易懂的語(yǔ)言,講述了自然語(yǔ)言處理(NLP)的前世今生。從什么是NLP到為什么要學(xué)習(xí)NLP,再到如何利用機(jī)器學(xué)習(xí)進(jìn)行NLP,值得一讀。
    的頭像 發(fā)表于 06-10 10:26 ?7.7w次閱讀
    <b class='flag-5'>NLP</b>的介紹和如何<b class='flag-5'>利用</b>機(jī)器學(xué)習(xí)進(jìn)行<b class='flag-5'>NLP</b>以及三種<b class='flag-5'>NLP</b>技術(shù)的詳細(xì)介紹

    中國(guó)AI服務(wù)器2倍于全球增速,加速計(jì)算多元算力崛起

    AI與行業(yè)的融合速度在逐漸加快,AI技術(shù)的廣泛應(yīng)用促使對(duì)基礎(chǔ)架構(gòu)的需求在不斷增加。2019年中國(guó)AI服務(wù)器市場(chǎng)規(guī)模達(dá)23.3億美元,同比增長(zhǎng)57.9%,2倍于全球AI服務(wù)器市場(chǎng)增速。
    的頭像 發(fā)表于 05-22 08:40 ?1.9w次閱讀

    Cython是什么,為什么會(huì)有Cython

    的循環(huán),而這些循環(huán)如果用 C 語(yǔ)言來實(shí)現(xiàn)會(huì)快上百,但是不熟悉 C 或者不知道 Python 如何與 C 進(jìn)行交互; 因?yàn)?Python 解釋器的性能原因,如果將 CPython 解釋
    的頭像 發(fā)表于 06-16 16:11 ?1847次閱讀

    詳解Python的for和while循環(huán)

    Python 的 for 和 while 循環(huán)是靈活并且高級(jí)的,語(yǔ)法自然、讀起來像偽代碼。而 Cython 也支持 for 和 while,無需修改。但由于循環(huán)通常占據(jù)程序運(yùn)行時(shí)的大部分時(shí)間,因此我們可以通過一些優(yōu)化,確保 Cython
    的頭像 發(fā)表于 06-24 16:02 ?1525次閱讀