導航:首頁 > 編程語言 > langidpython

langidpython

發布時間:2023-06-03 23:31:50

Ⅰ tensorlab 支持python介面嗎

這又是一個 Awesome XXX 系列的資源整理,由 vinta 發起和維護。內容包括:Web框架、網路爬蟲、網路內容提取、模板引擎、資料庫、數據可視化、圖片處理、文本處理、自然語言處理、機器學習、日誌、代碼分析等。

伯樂在線已在 GitHub 上發起「Python 資源大全中文版」的整理。歡迎擴散、歡迎加入。
GitHub - jobbole/awesome-python-cn: Python資源大全中文版
環境管理
管理 Python 版本和環境的工具
p – 非常簡單的互動式 python 版本管理工具。
pyenv – 簡單的 Python 版本管理工具。
Vex – 可以在虛擬環境中執行命令
virtualenv – 創建獨立 Python 環境的工具。
virtualenvwrapper- virtualenv 的一組擴展。
包管理
管理包和依賴的工具。
pip – Python 包和依賴關系管理工具。
pip-tools – 保證 Python 包依賴關系更新的一組工具。
conda – 跨平台,Python 二進制包管理工具。
Curdling – 管理 Python 包的命令行工具。
wheel – Python 分發的新標准,意在取代 eggs。
包倉庫
本地 PyPI 倉庫服務和代理。
warehouse – 下一代 PyPI。
Warehousebandersnatch – PyPA 提供的 PyPI 鏡像工具。
devpi – PyPI 服務和打包/測試/分發工具。
localshop – 本地 PyPI 服務(自定義包並且自動對 PyPI 鏡像)。
分發
打包為可執行文件以便分發。
PyInstaller – 將 Python 程序轉換成獨立的執行文件(跨平台)。
dh-virtualenv – 構建並將 virtualenv 虛擬環境作為一個 Debian 包來發布。
Nuitka – 將腳本、模塊、包編譯成可執行文件或擴展模塊。
py2app – 將 Python 腳本變為獨立軟體包(Mac OS X)。
py2exe – 將 Python 腳本變為獨立軟體包(Windows)。
pynsist – 一個用來創建 Windows 安裝程序的工具,可以在安裝程序中打包 Python本身。
構建工具
源碼編譯成軟體。
buildout – 一個構建系統,從多個組件來創建,組裝和部署應用。
BitBake – 針對嵌入式 Linux 的類似 make 的構建工具。
fabricate – 對任何語言自動找到依賴關系的構建工具。
PlatformIO – 多平台命令行構建工具。
PyBuilder – 純 Python 實現的持續化構建工具。
SCons – 軟體構建工具。
互動式解析器
互動式 Python 解析器。
IPython – 功能豐富的工具,非常有效的使用互動式 Python。
bpython- 界面豐富的 Python 解析器。
ptpython – 高級互動式Python解析器, 構建於python-prompt-toolkit 之上。
文件
文件管理和 MIME(多用途的網際郵件擴充協議)類型檢測。
imghdr – (Python 標准庫)檢測圖片類型。
mimetypes – (Python 標准庫)將文件名映射為 MIME 類型。
path.py – 對 os.path 進行封裝的模塊。
pathlib – (Python3.4+ 標准庫)跨平台的、面向對象的路徑操作庫。
python-magic- 文件類型檢測的第三方庫 libmagic 的 Python 介面。
Unipath- 用面向對象的方式操作文件和目錄
watchdog – 管理文件系統事件的 API 和 shell 工具
日期和時間
操作日期和時間的類庫。
arrow- 更好的 Python 日期時間操作類庫。
Chronyk – Python 3 的類庫,用於解析手寫格式的時間和日期。
dateutil – Python datetime 模塊的擴展。
delorean- 解決 Python 中有關日期處理的棘手問題的庫。
moment – 一個用來處理時間和日期的Python庫。靈感來自於Moment.js。
PyTime – 一個簡單易用的Python模塊,用於通過字元串來操作日期/時間。
pytz – 現代以及歷史版本的世界時區定義。將時區資料庫引入Python。
when.py – 提供用戶友好的函數來幫助用戶進行常用的日期和時間操作。
文本處理
用於解析和操作文本的庫。
通用
chardet – 字元編碼檢測器,兼容 Python2 和 Python3。
difflib – (Python 標准庫)幫助我們進行差異化比較。
ftfy – 讓Unicode文本更完整更連貫。
fuzzywuzzy – 模糊字元串匹配。
Levenshtein – 快速計算編輯距離以及字元串的相似度。
pangu.py – 在中日韓語字元和數字字母之間添加空格。
pyfiglet -figlet 的 Python實現。
shortuuid – 一個生成器庫,用以生成簡潔的,明白的,URL 安全的 UUID。
unidecode – Unicode 文本的 ASCII 轉換形式 。
uniout – 列印可讀的字元,而不是轉義的字元串。
xpinyin – 一個用於把漢字轉換為拼音的庫。
Slug化
awesome-slugify – 一個 Python slug 化庫,可以保持 Unicode。
python-slugify – Python slug 化庫,可以把 unicode 轉化為 ASCII。
unicode-slugify – 一個 slug 工具,可以生成 unicode slugs ,需要依賴 Django 。
解析器
phonenumbers – 解析,格式化,儲存,驗證電話號碼。
PLY – lex 和 yacc 解析工具的 Python 實現。
Pygments – 通用語法高亮工具。
pyparsing – 生成通用解析器的框架。
python-nameparser – 把一個人名分解為幾個獨立的部分。
python-user-agents – 瀏覽器 user agent 解析器。
sqlparse – 一個無驗證的 SQL 解析器。
特殊文本格式處理
一些用來解析和操作特殊文本格式的庫。
通用
tablib – 一個用來處理中表格數據的模塊。
Office
Marmir – 把輸入的Python 數據結構轉換為電子表單。
openpyxl – 一個用來讀寫 Excel 2010 xlsx/xlsm/xltx/xltm 文件的庫。
python-docx – 讀取,查詢以及修改 Microsoft Word 2007/2008 docx 文件。
unoconv – 在 LibreOffice/OpenOffice 支持的任意文件格式之間進行轉換。
XlsxWriter – 一個用於創建 Excel .xlsx 文件的 Python 模塊。
xlwings – 一個使得在 Excel 中方便調用 Python 的庫(反之亦然),基於 BSD 協議。
xlwt / xlrd – 讀寫 Excel 文件的數據和格式信息。
relatorio – 模板化OpenDocument 文件。
PDF
PDFMiner – 一個用於從PDF文檔中抽取信息的工具。
PyPDF2 – 一個可以分割,合並和轉換 PDF 頁面的庫。
ReportLab – 快速創建富文本 PDF 文檔。
Markdown
Mistune – 快速並且功能齊全的純 Python 實現的 Markdown 解析器。
Python-Markdown – John Gruber』s Markdown 的 Python 版實現。
YAML
PyYAML – Python 版本的 YAML 解析器。
CSV
csvkit – 用於轉換和操作 CSV 的工具。
Archive
unp – 一個用來方便解包歸檔文件的命令行工具。
自然語言處理
用來處理人類語言的庫。
NLTK – 一個先進的平台,用以構建處理人類語言數據的 Python 程序。
jieba – 中文分詞工具。
langid.py – 獨立的語言識別系統。
Pattern – Python 網路信息挖掘模塊。
SnowNLP – 一個用來處理中文文本的庫。
TextBlob – 為進行普通自然語言處理任務提供一致的 API。
TextGrocery – 一簡單高效的短文本分類工具,基於 LibLinear 和 Jieba。
文檔
用以生成項目文檔的庫。
Sphinx – Python 文檔生成器。
awesome-sphinxdoc
MkDocs – 對 Markdown 友好的文檔生成器。
pdoc – 一個可以替換Epydoc 的庫,可以自動生成 Python 庫的 API 文檔。
Pycco – 文學編程(literate-programming)風格的文檔生成器。
配置
用來保存和解析配置的庫。
config – logging 模塊作者寫的分級配置模塊。
ConfigObj – INI 文件解析器,帶驗證功能。
ConfigParser – (Python 標准庫) INI 文件解析器。
profig – 通過多種格式進行配置,具有數值轉換功能。
python-decouple – 將設置和代碼完全隔離。
命令行工具
用於創建命令行程序的庫。
命令行程序開發
cement – Python 的命令行程序框架。
click – 一個通過組合的方式來創建精美命令行界面的包。
cliff – 一個用於創建命令行程序的框架,可以創建具有多層命令的命令行程序。
clint – Python 命令行程序工具。
colorama – 跨平台彩色終端文本。
docopt – Python 風格的命令行參數解析器。
Gooey – 一條命令,將命令行程序變成一個 GUI 程序。
python-prompt-toolkit – 一個用於構建強大的互動式命令行程序的庫。
生產力工具
aws-cli – Amazon Web Services 的通用命令行界面。
bashplotlib – 在終端中進行基本繪圖。
caniusepython3 – 判斷是哪個項目妨礙你你移植到 Python 3。
cookiecutter – 從 cookiecutters(項目模板)創建項目的一個命令行工具。

