官方定義:機器學習
機器學習(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,線性方程。邏輯回歸是線性回歸算法的進化版。
詳細請參照下一篇博文:機器學習十大經典算法