torchtext使用教程
主要內容:
- 如何使用torchtext建立語料庫
- 如何使用torchtext將詞轉下標,下標轉詞,詞轉詞向量
- 如何建立相應的迭代器
torchtext組件流程:
- 定義Field:聲明如何處理數據,主要包含以下數據預處理的配置信息,比如指定分詞方法,是否轉成小寫,起始字符,結束字符,補全字符以及詞典等等
- 定義Dataset:用於得到數據集,繼承自pytorch的Dataset。此時數據集里每一個樣本是一個 經過 Field聲明的預處理 預處理后的 wordlist
- 建立vocab:在這一步建立詞匯表,詞向量(word embeddings)
- 構造迭代器Iterator:: 主要是數據輸出的模型的迭代器。構造迭代器,支持batch定制用來分批次訓練模型。
(deeplearning) C:\Users\WQBin>conda search torchtext Loading channels: done # Name Version Build Channel torchtext 0.4.0 pyhb384e40_1 anaconda/cloud/pytorch torchtext 0.5.0 py_1 anaconda/cloud/pytorch (deeplearning) C:\Users\WQBin>conda install torchtext Collecting package metadata (current_repodata.json): done Solving environment: done
SentencePiece
https://pypi.org/project/sentencepiece/
SentencePiece是一個google開源的自然語言處理工具包。網上是這么描述它的:數據驅動、跨語言、高性能、輕量級——面向神經網絡文本生成系統的無監督文本詞條化工具。
那么它究竟是干什么的呢?先舉個例子:假設在數據挖掘時,有一列特征T是文本描述,我們需要將其轉成枚舉型,或者多個布爾型代入模型,即:需要從文本中提供信息構造新特征。
首先,我們可以用標點將長句長分成短句,以短句作為關鍵詞,看每個實例的特征T中是否包含該關鍵詞,從而構造新的布爾型特征。但有時候表達同一個意思所使用的文本並不完全一致,比如“買三送一”和“買三送一啦!”是一個意思。
此時,我們可以用SnowNLP或者jieba分詞把描述拆成單個詞,看T是否包括該關鍵詞。但這樣用也有一個問題:可能把一個意思拆成了多個特征,比如“袖子較短,領子較大”被拆成了四個獨立的特征“袖子”“較短”“領子”“較大”,組合效果沒有了。
我們想要的效果是:如果“袖子較短”這個組合經常出現,就把它當成一個詞處理。jieba中可以用自定義詞典的方式加入已知的詞。
還有一些組合常常出現,但事先並不知道,於是我們想讓機器自動學習經常組合出現的短語和詞。SentencePiece就是來解決這個問題的。它需要大量文本來訓練。
SentencePiece的用途不限於自然語言處理,記得DC之前有一個葯物分子篩選的比賽,蛋白質的一級結構是氨基酸序列,需要研究氨基酸序列片斷,片斷的長度又是不固定的,此處就可以用SentencePiece進行切分。
原理是重復出現次數多的片斷,就認為是一個意群(詞)。
SentencePiece分為兩部分:訓練模型和使用模型,訓練模型部分是用C語言實現的,可編成二進程程序執行,訓練結果是生成一個model和一個詞典文件。
模型使用部分同時支持二進制程序和Python調用兩種方式,訓練完生成的詞典數據是明文,可編輯,因此也可以用任何語言讀取和使用。、
conda 是沒有的,需要使用pip安裝
(deeplearning) C:\Users\WQBin>pip install sentencepiece Collecting sentencepiece Downloading https://files.pythonhosted.org/packages/61/c5/e7e2f45c076097ac1a58b21288be25ae4eb4044be899e6c04cd897a00f15/sentencepiece-0.1.85-cp37-cp37m-win_amd64.whl (1.2MB) |████████████████████████████████| 1.2MB 547kB/s Installing collected packages: sentencepiece Successfully installed sentencepiece-0.1.85
ModuleNotFoundError: No module named 'spacy'
Can't find model 'en'
安裝完'spacy'有報錯如下:
Can't find model 'en'. It doesn't seem to be a shortcut link, a Python package or a valid
報錯信息:Can't find model 'en'. It doesn't seem to be a shortcut link, a Python package or a valid
錯誤描述:在CMD命令框中安裝了spacy以及安裝了''en"模塊,但是在Pycharm中報錯,說找不到
解決辦法:在普通命令框中輸入''en"模塊安裝命令python -m spacy download en,會顯示權限不夠,但是仍然顯示link successful ,但是在Pycharm中依然報錯。
Installing collected packages: en-core-web-sm Successfully installed en-core-web-sm-2.2.5 ✔ Download and installation successful You can now load the model via spacy.load('en_core_web_sm') 你沒有足夠的權限執行此操作。 ✘ Couldn't link model to 'en' Creating a symlink in spacy/data failed. Make sure you have the required permissions and try re-running the command as admin, or use a virtualenv. You can still import the model as a module and call its load() method, or create the symlink manually.
所以,用管理員身份打開【Anaconda Prompt (Anaconda3)】,在輸入同樣的命令,問題解決。
✔ Download and installation successful You can now load the model via spacy.load('en_core_web_sm') 為 D:\app\Anaconda3\envs\deeplearning\lib\site-packages\spacy\data\en <<===>> D:\app\Anaconda3\envs\deeplearning\lib\site-packages\en_core_web_sm 創建的符號鏈接 ✔ Linking successful D:\app\Anaconda3\envs\deeplearning\lib\site-packages\en_core_web_sm --> D:\app\Anaconda3\envs\deeplearning\lib\site-packages\spacy\data\en You can now load the model via spacy.load('en')
完結!!