全文共3103字,預計學習時長6分鐘前端
圖片來源:unsplash.com/@frrngit
Spark NLP庫已成爲一種流行的AI框架,可爲項目提供速度和可擴展性。github
人工智能在企業中的應用算法
2019年,O'Reilly發佈了《人工智能在企業中的應用》年度報告。該項報告針對多個垂直行業的1300名從業人員進行了調查,向受訪者詢問他們的企業在生產中有哪些能帶來收入的AI項目。編程
該報告對當今公司如何使用AI的真實狀況進行分析,並點評如何將其快速擴展到深度學習、人機迴圈、知識圖譜和強化學習領域。緩存
該調查要求受訪者列出他們使用的全部ML或AI框架和工具。如下是其答案概括:微信
Spark NLP庫才發佈一年半,就已經在全部AI框架和工具中名列第七位最受歡迎的AI工具(注意「其餘開源工具」和「其餘雲服務」),也是迄今爲止使用最普遍的NLP(神經語言程序)庫,是spaCy的兩倍。事實上,在本次調查中,Spark NLP是繼scikit-learn、TensorFlow、Keras、PyTorch以後最受歡迎的AI庫。網絡
最早進的精度、速度和可擴展性架構
這項調查與過去一年中在醫療保健、金融、生命科學和招聘中成功使用Spark NLP的公共案例研究一致。Spark NLP之因此能被快速採用,根本緣由還在於近年來在NLP領域發生的重大轉變。框架
準確性
在過去3-5年中,深度學習在天然語言處理方面應用的興起意味着在流行庫中實施的算法,如spaCy、Stanford CoreNLP、nltk和OpenNLP等等,並不如最新的科學論文所說的那麼準確。
Spark NLP的目標是提供最早進的準確性和速度,所以從業人員一直在不斷尋求產品化的最新科學進步。如下是迄今爲止的成果:
速率
爲了使Apache Spark的性能更接近裸機,咱們在單個機器和集羣上進行了優化,這意味着常見的NLP流水線能夠比傳統庫容許的固有設計限制快幾個數量級。
比較生產級NLP庫於一年前在O'Reilly Radar上發佈,這是迄今爲止最全面的基準測試。左側是在單個Intel i5,4核,16 GB內存機器上訓練簡單管道(句子邊界檢測,標記化和詞性標記)運行時的對比圖:
可以利用GPU進行培訓和推理已成爲籌碼。使用TensorFlow進行深度學習使Spark NLP可以充分利用現代計算機平臺,從nVidia的DGX-1到英特爾的Cascade Lake處理器。不管是否使用某些深度學習技術,較舊的庫都須要重寫以利用這些新的硬件創新,這些創新能夠將NLP流水線的速度和規模提升一個數量級。
可擴展性
可以將模型訓練、推理和完整AI管道從本地機器擴展到具備不多或沒有代碼更改的集羣,這也成爲了籌碼。本地構建在Apache Spark ML上使Spark NLP能夠在任何Spark集羣、內部部署或任何雲提供商上擴展。藉助Spark的分佈式執行計劃和緩存,能夠進行加速優化,該計劃和緩存已經在當前的大部分存儲和計算平臺上進行了測試。
企業採用Spark NLP的其餘驅動因素
生產級別的代碼庫
Spark NLP致力於爲企業提供工做軟件。與AllenNLP和NLP Architect等面向研究的庫相比,這是Spark NLP的首要目標。
開放源碼許可
選擇堅持使用Apache 2.0許可證,以即可以自由使用庫,包括在商業環境中使用。這與Stanford CoreNLP造成鮮明對比,Stanford CoreNLP須要用於商業用途的付費許可證,或者某些spaCy模型使用的存在問題的ShareAlike CC許可證。
完整的PYTHON,JAVA和SCALA API'
支持多種編程語言不只能夠增長庫的受衆,還可以利用已實施的模型,而無需在運行時環境之間來回移動數據。例如,使用僅限Python的spaCy調用數據,須要將數據從JVM進程移動到Python進程——這致使架構更復雜,並且一般比必要的慢得多。
頻繁發佈
除社區貢獻外,Spark NLP還由一個完整的核心團隊進行積極開發。每個月發佈兩次——2018年發佈了26個新版本。
入門
PYTHON
Spark NLP 2.0設計之初,主要目標是讓人們在不瞭解它的狀況下也能享受到Spark和TensorFlow的好處。用戶沒必要知道Spark ML估算器或變換器是什麼,或者TensorFlow圖或會話是什麼。
若是你正在構建本身的自定義模型或圖形,這些仍然可用,儘管它們如今面向前端,以最少的時間和學習曲線完成工做。Spark NLP 2.0還添加了15個預先訓練好的管道和模型,涵蓋了最多見的使用案例。
爲Python安裝Spark NLP須要安裝單行pip或安裝conda。
安裝頁面傳送門:https://nlp.johnsnowlabs.com/docs/en/install
實時項目例程還能夠在Zeppelin,SageMaker,Azure,GCP,Cloudera和vanilla Spark上使用該庫,包括 Kubernetes內外。
安裝完成後,如下是運行情感分析須要:
如下是使用BERT嵌入運行命名實體識別所需的所有內容:
這些示例中的管道對象有兩個關鍵方法——帶字符串的annotate(),個字符串,和帶數據幀的transform()。這使您能夠擴展此代碼,以處理任何Spark羣集上的大量文本。
SCALA
Spark NLP用Scala編寫,可直接在Spark數據幀上運行,無需複製數據,同時充分利用Spark執行計劃程序和其餘優化。所以,對於Scala和Java開發人員來講,使用庫不過是垂手可得。
該庫在Maven Center上發佈,所以只需在Maven或SBT文件中添加依賴項便可安裝。若是你還想安裝Spark NLP的OCR(對象字符識別)功能,則還須要添加第二個依賴項。
安裝完成後,拼寫檢查句子的方法以下:
Scala和Python API在每一個版本中保持類似而且100%完整。
在hood下
在上面分享的幾行代碼中,有許多內容可供使用,並且你能夠爲其餘應用程序自定義不少代碼。Spark NLP針對特定領域的NLP模型進行了大量優化,例如Spark NLP for Healthcare商業擴展。
案例傳送門:https://www.johnsnowlabs.com/spark-nlp-health/
所以全部用於定義預訓練模型、管道和資源的工具都在公共和文檔化的API中。
如下是使用上一節中的BERT Python代碼進行命名實體識別所採起的主要步驟:
1. sparknlp.start()開啓一個新的sparknlp部分,若是沒有的話,則啓動一個新的Spark會話,並返回。
2. PretrainedPipeline()加載explain_document_dl管道的英語版本,預先訓練的模型以及它所依賴的嵌入。
3. 儲存在本地並緩存。
4. TensorFlow在運行Spark的同一JVM進程中初始化。加載預訓練的嵌入和深度學習模型(如NER)。若是在羣集上運行,模型將自動分發和共享。
5. annotate()調用運行一個NLP推理管道,它會激活每一個階段的算法(標記化,POS等)。
6. NER階段在TensorFlow上運行,使用一個具備bi-LSTM層的神經網絡用於標記,使用CNN做爲字符。
7.嵌入用於在NER推理過程當中將上下文令牌轉換爲向量。
8.結果對象是一個普通的舊本地Python字典。
試一試
Spark NLP主頁包含示例,文檔和安裝指南。
若是你但願本身探索樣本筆記本,Spark NLP Workshop有一個預先構建的Docker容器,經過鍵入3個單行程序,能夠在本地計算機上運行完整的環境。
傳送門:https://github.com/JohnSnowLabs/spark-nlp-workshop
留言 點贊 關注
咱們一塊兒分享AI學習與發展的乾貨
歡迎關注全平臺AI垂類自媒體 「讀芯術」
(添加小編微信:dxsxbb,加入讀者圈,一塊兒討論最新鮮的人工智能科技哦~)