天天看點

趣味入門之機器學習

官方定義:機器學習

機器學習(Machine Learning, ML)是一門多領域交叉學科,涉及機率論、統計學、逼近論、凸分析、算法複雜度理論等多門學科。專門研究計算機怎樣模拟或實作人類的學習行為,以擷取新的知識或技能,重新組織已有的知識結構使之不斷改善自身的性能。

它是人工智能的核心,是使計算機具有智能的根本途徑,其應用遍及人工智能的各個領域,它主要使用歸納、綜合而不是演繹。

案例:1.

機器能否象人類一樣能具有學習能力呢?1959年美國的塞缪爾(Samuel)設計了一個下棋程式,這個程式具有學習能力,它可以在不斷的對弈中改善自己的棋藝。4年後,這個程式戰勝了設計者本人

案例2.

無人駕駛,利用機器人在一段測試路段跑n次,開始有駕駛員操作躲開障礙物,識别紅綠燈,拐彎等操作,等機器人學習到一定程度,積累了大量經驗之後,可以達到一個普通駕駛員的水準。

快速感受:Java實作圖靈機器人聊天系統:

圖靈機器人平台,基于自然語言處理、知識庫和雲計算等技術,為廣大開發者、合作夥伴提供的一系列智能語義處理能力(包括語義了解、智能問答、知識庫對接等)的服務平台。截止到目前為止,平台已經積累了近百億條語料庫和PB級别的基礎資料,經測試平台的整體準确度已經達到90%以上。

圖靈官網:http://www.tuling123.com/

api位址:http://www.tuling123.com/openapi/api?key=KEY&info=你好

測試key:e7a1447ed2182d57758ca845e5a0f36e

調用代碼:

public static StringSendGet(String param) {

          OutputStreamWriterout = null;

          BufferedReaderin = null;

          Stringresult = "";

          try {

                        URLrealUrl = newURL(urlget+"&info="+param);

                        HttpURLConnectionconn = (HttpURLConnection) realUrl

                                                    .openConnection();//打開與圖靈機器人接口的連接配接

                        conn.setDoOutput(false);//get方式不需要使用輸出流,參數拼接在url後面是以false即可

                        conn.setDoInput(true);

                        conn.setUseCaches(true);

                        conn.setRequestMethod("GET");

                        conn.setConnectTimeout(50000);

                        conn.setReadTimeout(50000);

                        conn.setRequestProperty("Accept","text/html");//期待傳回類型為json

                        conn.setRequestProperty("Authorization","token");

                        conn.setRequestProperty("tag","htc_new");

                        conn.connect();//這句話才真正建立了與伺服器的連接配接

                        in = newBufferedReader(new InputStreamReader(

                                                    conn.getInputStream(), "UTF-8"));

                        Stringline = "";

                        while ((line= in.readLine()) != null) {

                                      result += line;

                        }

          } 

關于智能機器人原理與實作

1.      人機互動

可見的部分稱作人機互動界面,比如計算機的顯示器、滑鼠和鍵盤,更好的可操作性是關鍵

2.      智能問答

如果說你問,機器人來回答,其實很簡單,隻要寫一個資料庫表,提前錄入資料,根據使用者詢問資訊查詢對應結果即可。但這不是智能回答。

與其對應的就是“智能問答”,智能的實作包含了很多的核心技術,例如人工智能、自然語言處理、語義解析、機器學習等

詞庫設計

趣味入門之機器學習

訓練過程

大白天的做什麼美夢啊?”回答是“哦哈哈哈不用你管”。

S1:應用雙向最大比對算法分詞:雙向分詞結果,正向《大白天,的,做什麼,美夢,啊》;反向《大白天,的,做什麼,美夢,啊》。正向反向都是一樣的,是以不需要處理歧義問題。長詞優先選擇,“大白天”和“做什麼”。

S2:以“大白天”舉例,假設hash函數為f(),并設f(大白天)指向首字hash表項[大,11,P]。于是由該表項指向“3字索引”,再指向對應“詞表”。

S3:将結構體<大白天,…>插入隊尾。體中有一個Ans域,域中某一指針指向“哦哈哈哈不用你管”。

S4:完成訓練。

内容比對過程

可以被描述成如下流程:S1:使用者通過聊天界面向系統提出一個話題;S2:系統對該話題進行分詞處理;S3:在系統知識庫中尋找與該話題比對的話語回複使用者。

       基于詞典的分詞算法分為詞典加載、預處理、最大比對、歧義消解幾個階段。

其具體流程如下:

S1:預處理階段,按照特殊字元(英文字母、數字、标點符号等)将待分析文本進行斷句,将待切分的文本切分為隻有中文的短句子,這些句子是下一步分詞處理的基本機關;

(舉個栗子:輸入“asdfadf東北師範大學哈哈哈dfadflakfl(*^__^*) 嘻嘻……”,simi隻會對其中的中文“東北師範大學哈哈哈嘻嘻”做出響應;輸入“(*^__^*)”時,輸出“I have no response.”)

S2:對斷句出來的句子進行雙向最大比對(雙向比對,長詞優先)分詞,分詞後的結果作為S3的輸入;

(舉個栗子:輸入“東京古巴比倫”,正向與反向切詞結果均為《東京,古巴比倫》,長詞優先,是以simi隻對“古巴比倫”做出響應;輸入“古巴比倫埃菲爾鐵塔”,正向與反向切詞結果均為《古巴比倫,埃菲爾鐵塔》,此時Simi對“埃菲爾鐵塔”做出響應)

S3:對上一步分詞得到的結果進行比較,判斷是否存在歧義,如果存在歧義,就進行一定的歧義消解;

S4:重複S2、S3,直到處理完步驟一中斷句所切分出的所有句子單元。

算法流程如圖所示:

趣味入門之機器學習

這裡給出與小黃雞對話的例子:我問小黃雞:“埃菲爾鐵塔上45度角仰望星空”。

S1:雙向最大比對分詞:正向反向均為《埃菲爾鐵塔上,45度角,仰望星空》,沒有歧義。長詞優先,系統選擇了“埃菲爾鐵塔上”作為關鍵詞;

S2:系統在知識庫中用剛才說的哈希函數f(埃菲爾鐵塔上),找到比如[埃,11,P] 的表項,順着指針找到6字詞的索引,順着索引找到6字詞表,周遊詞表,找到<埃菲爾鐵塔上,…>結構體;

S3:系統随機選擇該結構體Ans域中的一個回答(也有可能是根據頻率高低來選擇)。比如“兩年之後等着你”。

S4:輸出回答,比對結束。

亟待學習:經典的機器算法

其實機器學習都沒有固定規則或者定理,都是靠不斷訓練和拟合産生的結果。是以幾乎都是:訓練+預測。

傳說中的十大經典算法如下:

決策樹

随機森林算法

邏輯回歸

SVM

樸素貝葉斯

K最近鄰算法

K均值算法

Adaboost 算法

神經網絡

馬爾可夫

其實最簡單的就是線性回歸這樣的算法,拟合一條直線,最終就是獲得一個函數y=f(x),而這裡f(x)=ax+b,線性方程。邏輯回歸是線性回歸算法的進化版。

詳細請參照下一篇博文:機器學習十大經典算法

繼續閱讀