Ⅱ 如何利用深度學習技術訓練聊天機器人語言模型

數據預處理

模型能聊的內容也取決於選取的語料。如果已經具備了原始聊天數據,可以用SQL通過關鍵字查詢一些對話,也就是從大庫里選取出一個小庫來訓練。從一些論文上,很多演算法都是在數據預處理層面的,比如Mechanism-Aware Neural Machine for Dialogue Response Generation就介紹了,從大庫中抽取小庫,然後再進行融合,訓練出有特色的對話來。

對於英語,需要了解NLTK,NLTK提供了載入語料,語料標准化,語料分類,PoS詞性標注,語意抽取等功能。

另一個功能強大的工具庫是CoreNLP,作為 Stanford開源出來的工具,特色是實體標注,語意抽取,支持多種語言。

下面主要介紹兩個內容:

中文分詞

現在有很多中文分詞的SDK,分詞的演算法也比較多,也有很多文章對不同SDK的性能做比較。做中文分詞的示例代碼如下。

# coding:utf8
'''
Segmenter with Chinese
'''

import jieba
import langid


def segment_chinese_sentence(sentence):
'''
Return segmented sentence.
'''
seg_list = jieba.cut(sentence, cut_all=False)
seg_sentence = u" ".join(seg_list)
return seg_sentence.strip().encode('utf8')


