自然語言處理入門 何晗 讀書筆記 第1章 新手上路


第1章 新手上路

自然語言處理是一門融合了計算機科學、人工智能以及語言學的交叉學科。這門學科研究的是如何通過機器學習等技術,讓計算機學會處理人類語言,乃至實現終極目標----理解人類語言或人工智能。

自然語言處理這個術語沒有被廣泛的定義,注重語言學結構的學者喜歡使用計算語言學(CL),強調最終目的的學者更偏好自然語言理解(NLU)。

1.1 自然語言與編程語言

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,運行成功


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM