聊天機器人,提問、檢索、回答。git
提問,查詢關鍵詞生成、答案類型肯定、句法和語義分析。查詢關鍵詞生成,提問提取關鍵詞,中心詞關聯擴展詞。答案類型肯定,肯定提問類型。句法和語義分析,問題深層含義剖析。檢索,搜索,根據查詢關鍵詞信息檢索,返回句子或段落。答案抽取,分析和推理檢索句子或段落,抽取提問一致實體,根據機率最大對候選答案排序。github
海量文本知識表示,網絡文本資源獲取、機器學習方法、大規模語義計算和推理、知識表示體系、知識庫構建。問句解析,中文分詞、詞性標註、實體標註、概念類別標註、句法分析、語義分析、邏輯結構標註、指代消解、關聯關係標註、問句分類、答案類別肯定。答案生成過濾,候選答案抽取、關係推演、吻哈程度判斷、噪聲過濾。微信
聊天機器人技術類型。基於檢索技術,信息檢索,簡單易實現,沒法從句法關係和語義關係給出答案,沒法推理問題。基於模式匹配技術,把問題往梳理好的模式匹配,推理簡單,模式涵蓋不全。基於天然語言理解技術,把淺層分析加句法分析、語義分析。基於統計翻譯模型技術,把問句疑問詞留出來,和候選答案資源匹配。網絡
問句解析。哈工大LTP(語言技術平臺)、博森科技、jieba分詞、中科院張華平博士NLPIR漢語分詞系統。機器學習
NLPIR,http://pynlpir.readthedocs.io...。安裝 pip install pynlpir 。下載受權文件 https://github.com/NLPIR-team...,替換pynlpir/Data目錄的已過時文件。學習
# coding:utf-8 import sys import importlib importlib.reload(sys) import pynlpir pynlpir.open() # s = '聊天機器人到底該怎麼作呢?' s = '海洋是如何造成的' # 分詞 分析功能全打開 不使用英文 segments = pynlpir.segment(s, pos_names='all', pos_english=False) for segment in segments: print(segment[0], 't', segment[1]) # 關鍵詞提取 key_words = pynlpir.get_key_words(s, weighted=True) for key_word in key_words: print(key_word[0], 't', key_word[1]) pynlpir.close()
segment 切詞,返回tuple(token, pos),token切詞,pos 語言屬性。調用segment方法,指定pos_names參數'all' 、'child' 、'parent',默認parent 表示獲取詞性最頂級詞性。child 表示獲取詞性最具體信息。all 表示獲取詞性相關全部詞性信息,從頂級詞性到該詞性路徑。ui
詞性分類表。nlpir 源代碼 /pynlpir/pos_map.py,所有詞性分類及其子類別:翻譯
POS_MAP = { 'n': ('名詞', 'noun', { 'nr': ('人名', 'personal name', { 'nr1': ('漢語姓氏', 'Chinese surname'), 'nr2': ('漢語名字', 'Chinese given name'), 'nrj': ('日語人名', 'Japanese personal name'), 'nrf': ('音譯人名', 'transcribed personal name') }), 'ns': ('地名', 'toponym', { 'nsf': ('音譯地名', 'transcribed toponym'), }), 'nt': ('機構團體名', 'organization/group name'), 'nz': ('其它專名', 'other proper noun'), 'nl': ('名詞性慣用語', 'noun phrase'), 'ng': ('名詞性語素', 'noun morpheme'), }), 't': ('時間詞', 'time word', { 'tg': ('時間詞性語素', 'time morpheme'), }), 's': ('處所詞', 'locative word'), 'f': ('方位詞', 'noun of locality'), 'v': ('動詞', 'verb', { 'vd': ('副動詞', 'auxiliary verb'), 'vn': ('名動詞', 'noun-verb'), 'vshi': ('動詞"是"', 'verb 是'), 'vyou': ('動詞"有"', 'verb 有'), 'vf': ('趨向動詞', 'directional verb'), 'vx': ('行事動詞', 'performative verb'), 'vi': ('不及物動詞', 'intransitive verb'), 'vl': ('動詞性慣用語', 'verb phrase'), 'vg': ('動詞性語素', 'verb morpheme'), }), 'a': ('形容詞', 'adjective', { 'ad': ('副形詞', 'auxiliary adjective'), 'an': ('名形詞', 'noun-adjective'), 'ag': ('形容詞性語素', 'adjective morpheme'), 'al': ('形容詞性慣用語', 'adjective phrase'), }), 'b': ('區別詞', 'distinguishing word', { 'bl': ('區別詞性慣用語', 'distinguishing phrase'), }), 'z': ('狀態詞', 'status word'), 'r': ('代詞', 'pronoun', { 'rr': ('人稱代詞', 'personal pronoun'), 'rz': ('指示代詞', 'demonstrative pronoun', { 'rzt': ('時間指示代詞', 'temporal demonstrative pronoun'), 'rzs': ('處所指示代詞', 'locative demonstrative pronoun'), 'rzv': ('謂詞性指示代詞', 'predicate demonstrative pronoun'), }), 'ry': ('疑問代詞', 'interrogative pronoun', { 'ryt': ('時間疑問代詞', 'temporal interrogative pronoun'), 'rys': ('處所疑問代詞', 'locative interrogative pronoun'), 'ryv': ('謂詞性疑問代詞', 'predicate interrogative pronoun'), }), 'rg': ('代詞性語素', 'pronoun morpheme'), }), 'm': ('數詞', 'numeral', { 'mq': ('數量詞', 'numeral-plus-classifier compound'), }), 'q': ('量詞', 'classifier', { 'qv': ('動量詞', 'verbal classifier'), 'qt': ('時量詞', 'temporal classifier'), }), 'd': ('副詞', 'adverb'), 'p': ('介詞', 'preposition', { 'pba': ('介詞「把」', 'preposition 把'), 'pbei': ('介詞「被」', 'preposition 被'), }), 'c': ('連詞', 'conjunction', { 'cc': ('並列連詞', 'coordinating conjunction'), }), 'u': ('助詞', 'particle', { 'uzhe': ('着', 'particle 着'), 'ule': ('了/嘍', 'particle 了/嘍'), 'uguo': ('過', 'particle 過'), 'ude1': ('的/底', 'particle 的/底'), 'ude2': ('地', 'particle 地'), 'ude3': ('得', 'particle 得'), 'usuo': ('所', 'particle 所'), 'udeng': ('等/等等/云云', 'particle 等/等等/云云'), 'uyy': ('同樣/通常/似的/般', 'particle 同樣/通常/似的/般'), 'udh': ('的話', 'particle 的話'), 'uls': ('來說/來講/而言/說來', 'particle 來說/來講/而言/說來'), 'uzhi': ('之', 'particle 之'), 'ulian': ('連', 'particle 連'), }), 'e': ('嘆詞', 'interjection'), 'y': ('語氣詞', 'modal particle'), 'o': ('擬聲詞', 'onomatopoeia'), 'h': ('前綴', 'prefix'), 'k': ('後綴', 'suffix'), 'x': ('字符串', 'string', { 'xe': ('Email字符串', 'email address'), 'xs': ('微博會話分隔符', 'hashtag'), 'xm': ('表情符合', 'emoticon'), 'xu': ('網址URL', 'URL'), 'xx': ('非語素字', 'non-morpheme character'), }), 'w': ('標點符號', 'punctuation mark', { 'wkz': ('左括號', 'left parenthesis/bracket'), 'wky': ('右括號', 'right parenthesis/bracket'), 'wyz': ('左引號', 'left quotation mark'), 'wyy': ('右引號', 'right quotation mark'), 'wj': ('句號', 'period'), 'ww': ('問號', 'question mark'), 'wt': ('歎號', 'exclamation mark'), 'wd': ('逗號', 'comma'), 'wf': ('分號', 'semicolon'), 'wn': ('頓號', 'enumeration comma'), 'wm': ('冒號', 'colon'), 'ws': ('省略號', 'ellipsis'), 'wp': ('破折號', 'dash'), 'wb': ('百分號千分號', 'percent/per mille sign'), 'wh': ('單位符號', 'unit of measure sign'), }), }
參考資料:code
《Python 天然語言處理》orm
http://www.shareditor.com/blo...
http://www.shareditor.com/blo...
歡迎推薦上海機器學習工做機會,個人微信:qingxingfengzi