def process_sentence(sentence):
'''
Only process Chinese Sentence.
'''
if langid.classify(sentence)[0] == 'zh':
return segment_chinese_sentence(sentence)
return sentence

if __name__ == "__main__":
print(process_sentence('飛雪連天射白鹿'))
print(process_sentence('I have a pen.'))

以上使用了langid先判斷語句是否是中文,然後使用jieba進行分詞。

在功能上,jieba分詞支持全切分模式,精確模式和搜索引擎模式。

全切分:輸出所有分詞。

精確:概率上的最佳分詞。

所有引擎模式:對精確切分後的長句再進行分詞。

jieba分詞的實現

主要是分成下面三步:

1、載入字典,在內存中建立字典空間。

字典的構造是每行一個詞,空格,詞頻,空格,詞性。

上訴書 3 n
上訴人 3 n
上訴期 3 b
上訴狀 4 n
上課 650 v

建立字典空間的是使用python的dict,採用前綴數組的方式。

使用前綴數組的原因是樹結構只有一層 -word:freq,效率高,節省空間。比如單詞"dog", 字典中將這樣存儲:

{
"d": 0,
"do": 0,
"dog": 1 # value為詞頻
}

字典空間的主要用途是對輸入句子建立有向無環圖,然後根據演算法進行切分。演算法的取捨主要是根據模式- 全切,精確還是搜索。

2、對輸入的語句分詞,首先是建立一個有向無環圖。
有向無環圖,Directed acyclic graph(音 /ˈdæɡ/)。

【圖 3-2】 DAG

DAG對於後面計算最大概率路徑和使用HNN模型識別新詞有直接關系。

3、按照模式,對有向無環圖進行遍歷,比如,在精確模式下,便利就是求最大權重和的路徑,權重來自於在字典中定義的詞頻。對於沒有出現在詞典中的詞,連續的單個字元也許會構成新詞。然後用HMM模型和Viterbi演算法識別新詞。

精確模型切詞:使用動態規劃對最大概率路徑進行求解。

最大概率路徑:求route = (w1, w2, w3 ,.., wn),使得Σweight(wi)最大。Wi為該詞的詞頻。

更多的細節還需要讀一下jieba的源碼。

自定義字典

jieba分詞默認的字典是:1998人民日報的切分語料還有一個msr的切分語料和一些txt小說。開發者可以自行添加字典,只要符合字典構建的格式就行。

jieba分詞同時提供介面添加詞彙。

Word embedding

使用機器學習訓練的語言模型,網路演算法是使用數字進行計算,在輸入進行編碼,在輸出進行解碼。word embedding就是編解碼的手段。

