第1章 新手上路php
天然語言處理是一門融合了計算機科學、人工智能以及語言學的交叉學科。這門學科研究的是如何經過機器學習等技術,讓計算機學會處理人類語言,乃至實現終極目標----理解人類語言或人工智能。java
天然語言處理這個術語沒有被普遍的定義,注重語言學結構的學者喜歡使用計算語言學(CL),強調最終目的的學者更偏好天然語言理解(NLU)。git
1.1 天然語言與編程語言github
1.1.1 詞彙量算法
天然語言中的詞彙比編程語言中的關鍵詞豐富。編程語言中,能使用的關鍵詞數量有限且肯定,好比,C語言一共有32個關鍵詞,Java語言則有50個。但在天然語言中,咱們可使用的詞彙量是無窮無盡的。數據庫
1.1.2 結構化編程
天然語言是非結構化的,而編程語言是結構化的。結構化是指信息具備明確的結構關係,好比編程語言中的類與成員、數據庫的表與字段,而天然語言中則不存在這樣的顯式結構。緩存
人類以爲很簡單的一句話,要讓計算機理解起來並不簡單。機器學習
1.1.3 歧義性編程語言
天然語言含有大量歧義,而在編程語言中,則不存在歧義性。
1.1.4 容錯性
天然語言中容許有錯誤,哪怕一句話錯得再離譜,人們仍是能夠猜出它想表達的意思。而編程語言必須保證拼寫絕對正確、語法絕對規範。
1.1.5 易變性
天然語言不是由某個我的或組織發明或制定標準的。編程語言由某個我的或組織發明而且負責維護。
1.1.6 簡略性
人類語言每每簡潔、幹練。這也給天然語言處理帶來了障礙。
1.2 天然語言處理的層次
1.2.1 語音、圖像和文本
天然語言處理系統的輸入源一共有3個,即語音、圖像與文本。語音和圖像受制於存儲容量和傳輸速度,它們的信息總量仍是沒有文本多。
1.2.2 中文分詞、詞性標註和命名實體識別
這3個任務都是圍繞詞語進行的分析,因此統稱詞法分析。
1.2.3 信息抽取
1.2.4 文本分類與文本聚類
文本分類:有時咱們想知道一段話是褒義仍是貶義的,判斷一封郵件是不是垃圾郵件,想把許多文檔分門別類地整理一下,此時的任務稱做文本分類。
文本聚類:有時只想把類似的文本歸檔到一塊兒,或者排除重複的文檔,而不關心具體類別。此時的任務稱做文本聚類。
1.2.5 句法分析
1.2.6 語義分析與篇章分析
語義分析側重語義而非語法。它包括詞義消歧、語義角色標註乃至語義依存分析。本書不會涉及
1.2.7 其餘高級任務
自動問答:微軟的Cortana和蘋果的Siri
自動摘要:爲一篇長文檔生成簡短的摘要
機器翻譯:將一句話從一種語言翻譯到另外一種語言。
1.3 天然語言處理的流派
1.3.1 基於規則的專家系統
規則,指的是由專家手工制定的肯定性流程。專家系統要求設計者對所處理的問題具有深刻的理解,而且儘可能以人力全面考慮全部可能的狀況。最大的弱點是難以拓展。
1.3.2 基於統計的學習方法
爲了下降對專家的依賴,人們使用統計方法讓計算機自動學習語言。所謂「統計」,指的是在語料庫上進行的統計。語料庫則是人工標註的結構化文本。
1.3.3 歷史
1950基礎研究----1980規則系統----1990統計方法------2010深度學習
1.3.4 規則與統計
隨着機器學習的日漸成熟,領域專家的做用愈來愈小了。
本書尊重工程實踐,以統計爲主、規則爲輔的方式介紹實用型NLP系統的搭建。
1.3.5 傳統方法與深度學習
深度學習在天然語言處理領域中的基礎任務上發力並不大。
1.4 機器學習
1.4.1 什麼是機器學習
人工智能領域的先驅Arthur Samuel在1959年給出的機器學習定義是:不直接編程卻能賦予計算機提升能力的方法。
機器學習是讓機器學會算法的算法。機器學習算法則能夠稱做「元算法」,它指導機器自動學習出另外一個算法,這個算法被用來解決實際問題。
1.4.2 模型
模型是對現實問題的數學抽象,由一個假設函數以及一系列參數構成。
假設須要預測中國人名對應的性別,假設中國人名由函數f(x)輸出的符號決定,負數表示女性,非負數表示男性。
f(x) = w* x + b
w和b是函數的參數,而x是函數的自變量。
1.4.3 特徵
特徵指的是事物的特色轉化的數值,好比牛的特徵是4條腿、0雙翅膀,而鳥的特徵是2條腿、1雙翅膀。
特徵工程:如何挑選特徵,如何設計特徵模版。
1.4.4 數據集
如何讓機器自動學習,以獲得模型的參數呢?首先得有一本習題集。這本習題集在機器學習領域稱做數據集,在天然語言處理領域稱做語料庫。
1.4.5 監督學習
若是習題集附帶標準答案y,則此時的學習算法稱做監督學習。這種在有標籤的數據集上迭代學習的過程稱爲訓練,訓練用到的數據集稱做訓練集。
1.4.6 無監督學習
若是隻給機器作題,不告訴它參考答案,此時的學習稱做無監督學習。無監督學習通常用於聚類和降維,二者都不須要標註數據。
1.4.7 其餘類型的機器學習算法
半監督學習:訓練多個模型,而後對同一個實例進行預測,會獲得多個結果。若是這些結果多數一致,則能夠將該實例和結果放到一塊兒做爲新的訓練樣本,用來擴充數據集。
強化學習:一邊預測,一邊根據環境的反饋規劃下次決策。
1.5 語料庫
1.5.1 中文分詞語料庫
語料規範很難制定,規範很難執行。
1.5.2 詞性標註語料庫
1.5.3 命名實體識別語料庫
1.5.4 句法分析語料庫
1.5.5 文本分類語料庫
1.5.6 語料庫建設
1.6 開源工具
1.6.1 主流NLP工具比較
HanLP開發者寫的書,你懂得,HanLP是發展最迅猛的!
1.6.2 Python接口
HanLP的安裝:
pip install pyhanlp
1.7 總結
本章給出了人工智能、機器學習與天然語言處理的宏觀縮略圖與發展時間線。在接下來的章節中,將由易到難去解決第一個NLP問題----中文分詞。
寫一下運行書上代碼踩到的坑,試了很久終於跑通了。。。。
系統:win10,軟件:Eclipse,java版本jdk1.8
/* * <author>Han He</author> * <email>me@hankcs.com</email> * <create-date>2018-05-18 下午5:38</create-date> * * <copyright file="HelloWord.java"> * Copyright (c) 2018, Han He. All Rights Reserved, http://www.hankcs.com/ * This source is subject to Han He. Please contact Han He for more information. * </copyright> */ package com.hankcs.book.ch01; import com.hankcs.hanlp.HanLP; /** * 《天然語言處理入門》1.6 開源工具 * 配套書籍:http://nlp.hankcs.com/book.php * 討論答疑:https://bbs.hankcs.com/ * * @author hankcs * @see <a href="http://nlp.hankcs.com/book.php">《天然語言處理入門》</a> * @see <a href="https://bbs.hankcs.com/">討論答疑</a> */ public class HelloWord { public static void main(String[] args) { HanLP.Config.enableDebug(); // 首次運行會自動創建模型緩存,爲了不你等得無聊,開啓調試模式說點什麼:-) System.out.println(HanLP.segment("王國維和服務員")); } }
在圖靈社區下載的源碼 https://www.ituring.com.cn/book/2706
下載後解壓,在Eclipse中建立項目,項目名稱爲nlp,找到項目目錄,將解壓出的 com 文件夾複製進src目錄中,解壓路徑爲
《天然語言處理入門》隨書代碼\hanlp-java\HanLP\src\main\java\com
將解壓出的data文件夾複製到與src的同級目錄,解壓路徑爲
《天然語言處理入門》隨書代碼\hanlp-java\HanLP\data
bin文件夾中放入hanlp.properties配置文件,下載地址:https://github.com/hankcs/HanLP/tree/v1.7.5,配置hanlp.properties第一行爲data文件夾路徑,不要寫data
刷新項目,若出現中文亂碼問題則右鍵項目,properties--resource--Text file encoding改成UTF-8,運行成功