# coding=gbk
# -*- coding:utf8 -*-
def u(str):
""" 僅用來轉換utf-8編碼的 """
return str.decode("gbk")
def recognize_one_token(str, dictionary):
""" 輸入一句話,匹配第乙個詞,並返回詞結尾的位置 """
print str
if len(str) == 0:
return 0
elif str in dictionary:
return len(str)
else:
return recognize_one_token(str[0:-1], dictionary)
def tokenize(str, dictionary):
if len(str) == 0:
return
i = recognize_one_token(str, dictionary)
if i == 0:
return tokenize(str[1:], dictionary)
else:
if len(str) == i:
return [str[0:i]] # 避免超界
else:
return [str[0:i]] + tokenize(str[i:], dictionary)
def parse(str):
""" str引數需要unicode編碼的 """
""" 1. 分詞 (2. 暫時未建立語法結構, 僅以list方式返回分詞結果) """
# 1. 建立用來分詞的詞典
dictionary = map(u, ['十七樓', '我', '我要去', '有什麼建議嗎', '二十樓', '三十樓'])
# 2. 匹配分詞(從前往後,最大化匹配)
return tokenize(str, dictionary)
class literal:
def __init__(self, stringval):
self.m_stringval = stringval
def content(self):
return self.m_stringval
def match(self, condition):
return self.content() == condition
class when(literal):
def __init__(self, timestring):
literal.__init__(self, timestring)
class where(literal):
def __init__(self, placestring):
literal.__init__(self, placestring)
class who(literal):
def __init__(self, namestring):
literal.__init__(self, namestring)
class cause(literal):
def __init__(self, causestring):
literal.__init__(self, causestring)
class course(literal):
def __init__(self, coursestring):
literal.__init__(self, coursestring)
class result(literal):
def __init__(self, resultstring):
literal.__init__(self, resultstring)
class fact:
""" 6要素方式的模型,其實未必合適,主要是cause, course, result可能需要分得更細 """
def __init__(self, when, where, who, cause, course, result):
self.m_when = when
self.m_where = where
self.m_who = who
self.m_cause = cause
self.m_course = course
self.m_result = result
def when(self):
return self.m_when
def where(self):
return self.m_where
def who(self):
return self.m_who
def cause(self):
return self.m_cause
def course(self):
return self.m_course
def result(self):
return self.m_result
class query:
def __init__(self, question, facts):
self.m_question = question # 問題文字
self.m_tokens = parse(question) # 對問題文字進行解析
self.m_facts = facts # 事實庫
def answer(self):
""" 理解問題,並搜尋fact,並生成自然的答案 """
# 基本思路,從前往後掃瞄語法樹,對照事實上下文理解語義,並給出答案
# 應當是乙個狀態機,0: 初始,1: 地點意願
state = 0
result =
for eachtoken in self.m_tokens:
if u("我要去") == eachtoken:
state = 1
elif state == 1:
# 搜尋facts, 匹配地點
for eachfact in self.m_facts:
if eachfact.where() == eachtoken:
else:
pass
return result
if __name__ == '__main__':
""" 測試** """
facts = [fact(u("4月17號"), u("十七樓"), u("我"), u("需要錢"), u("找張三借10塊錢"), u("張三借給了我"))]
q = query(u("我要去二十樓"), facts)
for f in q.answer():
print f.when(), f.where(), f.who(), f.cause(), f.course(), f.result()
我的人工智慧之旅 偏斜類問題
正樣本數佔樣本總數的比例極小時,容易出現偏斜類問題。例如癌症測試。樣本集合中僅有0.5 的癌症樣本,99.5 的正常樣本。通過某一假設函式後,得到1 為癌症患者,99 為正常樣本。雖然總的正確率高達99 但假設函式並不理想。因為,我們的目的是為了,檢測出是否得癌。這時候,如果將99 的準確率提公升至...
人工智慧發展的要素是什麼,人工智慧市場的人才現狀
中國已成為全球人工智慧的發展中心之一,但面臨著巨大的人才缺口,隨著越來越多的高科技公司開設機械人或者人工智慧業務分部,人工智慧或機器學習類專業人才正在變得炙手可熱,人才 也是水漲船高。甚至在矽谷,剛畢業的人工智慧領域博士能拿到超過百萬美元的年薪。目前國內人工智慧相關技術崗位,主流年薪也在30 60萬...
當醫療遇上人工智慧的無線想象
還記得去年cctv1 機智過人 節目中,人工智慧閱片機械人 啄醫生 嗎?它單挑15名經驗豐富的主任醫師。結果,這些來自全國三甲醫院 平均閱齡20年 閱片量超過20萬張的頂級醫生,都被一一挑落馬下。啄醫生 對30套肺片精準檢測完勝。智慧型醫療 ai被稱為 第四次工業革命 全球頂尖的技術公司都在搶占攤頭...