【圖 3-3】 word embedding, Ref. #7

word embedding是文本的數值化表示方法。表示法包括one-hot,bag of words,N-gram,分布式表示,共現矩陣等。

Word2vec

近年來,word2vec被廣泛採用。Word2vec輸入文章或者其他語料,輸出語料中詞彙建設的詞向量空間。詳細可參考word2vec數學原理解析。

使用word2vec

安裝完成後,得到word2vec命令行工具。

word2vec -train "data/review.txt"
-output "data/review.model"
-cbow 1
-size 100
-window 8
-negative 25
-hs 0
-sample 1e-4
-threads 20
-binary 1
-iter 15

-train "data/review.txt" 表示在指定的語料庫上訓練模型

-cbow 1 表示用cbow模型,設成0表示用skip-gram模型

-size 100 詞向量的維度為100

-window 8 訓練窗口的大小為8 即考慮一個單詞的前八個和後八個單詞

-negative 25 -hs 0 是使用negative sample還是HS演算法

-sample 1e-4 採用閾值

-threads 20 線程數

-binary 1 輸出model保存成2進制

-iter 15 迭代次數

在訓練完成後,就得到一個model,用該model可以查詢每個詞的詞向量,在詞和詞之間求距離,將不同詞放在數學公式中計算輸出相關性的詞。比如:

vector("法國") - vector("巴黎) + vector("英國") = vector("倫敦")"

對於訓練不同的語料庫,可以單獨的訓練詞向量模型,可以利用已經訓練好的模型。

其它訓練詞向量空間工具推薦:Glove。

Seq2Seq

2014年,Sequence to Sequence Learning with Neural Networks提出了使用深度學習技術,基於RNN和LSTM網路訓練翻譯系統,取得了突破,這一方法便應用在更廣泛的領域,比如問答系統,圖像字幕,語音識別,撰寫詩詞等。Seq2Seq完成了【encoder + decoder -> target】的映射,在上面的論文中,清晰的介紹了實現方式。

【圖 3-4】 Seq2Seq, Ref. #1

也有很多文章解讀它的原理。在使用Seq2Seq的過程中,雖然也研究了它的結構,但我還不認為能理解和解釋它。下面談兩點感受:

a. RNN保存了語言順序的特點,這和CNN在處理帶有形狀的模型時如出一轍,就是數學模型的設計符合物理模型。

【圖 3-5】 RNN, Ref. #6

b. LSTM Cell的復雜度對應了自然語言處理的復雜度。

【圖 3-6】 LSTM, Ref. #6

理由是,有人將LSTM Cell嘗試了多種其它方案傳遞狀態,結果也很好。

【圖 3-7】 GRU, Ref. #6

LSTM的一個替代方案:GRU。只要RNN的Cell足夠復雜,它就能工作的很好。

使用DeepQA2訓練語言模型

准備工作,下載項目:

git clone https://github.com/Samurais/DeepQA2.git
cd DeepQA2
open README.md # 根據README.md安裝依賴包

DeepQA2將工作分成三個過程:

數據預處理:從語料庫到數據字典。

訓練模型:從數據字典到語言模型。

提供服務:從語言模型到RESt API。

預處理

DeepQA2使用Cornell Movie Dialogs Corpus作為demo語料庫。

原始數據就是movie_lines.txt和movie_conversations.txt。這兩個文件的組織形式參考README.txt

deepqa2/dataset/preprocesser.py是將這兩個文件處理成數據字典的模塊。

train_max_length_enco就是問題的長度,train_max_length_deco就是答案的長度。在語料庫中,大於該長度的部分會被截斷。

程序運行後,會生成dataset-cornell-20.pkl文件,它載入到python中是一個字典:

word2id存儲了{word: id},其中word是一個單詞,id是int數字,代表這個單詞的id。

id2word存儲了{id: word}。

trainingSamples存儲了問答的對話對。

比如 [[[1,2,3],[4,5,6]], [[7,8,9], [10, 11, 12]]]

1,2,3 ... 12 都是word id。

[1,2,3] 和 [4,5,6] 構成一個問答。 [7,8,9] 和 [10, 11, 12] 構成一個問答。

開始訓練

cp config.sample.ini config.ini # modify keys
python deepqa2/train.py

config.ini是配置文件, 根據config.sample.ini進行修改。訓練的時間由epoch,learning rate, maxlength和對話對的數量而定。

deepqa2/train.py大約100行,完成數據字典載入、初始化tensorflow的session,saver,writer、初始化神經元模型、根據epoch進行迭代,保存模型到磁碟。

session是網路圖,由placeholder, variable, cell, layer, output 組成。

saver是保存model的,也可以用來恢復model。model就是實例化variable的session。

writer是查看loss fn或者其他開發者感興趣的數據的收集器。writer的結果會被saver保存,然後使用tensorboard查看。

Model

Model的構建要考慮輸入,狀態,softmax,輸出。

定義損耗函數,使用AdamOptimizer進行迭代。

最後,參考一下訓練的loop部分。

每次訓練,model會被存儲在save路徑下,文件夾的命名根據機器的hostname,時間戳生成。

提供服務

在TensorFlow中,提供了標準的serving模塊 - tensorflow serving。但研究了很久,還專門看了一遍 《C++ Essentials》,還沒有將它搞定,社區也普遍抱怨tensorflow serving不好學,不好用。訓練結束後,使用下面的腳本啟動服務,DeepQA2的serve部分還是調用TensorFlow的python api。

cd DeepQA2/save/deeplearning.cobra.vulcan.20170127.175256/deepqa2/serve
cp db.sample.sqlite3 db.sqlite3
python manage.py runserver 0.0.0.0:8000

測試

POST /api/v1/question HTTP/1.1
Host: 127.0.0.1:8000
Content-Type: application/json
Authorization: Basic YWRtaW46cGFzc3dvcmQxMjM=
Cache-Control: no-cache

{"message": "good to know"}

response
{
"rc": 0,
"msg": "hello"
}

serve的核心代碼在serve/api/chatbotmanager.py中。

使用腳本

scripts/start_training.sh啟動訓練

scripts/start_tensorboard.sh啟動Tensorboard

scripts/start_serving.sh啟動服務

對模型的評價

目前代碼具有很高的維護性,這也是從DeepQA項目進行重構的原因,更清晰的數據預處理、訓練和服務。有新的變更可以添加到deepqa2/models中,然後在train.py和chatbotmanager.py變更一下。

有待改進的地方

a. 新建models/rnn2.py, 使用dropout。目前DeepQA中已經使用了Drop.

b. tensorflow rc0.12.x中已經提供了seq2seq network,可以更新成tf版本.

c. 融合訓練,目前model只有一個庫,應該是設計一個新的模型,支持一個大庫和小庫,不同權重進行,就如Mechanism-Aware Neural Machinefor Dialogue Response Generation的介紹。

d. 代碼支持多機多GPU運行。

e. 目前訓練的結果都是QA對,對於一個問題,可以有多個答案。

f. 目前沒有一個方法進行accuracy測試,一個思路是在訓練中就提供干擾項,因為當前只有正確的答案,如果提供錯誤的答案(而且越多越好),就可以使用recall_at_k方法進行測試。

機器人家上了解到的,希望對你有用

Ⅲ snownlp和nltk什麼關系

沒什麼關系吧。 SnowNLP的開發者在GitHub描述中提到是受TextBlobd的啟發才寫的SnowNLP,而這兩個類庫的最大區別就是SnowNLP具體實現的時候沒有用nltk,主要針對中文文本處理。

閱讀全文

與langidpython相關的資料

熱點內容
離線版mc如何開伺服器 瀏覽:884
結對程序員 瀏覽:762
使用過的蘋果手機怎麼同步app 瀏覽:344
phpcookie無效 瀏覽:954
python可以搜數學答案 瀏覽:706
均線衍生指標源碼設置 瀏覽:496
做精一張圖pdf 瀏覽:851
編程培訓小朋友 瀏覽:787
巴克球製作解壓 瀏覽:851
測量參數時接單片機的 瀏覽:116
手機音樂添加文件夾 瀏覽:546
百度智能雲b18怎麼刪除app 瀏覽:968
單片機中為什麼顯示找不到頭文件 瀏覽:151
iisweb伺服器如何重啟 瀏覽:838
微信沒有適配方舟編譯器 瀏覽:81
箍筋加密區梁的凈高 瀏覽:889
samp如何加入外國伺服器 瀏覽:895
保鮮膜解壓教學視頻 瀏覽:983
台達plc編程通訊管理軟體 瀏覽:407
優優pdf 瀏覽:801